{
  "schemaVersion": "2",
  "aurum": {
    "library": "aurum-android",
    "version": "0.3.29",
    "sha": "f703589046cae49076357e64e6b8346d2749a56e",
    "platforms": [
      "android"
    ]
  },
  "meta": {
    "generatedAt": "2026-07-30T08:20:57+00:00",
    "manifestSha": "ef8809f397ca181cebc98729f7f16c190b4acc1e76c74351ee65f207f647e34f",
    "figmaFileKey": "YvIxqu2oTlM6UnkL0OloHc",
    "galleryUrl": "https://changejarapp.github.io/aurum-android/"
  },
  "components": [
    {
      "name": "AurumButton",
      "family": "button",
      "platforms": [
        "android"
      ],
      "summary": "Aurum's primary button component.",
      "kdoc": "Aurum's primary button component.\n\nA custom Compose primitive (clickable + ripple + Aurum-painted surface) —\nnot `material3.Button` — so every state matches the Figma component exactly\nand future bespoke interactions (e.g. a 3D press) are unconstrained by M3.\nFeatures consume this composable for any button.\n\nThree visual [variant] variants ([AurumButtonVariant]) and three [size]\nvariants ([AurumButtonSize]) are supported. Optional [leading] and\n[trailing] slots accept icon composables for icon-and-label buttons.\n\n@param label the button label text\n@param onClick called when the button is clicked\n@param modifier the [Modifier] to apply\n@param variant the visual style variant -- defaults to [AurumButtonVariant.Primary]\n@param size the size variant -- defaults to [AurumButtonSize.Medium]\n@param isFullWidth whether the button fills its parent width -- defaults to `false`\n@param isLoading whether to show a loading spinner in place of the label -- defaults to `false`\n@param progress optional auto-advance fill in `0f..1f` — when non-null the button paints a faded-primary track with a primary fill that grows to this fraction and dims the label; defaults to `null`\n@param leading optional composable slot rendered before the label (e.g. an icon)\n@param trailing optional composable slot rendered after the label (e.g. an icon)\n@param enabled whether the button is interactive -- defaults to `true`",
      "signature": "@Composable\nfun AurumButton(\n    label: String,\n    onClick: () -> Unit,\n    modifier: Modifier = Modifier,\n    variant: AurumButtonVariant = AurumButtonVariant.Primary,\n    size: AurumButtonSize = AurumButtonSize.Medium,\n    isFullWidth: Boolean = false,\n    isLoading: Boolean = false,\n    progress: Float? = null,\n    leading: (@Composable () -> Unit)? = null,\n    trailing: (@Composable () -> Unit)? = null,\n    enabled: Boolean = true,\n)",
      "params": [
        {
          "name": "label",
          "type": "String",
          "default": null,
          "doc": "the button label text"
        },
        {
          "name": "onClick",
          "type": "() -> Unit",
          "default": null,
          "doc": "called when the button is clicked"
        },
        {
          "name": "modifier",
          "type": "Modifier",
          "default": "Modifier",
          "doc": "the [Modifier] to apply"
        },
        {
          "name": "variant",
          "type": "AurumButtonVariant",
          "default": "AurumButtonVariant.Primary",
          "doc": "the visual style variant -- defaults to [AurumButtonVariant.Primary]"
        },
        {
          "name": "size",
          "type": "AurumButtonSize",
          "default": "AurumButtonSize.Medium",
          "doc": "the size variant -- defaults to [AurumButtonSize.Medium]"
        },
        {
          "name": "isFullWidth",
          "type": "Boolean",
          "default": "false",
          "doc": "whether the button fills its parent width -- defaults to `false`"
        },
        {
          "name": "isLoading",
          "type": "Boolean",
          "default": "false",
          "doc": "whether to show a loading spinner in place of the label -- defaults to `false`"
        },
        {
          "name": "progress",
          "type": "Float?",
          "default": "null",
          "doc": "optional auto-advance fill in `0f..1f` — when non-null the button paints a faded-primary track with a primary fill that grows to this fraction and dims the label; defaults to `null`"
        },
        {
          "name": "leading",
          "type": "(@Composable () -> Unit)?",
          "default": "null",
          "doc": "optional composable slot rendered before the label (e.g. an icon)"
        },
        {
          "name": "trailing",
          "type": "(@Composable () -> Unit)?",
          "default": "null",
          "doc": "optional composable slot rendered after the label (e.g. an icon)"
        },
        {
          "name": "enabled",
          "type": "Boolean",
          "default": "true",
          "doc": "whether the button is interactive -- defaults to `true`"
        }
      ],
      "previews": [
        "PreviewAllSizes",
        "PreviewPrimaryVariants",
        "PreviewProgressVariants",
        "PreviewSecondaryVariants",
        "PreviewTertiaryVariants"
      ],
      "figmaNodeId": "4692:1074",
      "figmaUrl": "https://www.figma.com/design/YvIxqu2oTlM6UnkL0OloHc/?node-id=4692-1074",
      "figmaTagUrl": "https://www.figma.com/design/YvIxqu2oTlM6UnkL0OloHc/?node-id=4692-1074",
      "codeConnectPath": "aurum/src/main/kotlin/com/jar/app/aurum/component/button/AurumButton.figma.kt",
      "galleryUrl": "https://changejarapp.github.io/aurum-android/component/button/AurumButton.html",
      "sourcePath": "aurum/src/main/kotlin/com/jar/app/aurum/component/button/AurumButton.kt",
      "intendedUse": "Use when the user is performing a deliberate, named action (submit, confirm, continue, retry). One [AurumButtonVariant.Primary] per surface — pair Primary with Secondary or Tertiary for additional actions. Prefer [AurumLinkButton] for low-emphasis inline actions and [AurumIconButton] for icon-only top-bar slots.",
      "usage": {
        "do": [
          "Use one [AurumButtonVariant.Primary] per screen for the dominant CTA.",
          "Choose [AurumButtonSize.Medium] as the default; [Large] only for full-width hero CTAs; [Small] for inline / compact rows.",
          "Set `isLoading = true` synchronously when the action starts a network round-trip — don't render a separate spinner alongside.",
          "Drive `progress` from a countdown for an auto-advancing CTA — the fill mirrors the time left before the action fires on its own."
        ],
        "dont": [
          "Stack two `Primary` buttons next to each other — pair `Primary` with `Secondary`.",
          "Use a button to navigate without a side-effect; use [AurumLinkButton] or a plain tap target.",
          "Pass `Modifier.fillMaxWidth()` — use `isFullWidth = true` so the Aurum padding / touch-target rules apply."
        ]
      },
      "relatedTokens": [
        "borderWidth.lg",
        "borderWidth.md",
        "borderWidth.sm",
        "iconSize.lg",
        "interactive.textOnPrimaryDisabled",
        "interactive.textOnPrimaryNormal",
        "spacing.s3",
        "surface.textDefaultSubtle",
        "typography.titleXSSemiBold",
        "visual.purple100",
        "visual.purple800"
      ]
    },
    {
      "name": "AurumIconButton",
      "family": "button",
      "platforms": [
        "android"
      ],
      "summary": "Aurum's icon-only button primitive.",
      "kdoc": "Aurum's icon-only button primitive.\n\nWraps `material3.IconButton` internally, preserving its 48 dp minimum\ntouch target. Features consume this composable — never\n`material3.IconButton` directly.\n\nThe [content] slot typically renders an [AurumIcon]. The caller controls\nthe icon size and tint via [AurumIcon]'s parameters.\n\n@param onClick called when the button is clicked\n@param modifier the [Modifier] to apply\n@param enabled whether the button is interactive — defaults to `true`\n@param content the composable content — typically an [AurumIcon]",
      "signature": "@Composable\nfun AurumIconButton(\n    onClick: () -> Unit,\n    modifier: Modifier = Modifier,\n    enabled: Boolean = true,\n    content: @Composable () -> Unit,\n)",
      "params": [
        {
          "name": "onClick",
          "type": "() -> Unit",
          "default": null,
          "doc": "called when the button is clicked"
        },
        {
          "name": "modifier",
          "type": "Modifier",
          "default": "Modifier",
          "doc": "the [Modifier] to apply"
        },
        {
          "name": "enabled",
          "type": "Boolean",
          "default": "true",
          "doc": "whether the button is interactive — defaults to `true`"
        },
        {
          "name": "content",
          "type": "@Composable () -> Unit",
          "default": null,
          "doc": "the composable content — typically an [AurumIcon]"
        }
      ],
      "previews": [
        "PreviewAurumIconButton"
      ],
      "figmaNodeId": null,
      "figmaUrl": null,
      "figmaTagUrl": null,
      "codeConnectPath": null,
      "galleryUrl": "https://changejarapp.github.io/aurum-android/component/button/AurumIconButton.html",
      "sourcePath": "aurum/src/main/kotlin/com/jar/app/aurum/component/button/AurumIconButton.kt",
      "intendedUse": "Use as a top-bar action affordance, dense list-row trailing action, or any spot where a labelled button would crowd the layout. The 48 dp touch target is maintained even when the visible glyph is smaller. For label-bearing actions reach for [AurumButton]; for low-emphasis text actions use [AurumLinkButton].",
      "usage": {
        "do": [
          "Provide an explicit `contentDescription` on the inner [AurumIcon] — icon-only buttons fail accessibility audits without one.",
          "Use as the trailing-icon slot inside `AurumPageHeaderAction` / list rows where space is constrained.",
          "Pick monosemic icons (close, more, edit) — never decorative ones whose meaning shifts by context."
        ],
        "dont": [
          "Use as the screen's primary CTA — icon-only buttons read as utility, not commitment; use [AurumButton] for that.",
          "Cluster more than 2 [AurumIconButton]s in a row without grouping under an `AurumPageHeader` overflow — three is overflow territory.",
          "Wrap `material3.IconButton` directly in feature code; that's exactly what this component prevents."
        ]
      },
      "relatedTokens": [
        "spacing.s3",
        "surface.iconDefaultDisabled"
      ]
    },
    {
      "name": "AurumLinkButton",
      "family": "button",
      "platforms": [
        "android"
      ],
      "summary": "Aurum's link button -- a text-only button with no background or border.",
      "kdoc": "Aurum's link button -- a text-only button with no background or border.\n\nPer the Figma spec, this is a separate component from [AurumButton].\nIt renders brand-purple text (Inter Bold 14sp) with no fill or outline,\nusing a 12 dp corner-radius clip for ripple feedback.\n\nHeight is fixed at 56 dp (large-size equivalent).\n\n@param label the link label text\n@param onClick called when the link is clicked\n@param modifier the [Modifier] to apply\n@param leading optional composable slot rendered before the label (e.g. an icon)\n@param trailing optional composable slot rendered after the label (e.g. an icon)\n@param enabled whether the link is interactive -- defaults to `true`",
      "signature": "@Composable\nfun AurumLinkButton(\n    label: String,\n    onClick: () -> Unit,\n    modifier: Modifier = Modifier,\n    leading: (@Composable () -> Unit)? = null,\n    trailing: (@Composable () -> Unit)? = null,\n    enabled: Boolean = true,\n)",
      "params": [
        {
          "name": "label",
          "type": "String",
          "default": null,
          "doc": "the link label text"
        },
        {
          "name": "onClick",
          "type": "() -> Unit",
          "default": null,
          "doc": "called when the link is clicked"
        },
        {
          "name": "modifier",
          "type": "Modifier",
          "default": "Modifier",
          "doc": "the [Modifier] to apply"
        },
        {
          "name": "leading",
          "type": "(@Composable () -> Unit)?",
          "default": "null",
          "doc": "optional composable slot rendered before the label (e.g. an icon)"
        },
        {
          "name": "trailing",
          "type": "(@Composable () -> Unit)?",
          "default": "null",
          "doc": "optional composable slot rendered after the label (e.g. an icon)"
        },
        {
          "name": "enabled",
          "type": "Boolean",
          "default": "true",
          "doc": "whether the link is interactive -- defaults to `true`"
        }
      ],
      "previews": [
        "PreviewLinkButton"
      ],
      "figmaNodeId": "4784:1286",
      "figmaUrl": "https://www.figma.com/design/YvIxqu2oTlM6UnkL0OloHc/?node-id=4784-1286",
      "figmaTagUrl": "https://www.figma.com/design/YvIxqu2oTlM6UnkL0OloHc/?node-id=4784-1286",
      "codeConnectPath": "aurum/src/main/kotlin/com/jar/app/aurum/component/button/AurumLinkButton.figma.kt",
      "galleryUrl": "https://changejarapp.github.io/aurum-android/component/button/AurumLinkButton.html",
      "sourcePath": "aurum/src/main/kotlin/com/jar/app/aurum/component/button/AurumLinkButton.kt",
      "intendedUse": "Use for low-emphasis inline actions next to body copy (\"Skip\", \"Read more\", \"Resend OTP\", \"Forgot password?\"). The lack of fill / outline makes it read as text — not as a CTA — so users feel free to ignore it. For deliberate commitment actions (submit, confirm, continue) reach for [AurumButton]; for icon-only affordances use [AurumIconButton].",
      "usage": {
        "do": [
          "Pair with longer prose context — \"Already have an account? Sign in\" reads naturally; a bare standalone link button looks orphaned.",
          "Reserve for navigational + secondary actions — \"Forgot password?\", \"Resend code\", \"Learn more\".",
          "Place inline with the surrounding paragraph copy at the same baseline; don't right-align it as a fake CTA."
        ],
        "dont": [
          "Use as the form-submit button — that's [AurumButton] with `Primary` variant; users won't perceive the link as a commitment.",
          "Stack two link buttons in the same row — they read as a list of links, losing the \"single low-emphasis action\" intent.",
          "Render destructive actions (Delete, Cancel subscription) here — destructive flows need [AurumButton] with explicit confirmation, not text-styled affordances."
        ]
      },
      "relatedTokens": [
        "iconSize.lg",
        "interactive.textPrimaryNormal",
        "spacing.s3",
        "spacing.s5",
        "surface.textDefaultSubtle",
        "typography.titleXSSemiBold"
      ]
    },
    {
      "name": "AurumTransactionListCard",
      "family": "card",
      "platforms": [
        "android"
      ],
      "summary": "A status-tinted transaction row for payment / withdrawal / savings history lists.",
      "kdoc": "A status-tinted transaction row for payment / withdrawal / savings history lists.\nOuter `feedback.*` wash wraps a white inner card with leading icon, label + date,\nstatus badge, and amount (+ optional gold-weight suffix). [helperText] renders below\nin the matching status colour.\n\n@param label transaction label; ellipsises past one line\n@param dateText pre-formatted date (e.g. `\"18 Sep • 7:00 pm\"`)\n@param amount pre-formatted amount (e.g. `\"₹ 100\"`)\n@param suffixText optional gold-weight suffix (e.g. `\"0.0045 gms\"`); `null` to hide\n@param status validation state — drives wash, badge icon, and amount/helper colour\n@param modifier the [Modifier] to apply\n@param helperText explanatory text below the inner card in the status colour; `null` to hide\n@param leading optional 40 dp slot for the row's leading visual — caller provides\n  any composable (AurumIcon at its natural size, remote-image loader, Lottie, etc.).\n  Aurum reserves a centred 40 dp box; the slot's content is centred inside.",
      "signature": "@Composable\nfun AurumTransactionListCard(\n    label: String,\n    dateText: String,\n    amount: String,\n    suffixText: String?,\n    status: AurumTransactionStatus,\n    modifier: Modifier = Modifier,\n    helperText: String? = null,\n    leading: (@Composable () -> Unit)? = null,\n)",
      "params": [
        {
          "name": "label",
          "type": "String",
          "default": null,
          "doc": "transaction label; ellipsises past one line"
        },
        {
          "name": "dateText",
          "type": "String",
          "default": null,
          "doc": "pre-formatted date (e.g. `\"18 Sep • 7:00 pm\"`)"
        },
        {
          "name": "amount",
          "type": "String",
          "default": null,
          "doc": "pre-formatted amount (e.g. `\"₹ 100\"`)"
        },
        {
          "name": "suffixText",
          "type": "String?",
          "default": null,
          "doc": "optional gold-weight suffix (e.g. `\"0.0045 gms\"`); `null` to hide"
        },
        {
          "name": "status",
          "type": "AurumTransactionStatus",
          "default": null,
          "doc": "validation state — drives wash, badge icon, and amount/helper colour"
        },
        {
          "name": "modifier",
          "type": "Modifier",
          "default": "Modifier",
          "doc": "the [Modifier] to apply"
        },
        {
          "name": "helperText",
          "type": "String?",
          "default": "null",
          "doc": "explanatory text below the inner card in the status colour; `null` to hide"
        },
        {
          "name": "leading",
          "type": "(@Composable () -> Unit)?",
          "default": "null",
          "doc": "optional 40 dp slot for the row's leading visual — caller provides"
        }
      ],
      "previews": [
        "PreviewAurumTransactionListCardAllStates",
        "PreviewAurumTransactionListCardError",
        "PreviewAurumTransactionListCardErrorNoHelper",
        "PreviewAurumTransactionListCardErrorNoIcon",
        "PreviewAurumTransactionListCardLongLabel",
        "PreviewAurumTransactionListCardPending",
        "PreviewAurumTransactionListCardPendingNoHelper",
        "PreviewAurumTransactionListCardSuccess",
        "PreviewAurumTransactionListCardSuccessNoHelper",
        "PreviewAurumTransactionListCardSuccessWithHelper"
      ],
      "figmaNodeId": "5576:19749",
      "figmaUrl": "https://www.figma.com/design/YvIxqu2oTlM6UnkL0OloHc/?node-id=5576-19749",
      "figmaTagUrl": "https://www.figma.com/design/YvIxqu2oTlM6UnkL0OloHc/?node-id=5576-19749",
      "codeConnectPath": "aurum/src/main/kotlin/com/jar/app/aurum/component/card/AurumTransactionListCard.figma.kt",
      "galleryUrl": "https://changejarapp.github.io/aurum-android/component/card/AurumTransactionListCard.html",
      "sourcePath": "aurum/src/main/kotlin/com/jar/app/aurum/component/card/AurumTransactionListCard.kt",
      "intendedUse": "Use as a single transaction row inside a scrollable history list — savings, withdrawals, gold buy / sell, referral payouts. For a single \"this just happened\" callout use the Snackbar / Banner family; for a full transaction-detail screen use the bespoke detail layout.",
      "usage": {
        "do": [
          "Pre-format `dateText`, `amount`, and `suffixText` at the call site with locale-aware utilities — the composable takes strings only.",
          "Drive `status` from real backend state (Success / Error / Pending); wash + badge + amount colour all flow from it.",
          "Pass `helperText` on failed / pending rows for inline context; leave it `null` for happy-path Success rows."
        ],
        "dont": [
          "Pass raw `Date` / `BigDecimal` / `Money` through `toString()` — locale-broken output ships the moment a user switches device language.",
          "Recolour the surface, badge, or amount with raw `Color()` literals — `feedback.*` tokens are the source of truth.",
          "Use this for non-transactional rows (notifications, settings, search) — pick a neutral list-item primitive instead."
        ]
      },
      "relatedTokens": [
        "iconSize.md",
        "iconSize.xl",
        "spacing.s1",
        "spacing.s2",
        "spacing.s4",
        "spacing.s5",
        "surface.bgSurfaceLowContrast",
        "surface.borderSurfaceLowContrast",
        "surface.iconDefaultNormal",
        "surface.textDefaultNormal",
        "surface.textDefaultSubtle",
        "typography.bodySMedium",
        "typography.bodySRegular",
        "typography.bodyXSRegular",
        "typography.titleXSBold"
      ]
    },
    {
      "name": "AurumChip",
      "family": "chip",
      "platforms": [
        "android"
      ],
      "summary": "Aurum's chip — a pill-shaped tappable element.",
      "kdoc": "Aurum's chip — a pill-shaped tappable element. Renders Figma's chip\ncomponent set at file YvIxqu2oTlM6UnkL0OloHc, node 4446-701, across both\n`Action` and `Other` types. Slot composition picks the Figma chip role\nwithin `Other`:\n\n  - label only — Suggestion\n  - `leadingIcon` + label — Assist\n  - `leadingIcon` + label + `trailingIcon` — Filter / Input\n\n`Action` is the canonical label + trailing chevron CTA chip and carries\nthe `Brand` / `Black` colour variants.",
      "signature": "@Composable\nfun AurumChip(\n    label: String,\n    onClick: () -> Unit,\n    modifier: Modifier = Modifier,\n    type: AurumChipType = AurumChipType.Other,\n    variant: AurumChipVariant = AurumChipVariant.Neutral,\n    size: AurumChipSize = AurumChipSize.Large,\n    enabled: Boolean = true,\n    leadingIcon: ImageVector? = null,\n    trailingIcon: ImageVector? = null,\n)",
      "params": [
        {
          "name": "label",
          "type": "String",
          "default": null,
          "doc": ""
        },
        {
          "name": "onClick",
          "type": "() -> Unit",
          "default": null,
          "doc": ""
        },
        {
          "name": "modifier",
          "type": "Modifier",
          "default": "Modifier",
          "doc": ""
        },
        {
          "name": "type",
          "type": "AurumChipType",
          "default": "AurumChipType.Other",
          "doc": ""
        },
        {
          "name": "variant",
          "type": "AurumChipVariant",
          "default": "AurumChipVariant.Neutral",
          "doc": ""
        },
        {
          "name": "size",
          "type": "AurumChipSize",
          "default": "AurumChipSize.Large",
          "doc": ""
        },
        {
          "name": "enabled",
          "type": "Boolean",
          "default": "true",
          "doc": ""
        },
        {
          "name": "leadingIcon",
          "type": "ImageVector?",
          "default": "null",
          "doc": ""
        },
        {
          "name": "trailingIcon",
          "type": "ImageVector?",
          "default": "null",
          "doc": ""
        }
      ],
      "previews": [
        "PreviewChipDisabled",
        "PreviewChipLargeAction",
        "PreviewChipLargeOtherBothIcons",
        "PreviewChipLargeOtherLeading",
        "PreviewChipLargeOtherTextOnly",
        "PreviewChipSelected",
        "PreviewChipSmall"
      ],
      "figmaNodeId": "4446:701",
      "figmaUrl": "https://www.figma.com/design/YvIxqu2oTlM6UnkL0OloHc/?node-id=4446-701",
      "figmaTagUrl": "https://www.figma.com/design/YvIxqu2oTlM6UnkL0OloHc/?node-id=4446-701",
      "codeConnectPath": "aurum/src/main/kotlin/com/jar/app/aurum/component/chip/AurumChip.figma.kt",
      "galleryUrl": "https://changejarapp.github.io/aurum-android/component/chip/AurumChip.html",
      "sourcePath": "aurum/src/main/kotlin/com/jar/app/aurum/component/chip/AurumChip.kt",
      "intendedUse": "Single tappable category/filter selector or a brand action surface in dense layouts. Short labels (1–2 words). Prefer [com.jar.app.aurum.component.button.AurumButton] for primary actions and [com.jar.app.aurum.component.selection.AurumRadioGroup] for mutually- exclusive choices.",
      "usage": {
        "do": [
          "Pair `leadingIcon` with monosemic glyphs (filter, sort, history).",
          "Use `Small` in dense rows; `Large` for one-off CTAs in section headers.",
          "Reserve `Brand` for the primary CTA on a surface (≤1 per screen).",
          "Stretch with `Modifier.weight(1f)` from a `RowScope` for equally-sized chips across a row."
        ],
        "dont": [
          "Use chips as form input — switch to `AurumRadioGroup` for exclusive choices.",
          "Override colours via `Modifier.background` / `tint`; recolour through `variant` only.",
          "Stack vertically — chips flow horizontally with `Arrangement.spacedBy(s2)`."
        ]
      },
      "relatedTokens": [
        "borderWidth.sm",
        "iconSize.md",
        "interactive.bgNeutralDisabled",
        "interactive.bgNeutralInverse",
        "interactive.bgPrimaryDefault",
        "interactive.bgPrimaryHighlighted",
        "interactive.bgStaticBlackDefault",
        "interactive.bgStaticBlackHighlighted",
        "interactive.borderNeutralDefault",
        "interactive.borderNeutralHighlighted",
        "interactive.borderNeutralMuted",
        "interactive.borderPrimaryDefault",
        "interactive.borderPrimaryMuted",
        "interactive.textNeutralDisabled",
        "interactive.textNeutralNormal",
        "interactive.textOnPrimaryNormal",
        "interactive.textPrimaryNormal",
        "spacing.s2",
        "spacing.s3",
        "spacing.s4",
        "surface.textOnBrandNormal",
        "surface.textStaticWhiteNormal",
        "typography.bodyLMedium",
        "typography.bodySMedium",
        "typography.bodyXSMedium"
      ]
    },
    {
      "name": "AurumPill",
      "family": "chip",
      "platforms": [
        "android"
      ],
      "summary": "Aurum's pill — a compact, label-first status / token element.",
      "kdoc": "Aurum's pill — a compact, label-first status / token element. Renders Figma's\nPills component set (file `YvIxqu2oTlM6UnkL0OloHc`, node `5891-802`) across its\nthree `type`s and three states (default / `selected` → Figma \"focus\" / disabled),\nwith optional leading or trailing icons.\n\nA pill is quieter than [AurumChip]: a chip is an action / filter CTA; a pill is a\nstatus, category, or selectable token. Pass `onClick` to make it selectable (the\n`selected` look — primary border + bold label — mirrors Figma's focus state).\n\n@param label the pill text.\n@param modifier applied to the pill root.\n@param type the Figma `type` axis — see [AurumPillType].\n@param selected the active look (Figma `state=focus`): primary border + bold label.\n@param enabled when false renders the Figma `state=disabled` look and drops the click.\n@param leadingIcon optional 16dp glyph before the label (Rectangular / Rounded only).\n@param trailingIcon optional 16dp glyph after the label (Rectangular / Rounded only).\n@param tag the uppercase ribbon text for [AurumPillType.WithTags]; ignored otherwise.\n@param onClick optional — when set, the pill is clickable (role = Button).",
      "signature": "@Composable\nfun AurumPill(\n    label: String,\n    modifier: Modifier = Modifier,\n    type: AurumPillType = AurumPillType.Rounded,\n    selected: Boolean = false,\n    enabled: Boolean = true,\n    leadingIcon: ImageVector? = null,\n    trailingIcon: ImageVector? = null,\n    tag: String? = null,\n    onClick: (() -> Unit)? = null,\n)",
      "params": [
        {
          "name": "label",
          "type": "String",
          "default": null,
          "doc": "the pill text."
        },
        {
          "name": "modifier",
          "type": "Modifier",
          "default": "Modifier",
          "doc": "applied to the pill root."
        },
        {
          "name": "type",
          "type": "AurumPillType",
          "default": "AurumPillType.Rounded",
          "doc": "the Figma `type` axis — see [AurumPillType]."
        },
        {
          "name": "selected",
          "type": "Boolean",
          "default": "false",
          "doc": "the active look (Figma `state=focus`): primary border + bold label."
        },
        {
          "name": "enabled",
          "type": "Boolean",
          "default": "true",
          "doc": "when false renders the Figma `state=disabled` look and drops the click."
        },
        {
          "name": "leadingIcon",
          "type": "ImageVector?",
          "default": "null",
          "doc": "optional 16dp glyph before the label (Rectangular / Rounded only)."
        },
        {
          "name": "trailingIcon",
          "type": "ImageVector?",
          "default": "null",
          "doc": "optional 16dp glyph after the label (Rectangular / Rounded only)."
        },
        {
          "name": "tag",
          "type": "String?",
          "default": "null",
          "doc": "the uppercase ribbon text for [AurumPillType.WithTags]; ignored otherwise."
        },
        {
          "name": "onClick",
          "type": "(() -> Unit)?",
          "default": "null",
          "doc": "optional — when set, the pill is clickable (role = Button)."
        }
      ],
      "previews": [
        "PreviewPillRectangular",
        "PreviewPillRounded",
        "PreviewPillRoundedIcons",
        "PreviewPillWithTags"
      ],
      "figmaNodeId": "5891:802",
      "figmaUrl": "https://www.figma.com/design/YvIxqu2oTlM6UnkL0OloHc/?node-id=5891-802",
      "figmaTagUrl": "https://www.figma.com/design/YvIxqu2oTlM6UnkL0OloHc/?node-id=5891-802",
      "codeConnectPath": "aurum/src/main/kotlin/com/jar/app/aurum/component/chip/AurumPill.figma.kt",
      "galleryUrl": "https://changejarapp.github.io/aurum-android/component/chip/AurumPill.html",
      "sourcePath": "aurum/src/main/kotlin/com/jar/app/aurum/component/chip/AurumPill.kt",
      "intendedUse": "A small label-first token for status, category, or a selectable filter where a full [AurumChip] would shout. Short labels (1–2 words). For primary actions use [com.jar.app.aurum.component.button.AurumButton]; for an action / filter CTA use [AurumChip].",
      "usage": {
        "do": [
          "Use [AurumPillType.Rounded] by default; reserve [AurumPillType.Rectangular] for grid/table cells where square-ish corners read better.",
          "Drive the active look with `selected` (a selectable pill), not by recolouring.",
          "Pair `leadingIcon` with a monosemic glyph (filter, location, tag).",
          "Use [AurumPillType.WithTags] with `tag` for a pill that carries a small category/discount ribbon."
        ],
        "dont": [
          "Recolour via `Modifier.background` / `tint` — the state set is fixed; use `selected` / `enabled`.",
          "Use a pill as a primary action — switch to [com.jar.app.aurum.component.button.AurumButton].",
          "Pass both icons on [AurumPillType.WithTags] — that type is label + tag only."
        ]
      },
      "relatedTokens": [
        "borderWidth.sm",
        "iconSize.md",
        "interactive.bgNeutralDisabled",
        "interactive.bgNeutralFaded",
        "interactive.bgNeutralInverse",
        "interactive.bgPrimaryDefault",
        "interactive.bgPrimaryDisabled",
        "interactive.borderNeutralDefault",
        "interactive.borderNeutralDisabled",
        "interactive.borderPrimaryDefault",
        "interactive.textNeutralDisabled",
        "interactive.textNeutralNormal",
        "interactive.textOnPrimaryNormal",
        "interactive.textPrimaryDisabled",
        "radius.lg",
        "spacing.s2",
        "spacing.s3",
        "spacing.s4",
        "typography.bodyLMedium",
        "typography.bodyMMedium",
        "typography.labelSBold",
        "typography.titleXSBold"
      ]
    },
    {
      "name": "AurumDivider",
      "family": "divider",
      "platforms": [
        "android"
      ],
      "summary": "Aurum's divider primitive — a thin horizontal line used to separate content sections.",
      "kdoc": "Aurum's divider primitive — a thin horizontal line used to separate\ncontent sections.\n\nThis is a **scratch** component — a styled [Box], not `material3.HorizontalDivider`.\n\n@param modifier the [Modifier] to apply\n@param color the divider colour — defaults to the surface low-contrast\n  border token\n@param thickness the divider height — defaults to [Aurum.borderWidth.xs]\n  (0.5 dp hairline)",
      "signature": "@Composable\nfun AurumDivider(\n    modifier: Modifier = Modifier,\n    color: Color = Aurum.colors.surface.borderSurfaceLowContrast,\n    thickness: Dp = Aurum.borderWidth.xs,\n)",
      "params": [
        {
          "name": "modifier",
          "type": "Modifier",
          "default": "Modifier",
          "doc": "the [Modifier] to apply"
        },
        {
          "name": "color",
          "type": "Color",
          "default": "Aurum.colors.surface.borderSurfaceLowContrast",
          "doc": "the divider colour — defaults to the surface low-contrast"
        },
        {
          "name": "thickness",
          "type": "Dp",
          "default": "Aurum.borderWidth.xs",
          "doc": "the divider height — defaults to [Aurum.borderWidth.xs]"
        }
      ],
      "previews": [
        "PreviewAurumDivider"
      ],
      "figmaNodeId": null,
      "figmaUrl": null,
      "figmaTagUrl": null,
      "codeConnectPath": null,
      "galleryUrl": "https://changejarapp.github.io/aurum-android/component/divider/AurumDivider.html",
      "sourcePath": "aurum/src/main/kotlin/com/jar/app/aurum/component/divider/AurumDivider.kt",
      "intendedUse": "Use as a thin separator between rows in a list, or before/after a logical content group. Keeps the surface scannable without introducing a new section affordance. For section headings use [AurumSectionHeader]; for layout spacing use `Aurum.space.*` tokens (a Spacer with the right height is structurally cheaper than a divider).",
      "usage": {
        "do": [
          "Use the default `borderSurfaceLowContrast` colour — it's tuned to be visible without competing with content.",
          "Reach for `borderWidth.xs` (default, hairline) — thicker dividers read as decoration rather than separation."
        ],
        "dont": [
          "Use as decorative page-break flourish — that's a typography or layout concern, not a divider.",
          "Use for layout spacing — a `Spacer(Modifier.height(Aurum.space.s5))` is the right tool when you just need air, not a visible line."
        ]
      },
      "relatedTokens": [
        "borderWidth.lg",
        "borderWidth.xs",
        "spacing.s3",
        "spacing.s5",
        "spacing.s7",
        "surface.borderBrandNormal",
        "surface.borderSurfaceLowContrast",
        "typography.bodySRegular",
        "typography.labelLMedium"
      ]
    },
    {
      "name": "AurumBadge",
      "family": "feedback",
      "platforms": [
        "android"
      ],
      "summary": "Aurum's badge primitive — a small, non-interactive label used for status, categorization, or count indicators.",
      "kdoc": "Aurum's badge primitive — a small, non-interactive label used for\nstatus, categorization, or count indicators.\n\nSupports 6 colour roles × 2 emphases × 2 sizes, with an optional\nleading icon. Tokens are sourced from the `feedback.*` family in\n[Aurum.colors].\n\nThis is a **scratch** component — built from [Box] + [Row], no\n`material3` imports.\n\n## Token pairing (cross-axis)\n\nEmphasis and text/icon colours follow a **cross-axis** pairing:\n- `Intense` background → `Inverse` text/icon (e.g., solid purple bg +\n  white text)\n- `Subtle` background → `Intense` text/icon (e.g., light wash bg +\n  saturated purple text)\n\nThis is by design and matches the Figma token references.\n\n## Figma spec\n\n- Height: 24 dp (default), 28 dp (large)\n- Horizontal padding: `spacing[4]` = 12 dp\n- Icon-to-label gap: `spacing[2]` = 4 dp\n- Shape: pill (`border.radius.max`)\n- Text: `Label/L-Medium` (12 sp Inter, 500 Medium, 16 sp line-height)\n- Icon size: `iconSize.md` = 16 dp (fits within badge height)\n\n@param label the badge text\n@param modifier the [Modifier] to apply\n@param color the colour role — defaults to [AurumBadgeColor.Primary]\n@param emphasis the visual intensity — defaults to [AurumBadgeEmphasis.Intense]\n@param size the badge size — defaults to [AurumBadgeSize.Default]\n@param leadingIcon optional icon drawn before the label; sized to\n  [Aurum.iconSize.md] (16 dp)",
      "signature": "@Composable\nfun AurumBadge(\n    label: String,\n    modifier: Modifier = Modifier,\n    color: AurumBadgeColor = AurumBadgeColor.Primary,\n    emphasis: AurumBadgeEmphasis = AurumBadgeEmphasis.Intense,\n    size: AurumBadgeSize = AurumBadgeSize.Default,\n    leadingIcon: ImageVector? = null,\n)",
      "params": [
        {
          "name": "label",
          "type": "String",
          "default": null,
          "doc": "the badge text"
        },
        {
          "name": "modifier",
          "type": "Modifier",
          "default": "Modifier",
          "doc": "the [Modifier] to apply"
        },
        {
          "name": "color",
          "type": "AurumBadgeColor",
          "default": "AurumBadgeColor.Primary",
          "doc": "the colour role — defaults to [AurumBadgeColor.Primary]"
        },
        {
          "name": "emphasis",
          "type": "AurumBadgeEmphasis",
          "default": "AurumBadgeEmphasis.Intense",
          "doc": "the visual intensity — defaults to [AurumBadgeEmphasis.Intense]"
        },
        {
          "name": "size",
          "type": "AurumBadgeSize",
          "default": "AurumBadgeSize.Default",
          "doc": "the badge size — defaults to [AurumBadgeSize.Default]"
        },
        {
          "name": "leadingIcon",
          "type": "ImageVector?",
          "default": "null",
          "doc": "optional icon drawn before the label; sized to"
        }
      ],
      "previews": [
        "PreviewAurumBadgeIntense",
        "PreviewAurumBadgeSizes",
        "PreviewAurumBadgeSubtle"
      ],
      "figmaNodeId": "4240:10542",
      "figmaUrl": "https://www.figma.com/design/YvIxqu2oTlM6UnkL0OloHc/?node-id=4240-10542",
      "figmaTagUrl": "https://www.figma.com/design/YvIxqu2oTlM6UnkL0OloHc/?node-id=4240-10542",
      "codeConnectPath": "aurum/src/main/kotlin/com/jar/app/aurum/component/feedback/AurumBadge.figma.kt",
      "galleryUrl": "https://changejarapp.github.io/aurum-android/component/feedback/AurumBadge.html",
      "sourcePath": "aurum/src/main/kotlin/com/jar/app/aurum/component/feedback/AurumBadge.kt",
      "intendedUse": "Use as a small status / categorisation / count indicator anchored to another piece of content — \"New\" pill on a list item, \"Verified\" stamp on a profile, unread count on an avatar. The `Intense` emphasis pulls the eye; `Subtle` is the same role at lower volume. For longer-running ephemeral feedback use [AurumToast]; for tappable filters use [AurumChip].",
      "usage": {
        "do": [
          "Pick the `color` from semantic intent — Positive for success, Negative for failure, Notice for warnings, Info for neutral context.",
          "Anchor the badge to its subject (top-right of an icon, inline before a label) so the relationship is unambiguous.",
          "Keep labels to 1–2 words; the pill clamps at `iconSize.md` height and long text wraps awkwardly."
        ],
        "dont": [
          "Use as a tappable affordance — badges are non-interactive. For tap actions use [AurumChip] (filter / select) or [AurumIconButton] (action).",
          "Stack badges vertically on a single subject; one anchored badge per item conveys status best.",
          "Mix multiple `color` roles on the same surface for the same kind of subject — readers infer hierarchy from the role choice."
        ]
      },
      "relatedTokens": [
        "iconSize.md",
        "spacing.s2",
        "spacing.s3",
        "spacing.s4",
        "spacing.s7",
        "spacing.s8",
        "typography.labelLMedium"
      ]
    },
    {
      "name": "AurumBanner",
      "family": "feedback",
      "platforms": [
        "android"
      ],
      "summary": "Aurum's banner primitive — a persistent, top-anchored, full-bleed tonal status strip.",
      "kdoc": "Aurum's banner primitive — a persistent, top-anchored, full-bleed tonal\nstatus strip. It is the **persistent** counterpart of the transient\n[AurumToast]: same tonal palette and status glyphs, but structural\n(square corners, full-bleed, a bottom hairline) rather than a floating\nrounded pill, and it stays until the caller dismisses it.\n\nEach [tone] pairs a `feedback.*` subtle background with the matching\nintense content colour and a per-tone leading status glyph. An opaque\n`surface.bgPageBase` base is painted under the tint so the strip reads\nsolid over any backdrop. Optionally renders a single inline text\n[action] (e.g. \"Retry\") and, when [onDismiss] is non-null, a trailing\nclose ✕.\n\nThis is a **presentational** primitive — it does not own the show/hide\nlifecycle. Pair it with caller-owned state (or [AurumBannerHost]).\n\n@param message the status message rendered inside the strip\n@param modifier the [Modifier] to apply\n@param tone semantic colour role — defaults to [AurumBannerTone.Neutral]\n@param leadingIcon optional glyph override — defaults (`null`) to the\n  tone's status glyph. Supply to swap the glyph; it is still tinted to\n  the tone's content colour and sized by the banner.\n@param action optional inline text action (e.g. \"Retry\") rendered at the\n  trailing edge — defaults (`null`) to no action\n@param windowInsets insets padded *inside* the tone background (M3\n  app-bar convention) — pass `WindowInsets.statusBars` when the band is\n  anchored to the top window edge so the tone colour paints under the\n  status bar while content stays clear of it. Defaults to none.\n@param onDismiss optional dismiss callback — `null` (default) makes the\n  banner non-dismissible (state banners); non-null renders a trailing ✕",
      "signature": "@Composable\nfun AurumBanner(\n    message: String,\n    modifier: Modifier = Modifier,\n    tone: AurumBannerTone = AurumBannerTone.Neutral,\n    leadingIcon: ImageVector? = null,\n    action: AurumBannerAction? = null,\n    onDismiss: (() -> Unit)? = null,\n    windowInsets: WindowInsets = WindowInsets(0,\n    0,\n    0,\n    0),\n)",
      "params": [
        {
          "name": "message",
          "type": "String",
          "default": null,
          "doc": "the status message rendered inside the strip"
        },
        {
          "name": "modifier",
          "type": "Modifier",
          "default": "Modifier",
          "doc": "the [Modifier] to apply"
        },
        {
          "name": "tone",
          "type": "AurumBannerTone",
          "default": "AurumBannerTone.Neutral",
          "doc": "semantic colour role — defaults to [AurumBannerTone.Neutral]"
        },
        {
          "name": "leadingIcon",
          "type": "ImageVector?",
          "default": "null",
          "doc": "optional glyph override — defaults (`null`) to the"
        },
        {
          "name": "action",
          "type": "AurumBannerAction?",
          "default": "null",
          "doc": "optional inline text action (e.g. \"Retry\") rendered at the"
        },
        {
          "name": "onDismiss",
          "type": "(() -> Unit)?",
          "default": "null",
          "doc": "optional dismiss callback — `null` (default) makes the"
        },
        {
          "name": "windowInsets",
          "type": "WindowInsets",
          "default": "WindowInsets(0, 0, 0, 0)",
          "doc": "insets padded *inside* the tone background (M3"
        }
      ],
      "previews": [
        "PreviewBannerAllTones",
        "PreviewBannerDismissibleAndNot",
        "PreviewBannerWithAction"
      ],
      "figmaNodeId": null,
      "figmaUrl": "TODO(aurum-connect-figma): no Figma node yet — design to spec the Banner",
      "figmaTagUrl": null,
      "codeConnectPath": "aurum/src/main/kotlin/com/jar/app/aurum/component/feedback/AurumBanner.figma.kt",
      "galleryUrl": "https://changejarapp.github.io/aurum-android/component/feedback/AurumBanner.html",
      "sourcePath": "aurum/src/main/kotlin/com/jar/app/aurum/component/feedback/AurumBanner.kt",
      "intendedUse": "Use for persistent, top-anchored, app- or page-level status the user must stay aware of — offline / no-connection, scheduled downtime, degraded service, account warnings (KYC pending, payment failed). The persistent counterpart to the transient [AurumToast]: pick the [tone] from semantic intent. For ephemeral confirmations use [AurumToast]; for modal / destructive flows use [com.jar.app.aurum.component.sheet.AurumBottomSheet].",
      "usage": {
        "do": [
          "Use for persistent state the user must stay aware of, and pick [tone] from semantic intent — Error for failures, Warning for at-risk state, Info for neutral context, Success for resolved state, Brand for product moments, Neutral for low-urgency system status.",
          "Pair a single [action] only when there is a clear recovery path (e.g. \"Retry\", \"Verify now\"); leave it `null` for pure status.",
          "Set [onDismiss] for advisory banners the user can clear; leave it `null` for state banners that must persist until the underlying condition resolves."
        ],
        "dont": [
          "Use for transient confirmations like \"Saved\" or \"Copied\" — that's [AurumToast].",
          "Stack multiple banners — show one at a time so the top-anchored slot stays a single, clear signal.",
          "Clip the strip or give it rounded corners — the banner is a structural full-bleed band, not a floating card."
        ]
      },
      "relatedTokens": [
        "iconSize.lg",
        "interactive.textPrimaryNormal",
        "spacing.s3",
        "spacing.s4",
        "spacing.s5",
        "surface.bgPageBase",
        "surface.textDefaultSubtle",
        "typography.bodyMMedium",
        "typography.titleXSSemiBold"
      ]
    },
    {
      "name": "AurumBannerHost",
      "family": "feedback",
      "platforms": [
        "android"
      ],
      "summary": "Aurum's banner host — a thin slot that renders the single currently visible [AurumBanner] from [hostState] with a slide-from-top expand/collapse animation.",
      "kdoc": "Aurum's banner host — a thin slot that renders the single currently\nvisible [AurumBanner] from [hostState] with a slide-from-top\nexpand/collapse animation.\n\nPlace at the **top** of your Compose tree (above the app bar / content).\nPlaced **in the layout flow** (first child of the root Column, or a\ntop-anchored slot the rest of the chrome is constrained below), the\nexpand/shrink animation smoothly pushes the content underneath down and\nreleases it back — the structural-band behaviour. Placed in an overlay\nBox it floats over content instead. Hoist [AurumBannerHostState] with [rememberAurumBannerHostState]\nand drive it via `hostState.show(...)` / `hostState.dismiss()`. Banners\nare persistent — there is no queue or timer; the caller owns the\nlifecycle.\n\nThis is **codebase-only** — there is **no Figma node yet**. It is\nproposal-grade orchestration glue, pending design; reconcile when design\nproduces the spec. The visual is [AurumBanner].\n\n@param hostState state holder (`rememberAurumBannerHostState()`)\n@param modifier the [Modifier] to apply to the animation wrapper\n@param banner renderer slot. Defaults to the canonical [AurumBanner]\n  with [Modifier.fillMaxWidth]. Override to inject custom placement.",
      "signature": "@Composable\nfun AurumBannerHost(\n    hostState: AurumBannerHostState,\n    modifier: Modifier = Modifier,\n    banner: @Composable (AurumBannerData) -> Unit = { DefaultBannerRender(hostState,\n    it) },\n)",
      "params": [
        {
          "name": "hostState",
          "type": "AurumBannerHostState",
          "default": null,
          "doc": "state holder (`rememberAurumBannerHostState()`)"
        },
        {
          "name": "modifier",
          "type": "Modifier",
          "default": "Modifier",
          "doc": "the [Modifier] to apply to the animation wrapper"
        },
        {
          "name": "banner",
          "type": "@Composable (AurumBannerData) -> Unit",
          "default": "{ DefaultBannerRender(hostState, it) }",
          "doc": "renderer slot. Defaults to the canonical [AurumBanner]"
        }
      ],
      "previews": [
        "PreviewAurumBannerHost"
      ],
      "figmaNodeId": null,
      "figmaUrl": null,
      "figmaTagUrl": null,
      "codeConnectPath": null,
      "galleryUrl": "https://changejarapp.github.io/aurum-android/component/feedback/AurumBannerHost.html",
      "sourcePath": "aurum/src/main/kotlin/com/jar/app/aurum/component/feedback/AurumBannerHost.kt",
      "intendedUse": "Host slot for persistent, top-anchored, app- or page-level status: offline / no-connection, scheduled downtime, degraded service, account warnings. One host per top-level Compose tree (the screen / nav-graph host), placed top-anchored. The caller supplies the status-bar inset via the modifier (e.g. `Modifier.statusBarsPadding()`).",
      "usage": {
        "do": [
          "Place the host top-anchored, above the app bar / content, so the strip reads as a structural band at the top edge.",
          "Supply the status-bar inset yourself via the modifier (e.g. `Modifier.statusBarsPadding()`) — the host doesn't pad insets itself.",
          "Drive `show(...)` / `dismiss()` from the source of truth for the condition (e.g. a connectivity flow), so the banner mirrors live state."
        ],
        "dont": [
          "Use this for transient confirmations — that's [AurumToastHost] + `showToast(...)`.",
          "Mount more than one [AurumBannerHost] per screen — concurrent hosts fight for the top slot.",
          "Hand the host its own `Modifier.fillMaxSize()` — it occupies only the banner's natural height. Wrap in `Box(Modifier.fillMaxSize())` and align it via `Modifier.align(Alignment.TopCenter)` for top-edge anchoring."
        ]
      }
    },
    {
      "name": "AurumLoader",
      "family": "feedback",
      "platforms": [
        "android"
      ],
      "summary": "Aurum's circular progress spinner.",
      "kdoc": "Aurum's circular progress spinner. A **scratch** component — drawn directly on\n[Canvas] from `androidx.compose.foundation`, not derived from any Material 3 indicator.\nReplaces the duplicated `CircularProgressLoader` found across 3+ modules. Renders Figma's\n\"Spinner\" set (file `YvIxqu2oTlM6UnkL0OloHc`, node `4530-2084`): a full-circle track in\n[trackColor] with a 90-degree arc in [color] rotating at constant speed, an optional\n[label] (Figma `shownLabel`) placed [Right][AurumLoaderLabelPosition.Right] or\n[Bottom][AurumLoaderLabelPosition.Bottom], and free [size] / [color] (the Figma `size`\nand `color` axes are covered by these continuous params).\n\n@param modifier the [Modifier] to apply to the root (the spinner, or the spinner+label row/column).\n@param color the spinning arc colour — defaults to the primary interactive background token.\n@param trackColor the background ring colour — defaults to the mid-contrast surface token.\n@param strokeWidth the thickness of the ring — defaults to [Aurum.borderWidth.lg].\n@param size the overall diameter — defaults to [Aurum.iconSize.xxl].\n@param label optional text shown alongside the spinner (Figma `shownLabel`); null = spinner only.\n@param labelPosition where the [label] sits relative to the spinner — see [AurumLoaderLabelPosition].",
      "signature": "@Composable\nfun AurumLoader(\n    modifier: Modifier = Modifier,\n    color: Color = Aurum.colors.interactive.bgPrimaryDefault,\n    trackColor: Color = Aurum.colors.surface.bgSurfaceMidContrast,\n    strokeWidth: Dp = Aurum.borderWidth.lg,\n    size: Dp = Aurum.iconSize.xxl,\n    label: String? = null,\n    labelPosition: AurumLoaderLabelPosition = AurumLoaderLabelPosition.Right,\n)",
      "params": [
        {
          "name": "modifier",
          "type": "Modifier",
          "default": "Modifier",
          "doc": "the [Modifier] to apply to the root (the spinner, or the spinner+label row/column)."
        },
        {
          "name": "color",
          "type": "Color",
          "default": "Aurum.colors.interactive.bgPrimaryDefault",
          "doc": "the spinning arc colour — defaults to the primary interactive background token."
        },
        {
          "name": "trackColor",
          "type": "Color",
          "default": "Aurum.colors.surface.bgSurfaceMidContrast",
          "doc": "the background ring colour — defaults to the mid-contrast surface token."
        },
        {
          "name": "strokeWidth",
          "type": "Dp",
          "default": "Aurum.borderWidth.lg",
          "doc": "the thickness of the ring — defaults to [Aurum.borderWidth.lg]."
        },
        {
          "name": "size",
          "type": "Dp",
          "default": "Aurum.iconSize.xxl",
          "doc": "the overall diameter — defaults to [Aurum.iconSize.xxl]."
        },
        {
          "name": "label",
          "type": "String?",
          "default": "null",
          "doc": "optional text shown alongside the spinner (Figma `shownLabel`); null = spinner only."
        },
        {
          "name": "labelPosition",
          "type": "AurumLoaderLabelPosition",
          "default": "AurumLoaderLabelPosition.Right",
          "doc": "where the [label] sits relative to the spinner — see [AurumLoaderLabelPosition]."
        }
      ],
      "previews": [
        "PreviewAurumLoader",
        "PreviewAurumLoaderLabelled"
      ],
      "figmaNodeId": "4530:2084",
      "figmaUrl": "https://www.figma.com/design/YvIxqu2oTlM6UnkL0OloHc/?node-id=4530-2084",
      "figmaTagUrl": "https://www.figma.com/design/YvIxqu2oTlM6UnkL0OloHc/?node-id=4530-2084",
      "codeConnectPath": "aurum/src/main/kotlin/com/jar/app/aurum/component/feedback/AurumLoader.figma.kt",
      "galleryUrl": "https://changejarapp.github.io/aurum-android/component/feedback/AurumLoader.html",
      "sourcePath": "aurum/src/main/kotlin/com/jar/app/aurum/component/feedback/AurumLoader.kt",
      "intendedUse": "Use for short-duration, action-bound waits where the user has just initiated something — submitting a form, fetching a fresh result, retrying after an error. Rule of thumb: if the wait could exceed ~2 seconds and you have content shape to suggest, use [AurumSkeleton] instead so the surface keeps its perceived layout.",
      "usage": {
        "do": [
          "Render inline next to the action that triggered the wait (e.g. inside [com.jar.app.aurum.component.button.AurumButton]'s `isLoading` slot, an inline list-row spinner).",
          "Pass a `label` (\"Loading…\") for screen-level waits so the affordance reads clearly; the label also gives screen readers something to announce.",
          "Default `size` to [Aurum.iconSize.xxl] for screen-level waits; use [Aurum.iconSize.md] for inline-button spinners."
        ],
        "dont": [
          "Use for long page loads — multi-second blank screens are perceived as broken; switch to [AurumSkeleton].",
          "Stack multiple spinners on the same screen for parallel requests; aggregate to one canonical \"loading\" affordance."
        ]
      },
      "relatedTokens": [
        "borderWidth.lg",
        "borderWidth.xl",
        "iconSize.md",
        "iconSize.xxl",
        "interactive.bgPositiveDefault",
        "interactive.bgPrimaryDefault",
        "spacing.s10",
        "spacing.s2",
        "spacing.s6",
        "surface.bgSurfaceLowContrast",
        "surface.bgSurfaceMidContrast",
        "surface.textDefaultNormal",
        "typography.bodyMMedium"
      ]
    },
    {
      "name": "AurumProgressBar",
      "family": "feedback",
      "platforms": [
        "android"
      ],
      "summary": "Aurum's linear progress bar — a determinate 8dp track with a primary-fill indicator.",
      "kdoc": "Aurum's linear progress bar — a determinate 8dp track with a primary-fill\nindicator. Renders Figma's \"Progress Bar - Linear\" set (file\n`YvIxqu2oTlM6UnkL0OloHc`, node `5934-846`): an 8dp pill track\n(`interactive.bgNeutralDefault`) with a primary indicator\n(`interactive.bgPrimaryDefault`) sized to [progress]. Optionally shows a\nheader row (Figma `shownHeader`) with a leading [label] and the trailing\npercentage (Figma `shownProgress`, via [showPercentage]).\n\nDeterminate only — for an indeterminate spinner use [AurumLoader].\n\n@param progress the completed fraction, `0f..1f` (coerced).\n@param modifier applied to the root column.\n@param label optional header text shown above the bar (leading).\n@param showPercentage when true, shows the rounded percentage in the header (trailing).",
      "signature": "@Composable\nfun AurumProgressBar(\n    progress: Float,\n    modifier: Modifier = Modifier,\n    label: String? = null,\n    showPercentage: Boolean = false,\n)",
      "params": [
        {
          "name": "progress",
          "type": "Float",
          "default": null,
          "doc": "the completed fraction, `0f..1f` (coerced)."
        },
        {
          "name": "modifier",
          "type": "Modifier",
          "default": "Modifier",
          "doc": "applied to the root column."
        },
        {
          "name": "label",
          "type": "String?",
          "default": "null",
          "doc": "optional header text shown above the bar (leading)."
        },
        {
          "name": "showPercentage",
          "type": "Boolean",
          "default": "false",
          "doc": "when true, shows the rounded percentage in the header (trailing)."
        }
      ],
      "previews": [
        "PreviewProgressBarSteps",
        "PreviewProgressBarWithHeader"
      ],
      "figmaNodeId": "5934:846",
      "figmaUrl": "https://www.figma.com/design/YvIxqu2oTlM6UnkL0OloHc/?node-id=5934-846",
      "figmaTagUrl": "https://www.figma.com/design/YvIxqu2oTlM6UnkL0OloHc/?node-id=5934-846",
      "codeConnectPath": "aurum/src/main/kotlin/com/jar/app/aurum/component/feedback/AurumProgressBar.figma.kt",
      "galleryUrl": "https://changejarapp.github.io/aurum-android/component/feedback/AurumProgressBar.html",
      "sourcePath": "aurum/src/main/kotlin/com/jar/app/aurum/component/feedback/AurumProgressBar.kt",
      "intendedUse": "A determinate progress indicator for a known, bounded task — onboarding steps, upload/download, a multi-stage flow. Drive [progress] from your state (0f..1f). For unknown-duration waits use [AurumLoader]; for stepped/story progress use `AurumSegmentedProgressBar`.",
      "usage": {
        "do": [
          "Pass a `0f..1f` fraction; values are coerced into range.",
          "Animate at the call site (`animateFloatAsState`) when progress jumps, so the fill glides.",
          "Use `label` + `showPercentage` to give the bar context in a header row."
        ],
        "dont": [
          "Use it for indeterminate / unknown-duration work — that's [AurumLoader].",
          "Recolour the track/indicator — the tokens are fixed (neutral track, primary fill)."
        ]
      },
      "relatedTokens": [
        "interactive.bgNeutralDefault",
        "interactive.bgPrimaryDefault",
        "spacing.s3",
        "spacing.s4",
        "surface.textDefaultNormal",
        "surface.textDefaultSubtle",
        "typography.bodyLMedium",
        "typography.bodyMMedium"
      ]
    },
    {
      "name": "AurumSegmentedProgressBar",
      "family": "feedback",
      "platforms": [
        "android"
      ],
      "summary": "Aurum's segmented progress bar — discrete progress across [total] segments, the first [filled] of them complete.",
      "kdoc": "Aurum's segmented progress bar — discrete progress across [total] segments, the first\n[filled] of them complete. Renders Figma's \"Progress Bar - Segmented\" set (file\n`YvIxqu2oTlM6UnkL0OloHc`, node `5889-2361`):\n\n - [AurumSegmentedProgressType.Bars] — [total] equal 8dp pill segments; the first\n   [filled] are tinted by [intent], the rest `interactive.bgNeutralDefault`.\n - [AurumSegmentedProgressType.Bubbles] — the same, each segment capped by a 24dp\n   numbered checkpoint (a stepper); completed steps fill + carry inverse-tinted numerals.\n\nOptional header row (Figma `shownHeader`) with a leading [label] and the trailing\nfraction percentage (Figma `shownProgress`, via [showPercentage]).\n\n@param filled the number of completed segments, coerced to `0..total`.\n@param total the segment count (coerced to at least 1).\n@param modifier applied to the root column.\n@param type bars or numbered bubbles — see [AurumSegmentedProgressType].\n@param intent the filled colour family — see [AurumSegmentIntent].\n@param label optional header text shown above the bar (leading).\n@param showPercentage when true, shows the rounded `filled/total` percentage (trailing).",
      "signature": "@Composable\nfun AurumSegmentedProgressBar(\n    filled: Int,\n    total: Int,\n    modifier: Modifier = Modifier,\n    type: AurumSegmentedProgressType = AurumSegmentedProgressType.Bars,\n    intent: AurumSegmentIntent = AurumSegmentIntent.Default,\n    label: String? = null,\n    showPercentage: Boolean = false,\n)",
      "params": [
        {
          "name": "filled",
          "type": "Int",
          "default": null,
          "doc": "the number of completed segments, coerced to `0..total`."
        },
        {
          "name": "total",
          "type": "Int",
          "default": null,
          "doc": "the segment count (coerced to at least 1)."
        },
        {
          "name": "modifier",
          "type": "Modifier",
          "default": "Modifier",
          "doc": "applied to the root column."
        },
        {
          "name": "type",
          "type": "AurumSegmentedProgressType",
          "default": "AurumSegmentedProgressType.Bars",
          "doc": "bars or numbered bubbles — see [AurumSegmentedProgressType]."
        },
        {
          "name": "intent",
          "type": "AurumSegmentIntent",
          "default": "AurumSegmentIntent.Default",
          "doc": "the filled colour family — see [AurumSegmentIntent]."
        },
        {
          "name": "label",
          "type": "String?",
          "default": "null",
          "doc": "optional header text shown above the bar (leading)."
        },
        {
          "name": "showPercentage",
          "type": "Boolean",
          "default": "false",
          "doc": "when true, shows the rounded `filled/total` percentage (trailing)."
        }
      ],
      "previews": [
        "PreviewSegmentedBars",
        "PreviewSegmentedBubbles",
        "PreviewSegmentedIntents"
      ],
      "figmaNodeId": "5889:2361",
      "figmaUrl": "https://www.figma.com/design/YvIxqu2oTlM6UnkL0OloHc/?node-id=5889-2361",
      "figmaTagUrl": "https://www.figma.com/design/YvIxqu2oTlM6UnkL0OloHc/?node-id=5889-2361",
      "codeConnectPath": "aurum/src/main/kotlin/com/jar/app/aurum/component/feedback/AurumSegmentedProgressBar.figma.kt",
      "galleryUrl": "https://changejarapp.github.io/aurum-android/component/feedback/AurumSegmentedProgressBar.html",
      "sourcePath": "aurum/src/main/kotlin/com/jar/app/aurum/component/feedback/AurumSegmentedProgressBar.kt",
      "intendedUse": "Discrete, countable progress — onboarding steps, a multi-step form, a quiz, a story/reel position. Use [AurumSegmentedProgressType.Bubbles] when each step is a meaningful, numbered checkpoint; [AurumSegmentedProgressType.Bars] when it's just N of M. For a continuous fraction use [AurumProgressBar]; for indeterminate waits use [AurumLoader].",
      "usage": {
        "do": [
          "Pass `filled` / `total` as counts (e.g. 3 of 5); both are coerced into range.",
          "Use `intent` to carry status — e.g. [AurumSegmentIntent.Negative] for a failed step run.",
          "Use `Bubbles` only for ≤ ~5 steps; beyond that the numerals get cramped — prefer `Bars`."
        ],
        "dont": [
          "Use it for a continuous 0–100% value — that's [AurumProgressBar].",
          "Recolour segments directly — pick the fixed `intent` palette instead."
        ]
      },
      "relatedTokens": [
        "feedback.bgInformationIntense",
        "feedback.bgNegativeIntense",
        "feedback.bgNeutralIntense",
        "feedback.bgNoticeIntense",
        "feedback.bgPositiveIntense",
        "feedback.bgPrimaryIntense",
        "feedback.textInformationInverse",
        "feedback.textNegativeInverse",
        "feedback.textNeutralInverse",
        "feedback.textNoticeInverse",
        "feedback.textPositiveInverse",
        "feedback.textPrimaryInverse",
        "interactive.bgNeutralDefault",
        "interactive.textNeutralNormal",
        "spacing.s2",
        "spacing.s3",
        "spacing.s4",
        "surface.textDefaultNormal",
        "surface.textDefaultSubtle",
        "typography.bodyLMedium",
        "typography.bodyMMedium",
        "typography.bodySMedium"
      ]
    },
    {
      "name": "AurumSkeleton",
      "family": "feedback",
      "platforms": [
        "android"
      ],
      "summary": "Aurum's shimmer/skeleton loading placeholder.",
      "kdoc": "Aurum's shimmer/skeleton loading placeholder.\n\nA **scratch** component — built on [Box] from `androidx.compose.foundation`,\nnot derived from any Material 3 widget. Replaces the 5+ per-feature shimmer\nimplementations scattered across the codebase.\n\nThe skeleton renders a solid mid-contrast background with a translucent\nshimmer gradient that animates horizontally from left to right. Callers\ncontrol the shape via the [shape] parameter and dimensions via [modifier].\n\nTypical usage:\n```kotlin\n// Text-line placeholder\nAurumSkeleton(Modifier.fillMaxWidth().height(Aurum.space.s5))\n\n// Avatar placeholder\nAurumSkeleton(\n    modifier = Modifier.size(Aurum.space.s9),\n    shape = CircleShape,\n)\n```\n\n@param modifier the [Modifier] to apply — set width/height here to define\n  the placeholder dimensions\n@param shape the clipping shape — defaults to [Aurum.shape.sm]",
      "signature": "@Composable\nfun AurumSkeleton(\n    modifier: Modifier = Modifier,\n    shape: Shape = Aurum.shape.sm,\n)",
      "params": [
        {
          "name": "modifier",
          "type": "Modifier",
          "default": "Modifier",
          "doc": "the [Modifier] to apply — set width/height here to define"
        },
        {
          "name": "shape",
          "type": "Shape",
          "default": "Aurum.shape.sm",
          "doc": "the clipping shape — defaults to [Aurum.shape.sm]"
        }
      ],
      "previews": [
        "PreviewAurumSkeleton"
      ],
      "figmaNodeId": null,
      "figmaUrl": null,
      "figmaTagUrl": null,
      "codeConnectPath": null,
      "galleryUrl": "https://changejarapp.github.io/aurum-android/component/feedback/AurumSkeleton.html",
      "sourcePath": "aurum/src/main/kotlin/com/jar/app/aurum/component/feedback/AurumSkeleton.kt",
      "intendedUse": "Use as a content-shaped placeholder during the initial fetch on list / detail surfaces, where the eventual layout is known and the wait is multi-second. Keeps the surface visually stable so users perceive less latency. For action-bound short waits use [AurumLoader] instead.",
      "usage": {
        "do": [
          "Match the skeleton dimensions and shape to the eventual content (avatar circle, full-width text-line height) so the swap-in is invisible.",
          "Render multiple skeletons with realistic variation in widths to mimic real text — uniform-width rows look fake.",
          "Keep the shimmer running until real content is ready; never freeze on a static skeleton frame."
        ],
        "dont": [
          "Use for short single-action waits — that's [AurumLoader].",
          "Render skeletons indefinitely on error states — switch to a meaningful empty/error view after a reasonable timeout.",
          "Replace text-line skeletons with bare horizontal lines — pad to the realistic line height so the layout doesn't jump on swap-in."
        ]
      },
      "relatedTokens": [
        "spacing.s4",
        "spacing.s5",
        "spacing.s9",
        "surface.bgSurfaceHighContrast",
        "surface.bgSurfaceMidContrast"
      ]
    },
    {
      "name": "AurumToast",
      "family": "feedback",
      "platforms": [
        "android"
      ],
      "summary": "Aurum's toast primitive — a non-blocking, dismissible status strip surfaced over content.",
      "kdoc": "Aurum's toast primitive — a non-blocking, dismissible status strip\nsurfaced over content. Renders Figma's toast component set at file\nYvIxqu2oTlM6UnkL0OloHc, node 6014:2621.\n\nSix [tone] roles × two [size]s = 12 visual variants. Each tone pairs\na `feedback.*` subtle background with the matching intense\ntext/icon, plus a per-tone leading status glyph from\n[AurumIcons.Status] / [AurumIcons.Selection]. A trailing close\n[AurumIconButton] is always present and fires [onDismiss].\n\nThis is a **presentational** primitive — it does not own the\nshow/hide lifecycle, queue, or auto-dismiss timer. Pair it with\ncaller-owned state for visibility (or with a future\n`rememberToastHostState`-style controller).\n\n@param label the status message rendered inside the strip\n@param onDismiss called when the trailing close icon is tapped\n@param modifier the [Modifier] to apply\n@param tone semantic colour role — defaults to [AurumToastTone.Neutral]\n@param size visual size — defaults to [AurumToastSize.Small]\n@param showLeadingIcon whether to render the per-tone leading status\n  glyph — defaults to `true`. Set `false` when the surrounding\n  context already conveys tone (e.g. inside a coloured banner).\n@param leadingIcon optional glyph override — defaults (`null`) to the\n  tone's status icon. Supply to swap the glyph; it is still tinted to the\n  tone's content colour and sized by the toast. Ignored when\n  [showLeadingIcon] is `false`.",
      "signature": "@Composable\nfun AurumToast(\n    label: String,\n    onDismiss: () -> Unit,\n    modifier: Modifier = Modifier,\n    tone: AurumToastTone = AurumToastTone.Neutral,\n    size: AurumToastSize = AurumToastSize.Small,\n    showLeadingIcon: Boolean = true,\n    leadingIcon: ImageVector? = null,\n)",
      "params": [
        {
          "name": "label",
          "type": "String",
          "default": null,
          "doc": "the status message rendered inside the strip"
        },
        {
          "name": "onDismiss",
          "type": "() -> Unit",
          "default": null,
          "doc": "called when the trailing close icon is tapped"
        },
        {
          "name": "modifier",
          "type": "Modifier",
          "default": "Modifier",
          "doc": "the [Modifier] to apply"
        },
        {
          "name": "tone",
          "type": "AurumToastTone",
          "default": "AurumToastTone.Neutral",
          "doc": "semantic colour role — defaults to [AurumToastTone.Neutral]"
        },
        {
          "name": "size",
          "type": "AurumToastSize",
          "default": "AurumToastSize.Small",
          "doc": "visual size — defaults to [AurumToastSize.Small]"
        },
        {
          "name": "showLeadingIcon",
          "type": "Boolean",
          "default": "true",
          "doc": "whether to render the per-tone leading status"
        },
        {
          "name": "leadingIcon",
          "type": "ImageVector?",
          "default": "null",
          "doc": "optional glyph override — defaults (`null`) to the"
        }
      ],
      "previews": [
        "PreviewToastLargeAllTones",
        "PreviewToastNoLeadingIcon",
        "PreviewToastSmallAllTones"
      ],
      "figmaNodeId": "6014:2621",
      "figmaUrl": "https://www.figma.com/design/YvIxqu2oTlM6UnkL0OloHc/?node-id=6014-2621",
      "figmaTagUrl": "https://www.figma.com/design/YvIxqu2oTlM6UnkL0OloHc/?node-id=6014-2621",
      "codeConnectPath": "aurum/src/main/kotlin/com/jar/app/aurum/component/feedback/AurumToast.figma.kt",
      "galleryUrl": "https://changejarapp.github.io/aurum-android/component/feedback/AurumToast.html",
      "sourcePath": "aurum/src/main/kotlin/com/jar/app/aurum/component/feedback/AurumToast.kt",
      "intendedUse": "Use to surface lightweight, asynchronous feedback tied to a recent user action — \"Saved\", \"Copied\", \"Couldn't fetch, retrying\", \"New version available\". Pick the [tone] from semantic intent: Positive for success, Negative for error, Notice for warnings, Info for neutral context, Brand for product moments, Neutral for system feedback without urgency. For modal confirmations or destructive flows use [com.jar.app.aurum.component.sheet.AurumBottomSheet]; for inline form validation use the input components' built-in error affordances.",
      "usage": {
        "do": [
          "Pick [tone] from semantic intent — never style a Neutral toast red to \"look like an error\", choose [AurumToastTone.Error] instead.",
          "Use [AurumToastSize.Small] for confirmations that fit in 1–4 words; reach for [AurumToastSize.Large] only when the message genuinely needs to wrap.",
          "Pair the toast with a caller-owned visibility state and auto-dismiss timer so it disappears without forcing the user to tap the X."
        ],
        "dont": [
          "Stack two toasts of different tones — show the newer one and let it replace the prior.",
          "Embed buttons / link affordances inside the [label] — the toast is a status strip, not an action surface. If you need an action, prefer [com.jar.app.aurum.component.sheet.AurumBottomSheet] or a contextual CTA next to the originating control.",
          "Use a toast as the only feedback channel for irreversible actions — surface those through a confirmation sheet so the user has a chance to react before the strip fades."
        ]
      },
      "relatedTokens": [
        "elevationTint.highRaised",
        "iconSize.lg",
        "radius.lg",
        "spacing.s2",
        "spacing.s3",
        "spacing.s4",
        "surface.bgPageBase",
        "surface.textDefaultSubtle",
        "typography.bodyMMedium",
        "typography.titleXSSemiBold"
      ]
    },
    {
      "name": "AurumToastHost",
      "family": "feedback",
      "platforms": [
        "android"
      ],
      "summary": "Aurum's toast host — a thin overlay slot that renders the single currently visible [AurumToast] from [hostState] with enter/exit animation.",
      "kdoc": "Aurum's toast host — a thin overlay slot that renders the single\ncurrently visible [AurumToast] from [hostState] with enter/exit\nanimation. Drives auto-dismiss via [AurumToastDuration].\n\nPlace at the bottom of your Compose tree, usually inside a Compose\nScaffold's overlay region or alongside the bottom system inset.\nHoist [AurumToastHostState] alongside a `rememberCoroutineScope()`\nand trigger via `scope.launch { hostState.showToast(\"Saved\") }`.\n\nThis is **codebase-only** — there is no Figma equivalent. It is\norchestration glue, not a visual primitive. The visual is\n[AurumToast].\n\n@param hostState state holder (`rememberAurumToastHostState()`)\n@param modifier the [Modifier] to apply to the animation wrapper\n@param toast renderer slot. Defaults to the canonical [AurumToast]\n  with [Modifier.fillMaxWidth] and 16 dp horizontal padding. Override\n  to inject custom width / placement.",
      "signature": "@Composable\nfun AurumToastHost(\n    hostState: AurumToastHostState,\n    modifier: Modifier = Modifier,\n    toast: @Composable (AurumToastData) -> Unit = { DefaultToastRender(it) },\n)",
      "params": [
        {
          "name": "hostState",
          "type": "AurumToastHostState",
          "default": null,
          "doc": "state holder (`rememberAurumToastHostState()`)"
        },
        {
          "name": "modifier",
          "type": "Modifier",
          "default": "Modifier",
          "doc": "the [Modifier] to apply to the animation wrapper"
        },
        {
          "name": "toast",
          "type": "@Composable (AurumToastData) -> Unit",
          "default": "{ DefaultToastRender(it) }",
          "doc": "renderer slot. Defaults to the canonical [AurumToast]"
        }
      ],
      "previews": [
        "PreviewAurumToastHost"
      ],
      "figmaNodeId": null,
      "figmaUrl": null,
      "figmaTagUrl": null,
      "codeConnectPath": null,
      "galleryUrl": "https://changejarapp.github.io/aurum-android/component/feedback/AurumToastHost.html",
      "sourcePath": "aurum/src/main/kotlin/com/jar/app/aurum/component/feedback/AurumToastHost.kt",
      "intendedUse": "Host slot for all in-app, programmatic notifications: confirmations, validation feedback, sync results, retry prompts. One host per top-level Compose tree (the screen / nav graph host). Replaces system `Toast.makeText` and ad-hoc Compose snackbars in feature code.",
      "usage": {
        "do": [
          "Pair with a `rememberCoroutineScope()` so feature code can `scope.launch { hostState.showToast(...) }` from click handlers / flow collectors.",
          "Place the host inside the same `Box`/Scaffold that owns the screen's bottom system-insets — the host doesn't pad insets itself.",
          "Use [AurumToastDuration.Short] for confirmations, [Long] for messages that need reading, [Indefinite] for actions awaiting an explicit dismiss."
        ],
        "dont": [
          "Render an [AurumToast] outside a host when the message is programmatic / asynchronous — without the queue + timer you'll either drop messages or stack them.",
          "Mount more than one [AurumToastHost] per screen — concurrent hosts fight for the bottom slot and produce racy overlays.",
          "Hand the host its own `Modifier.fillMaxSize()` — it occupies only the toast's natural height. Wrap in `Box(Modifier.fillMaxSize())` and align it via `Modifier.align(Alignment.BottomCenter)` if you want bottom-edge anchoring."
        ]
      },
      "relatedTokens": [
        "spacing.s5"
      ]
    },
    {
      "name": "AurumAmountInput",
      "family": "field",
      "platforms": [
        "android"
      ],
      "summary": "Aurum's currency-prefixed numeric input.",
      "kdoc": "Aurum's currency-prefixed numeric input. Delegates to [AurumTextField]\nand adds a persistent currency leading slot plus an optional trailing\nslot for a derived equivalent (e.g. gold grams). Formatting of [value]\nis the caller's responsibility — pass a display-ready string.\n\n@param value the current text value — already formatted for display\n@param onValueChange called with the raw string the user typed (no automatic formatting)\n@param modifier applied to the outer column\n@param label optional label displayed above the field\n@param helperText optional assistive text shown below the field\n@param errorText when non-null, the field shows error styling and this replaces [helperText]\n@param successText when non-null (and no error), the field shows success styling\n@param currencySymbol the leading currency glyph — defaults to `\"₹\"`\n@param suffixText optional trailing equivalent; hidden while [loading]\n@param enabled whether the field accepts input\n@param readOnly focusable but not editable; also forced read-only while [loading]\n@param loading when `true`, the field is read-only and a small inline loader replaces [suffixText]",
      "signature": "@Composable\nfun AurumAmountInput(\n    value: String,\n    onValueChange: (String) -> Unit,\n    modifier: Modifier = Modifier,\n    label: String? = null,\n    helperText: String? = null,\n    errorText: String? = null,\n    successText: String? = null,\n    currencySymbol: String = \"₹\",\n    suffixText: String? = null,\n    enabled: Boolean = true,\n    readOnly: Boolean = false,\n    loading: Boolean = false,\n)",
      "params": [
        {
          "name": "value",
          "type": "String",
          "default": null,
          "doc": "the current text value — already formatted for display"
        },
        {
          "name": "onValueChange",
          "type": "(String) -> Unit",
          "default": null,
          "doc": "called with the raw string the user typed (no automatic formatting)"
        },
        {
          "name": "modifier",
          "type": "Modifier",
          "default": "Modifier",
          "doc": "applied to the outer column"
        },
        {
          "name": "label",
          "type": "String?",
          "default": "null",
          "doc": "optional label displayed above the field"
        },
        {
          "name": "helperText",
          "type": "String?",
          "default": "null",
          "doc": "optional assistive text shown below the field"
        },
        {
          "name": "errorText",
          "type": "String?",
          "default": "null",
          "doc": "when non-null, the field shows error styling and this replaces [helperText]"
        },
        {
          "name": "successText",
          "type": "String?",
          "default": "null",
          "doc": "when non-null (and no error), the field shows success styling"
        },
        {
          "name": "currencySymbol",
          "type": "String",
          "default": "\"₹\"",
          "doc": "the leading currency glyph — defaults to `\"₹\"`"
        },
        {
          "name": "suffixText",
          "type": "String?",
          "default": "null",
          "doc": "optional trailing equivalent; hidden while [loading]"
        },
        {
          "name": "enabled",
          "type": "Boolean",
          "default": "true",
          "doc": "whether the field accepts input"
        },
        {
          "name": "readOnly",
          "type": "Boolean",
          "default": "false",
          "doc": "focusable but not editable; also forced read-only while [loading]"
        },
        {
          "name": "loading",
          "type": "Boolean",
          "default": "false",
          "doc": "when `true`, the field is read-only and a small inline loader replaces [suffixText]"
        }
      ],
      "previews": [
        "PreviewAurumAmountInputDefault",
        "PreviewAurumAmountInputDisabled",
        "PreviewAurumAmountInputError",
        "PreviewAurumAmountInputLoading",
        "PreviewAurumAmountInputReadOnly",
        "PreviewAurumAmountInputSuccess",
        "PreviewAurumAmountInputWithSuffix",
        "PreviewAurumAmountInputWithValue"
      ],
      "figmaNodeId": "5080:261",
      "figmaUrl": "https://www.figma.com/design/YvIxqu2oTlM6UnkL0OloHc/?node-id=5080-261",
      "figmaTagUrl": "https://www.figma.com/design/YvIxqu2oTlM6UnkL0OloHc/?node-id=5080-261",
      "codeConnectPath": "aurum/src/main/kotlin/com/jar/app/aurum/component/field/AurumAmountInput.figma.kt",
      "galleryUrl": "https://changejarapp.github.io/aurum-android/component/field/AurumAmountInput.html",
      "sourcePath": "aurum/src/main/kotlin/com/jar/app/aurum/component/field/AurumAmountInput.kt",
      "intendedUse": "Use whenever the user is entering a monetary value — buy-gold amount, top-up, transfer, withdrawal target. The currency prefix and numeric keyboard make money-vs-text intent unambiguous.",
      "usage": {
        "do": [
          "Pre-format the displayed value in the caller (`\"99,999\"`, `\"1,00,000\"`) and pass the formatted string straight to [value].",
          "Use [suffixText] for a derived equivalent (gold grams, USD equivalent) — keep the leading slot for the *primary* currency.",
          "Set [loading] while the equivalent value (e.g. live gold rate) is being fetched — this both blocks edits and signals progress."
        ],
        "dont": [
          "Pass an unformatted long like `\"99999\"` if the design shows a grouped amount — format upstream with the user's locale.",
          "Use this for non-monetary numeric input — reach for [AurumTextField] with [KeyboardType.Number] instead.",
          "Render two amount inputs side-by-side competing for focus — monetary entry should be the hero of its surface."
        ]
      },
      "relatedTokens": [
        "iconSize.xl",
        "interactive.iconNegativeNormal",
        "interactive.iconPositiveNormal",
        "spacing.s2",
        "surface.textDefaultDisabled",
        "surface.textDefaultNormal",
        "surface.textDefaultSubtle",
        "typography.bodyMRegular",
        "typography.numL",
        "typography.numXL"
      ]
    },
    {
      "name": "AurumOtpInput",
      "family": "field",
      "platforms": [
        "android"
      ],
      "summary": "Aurum's OTP (one-time password) input component.",
      "kdoc": "Aurum's OTP (one-time password) input component.\n\nRenders a row of underline-style digit cells that the user fills sequentially.\nA single hidden [BasicTextField] captures keyboard input; the visible cells\nare decorative columns (digit + coloured underline bar).\n\nThis is a **scratch** component — built entirely on\n`androidx.compose.foundation` with zero `material3` imports.\n\n@param value the current OTP string (digits only, length <= [length].count)\n@param onValueChange callback invoked when the user types or deletes a digit\n@param modifier the [Modifier] to apply to the outer column\n@param length the number of digit cells — 4 or 6\n@param label optional label text displayed above the cells\n@param helperText optional helper/error/success text displayed below the cells\n@param validationState controls underline and helper text colour\n@param enabled whether the input accepts user interaction\n@param onComplete optional callback invoked once all digits have been entered",
      "signature": "@Composable\nfun AurumOtpInput(\n    value: String,\n    onValueChange: (String) -> Unit,\n    modifier: Modifier = Modifier,\n    length: AurumOtpLength = AurumOtpLength.Six,\n    label: String? = null,\n    helperText: String? = null,\n    validationState: AurumOtpValidationState = AurumOtpValidationState.None,\n    enabled: Boolean = true,\n    onComplete: ((String) -> Unit)? = null,\n)",
      "params": [
        {
          "name": "value",
          "type": "String",
          "default": null,
          "doc": "the current OTP string (digits only, length <= [length].count)"
        },
        {
          "name": "onValueChange",
          "type": "(String) -> Unit",
          "default": null,
          "doc": "callback invoked when the user types or deletes a digit"
        },
        {
          "name": "modifier",
          "type": "Modifier",
          "default": "Modifier",
          "doc": "the [Modifier] to apply to the outer column"
        },
        {
          "name": "length",
          "type": "AurumOtpLength",
          "default": "AurumOtpLength.Six",
          "doc": "the number of digit cells — 4 or 6"
        },
        {
          "name": "label",
          "type": "String?",
          "default": "null",
          "doc": "optional label text displayed above the cells"
        },
        {
          "name": "helperText",
          "type": "String?",
          "default": "null",
          "doc": "optional helper/error/success text displayed below the cells"
        },
        {
          "name": "validationState",
          "type": "AurumOtpValidationState",
          "default": "AurumOtpValidationState.None",
          "doc": "controls underline and helper text colour"
        },
        {
          "name": "enabled",
          "type": "Boolean",
          "default": "true",
          "doc": "whether the input accepts user interaction"
        },
        {
          "name": "onComplete",
          "type": "((String) -> Unit)?",
          "default": "null",
          "doc": "optional callback invoked once all digits have been entered"
        }
      ],
      "previews": [
        "PreviewOtpFourDigit",
        "PreviewOtpSixDigit"
      ],
      "figmaNodeId": "4975:1630",
      "figmaUrl": "https://www.figma.com/design/YvIxqu2oTlM6UnkL0OloHc/?node-id=4975-1630",
      "figmaTagUrl": "https://www.figma.com/design/YvIxqu2oTlM6UnkL0OloHc/?node-id=4975-1630",
      "codeConnectPath": "aurum/src/main/kotlin/com/jar/app/aurum/component/field/AurumOtpInput.figma.kt",
      "galleryUrl": "https://changejarapp.github.io/aurum-android/component/field/AurumOtpInput.html",
      "sourcePath": "aurum/src/main/kotlin/com/jar/app/aurum/component/field/AurumOtpInput.kt",
      "intendedUse": "Use whenever the user must enter a numeric one-time password — login OTP, payment authorisation, transaction confirmation. The cell count ([Length.Four] or [Length.Six]) should match the OTP length your backend issues. Don't compose digit cells from `AurumTextField` — this component already handles paste, autofill, and resend-timer UX correctly.",
      "usage": {
        "do": [
          "Use `validationState = Error` together with a meaningful `helperText` to guide retries — never silently mark the OTP wrong.",
          "Track resend countdown with `validationState = Timer` so the helper colour reflects the wait state without changing layout.",
          "Hook `onComplete` to auto-submit when all cells are filled — saves the user a tap."
        ],
        "dont": [
          "Pass non-digit characters via `onValueChange`; the cells render but the underlying keyboard is numeric and behaviour is undefined.",
          "Render multiple OTP inputs on one screen — there's only ever one active OTP context.",
          "Use this for non-numeric verification (e.g. invitation codes); use `AurumTextField` instead."
        ]
      },
      "relatedTokens": [
        "feedback.bgPositiveIntense",
        "feedback.borderNegativeIntense",
        "feedback.textNegativeIntense",
        "feedback.textPositiveIntense",
        "spacing.s10",
        "spacing.s2",
        "spacing.s4",
        "spacing.s5",
        "spacing.s7",
        "surface.borderBrandNormal",
        "surface.borderSurfaceHighContrast",
        "surface.borderSurfaceLowContrast",
        "surface.borderSurfaceMidContrast",
        "surface.textDefaultDisabled",
        "surface.textDefaultNormal",
        "surface.textDefaultSubtle",
        "typography.bodyLRegular",
        "typography.labelLMedium",
        "typography.titleSSemiBold"
      ]
    },
    {
      "name": "AurumPhoneNumberInput",
      "family": "field",
      "platforms": [
        "android"
      ],
      "summary": "A phone-number-specific text field: country code + divider + digit input.",
      "kdoc": "A phone-number-specific text field: country code + divider + digit input.\n\nDelegates to [AurumTextField] with a fixed leading slot that renders an\noptional [flag] composable, the [countryCode] text, and a thin vertical\ndivider. Defaults to a phone keyboard and a 10-digit max length; input\nis silently filtered to digits only. Surfaces a trailing validation icon\n(success / error) or a loading spinner driven by [isSuccess] / [isError] /\n[isLoading], matching the Figma `validationState` x `state` variants.\n\n@param value the current phone number (digits only)\n@param onValueChange callback invoked when the input changes\n@param modifier the [Modifier] to apply\n@param countryCode the country-code text shown in the leading slot,\n  e.g. `\"+91\"` — defaults to `\"+91\"`\n@param flag optional composable rendered before [countryCode]; supply a\n  country flag image here (nothing is shown when `null`)\n@param label optional field label — same semantics as [AurumTextField]\n@param placeholder placeholder text — defaults to `\"Phone Number\"`\n@param helperText assistive text below the field\n@param errorText error text — when non-null the field shows error styling\n@param successText success text — when non-null (and no error) the field\n  shows success styling\n@param isError whether the field is in error state\n@param isSuccess whether the field is in success state\n@param isLoading whether the field shows a trailing loading spinner\n@param enabled whether the field accepts input\n@param readOnly whether the field is read-only\n@param maxLength max number of digits accepted — defaults to `10`\n@param keyboardActions IME action callbacks",
      "signature": "@Composable\nfun AurumPhoneNumberInput(\n    value: String,\n    onValueChange: (String) -> Unit,\n    modifier: Modifier = Modifier,\n    countryCode: String = \"+91\",\n    flag: (@Composable () -> Unit)? = null,\n    label: String? = null,\n    placeholder: String = \"Phone Number\",\n    helperText: String? = null,\n    errorText: String? = null,\n    successText: String? = null,\n    isError: Boolean = errorText != null,\n    isSuccess: Boolean = successText != null && !isError,\n    isLoading: Boolean = false,\n    enabled: Boolean = true,\n    readOnly: Boolean = false,\n    maxLength: Int = 10,\n    keyboardActions: KeyboardActions = KeyboardActions.Default,\n)",
      "params": [
        {
          "name": "value",
          "type": "String",
          "default": null,
          "doc": "the current phone number (digits only)"
        },
        {
          "name": "onValueChange",
          "type": "(String) -> Unit",
          "default": null,
          "doc": "callback invoked when the input changes"
        },
        {
          "name": "modifier",
          "type": "Modifier",
          "default": "Modifier",
          "doc": "the [Modifier] to apply"
        },
        {
          "name": "countryCode",
          "type": "String",
          "default": "\"+91\"",
          "doc": "the country-code text shown in the leading slot,"
        },
        {
          "name": "flag",
          "type": "(@Composable () -> Unit)?",
          "default": "null",
          "doc": "optional composable rendered before [countryCode]; supply a"
        },
        {
          "name": "label",
          "type": "String?",
          "default": "null",
          "doc": "optional field label — same semantics as [AurumTextField]"
        },
        {
          "name": "placeholder",
          "type": "String",
          "default": "\"Phone Number\"",
          "doc": "placeholder text — defaults to `\"Phone Number\"`"
        },
        {
          "name": "helperText",
          "type": "String?",
          "default": "null",
          "doc": "assistive text below the field"
        },
        {
          "name": "errorText",
          "type": "String?",
          "default": "null",
          "doc": "error text — when non-null the field shows error styling"
        },
        {
          "name": "successText",
          "type": "String?",
          "default": "null",
          "doc": "success text — when non-null (and no error) the field"
        },
        {
          "name": "isError",
          "type": "Boolean",
          "default": "errorText != null",
          "doc": "whether the field is in error state"
        },
        {
          "name": "isSuccess",
          "type": "Boolean",
          "default": "successText != null && !isError",
          "doc": "whether the field is in success state"
        },
        {
          "name": "isLoading",
          "type": "Boolean",
          "default": "false",
          "doc": "whether the field shows a trailing loading spinner"
        },
        {
          "name": "enabled",
          "type": "Boolean",
          "default": "true",
          "doc": "whether the field accepts input"
        },
        {
          "name": "readOnly",
          "type": "Boolean",
          "default": "false",
          "doc": "whether the field is read-only"
        },
        {
          "name": "maxLength",
          "type": "Int",
          "default": "10",
          "doc": "max number of digits accepted — defaults to `10`"
        },
        {
          "name": "keyboardActions",
          "type": "KeyboardActions",
          "default": "KeyboardActions.Default",
          "doc": "IME action callbacks"
        }
      ],
      "previews": [
        "PreviewAurumPhoneNumberInputDefault",
        "PreviewAurumPhoneNumberInputDisabled",
        "PreviewAurumPhoneNumberInputError",
        "PreviewAurumPhoneNumberInputFilled",
        "PreviewAurumPhoneNumberInputLoading",
        "PreviewAurumPhoneNumberInputSuccess",
        "PreviewAurumPhoneNumberInputWithFlag"
      ],
      "figmaNodeId": "4904:2455",
      "figmaUrl": "https://www.figma.com/design/YvIxqu2oTlM6UnkL0OloHc/?node-id=4904-2455",
      "figmaTagUrl": "https://www.figma.com/design/YvIxqu2oTlM6UnkL0OloHc/?node-id=4904-2455",
      "codeConnectPath": "aurum/src/main/kotlin/com/jar/app/aurum/component/field/AurumPhoneNumberInput.figma.kt",
      "galleryUrl": "https://changejarapp.github.io/aurum-android/component/field/AurumPhoneNumberInput.html",
      "sourcePath": "aurum/src/main/kotlin/com/jar/app/aurum/component/field/AurumPhoneNumberInput.kt",
      "intendedUse": "Use whenever capturing a phone number that needs an E.164-style country prefix — login, KYC, recipient details. The leading country-code slot is always visible so users see the dialing context even before typing. For bare numeric capture without country context, use [AurumTextField] with a numeric keyboard.",
      "usage": {
        "do": [
          "Default `countryCode = \"+91\"` for India-first surfaces; pass an explicit value for international flows.",
          "Pair with a country picker (when available) that updates `countryCode` + `flag` together — never let one drift from the other.",
          "Use the `errorText` channel for \"phone already registered\" / \"invalid number\" feedback — keep the channel consistent with [AurumTextField]."
        ],
        "dont": [
          "Bypass the country code — bare digit input loses E.164 context downstream and creates locale ambiguity.",
          "Pre-format the value with spaces / hyphens; the underlying field stores raw digits and formatting belongs in display only.",
          "Use this for OTP — [AurumOtpInput] is the right primitive for numeric one-time codes."
        ]
      },
      "relatedTokens": [
        "borderWidth.sm",
        "surface.borderSurfaceMidContrast",
        "surface.textDefaultSubtle",
        "typography.titleMBold",
        "typography.titleSBold",
        "visual.green600",
        "visual.orange500"
      ]
    },
    {
      "name": "AurumSearchField",
      "family": "field",
      "platforms": [
        "android"
      ],
      "summary": "A search-specific text field with a leading search icon and an optional trailing clear button.",
      "kdoc": "A search-specific text field with a leading search icon and an optional\ntrailing clear button.\n\nDelegates to [AurumTextField] internally, applying a pill shape\n([Aurum.shape.pill]) and `singleLine = true` to produce a compact\nsearch-bar appearance.\n\nThe clear icon appears only when [value] is not empty **and** [onClear]\nis provided.\n\n@param value the current search query\n@param onValueChange callback invoked when the query changes\n@param modifier the [Modifier] to apply\n@param placeholder placeholder text — defaults to \"Search\"\n@param enabled whether the field accepts input\n@param onClear optional callback invoked when the clear button is tapped;\n  when `null` no clear button is shown",
      "signature": "@Composable\nfun AurumSearchField(\n    value: String,\n    onValueChange: (String) -> Unit,\n    modifier: Modifier = Modifier,\n    placeholder: String = \"Search\",\n    enabled: Boolean = true,\n    onClear: (() -> Unit)? = null,\n)",
      "params": [
        {
          "name": "value",
          "type": "String",
          "default": null,
          "doc": "the current search query"
        },
        {
          "name": "onValueChange",
          "type": "(String) -> Unit",
          "default": null,
          "doc": "callback invoked when the query changes"
        },
        {
          "name": "modifier",
          "type": "Modifier",
          "default": "Modifier",
          "doc": "the [Modifier] to apply"
        },
        {
          "name": "placeholder",
          "type": "String",
          "default": "\"Search\"",
          "doc": "placeholder text — defaults to \"Search\""
        },
        {
          "name": "enabled",
          "type": "Boolean",
          "default": "true",
          "doc": "whether the field accepts input"
        },
        {
          "name": "onClear",
          "type": "(() -> Unit)?",
          "default": "null",
          "doc": "optional callback invoked when the clear button is tapped;"
        }
      ],
      "previews": [
        "PreviewAurumSearchFieldDefault",
        "PreviewAurumSearchFieldDisabled",
        "PreviewAurumSearchFieldFilled",
        "PreviewAurumSearchFieldWithClear"
      ],
      "figmaNodeId": null,
      "figmaUrl": null,
      "figmaTagUrl": null,
      "codeConnectPath": null,
      "galleryUrl": "https://changejarapp.github.io/aurum-android/component/field/AurumSearchField.html",
      "sourcePath": "aurum/src/main/kotlin/com/jar/app/aurum/component/field/AurumSearchField.kt",
      "intendedUse": "Use as an in-screen search box at the top of a list / directory surface. The pill shape + leading magnifier glyph is the canonical \"search\" affordance — users recognise it instantly. For filtering by category use a row of [AurumChip]s instead; for free-form text input use [AurumTextField].",
      "usage": {
        "do": [
          "Wire `onValueChange` to a debounced query (250–400 ms) — search-as-you-type without flooding the backend.",
          "Provide `onClear` whenever the search has any state worth clearing — users expect the X to wipe the query and reset results.",
          "Anchor at the top of the scrollable surface; sticky-on-scroll if the list is long."
        ],
        "dont": [
          "Use as a generic single-line input — the pill shape signals search semantics; reusing it for unrelated text confuses users.",
          "Submit on Enter without also surfacing real-time results; users expect search to feel live.",
          "Stack two AurumSearchFields on the same surface — there should be one search context at a time."
        ]
      },
      "relatedTokens": [
        "surface.iconDefaultNormal",
        "surface.iconDefaultSubtle"
      ]
    },
    {
      "name": "AurumTextField",
      "family": "field",
      "platforms": [
        "android"
      ],
      "summary": "Aurum's primary text-input field.",
      "kdoc": "Aurum's primary text-input field.\n\nAnatomy per Figma: an optional static [label] rendered **above** the field\n(it never floats into the outline — Aurum deliberately opts out of the\nMaterial floating-label behaviour), the outlined input box, and an optional\nhelper / error / success message below. The [placeholder] sits inside the\nbox whenever the value is empty, focused or not, and simply disappears as\nthe user types.\n\nWhen [errorText] is non-null the field enters the error state automatically.\nWhen [successText] is non-null (and [errorText] is null) the field enters\nthe success state with a green border and helper. Error / success / loading\nstates show their trailing status affordance automatically unless the\ncaller supplies [trailing].\n\nAn optional character counter is shown in the support row when [maxLength]\nis set to a positive value. Input exceeding [maxLength] is silently\ntruncated in [onValueChange].\n\n@param value the current text field value\n@param onValueChange callback invoked when the text changes\n@param modifier the [Modifier] to apply to the outer column\n@param label optional static title rendered above the field\n@param placeholder optional placeholder shown inside the field while empty\n@param helperText optional assistive text shown below the field\n@param errorText optional error text — when non-null the field shows\n  error styling and this text replaces [helperText]\n@param successText optional success text — when non-null (and no error)\n  the field shows success styling with a green border\n@param isError whether the field is in error state — defaults to\n  `errorText != null`\n@param isSuccess whether the field is in success state — defaults to\n  `successText != null && !isError`\n@param isLoading whether the field shows a trailing loading spinner\n@param leading optional composable displayed at the start of the field\n@param trailing optional composable displayed at the end of the field —\n  when null, the loading / error / success trailing icon is derived\n@param enabled whether the field accepts input\n@param readOnly whether the field is read-only (focusable but not editable)\n@param singleLine whether the field is constrained to a single line\n@param maxLines maximum number of visible lines\n@param maxLength optional maximum character count — when positive, input is\n  truncated and a counter is shown below the field\n@param keyboardOptions software keyboard configuration\n@param keyboardActions IME action callbacks\n@param visualTransformation visual transformation applied to the input\n@param shape the outline shape — defaults to 12 dp rounded corners\n@param textStyle the typography for the entered value — defaults to\n  [Aurum.type.bodyLMedium]; specialised inputs (e.g. amount entry) pass a\n  larger numeric style",
      "signature": "@Composable\nfun AurumTextField(\n    value: String,\n    onValueChange: (String) -> Unit,\n    modifier: Modifier = Modifier,\n    label: String? = null,\n    placeholder: String? = null,\n    helperText: String? = null,\n    errorText: String? = null,\n    successText: String? = null,\n    isError: Boolean = errorText != null,\n    isSuccess: Boolean = successText != null && !isError,\n    isLoading: Boolean = false,\n    leading: (@Composable () -> Unit)? = null,\n    trailing: (@Composable () -> Unit)? = null,\n    enabled: Boolean = true,\n    readOnly: Boolean = false,\n    singleLine: Boolean = true,\n    maxLines: Int = if (singleLine) 1 else Int.MAX_VALUE,\n    maxLength: Int = Int.MAX_VALUE,\n    keyboardOptions: KeyboardOptions = KeyboardOptions.Default,\n    keyboardActions: KeyboardActions = KeyboardActions.Default,\n    visualTransformation: VisualTransformation = VisualTransformation.None,\n    shape: Shape = RoundedCornerShape(12.dp),\n    textStyle: TextStyle = Aurum.type.bodyLMedium,\n)",
      "params": [
        {
          "name": "value",
          "type": "String",
          "default": null,
          "doc": "the current text field value"
        },
        {
          "name": "onValueChange",
          "type": "(String) -> Unit",
          "default": null,
          "doc": "callback invoked when the text changes"
        },
        {
          "name": "modifier",
          "type": "Modifier",
          "default": "Modifier",
          "doc": "the [Modifier] to apply to the outer column"
        },
        {
          "name": "label",
          "type": "String?",
          "default": "null",
          "doc": "optional static title rendered above the field"
        },
        {
          "name": "placeholder",
          "type": "String?",
          "default": "null",
          "doc": "optional placeholder shown inside the field while empty"
        },
        {
          "name": "helperText",
          "type": "String?",
          "default": "null",
          "doc": "optional assistive text shown below the field"
        },
        {
          "name": "errorText",
          "type": "String?",
          "default": "null",
          "doc": "optional error text — when non-null the field shows"
        },
        {
          "name": "successText",
          "type": "String?",
          "default": "null",
          "doc": "optional success text — when non-null (and no error)"
        },
        {
          "name": "isError",
          "type": "Boolean",
          "default": "errorText != null",
          "doc": "whether the field is in error state — defaults to"
        },
        {
          "name": "isSuccess",
          "type": "Boolean",
          "default": "successText != null && !isError",
          "doc": "whether the field is in success state — defaults to"
        },
        {
          "name": "isLoading",
          "type": "Boolean",
          "default": "false",
          "doc": "whether the field shows a trailing loading spinner"
        },
        {
          "name": "leading",
          "type": "(@Composable () -> Unit)?",
          "default": "null",
          "doc": "optional composable displayed at the start of the field"
        },
        {
          "name": "trailing",
          "type": "(@Composable () -> Unit)?",
          "default": "null",
          "doc": "optional composable displayed at the end of the field —"
        },
        {
          "name": "enabled",
          "type": "Boolean",
          "default": "true",
          "doc": "whether the field accepts input"
        },
        {
          "name": "readOnly",
          "type": "Boolean",
          "default": "false",
          "doc": "whether the field is read-only (focusable but not editable)"
        },
        {
          "name": "singleLine",
          "type": "Boolean",
          "default": "true",
          "doc": "whether the field is constrained to a single line"
        },
        {
          "name": "maxLines",
          "type": "Int",
          "default": "if (singleLine) 1 else Int.MAX_VALUE",
          "doc": "maximum number of visible lines"
        },
        {
          "name": "maxLength",
          "type": "Int",
          "default": "Int.MAX_VALUE",
          "doc": "optional maximum character count — when positive, input is"
        },
        {
          "name": "keyboardOptions",
          "type": "KeyboardOptions",
          "default": "KeyboardOptions.Default",
          "doc": "software keyboard configuration"
        },
        {
          "name": "keyboardActions",
          "type": "KeyboardActions",
          "default": "KeyboardActions.Default",
          "doc": "IME action callbacks"
        },
        {
          "name": "visualTransformation",
          "type": "VisualTransformation",
          "default": "VisualTransformation.None",
          "doc": "visual transformation applied to the input"
        },
        {
          "name": "shape",
          "type": "Shape",
          "default": "RoundedCornerShape(12.dp)",
          "doc": "the outline shape — defaults to 12 dp rounded corners"
        },
        {
          "name": "textStyle",
          "type": "TextStyle",
          "default": "Aurum.type.bodyLMedium",
          "doc": "the typography for the entered value — defaults to"
        }
      ],
      "previews": [
        "PreviewAurumTextFieldCharCounter",
        "PreviewAurumTextFieldDefault",
        "PreviewAurumTextFieldDisabled",
        "PreviewAurumTextFieldError",
        "PreviewAurumTextFieldFilled",
        "PreviewAurumTextFieldLoading",
        "PreviewAurumTextFieldPassword",
        "PreviewAurumTextFieldReadOnly",
        "PreviewAurumTextFieldSuccess",
        "PreviewAurumTextFieldWithIcons"
      ],
      "figmaNodeId": "4623:373",
      "figmaUrl": "https://www.figma.com/design/YvIxqu2oTlM6UnkL0OloHc/?node-id=4623-373",
      "figmaTagUrl": "https://www.figma.com/design/YvIxqu2oTlM6UnkL0OloHc/?node-id=4623-373",
      "codeConnectPath": "aurum/src/main/kotlin/com/jar/app/aurum/component/field/AurumTextField.figma.kt",
      "galleryUrl": "https://changejarapp.github.io/aurum-android/component/field/AurumTextField.html",
      "sourcePath": "aurum/src/main/kotlin/com/jar/app/aurum/component/field/AurumTextField.kt",
      "intendedUse": "Use for free-text capture on form surfaces — name, address, notes, message body, anything that maps cleanly to a string. For specialised inputs reach for the dedicated component: [AurumOtpInput] for numeric one-time passwords, [AurumPhoneNumberInput] for phone numbers with country prefix, [AurumSearchField] for in-screen search boxes.",
      "usage": {
        "do": [
          "Pair `errorText` with [AurumColors.feedback]-tinted helper styling and a clear validation message — never silently mark fields wrong.",
          "Set `maxLength` together with the character counter for any field with backend-enforced length limits — gives users instant feedback.",
          "Use `KeyboardOptions(keyboardType = …)` to surface the right keyboard for the data shape (numeric, email, URL)."
        ],
        "dont": [
          "Use this for OTP entry — [AurumOtpInput] handles paste, autofill, and resend-timer UX correctly.",
          "Wrap `material3.OutlinedTextField` directly anywhere in feature code — its floating label and border notch contradict the Aurum anatomy.",
          "Override `colors`/`shape` with raw values; recolour through validation state (`isError` / `isSuccess`) instead."
        ]
      },
      "relatedTokens": [
        "borderWidth.lg",
        "borderWidth.md",
        "feedback.borderNegativeIntense",
        "feedback.borderPositiveIntense",
        "feedback.textNegativeIntense",
        "feedback.textPositiveIntense",
        "iconSize.xl",
        "interactive.bgPrimaryDefault",
        "interactive.borderNeutralHighlighted",
        "interactive.borderPrimaryDefault",
        "interactive.iconNegativeNormal",
        "interactive.iconPositiveNormal",
        "spacing.s3",
        "spacing.s4",
        "spacing.s5",
        "surface.bgSurfaceLowContrast",
        "surface.bgSurfaceMidContrast",
        "surface.borderSurfaceMidContrast",
        "surface.iconDefaultSubtle",
        "surface.textDefaultDisabled",
        "surface.textDefaultNormal",
        "surface.textDefaultSubtle",
        "typography.bodyLMedium",
        "typography.bodySMedium",
        "typography.titleSSemiBold"
      ]
    },
    {
      "name": "AurumIcon",
      "family": "icon",
      "platforms": [
        "android"
      ],
      "summary": "Aurum's icon primitive.",
      "kdoc": "Aurum's icon primitive.\n\nRenders an [ImageVector] at a configurable [size] (defaults to\n[Aurum.iconSize.xl] = 24 dp, the canonical icon size in the Figma icon\nlibrary) with an optional [tint] colour filter.\n\nThis is a **scratch** component — built on [Image] from\n`androidx.compose.foundation`, not on `material3.Icon`.\n\n@param imageVector the icon to draw\n@param contentDescription accessibility description — `null` means\n  decorative (use sparingly)\n@param modifier the [Modifier] to apply\n@param size the icon size — defaults to [Aurum.iconSize.xl] (24 dp)\n@param tint the colour filter applied to the icon. Defaults to the\n  ambient [LocalContentColor] (set by surfaces like [AurumButton] for\n  their leading/trailing slots), falling back to\n  [Aurum.colors.surface.iconDefaultNormal] when no surface provides one.",
      "signature": "@Composable\nfun AurumIcon(\n    imageVector: ImageVector,\n    contentDescription: String?,\n    modifier: Modifier = Modifier,\n    size: Dp = Aurum.iconSize.xl,\n    tint: Color = LocalContentColor.current.takeOrElse { Aurum.colors.surface.iconDefaultNormal },\n)",
      "params": [
        {
          "name": "imageVector",
          "type": "ImageVector",
          "default": null,
          "doc": "the icon to draw"
        },
        {
          "name": "contentDescription",
          "type": "String?",
          "default": null,
          "doc": "accessibility description — `null` means"
        },
        {
          "name": "modifier",
          "type": "Modifier",
          "default": "Modifier",
          "doc": "the [Modifier] to apply"
        },
        {
          "name": "size",
          "type": "Dp",
          "default": "Aurum.iconSize.xl",
          "doc": "the icon size — defaults to [Aurum.iconSize.xl] (24 dp)"
        },
        {
          "name": "tint",
          "type": "Color",
          "default": "LocalContentColor.current.takeOrElse { Aurum.colors.surface.iconDefaultNormal }",
          "doc": "the colour filter applied to the icon. Defaults to the"
        }
      ],
      "previews": [],
      "figmaNodeId": null,
      "figmaUrl": null,
      "figmaTagUrl": null,
      "codeConnectPath": null,
      "galleryUrl": "https://changejarapp.github.io/aurum-android/component/icon/AurumIcon.html",
      "sourcePath": "aurum/src/main/kotlin/com/jar/app/aurum/component/icon/AurumIcon.kt",
      "intendedUse": "Use to render any `AurumIcons.*` ImageVector with Aurum-token tinting. The 24 dp default matches Figma's canonical icon size; pass `Aurum.iconSize.*` tokens for other scales. For interactive tap targets wrap in [AurumIconButton]; for decorative inline glyphs inside text, render via [AurumText] with an inline icon span.",
      "usage": {
        "do": [
          "Provide a meaningful `contentDescription` whenever the icon conveys information not already present in nearby text — screen readers depend on it.",
          "Use `Aurum.colors.surface.icon*` tokens for `tint` — they pair correctly with the surrounding background contrast.",
          "Pick the `size` from `Aurum.iconSize.*` (sm / md / lg / xl / xxl); arbitrary dp values break the visual rhythm."
        ],
        "dont": [
          "Use raw drawable resources or `painterResource` directly — `AurumIcons.*` is the canonical entry point and round-trips with the manifest's icon catalog.",
          "Tint with raw `Color()` literals; recolour through `Aurum.colors.*` so light/dark/state variants flow.",
          "Wrap `material3.Icon` directly anywhere in feature code; that's exactly what this primitive prevents."
        ]
      },
      "relatedTokens": [
        "iconSize.xl",
        "surface.icon",
        "surface.iconDefaultNormal"
      ]
    },
    {
      "name": "AurumStepper",
      "family": "input",
      "platforms": [
        "android"
      ],
      "summary": "Aurum's numeric stepper — a compact container with decrease/value/increase controls inside a single rounded container.",
      "kdoc": "Aurum's numeric stepper — a compact container with decrease/value/increase\ncontrols inside a single rounded container.\n\nThis is a **scratch** component — built on `androidx.compose.foundation`.\n\nWhen [value] equals [minValue] (typically 0), the stepper shows an \"Add\"\nbutton instead of the ±/value layout, matching the Figma \"Initial State\".\n\n@param value the current numeric value\n@param onValueChange called with the new value when the user taps ±\n@param modifier the [Modifier] to apply\n@param type visual style — [AurumStepperType.Neutral] or [Brand]\n@param minValue minimum allowed value (inclusive) — defaults to 0\n@param maxValue maximum allowed value (inclusive)\n@param enabled whether the stepper is interactive",
      "signature": "@Composable\nfun AurumStepper(\n    value: Int,\n    onValueChange: (Int) -> Unit,\n    modifier: Modifier = Modifier,\n    type: AurumStepperType = AurumStepperType.Neutral,\n    minValue: Int = 0,\n    maxValue: Int = Int.MAX_VALUE,\n    enabled: Boolean = true,\n)",
      "params": [
        {
          "name": "value",
          "type": "Int",
          "default": null,
          "doc": "the current numeric value"
        },
        {
          "name": "onValueChange",
          "type": "(Int) -> Unit",
          "default": null,
          "doc": "called with the new value when the user taps ±"
        },
        {
          "name": "modifier",
          "type": "Modifier",
          "default": "Modifier",
          "doc": "the [Modifier] to apply"
        },
        {
          "name": "type",
          "type": "AurumStepperType",
          "default": "AurumStepperType.Neutral",
          "doc": "visual style — [AurumStepperType.Neutral] or [Brand]"
        },
        {
          "name": "minValue",
          "type": "Int",
          "default": "0",
          "doc": "minimum allowed value (inclusive) — defaults to 0"
        },
        {
          "name": "maxValue",
          "type": "Int",
          "default": "Int.MAX_VALUE",
          "doc": "maximum allowed value (inclusive)"
        },
        {
          "name": "enabled",
          "type": "Boolean",
          "default": "true",
          "doc": "whether the stepper is interactive"
        }
      ],
      "previews": [
        "PreviewBrandStates",
        "PreviewNeutralStates"
      ],
      "figmaNodeId": "4506:201",
      "figmaUrl": "https://www.figma.com/design/YvIxqu2oTlM6UnkL0OloHc/?node-id=4506-201",
      "figmaTagUrl": "https://www.figma.com/design/YvIxqu2oTlM6UnkL0OloHc/?node-id=4506-201",
      "codeConnectPath": "aurum/src/main/kotlin/com/jar/app/aurum/component/input/AurumStepper.figma.kt",
      "galleryUrl": "https://changejarapp.github.io/aurum-android/component/input/AurumStepper.html",
      "sourcePath": "aurum/src/main/kotlin/com/jar/app/aurum/component/input/AurumStepper.kt",
      "intendedUse": "Use for small bounded integer ranges where the user picks a count by incrementing — cart quantity, count of N selections, number of attendees. The \"Initial State\" / \"Add\" affordance handles the first-tap onboarding without the user needing to know the bounds. For free numeric input use [AurumTextField] with a numeric keyboard; for unbounded values use a slider (when available).",
      "usage": {
        "do": [
          "Set `maxValue` to the real backend limit so the + button disables on the boundary instead of erroring after submission.",
          "Use `Brand` type when the stepper is the surface's CTA-equivalent (e.g. \"add to cart\" flows); `Neutral` for inline edit-existing-quantity rows.",
          "Mirror the value back to the user with a clear running total / subtotal nearby — steppers shine when the consequence is visible."
        ],
        "dont": [
          "Use for free numeric capture — `AurumTextField` with a numeric keyboard is the right primitive when the value range is open.",
          "Render multiple steppers in a row controlling the same backing value; one canonical control per quantity.",
          "Skip the disabled state when the user hits `maxValue` — letting them tap and silently fail breaks the bound contract."
        ]
      },
      "relatedTokens": [
        "borderWidth.sm",
        "iconSize.xl",
        "interactive.bgNeutralDefault",
        "interactive.bgNeutralDisabled",
        "interactive.bgPrimaryDefault",
        "interactive.borderNeutralMuted",
        "interactive.iconNeutralDisabled",
        "interactive.iconNeutralNormal",
        "interactive.textNeutralNormal",
        "interactive.textOnPrimaryNormal",
        "spacing.s3",
        "spacing.s5",
        "spacing.s8",
        "surface.bgBrandSubtle",
        "surface.bgSurfaceLowContrast",
        "surface.borderBrandMuted",
        "surface.borderBrandNormal",
        "surface.borderSurfaceHighContrast",
        "surface.borderSurfaceLowContrast",
        "surface.iconDefaultNormal",
        "surface.textDefaultDisabled",
        "surface.textOnBrandSubtle",
        "typography.bodyLMedium",
        "typography.bodyMMedium",
        "typography.titleXSBold"
      ]
    },
    {
      "name": "AurumGlobalHeader",
      "family": "navigation",
      "platforms": [
        "android"
      ],
      "summary": "Aurum's global header — the persistent top bar used on every top-level destination (Home, Transactions, NEK, Rewards).",
      "kdoc": "Aurum's global header — the persistent top bar used on every top-level\ndestination (Home, Transactions, NEK, Rewards). Mapped to the Figma\n`Global Header` component (file `YvIxqu2oTlM6UnkL0OloHc`, node `5252:2274`).\n\nThis is a **scratch** component built with `Row` + `Box` from\n`androidx.compose.foundation`. It does not wrap `material3.TopAppBar`.\n\nVisual structure (left → right):\n- Leading **profile pill** — 44 dp circular pill with a 1 dp\n  `interactive/border/neutral/muted` border and a soft radial sheen.\n  Accepts an [ImageVector] glyph via [profileIcon] (default\n  `AurumIcons.User.User`) **or** any caller-supplied composable via\n  [profileContent] for URL-loaded avatars.\n- Right group — see [AurumGlobalHeaderRightContent]:\n  - [AurumGlobalHeaderRightContent.Default]: optional Support pill (1 icon),\n    optional Rewards+Notifications pill (2 icons + divider).\n  - [AurumGlobalHeaderRightContent.LivePrice]: wider live-price pill on a\n    dark surface, optional Rewards+Notifications pill.\n\nContainer: 360 dp wide reference, 68 dp tall (44 dp pills + 12 dp\nvertical padding), `surface/background/page/base` background.\n\n@param onProfileClick callback invoked when the leading profile pill is tapped.\n@param rightContent the right-group content variant — see [AurumGlobalHeaderRightContent].\n@param modifier the [Modifier] to apply to the root container.\n@param profileIcon the [ImageVector] rendered in the profile pill when [profileContent] is `null`. Defaults to `AurumIcons.User.User`.\n@param profileContent optional composable slot rendered inside the profile\n  pill. When non-`null` overrides [profileIcon] — useful for URL-loaded\n  avatars (e.g. via Glide / Coil at the call site).\n@param containerColor the header background colour. Defaults to\n  [Aurum.colors.surface.bgPageBase]. Pass [Color.Transparent] when the\n  header sits on a separately-painted hero backdrop.\n@param colorScheme switches the pill bg + icon + text tones between the\n  default light treatment and the dark-glass treatment for hero zones.\n  See [AurumGlobalHeaderColorScheme].",
      "signature": "@Composable\nfun AurumGlobalHeader(\n    onProfileClick: () -> Unit,\n    rightContent: AurumGlobalHeaderRightContent,\n    modifier: Modifier = Modifier,\n    profileIcon: androidx.compose.ui.graphics.vector.ImageVector = AurumIcons.User.User,\n    profileContent: (@Composable () -> Unit)? = null,\n    containerColor: Color = Aurum.colors.surface.bgPageBase,\n    colorScheme: AurumGlobalHeaderColorScheme = AurumGlobalHeaderColorScheme.OnLight,\n)",
      "params": [
        {
          "name": "onProfileClick",
          "type": "() -> Unit",
          "default": null,
          "doc": "callback invoked when the leading profile pill is tapped."
        },
        {
          "name": "rightContent",
          "type": "AurumGlobalHeaderRightContent",
          "default": null,
          "doc": "the right-group content variant — see [AurumGlobalHeaderRightContent]."
        },
        {
          "name": "modifier",
          "type": "Modifier",
          "default": "Modifier",
          "doc": "the [Modifier] to apply to the root container."
        },
        {
          "name": "profileIcon",
          "type": "androidx.compose.ui.graphics.vector.ImageVector",
          "default": "AurumIcons.User.User",
          "doc": "the [ImageVector] rendered in the profile pill when [profileContent] is `null`. Defaults to `AurumIcons.User.User`."
        },
        {
          "name": "profileContent",
          "type": "(@Composable () -> Unit)?",
          "default": "null",
          "doc": "optional composable slot rendered inside the profile"
        },
        {
          "name": "containerColor",
          "type": "Color",
          "default": "Aurum.colors.surface.bgPageBase",
          "doc": "the header background colour. Defaults to"
        },
        {
          "name": "colorScheme",
          "type": "AurumGlobalHeaderColorScheme",
          "default": "AurumGlobalHeaderColorScheme.OnLight",
          "doc": "switches the pill bg + icon + text tones between the"
        }
      ],
      "previews": [
        "PreviewDefaultFull",
        "PreviewDefaultProfileOnly",
        "PreviewDefaultRewardsOnly",
        "PreviewDefaultSupportOnly",
        "PreviewLivePriceNoRewards",
        "PreviewLivePriceWithRewards",
        "PreviewOnDarkLivePrice",
        "PreviewProfileAvatar"
      ],
      "figmaNodeId": "5252:2274",
      "figmaUrl": "https://www.figma.com/design/YvIxqu2oTlM6UnkL0OloHc/?node-id=5252-2274",
      "figmaTagUrl": "https://www.figma.com/design/YvIxqu2oTlM6UnkL0OloHc/?node-id=5252-2274",
      "codeConnectPath": "aurum/src/main/kotlin/com/jar/app/aurum/component/navigation/AurumGlobalHeader.figma.kt",
      "galleryUrl": "https://changejarapp.github.io/aurum-android/component/navigation/AurumGlobalHeader.html",
      "sourcePath": "aurum/src/main/kotlin/com/jar/app/aurum/component/navigation/AurumGlobalHeader.kt",
      "intendedUse": "Use as the persistent top bar on every top-level destination — Home, Transactions, NEK, Rewards. The two [AurumGlobalHeaderRightContent] variants cover the design-system canonical right-side affordances; don't roll a custom header for these screens.",
      "usage": {
        "do": [
          "Choose the [AurumGlobalHeaderRightContent.LivePrice] variant only on screens where the live gold buy price is part of the screen's purpose (e.g. the home feed); use [AurumGlobalHeaderRightContent.Default] elsewhere.",
          "Hoist the rewards / notifications click handlers up to your nav controller so the badge counts stay in sync with state changes.",
          "Pass [profileContent] for URL-loaded avatars — the slot fills the pill's inner circle (inside the 1 dp border, clipped circular), so hand it a full-bleed image with `ContentScale.Crop`; don't size or clip it yourself. (The default [profileIcon] glyph path still renders at a 20 dp icon size.)"
        ],
        "dont": [
          "Wrap `material3.TopAppBar` and tint it with Aurum colours — this component exists to prevent that anti-pattern.",
          "Render two `AurumGlobalHeader`s in a single Composition — one per screen, anchored to the top inset.",
          "Mix [AurumGlobalHeaderRightContent.LivePrice] with `null` rewards on a screen where users expect Rewards / Notifications access — the LivePrice variant intentionally allows hiding the rewards pill, but only do so on screens where those affordances are unambiguously available elsewhere."
        ]
      },
      "relatedTokens": [
        "surface.bgBrandIntense",
        "surface.bgPageBase",
        "typography.bodySRegular",
        "typography.bodyXSRegular",
        "typography.labelLMedium"
      ]
    },
    {
      "name": "AurumNavBar",
      "family": "navigation",
      "platforms": [
        "android"
      ],
      "summary": "Aurum's bottom navigation bar — the canonical \"NavBar\" component from the Figma design system (file YvIxqu2oTlM6UnkL0OloHc, component_set 5575:14226).",
      "kdoc": "Aurum's bottom navigation bar — the canonical \"NavBar\" component from the\nFigma design system (file `YvIxqu2oTlM6UnkL0OloHc`, component_set\n`5575:14226`).\n\nThis is a **scratch** component built with `Row` + `Column` from\n`androidx.compose.foundation`. It does not wrap `material3.NavigationBar`.\n\nThe Figma set defines four `layout` variants: `standard_3`, `standard_4`,\n`standard_5`, and `center_qr_5`. Each cell — driven by the\n[AurumNavBarItem] component_set `5575:14365` — renders a 24 dp icon (line\nwhen unselected, filled when selected) plus a 10 sp label. Selected\ncells render the icon with a `purple/500 → pink/50` linear gradient\ntint and the label with `surface.textBrandNormal`; unselected cells\nuse `surface.textDefaultSubtle` for both.\n\n**Minimum container width: 360 dp.** The design assumes a 360 dp +\nAndroid baseline. At 320 dp the 5-cell math (64 dp/cell) clips the\ntrailing 1-2 chars of long labels (e.g. \"Transactions\") via\n`TextOverflow.Clip`. That's a faithful preview of what real\nAndroid-Go-class users would see; if you need full labels at 320 dp,\nshorten them.\n\n@param items the per-cell content; size must match `layout.itemCount`\n@param selectedIndex the index of the currently-selected cell. For\n  [AurumNavBarLayout.CenterQr5], this indexes into [items] — the centre\n  QR button is *not* selectable and ignores this value.\n@param onSelect callback invoked with the tapped cell index. For\n  [AurumNavBarLayout.CenterQr5], indices match positions in [items]\n  (0..3); the QR button has its own dedicated callback on the layout.\n@param layout the bar's layout shape — see [AurumNavBarLayout]\n@param modifier the [Modifier] to apply to the root container\n@param containerColor the bar background colour. Defaults to\n  [Aurum.colors.surface.bgPageBase].",
      "signature": "@Composable\nfun AurumNavBar(\n    items: ImmutableList<AurumNavBarItem>,\n    selectedIndex: Int,\n    onSelect: (Int) -> Unit,\n    layout: AurumNavBarLayout,\n    modifier: Modifier = Modifier,\n    containerColor: Color = Aurum.colors.surface.bgPageBase,\n)",
      "params": [
        {
          "name": "items",
          "type": "ImmutableList<AurumNavBarItem>",
          "default": null,
          "doc": "the per-cell content; size must match `layout.itemCount`"
        },
        {
          "name": "selectedIndex",
          "type": "Int",
          "default": null,
          "doc": "the index of the currently-selected cell. For"
        },
        {
          "name": "onSelect",
          "type": "(Int) -> Unit",
          "default": null,
          "doc": "callback invoked with the tapped cell index. For"
        },
        {
          "name": "layout",
          "type": "AurumNavBarLayout",
          "default": null,
          "doc": "the bar's layout shape — see [AurumNavBarLayout]"
        },
        {
          "name": "modifier",
          "type": "Modifier",
          "default": "Modifier",
          "doc": "the [Modifier] to apply to the root container"
        },
        {
          "name": "containerColor",
          "type": "Color",
          "default": "Aurum.colors.surface.bgPageBase",
          "doc": "the bar background colour. Defaults to"
        }
      ],
      "previews": [
        "PreviewCenterQr5",
        "PreviewCenterQr5SelectedRight",
        "PreviewStandard3",
        "PreviewStandard4",
        "PreviewStandard5",
        "PreviewStandard5SelectedLast"
      ],
      "figmaNodeId": "5575:14226",
      "figmaUrl": "https://www.figma.com/design/YvIxqu2oTlM6UnkL0OloHc/?node-id=5575-14226",
      "figmaTagUrl": "https://www.figma.com/design/YvIxqu2oTlM6UnkL0OloHc/?node-id=5575-14226",
      "codeConnectPath": "aurum/src/main/kotlin/com/jar/app/aurum/component/navigation/AurumNavBar.figma.kt",
      "galleryUrl": "https://changejarapp.github.io/aurum-android/component/navigation/AurumNavBar.html",
      "sourcePath": "aurum/src/main/kotlin/com/jar/app/aurum/component/navigation/AurumNavBar.kt",
      "intendedUse": "Use as the persistent bottom navigation primitive on top-level screens. Pick the layout variant that matches the destination count: 3 / 4 / 5 cells, or 4 cells flanking a centre Scan-QR action. Don't roll a custom bottom bar — this is the canonical surface.",
      "usage": {
        "do": [
          "Pass paired line/filled `AurumIcons.*` variants per item so the bar's selected-state contrast reads correctly (e.g. `AurumIcons.User.Home` + `AurumIcons.User.HomeFilled`).",
          "Hoist `selectedIndex` in your screen state and route `onSelect` through your nav controller so the bar stays in sync with back-stack changes.",
          "Match the layout to your top-level destination count — picking [Standard3]/[Standard4]/[Standard5] keeps spacing balanced; never partially-fill a 5-cell bar."
        ],
        "dont": [
          "Wrap `material3.NavigationBar` and tint it with Aurum colours — this component exists to prevent that anti-pattern.",
          "Push more than 5 items into a layout — Android nav UX caps at 5; if you need more, restructure with sub-tabs or an overflow surface.",
          "Render two `AurumNavBar`s in a single Composition — one per screen, anchored to the bottom inset."
        ]
      },
      "relatedTokens": [
        "iconSize.xl",
        "spacing.s2",
        "spacing.s4",
        "surface.bgPageBase",
        "surface.bgSurfaceLowContrast",
        "surface.textBrandNormal",
        "surface.textDefaultSubtle",
        "typography.bodySRegular",
        "visual.pink50",
        "visual.purple100",
        "visual.purple50",
        "visual.purple500"
      ]
    },
    {
      "name": "AurumPageHeader",
      "family": "navigation",
      "platforms": [
        "android"
      ],
      "summary": "Aurum's Page Header — the canonical title-and-actions row at the top of a screen, from the Figma design system (file YvIxqu2oTlM6UnkL0OloHc, component_set 4826:1058).",
      "kdoc": "Aurum's Page Header — the canonical title-and-actions row at the top of a\nscreen, from the Figma design system (file `YvIxqu2oTlM6UnkL0OloHc`,\ncomponent_set `4826:1058`).\n\nThis is a **scratch** component built with `Row` + `Box` from\n`androidx.compose.foundation`. It does not wrap `material3.TopAppBar`.\n\nThe Figma set defines exactly 10 trailing-action `Type` variants —\neach combination of `actionButton` (primary button), `icon1`, `icon2`,\nand `isOverflow`:\n\n| Type              | primaryButton | icon1 | icon2 | overflow |\n|-------------------|:-------------:|:-----:|:-----:|:--------:|\n| Default           |       —       |   —   |   —   |    —     |\n| With Icon         |       —       |   ●   |   —   |    —     |\n| With Icons        |       —       |   ●   |   ●   |    —     |\n| With Overflow     |       —       |   —   |   —   |    ●     |\n| 1icon+overflow    |       —       |   ●   |   —   |    ●     |\n| icons+overflow    |       —       |   ●   |   ●   |    ●     |\n| With Button       |       ●       |   —   |   —   |    —     |\n| Button + Icon     |       ●       |   ●   |   —   |    —     |\n| Button + Icons    |       ●       |   ●   |   ●   |    —     |\n| Button + Overflow |       ●       |   —   |   —   |    ●     |\n\nPlus two orthogonal instance properties: `backButton` (the leading back\nicon) and `subtitle` (a second line under the title). Pass `null` for\nany slot to omit it; the four trailing-action slots are positionally\nmeaningful, so e.g. `icon1 = null, icon2 = X` is invalid.\n\nLayout (Figma):\n- Container: full width, 56 dp tall, 16 dp horizontal padding,\n  `surface/background/page/base` background\n- Left group: optional back icon (32×40 dp wrapper, 24 dp icon) and\n  title/subtitle column, separated by 12 dp; left group expands with\n  `weight(1f)` and clips long titles via ellipsis\n- Right group: 8 dp gap between trailing items, max width 140 dp,\n  button capped at 120 dp wide × 32 dp tall\n\nTypography (Figma 4826:1058):\n- Title: `Title/S-SemiBold` (16/24, SemiBold 600)\n- Subtitle: 12/16, Medium 500, primary family — same colour as title\n  (hierarchy from weight + size only)\n- Primary button label: `Label/L-Medium` (12/16, Medium 500); 36 dp tall\n  pill with a 1 dp `interactive.borderPrimaryMuted` ring\n\n@param title the page title; single-line with ellipsis overflow\n@param modifier the [Modifier] to apply to the root container\n@param subtitle optional subtitle text below the title; single-line\n  with ellipsis overflow\n@param onBack if non-null, the leading [backIcon] is displayed on the\n  left and this callback is invoked on tap\n@param backIcon glyph drawn in the leading slot when [onBack] is set.\n  Defaults to [AurumIcons.Navigation.ChevronLeft] — the canonical back\n  icon in the Figma component-set (4826:1086 → 5426:1363). Override\n  sparingly, e.g. with `AurumIcons.Navigation.Close` for modal-style\n  surfaces; the wrapper, touch target, and tint stay consistent.\n@param primaryButton optional inline pill button on the right\n@param icon1 optional first trailing action icon (Figma slot `icon1`)\n@param icon2 optional second trailing action icon (Figma slot `icon2`)\n@param overflow optional overflow icon (Figma slot `isOverflow`); always\n  rendered after `icon1` / `icon2`\n@param contentColor optional explicit override for the title/subtitle text\n  colour. [Color.Unspecified] (default) defers to [colorScheme]; pass a\n  concrete colour only to override the scheme's text tone. Icon tints always\n  follow [colorScheme].\n@param containerColor the bar background colour. Defaults to\n  [Aurum.colors.surface.bgPageBase]; pass [Color.Transparent] with\n  [colorScheme] = [AurumPageHeaderColorScheme.OnDark] for a hero backdrop.\n@param colorScheme the on-light / on-dark tone set for icons + text — see\n  [AurumPageHeaderColorScheme]. Defaults to [AurumPageHeaderColorScheme.OnLight].",
      "signature": "@Composable\nfun AurumPageHeader(\n    title: String,\n    modifier: Modifier = Modifier,\n    subtitle: String? = null,\n    onBack: (() -> Unit)? = null,\n    backIcon: ImageVector = AurumIcons.Navigation.ChevronLeft,\n    primaryButton: AurumPageHeaderButton? = null,\n    icon1: AurumPageHeaderAction? = null,\n    icon2: AurumPageHeaderAction? = null,\n    overflow: AurumPageHeaderAction? = null,\n    contentColor: Color = Color.Unspecified,\n    containerColor: Color = Aurum.colors.surface.bgPageBase,\n    colorScheme: AurumPageHeaderColorScheme = AurumPageHeaderColorScheme.OnLight,\n    /**\n     * When true (default),\n    the top bar extends behind the status bar:\n     * the [containerColor] fills under the status bar,\n    and the content\n     * (title,\n    icons) is padded below it. Set to false if the caller\n     * handles status bar insets externally.\n     *\n     * This is the edge-to-edge behaviour recommended by Google for\n     * Android 15+ and the default for [AurumScreen].\n     */\n    applyStatusBarInsets: Boolean = true,\n)",
      "params": [
        {
          "name": "title",
          "type": "String",
          "default": null,
          "doc": "the page title; single-line with ellipsis overflow"
        },
        {
          "name": "modifier",
          "type": "Modifier",
          "default": "Modifier",
          "doc": "the [Modifier] to apply to the root container"
        },
        {
          "name": "subtitle",
          "type": "String?",
          "default": "null",
          "doc": "optional subtitle text below the title; single-line"
        },
        {
          "name": "onBack",
          "type": "(() -> Unit)?",
          "default": "null",
          "doc": "if non-null, the leading [backIcon] is displayed on the"
        },
        {
          "name": "backIcon",
          "type": "ImageVector",
          "default": "AurumIcons.Navigation.ChevronLeft",
          "doc": "glyph drawn in the leading slot when [onBack] is set."
        },
        {
          "name": "primaryButton",
          "type": "AurumPageHeaderButton?",
          "default": "null",
          "doc": "optional inline pill button on the right"
        },
        {
          "name": "icon1",
          "type": "AurumPageHeaderAction?",
          "default": "null",
          "doc": "optional first trailing action icon (Figma slot `icon1`)"
        },
        {
          "name": "icon2",
          "type": "AurumPageHeaderAction?",
          "default": "null",
          "doc": "optional second trailing action icon (Figma slot `icon2`)"
        },
        {
          "name": "overflow",
          "type": "AurumPageHeaderAction?",
          "default": "null",
          "doc": "optional overflow icon (Figma slot `isOverflow`); always"
        },
        {
          "name": "contentColor",
          "type": "Color",
          "default": "Color.Unspecified",
          "doc": "optional explicit override for the title/subtitle text"
        },
        {
          "name": "containerColor",
          "type": "Color",
          "default": "Aurum.colors.surface.bgPageBase",
          "doc": "the bar background colour. Defaults to"
        },
        {
          "name": "colorScheme",
          "type": "AurumPageHeaderColorScheme",
          "default": "AurumPageHeaderColorScheme.OnLight",
          "doc": "the on-light / on-dark tone set for icons + text — see"
        }
      ],
      "previews": [
        "PreviewDefault",
        "PreviewLongTitleEllipsis",
        "PreviewOnDark",
        "PreviewTypeButtonAndIcon",
        "PreviewTypeButtonAndIcons",
        "PreviewTypeButtonAndOverflow",
        "PreviewTypeIconAndOverflow",
        "PreviewTypeIconsAndOverflow",
        "PreviewTypeWithButton",
        "PreviewTypeWithIcon",
        "PreviewTypeWithIcons",
        "PreviewTypeWithOverflow",
        "PreviewWithBack",
        "PreviewWithBackAndSubtitle",
        "PreviewWithBackIconClose",
        "PreviewWithSubtitle"
      ],
      "figmaNodeId": "4826:1058",
      "figmaUrl": "https://www.figma.com/design/YvIxqu2oTlM6UnkL0OloHc/?node-id=4826-1058",
      "figmaTagUrl": "https://www.figma.com/design/YvIxqu2oTlM6UnkL0OloHc/?node-id=4826-1058",
      "codeConnectPath": "aurum/src/main/kotlin/com/jar/app/aurum/component/navigation/AurumPageHeader.figma.kt",
      "galleryUrl": "https://changejarapp.github.io/aurum-android/component/navigation/AurumPageHeader.html",
      "sourcePath": "aurum/src/main/kotlin/com/jar/app/aurum/component/navigation/AurumPageHeader.kt",
      "intendedUse": "Use at the top of every full-screen surface in the app. The 10 Figma `Type` variants cover every combination of trailing controls (primary button, 1 / 2 icons, overflow) — pick the variant that matches the screen's needs. Don't introduce a custom header; this is the canonical Page Header.",
      "usage": {
        "do": [
          "Provide an explicit `contentDescription` for every [AurumPageHeaderAction] icon (a back arrow with `null` content description fails accessibility audits).",
          "Reserve the `actionButton` slot for a single high-emphasis screen action (e.g. \"Save\", \"Skip\"); use icons + overflow for everything else.",
          "Keep titles to one line; Aurum truncates with ellipsis at the design max width — long titles should be condensed at copy review, not at render time.",
          "Override `backIcon` for surfaces where the platform convention differs from page-back navigation — e.g. `AurumIcons.Navigation.Close` on a modal-style screen.",
          "Set `colorScheme = OnDark` (with `containerColor = Color.Transparent`) only when the header sits on a dark hero backdrop; `OnLight` is the default for ordinary light surfaces."
        ],
        "dont": [
          "Wrap `material3.TopAppBar` and tint it with Aurum colours — this component exists to prevent that anti-pattern.",
          "Hand-roll Figma's other header variants (centred title, large header) until they're added to this component.",
          "Stack multiple `AurumPageHeader`s in a single Composition — one per screen."
        ]
      },
      "relatedTokens": [
        "iconSize.xl",
        "interactive.bgPrimaryDefault",
        "interactive.borderPrimaryMuted",
        "interactive.iconNeutralNormal",
        "interactive.textOnPrimaryNormal",
        "spacing.s1",
        "spacing.s11",
        "spacing.s3",
        "spacing.s4",
        "spacing.s5",
        "spacing.s8",
        "spacing.s9",
        "surface.bgPageBase",
        "surface.iconStaticWhiteNormal",
        "surface.textDefaultNormal",
        "surface.textStaticWhiteNormal",
        "typography.bodySMedium",
        "typography.labelLMedium",
        "typography.titleSSemiBold"
      ]
    },
    {
      "name": "AurumSectionHeader",
      "family": "navigation",
      "platforms": [
        "android"
      ],
      "summary": "Aurum's section header — used to group related content within a screen.",
      "kdoc": "Aurum's section header — used to group related content within a screen.\n\nThis is a **scratch** component built with `Row` + `Column` from\n`androidx.compose.foundation`. It does not wrap any Material 3 component.\n\nThe Figma component (Section Header) supports optional subtitle text and\nlightweight right-aligned actions such as text links, text buttons, or\nicon buttons. This composable surfaces those axes as optional parameters\nso callers compose exactly the variant they need.\n\nLayout:\n- Container: full width, 48 dp tall, horizontal padding `s5` (16 dp)\n- Left group (weight 1f): title ([Aurum.type.bodyLMedium]) + optional\n  subtitle ([Aurum.type.bodySRegular], subtle colour)\n- Right group: varies by [action] type — link (text + chevron),\n  text-only, or icon button\n\n@param title the section title; single-line with ellipsis overflow\n@param modifier the [Modifier] to apply to the root container\n@param subtitle optional subtitle text below the title; single-line\n  with ellipsis overflow\n@param action optional right-aligned action — see\n  [AurumSectionHeaderAction] for the three supported types",
      "signature": "@Composable\nfun AurumSectionHeader(\n    title: String,\n    modifier: Modifier = Modifier,\n    subtitle: String? = null,\n    action: AurumSectionHeaderAction? = null,\n)",
      "params": [
        {
          "name": "title",
          "type": "String",
          "default": null,
          "doc": "the section title; single-line with ellipsis overflow"
        },
        {
          "name": "modifier",
          "type": "Modifier",
          "default": "Modifier",
          "doc": "the [Modifier] to apply to the root container"
        },
        {
          "name": "subtitle",
          "type": "String?",
          "default": "null",
          "doc": "optional subtitle text below the title; single-line"
        },
        {
          "name": "action",
          "type": "AurumSectionHeaderAction?",
          "default": "null",
          "doc": "optional right-aligned action — see"
        }
      ],
      "previews": [
        "PreviewFullHeader",
        "PreviewTitleAndSubtitle",
        "PreviewTitleOnly",
        "PreviewTitleWithIconAction",
        "PreviewTitleWithLinkAction",
        "PreviewTitleWithTextAction"
      ],
      "figmaNodeId": "3702:162190",
      "figmaUrl": "https://www.figma.com/design/YvIxqu2oTlM6UnkL0OloHc/?node-id=3702-162190",
      "figmaTagUrl": "https://www.figma.com/design/YvIxqu2oTlM6UnkL0OloHc/?node-id=3702-162190",
      "codeConnectPath": "aurum/src/main/kotlin/com/jar/app/aurum/component/navigation/AurumSectionHeader.figma.kt",
      "galleryUrl": "https://changejarapp.github.io/aurum-android/component/navigation/AurumSectionHeader.html",
      "sourcePath": "aurum/src/main/kotlin/com/jar/app/aurum/component/navigation/AurumSectionHeader.kt",
      "intendedUse": "Use as the H2-style break between groups of related content within a scrollable surface — \"Recent transactions\", \"Your goals\", \"Suggested for you\". The optional right-aligned action lets a section advertise its own deeper view. For top-of-screen titles use [AurumPageHeader]; for thin row separators use [AurumDivider].",
      "usage": {
        "do": [
          "Use the [Link] action type for \"View All / See More\" navigation actions — the chevron signals \"drill in\".",
          "Keep the title to one line and let ellipsis truncate overflow — section headers should be scannable.",
          "Pair `subtitle` with the title for sections whose name alone isn't self-explanatory (e.g. \"Goals\" + \"Track your progress\")."
        ],
        "dont": [
          "Use as a page-level header — that's [AurumPageHeader]'s job; section headers are intra-screen.",
          "Stack multiple action types on one header — pick one of [Link] / [TextAction] / [IconAction].",
          "Use the [TextAction] type for navigation when [Link] is also fitting — the chevron tells users they're entering a new surface."
        ]
      },
      "relatedTokens": [
        "iconSize.sm",
        "iconSize.xl",
        "interactive.iconNeutralNormal",
        "interactive.iconNeutralSubtle",
        "interactive.textNeutralSubtle",
        "spacing.s1",
        "spacing.s10",
        "spacing.s2",
        "spacing.s3",
        "spacing.s5",
        "surface.textBrandNormal",
        "surface.textDefaultNormal",
        "surface.textDefaultSubtle",
        "typography.bodyLMedium",
        "typography.bodySMedium",
        "typography.bodySRegular",
        "typography.titleSSemiBold",
        "typography.titleXSSemiBold"
      ]
    },
    {
      "name": "AurumTab",
      "family": "navigation",
      "platforms": [
        "android"
      ],
      "summary": "A single tab item for use inside [AurumTabRow].",
      "kdoc": "A single tab item for use inside [AurumTabRow].\n\nScratch component — built on Foundation [Box] + [Row] with [selectable]\nsemantics. The active-indicator underline is managed by [AurumTabRow].\n\nCorresponds to Figma component `_Tabs` (node `5430:3115`,\nfile `YvIxqu2oTlM6UnkL0OloHc`).\n\n@param selected whether this is the currently active tab\n@param onClick invoked when the tab is tapped\n@param label the tab label text\n@param modifier applied to the root container\n@param icon optional leading icon shown to the left of [label]; rendered at [Aurum.iconSize.xl]",
      "signature": "@Composable\nfun AurumTab(\n    selected: Boolean,\n    onClick: () -> Unit,\n    label: String,\n    modifier: Modifier = Modifier,\n    icon: ImageVector? = null,\n)",
      "params": [
        {
          "name": "selected",
          "type": "Boolean",
          "default": null,
          "doc": "whether this is the currently active tab"
        },
        {
          "name": "onClick",
          "type": "() -> Unit",
          "default": null,
          "doc": "invoked when the tab is tapped"
        },
        {
          "name": "label",
          "type": "String",
          "default": null,
          "doc": "the tab label text"
        },
        {
          "name": "modifier",
          "type": "Modifier",
          "default": "Modifier",
          "doc": "applied to the root container"
        },
        {
          "name": "icon",
          "type": "ImageVector?",
          "default": "null",
          "doc": "optional leading icon shown to the left of [label]; rendered at [Aurum.iconSize.xl]"
        }
      ],
      "previews": [
        "PreviewTabSelected",
        "PreviewTabSelectedWithIcon",
        "PreviewTabUnselected",
        "PreviewTabUnselectedWithIcon"
      ],
      "figmaNodeId": "5430:3115",
      "figmaUrl": "https://www.figma.com/design/YvIxqu2oTlM6UnkL0OloHc/?node-id=5430-3115",
      "figmaTagUrl": "https://www.figma.com/design/YvIxqu2oTlM6UnkL0OloHc/?node-id=5430-3115",
      "codeConnectPath": "aurum/src/main/kotlin/com/jar/app/aurum/component/navigation/AurumTab.figma.kt",
      "galleryUrl": "https://changejarapp.github.io/aurum-android/component/navigation/AurumTab.html",
      "sourcePath": "aurum/src/main/kotlin/com/jar/app/aurum/component/navigation/AurumTab.kt",
      "intendedUse": "Use as the per-tab cell of an [AurumTabRow]. One tab per destination, with a short label and an optional 24 dp leading icon. Outside an `AurumTabRow` it has no underline indicator and no equal-width sizing — always compose it as a child of the row.",
      "usage": {
        "do": [
          "Hoist `selectedTabIndex` in your screen state and drive [selected] off it; the underline animation in [AurumTabRow] tracks the parent's index, not [selected].",
          "Keep labels short (≤10 chars) — Figma sizes tabs at `min-w-[100px]`; long strings either widen every tab or get clipped by [TextOverflow.Clip].",
          "Pass an icon from `AurumIcons.*` — the leading slot is pinned to [Aurum.iconSize.xl] (24 dp) per Figma."
        ],
        "dont": [
          "Compose [AurumTab] without an [AurumTabRow] parent — width is computed by the row via [LocalAurumTabWidth]; standalone tabs render at their natural width with no indicator.",
          "Mix this with `material3.Tab` in the same row — token colours, the 2 dp underline, and the equal-width algorithm only line up across [AurumTab] siblings.",
          "Render an unavailable destination by greying out a tab — Figma has no disabled variant; omit the destination from `tabs` until it's selectable."
        ]
      },
      "relatedTokens": [
        "iconSize.xl",
        "spacing.s2",
        "spacing.s3",
        "spacing.s4"
      ]
    },
    {
      "name": "AurumTabRow",
      "family": "navigation",
      "platforms": [
        "android"
      ],
      "summary": "Aurum's tab row — a strip of [AurumTab] items with an animated selection indicator and a bottom divider.",
      "kdoc": "Aurum's tab row — a strip of [AurumTab] items with an animated selection\nindicator and a bottom divider.\n\nTabs are sized to `max(widestNaturalTab, 100.dp)`. If the total fits the\nviewport, the row uses Material 3 [PrimaryTabRow] and tabs flex to share\nthe full width equally — matching Figma's two-/three-tab `flex-[1_0_0]`\nvariants. If the total overflows, the row switches to\n[PrimaryScrollableTabRow] and every tab pins to its computed width via\n[LocalAurumTabWidth] — matching Figma's four-tab fixed-`100px` variant\nand gracefully extending to 5 + tabs.\n\nCorresponds to Figma component `GroupRoot` (node `5531:795`,\nfile `YvIxqu2oTlM6UnkL0OloHc`).\n\n@param selectedTabIndex the index of the currently active tab (0-based)\n@param modifier applied to the root container\n@param tabs [AurumTab] items; all receive the same computed width",
      "signature": "@Composable\nfun AurumTabRow(\n    selectedTabIndex: Int,\n    modifier: Modifier = Modifier,\n    tabs: @Composable () -> Unit,\n)",
      "params": [
        {
          "name": "selectedTabIndex",
          "type": "Int",
          "default": null,
          "doc": "the index of the currently active tab (0-based)"
        },
        {
          "name": "modifier",
          "type": "Modifier",
          "default": "Modifier",
          "doc": "applied to the root container"
        },
        {
          "name": "tabs",
          "type": "@Composable () -> Unit",
          "default": null,
          "doc": "[AurumTab] items; all receive the same computed width"
        }
      ],
      "previews": [
        "PreviewTabRowFiveTabsScrolls",
        "PreviewTabRowFourTabs",
        "PreviewTabRowFourTabsTablet",
        "PreviewTabRowThreeTabs",
        "PreviewTabRowTwoTabs",
        "PreviewTabRowWithIcons"
      ],
      "figmaNodeId": "5531:795",
      "figmaUrl": "https://www.figma.com/design/YvIxqu2oTlM6UnkL0OloHc/?node-id=5531-795",
      "figmaTagUrl": "https://www.figma.com/design/YvIxqu2oTlM6UnkL0OloHc/?node-id=5531-795",
      "codeConnectPath": "aurum/src/main/kotlin/com/jar/app/aurum/component/navigation/AurumTabRow.figma.kt",
      "galleryUrl": "https://changejarapp.github.io/aurum-android/component/navigation/AurumTabRow.html",
      "sourcePath": "aurum/src/main/kotlin/com/jar/app/aurum/component/navigation/AurumTabRow.kt",
      "intendedUse": "Use as the top-of-screen tab strip for switching between sibling sub-views of one destination (e.g. Gold / Silver / Crypto / FD on a Portfolio screen). For top-level destinations reach for [AurumNavBar] instead — tabs are for in-screen navigation, not app-level navigation.",
      "usage": {
        "do": [
          "Drive [selectedTabIndex] from a hoisted state variable and route taps through your screen's view-model so the underline animation stays in sync with the rendered sub-view.",
          "Compose 2–6 [AurumTab] children as `tabs` — fewer feels under-utilised, more crowds the strip; for 6+ destinations consider a dropdown or `AurumNavBar`.",
          "Trust the auto-fit-or-scroll behaviour — short labels at 2/3 tabs flex to fill the row, longer labels at 4 + tabs scroll horizontally with each tab pinned to ≥ 100 dp."
        ],
        "dont": [
          "Wrap [AurumTabRow] inside another horizontal scroller — when the row chooses scroll mode, nested horizontal scroll fights touch handling.",
          "Pass non-[AurumTab] composables as `tabs` — the equal-width [LocalAurumTabWidth] only applies to [AurumTab], and the indicator alignment assumes uniform cell heights.",
          "Set a fixed width on the row's `modifier` — the SubcomposeLayout reads `constraints.maxWidth` to decide between fit and scroll modes; constraining it forces the strip into permanent scroll."
        ]
      },
      "relatedTokens": [
        "borderWidth.lg",
        "borderWidth.sm"
      ]
    },
    {
      "name": "AurumScreen",
      "family": "scaffold",
      "platforms": [
        "android"
      ],
      "summary": "Aurum's root screen scaffold — the standard entry point for every Aurum-powered screen.",
      "kdoc": "Aurum's root screen scaffold — the standard entry point for every\nAurum-powered screen.\n\nRenders **edge-to-edge** by default. The top bar extends behind the\nstatus bar; the bottom bar extends behind the navigation bar; the\ncontent area is padded correctly via Scaffold's window insets.\n\n## Usage\n\n```kotlin\nAurumScreen(\n    topBar = {\n        AurumPageHeader(\n            title = \"Settings\",\n            onBack = { navController.popBackStack() },\n        )\n    },\n    isLoading = viewModel.isLoading,\n) { padding ->\n    SettingsContent(Modifier.padding(padding))\n}\n```\n\n@param modifier applied to the root container\n@param topBar top bar slot — typically [AurumPageHeader]. The top bar\n  should apply `statusBarsPadding()` internally (AurumPageHeader does\n  this when `applyStatusBarInsets = true`)\n@param bottomBar bottom bar slot — typically a CTA button row. Should\n  apply `navigationBarsPadding()` internally if it sits at the screen\n  bottom edge.\n@param snackbarHostState the [SnackbarHostState] for showing snackbars.\n  Call `snackbarHostState.showSnackbar(...)` from a coroutine.\n@param isLoading when true, draws a full-screen scrim (including behind\n  system bars) with a centered [AurumLoader]\n@param containerColor the screen background colour — defaults to the\n  Aurum page base (white in light mode)\n@param contentWindowInsets the window insets that the content should\n  respect. Defaults to [ScaffoldDefaults.contentWindowInsets] which\n  handles the remaining system insets not consumed by top/bottom bars.\n@param content the screen content lambda. Receives [PaddingValues] that\n  account for the top bar, bottom bar, and system insets. Apply via\n  `Modifier.padding(it)`.",
      "signature": "@Composable\nfun AurumScreen(\n    modifier: Modifier = Modifier,\n    topBar: @Composable () -> Unit = {},\n    bottomBar: @Composable () -> Unit = {},\n    snackbarHostState: SnackbarHostState = remember { SnackbarHostState() },\n    isLoading: Boolean = false,\n    containerColor: Color = Aurum.colors.surface.bgPageBase,\n    contentWindowInsets: WindowInsets = ScaffoldDefaults.contentWindowInsets,\n    content: @Composable (PaddingValues) -> Unit,\n)",
      "params": [
        {
          "name": "modifier",
          "type": "Modifier",
          "default": "Modifier",
          "doc": "applied to the root container"
        },
        {
          "name": "topBar",
          "type": "@Composable () -> Unit",
          "default": "{}",
          "doc": "top bar slot — typically [AurumPageHeader]. The top bar"
        },
        {
          "name": "bottomBar",
          "type": "@Composable () -> Unit",
          "default": "{}",
          "doc": "bottom bar slot — typically a CTA button row. Should"
        },
        {
          "name": "snackbarHostState",
          "type": "SnackbarHostState",
          "default": "remember { SnackbarHostState() }",
          "doc": "the [SnackbarHostState] for showing snackbars."
        },
        {
          "name": "isLoading",
          "type": "Boolean",
          "default": "false",
          "doc": "when true, draws a full-screen scrim (including behind"
        },
        {
          "name": "containerColor",
          "type": "Color",
          "default": "Aurum.colors.surface.bgPageBase",
          "doc": "the screen background colour — defaults to the"
        },
        {
          "name": "contentWindowInsets",
          "type": "WindowInsets",
          "default": "ScaffoldDefaults.contentWindowInsets",
          "doc": "the window insets that the content should"
        },
        {
          "name": "content",
          "type": "@Composable (PaddingValues) -> Unit",
          "default": null,
          "doc": "the screen content lambda. Receives [PaddingValues] that"
        }
      ],
      "previews": [
        "PreviewAurumScreenDefault",
        "PreviewAurumScreenLoading",
        "PreviewAurumScreenWithTopBar"
      ],
      "figmaNodeId": null,
      "figmaUrl": null,
      "figmaTagUrl": null,
      "codeConnectPath": null,
      "galleryUrl": "https://changejarapp.github.io/aurum-android/component/scaffold/AurumScreen.html",
      "sourcePath": "aurum/src/main/kotlin/com/jar/app/aurum/component/scaffold/AurumScreen.kt",
      "intendedUse": "Use as the root composable for **every full-screen** surface in the app. Combines edge-to-edge rendering, top/bottom bar slots, IME handling, snackbar host, and a loading scrim — all the scaffolding a screen normally re-implements ad-hoc. For bottom-sheet content or fragment-internal sub-screens this is overkill; compose directly with [AurumSurface] or a plain Column.",
      "usage": {
        "do": [
          "Pass an [AurumPageHeader] to `topBar` — its variants cover every header layout the design system supports.",
          "Use the provided `snackbarHostState` for transient feedback; never hand-roll a Snackbar host on top of `AurumScreen`.",
          "Hook `isLoading` to your ViewModel's loading state — the built-in scrim + loader covers the whole screen including behind system bars."
        ],
        "dont": [
          "Wrap `AurumScreen` inside another Scaffold — it IS the Scaffold; nesting breaks insets handling.",
          "Apply `systemBarsPadding()` to the root — that defeats edge-to-edge. Top / bottom bars handle their own insets.",
          "Use for non-full-screen surfaces (modals, bottom sheets, fragment-internal panes) — those should compose with [AurumSurface] directly."
        ]
      },
      "relatedTokens": [
        "overlay.bgNormal",
        "spacing.s11",
        "spacing.s3",
        "spacing.s5",
        "surface.bgPageBase",
        "surface.textDefaultSubtle",
        "typography.bodyLMedium",
        "typography.bodySRegular"
      ]
    },
    {
      "name": "AurumCheckbox",
      "family": "selection",
      "platforms": [
        "android"
      ],
      "summary": "Aurum's checkbox — a tri-state selection control.",
      "kdoc": "Aurum's checkbox — a tri-state selection control. Maps to the Figma\n`Checkbox` component (`5169:1314`). Pass `label = null` to render only\nthe box (Figma's `withoutLabel` variant). Use [AurumCheckboxGroup] for\nmulti-select sets; this is the building block for one option.\n\n@param checkState the tri-state selection\n@param onCheckStateChange called with the next state on tap; advances\n  `Unchecked -> Checked`, `Checked -> Unchecked`, `Indeterminate -> Checked`.\n  `null` for read-only / non-interactive rendering\n@param modifier applied to the root container\n@param label optional label text; `null` renders only the box\n@param subtext optional supporting text below the label, indented 32 dp from the box side\n@param enabled `false` fades label/subtext to disabled colour and disables tap handling\n@param error if `true`, outline + glyph use the feedback-negative colour\n@param labelPosition where the label sits relative to the box",
      "signature": "@Composable\nfun AurumCheckbox(\n    checkState: AurumCheckState,\n    onCheckStateChange: ((AurumCheckState) -> Unit)?,\n    modifier: Modifier = Modifier,\n    label: String? = null,\n    subtext: String? = null,\n    enabled: Boolean = true,\n    error: Boolean = false,\n    labelPosition: AurumCheckLabelPosition = AurumCheckLabelPosition.End,\n)",
      "params": [
        {
          "name": "checkState",
          "type": "AurumCheckState",
          "default": null,
          "doc": "the tri-state selection"
        },
        {
          "name": "onCheckStateChange",
          "type": "((AurumCheckState) -> Unit)?",
          "default": null,
          "doc": "called with the next state on tap; advances"
        },
        {
          "name": "modifier",
          "type": "Modifier",
          "default": "Modifier",
          "doc": "applied to the root container"
        },
        {
          "name": "label",
          "type": "String?",
          "default": "null",
          "doc": "optional label text; `null` renders only the box"
        },
        {
          "name": "subtext",
          "type": "String?",
          "default": "null",
          "doc": "optional supporting text below the label, indented 32 dp from the box side"
        },
        {
          "name": "enabled",
          "type": "Boolean",
          "default": "true",
          "doc": "`false` fades label/subtext to disabled colour and disables tap handling"
        },
        {
          "name": "error",
          "type": "Boolean",
          "default": "false",
          "doc": "if `true`, outline + glyph use the feedback-negative colour"
        },
        {
          "name": "labelPosition",
          "type": "AurumCheckLabelPosition",
          "default": "AurumCheckLabelPosition.End",
          "doc": "where the label sits relative to the box"
        }
      ],
      "previews": [
        "PreviewCheckedDefault",
        "PreviewDisabled",
        "PreviewError",
        "PreviewIndeterminate",
        "PreviewRightAligned",
        "PreviewUncheckedDefault",
        "PreviewWithSubtext",
        "PreviewWithoutLabel"
      ],
      "figmaNodeId": "5169:1314",
      "figmaUrl": "https://www.figma.com/design/YvIxqu2oTlM6UnkL0OloHc/?node-id=5169-1314",
      "figmaTagUrl": "https://www.figma.com/design/YvIxqu2oTlM6UnkL0OloHc/?node-id=5169-1314",
      "codeConnectPath": "aurum/src/main/kotlin/com/jar/app/aurum/component/selection/AurumCheckbox.figma.kt",
      "galleryUrl": "https://changejarapp.github.io/aurum-android/component/selection/AurumCheckbox.html",
      "sourcePath": "aurum/src/main/kotlin/com/jar/app/aurum/component/selection/AurumCheckbox.kt",
      "intendedUse": "Use as the building block inside [AurumCheckboxGroup] for multi-select forms (filter facets, terms-acceptance, \"select all that apply\"). Reach for it directly only for a standalone inclusion toggle — never for binary settings that take effect immediately (use `AurumSwitch`) or mutually-exclusive choice (use `AurumRadioGroup`).",
      "usage": {
        "do": [
          "Use [AurumCheckState.Indeterminate] only on a parent box that summarises a partially-selected child group; never as a standalone \"maybe\" state.",
          "Place the label `End` (default) for vertical lists; switch to `Start` only inside full-width list rows where the box anchors the trailing edge.",
          "Pair `error = true` with a `feedback-negative` helper line on the parent surface to communicate validation failure on required consent."
        ],
        "dont": [
          "Use a checkbox to fire navigation actions on tap — the box represents inclusion state, not a button.",
          "Hand-roll an \"indeterminate\" by overlaying a separator over a checked box; flip [AurumCheckState] instead so semantics are preserved.",
          "Render multiple `AurumCheckbox`es manually as a group; compose them via [AurumCheckboxGroup] so the group enforces label/error layout."
        ]
      },
      "relatedTokens": [
        "borderWidth.md",
        "feedback.borderNegativeIntense",
        "interactive.bgNeutralInverse",
        "interactive.bgPrimaryDefault",
        "interactive.bgPrimaryDisabled",
        "radius.md",
        "spacing.s3",
        "spacing.s4",
        "spacing.s8",
        "surface.borderSurfaceHighContrast",
        "surface.textDefaultDisabled",
        "surface.textDefaultNormal",
        "typography.bodyMMedium",
        "typography.bodyMRegular"
      ]
    },
    {
      "name": "AurumCheckboxGroup",
      "family": "selection",
      "platforms": [
        "android"
      ],
      "summary": "Aurum's checkbox group — a vertical stack of independently-selectable options.",
      "kdoc": "Aurum's checkbox group — a vertical stack of independently-selectable options.\n\nMaps to the Figma `CheckboxGroup` component (`5169:1796`). Pass [errorText] to\ntint every option to feedback-negative and switch the helper line to negative-normal.\n\n@param options the choices, in display order\n@param selected currently-selected values\n@param onSelectionChange called with `(value, true)` on select and `(value, false)` on clear\n@param modifier applied to the root column\n@param label optional group label above the options\n@param helperText supporting text below the options; suppressed when [errorText] is non-null\n@param errorText when non-null, switches the group into the validation-error visual and replaces [helperText]\n@param enabled gates interaction for the entire group\n@param labelPosition per-option label placement (see [AurumCheckLabelPosition])",
      "signature": "@Composable\nfun AurumCheckboxGroup(\n    options: ImmutableList<AurumCheckboxOption<T>>,\n    selected: ImmutableSet<T>,\n    onSelectionChange: (T,\n    Boolean) -> Unit,\n    modifier: Modifier = Modifier,\n    label: String? = null,\n    helperText: String? = null,\n    errorText: String? = null,\n    enabled: Boolean = true,\n    labelPosition: AurumCheckLabelPosition = AurumCheckLabelPosition.End,\n)",
      "params": [
        {
          "name": "options",
          "type": "ImmutableList<AurumCheckboxOption<T>>",
          "default": null,
          "doc": "the choices, in display order"
        },
        {
          "name": "selected",
          "type": "ImmutableSet<T>",
          "default": null,
          "doc": "currently-selected values"
        },
        {
          "name": "onSelectionChange",
          "type": "(T, Boolean) -> Unit",
          "default": null,
          "doc": "called with `(value, true)` on select and `(value, false)` on clear"
        },
        {
          "name": "modifier",
          "type": "Modifier",
          "default": "Modifier",
          "doc": "applied to the root column"
        },
        {
          "name": "label",
          "type": "String?",
          "default": "null",
          "doc": "optional group label above the options"
        },
        {
          "name": "helperText",
          "type": "String?",
          "default": "null",
          "doc": "supporting text below the options; suppressed when [errorText] is non-null"
        },
        {
          "name": "errorText",
          "type": "String?",
          "default": "null",
          "doc": "when non-null, switches the group into the validation-error visual and replaces [helperText]"
        },
        {
          "name": "enabled",
          "type": "Boolean",
          "default": "true",
          "doc": "gates interaction for the entire group"
        },
        {
          "name": "labelPosition",
          "type": "AurumCheckLabelPosition",
          "default": "AurumCheckLabelPosition.End",
          "doc": "per-option label placement (see [AurumCheckLabelPosition])"
        }
      ],
      "previews": [
        "PreviewBasicGroup",
        "PreviewGroupDisabled",
        "PreviewGroupError",
        "PreviewGroupRightAligned",
        "PreviewGroupWithoutSubtext"
      ],
      "figmaNodeId": "5169:1796",
      "figmaUrl": "https://www.figma.com/design/YvIxqu2oTlM6UnkL0OloHc/?node-id=5169-1796",
      "figmaTagUrl": "https://www.figma.com/design/YvIxqu2oTlM6UnkL0OloHc/?node-id=5169-1796",
      "codeConnectPath": "aurum/src/main/kotlin/com/jar/app/aurum/component/selection/AurumCheckboxGroup.figma.kt",
      "galleryUrl": "https://changejarapp.github.io/aurum-android/component/selection/AurumCheckboxGroup.html",
      "sourcePath": "aurum/src/main/kotlin/com/jar/app/aurum/component/selection/AurumCheckboxGroup.kt",
      "intendedUse": "Use to present 2–7 independently-selectable options (filter facets, \"select all that apply\", terms-acceptance lists). For mutually-exclusive choice, use [AurumRadioGroup] instead. For more than 7 options switch to a multi-select dropdown / `AurumSelect` (when available).",
      "usage": {
        "do": [
          "Keep `options` to a stable, bounded set — not for paginated or remotely-fetched data.",
          "Set `errorText` for required-selection forms (e.g. consent); clear it as soon as the user picks a valid combination.",
          "Place the group near its own contextual header — don't rely on `label` alone for grouping cues in dense forms."
        ],
        "dont": [
          "Mix per-option `enabled = false` with a top-level `enabled = false`; pick one disable mode.",
          "Use this for navigation lists where each tap moves the user — checkboxes capture inclusion state, not actions.",
          "Render the same option twice; the group assumes `value` uniqueness."
        ]
      },
      "relatedTokens": [
        "feedback.textNegativeIntense",
        "spacing.s3",
        "spacing.s4",
        "surface.textDefaultDisabled",
        "surface.textDefaultNormal",
        "typography.bodySRegular",
        "typography.labelLMedium"
      ]
    },
    {
      "name": "AurumRadioButton",
      "family": "selection",
      "platforms": [
        "android"
      ],
      "summary": "Aurum's radio button — a single-choice selection control.",
      "kdoc": "Aurum's radio button — a single-choice selection control.\n\nMaps to the Figma `radioButton` component (`5126:2507`) with three\nvariant axes (`isChecked`, `states`, `radioTypes`). Pass `label = null`\nto render only the circle (Figma's `withoutLabel` variant).\n\nUse [AurumRadioGroup] when you have a set of mutually-exclusive options;\nthis composable is the building block for one of those options.\n\n@param selected whether this option is currently chosen\n@param onClick called when the user taps the option, or `null` for\n  read-only / non-interactive rendering (still respects [enabled])\n@param modifier applied to the root container\n@param label optional label text; `null` renders only the circle\n@param subtext optional supporting text rendered below the label,\n  indented to align with the label (32 dp from the radio side)\n@param enabled whether the option is interactive — `false` fades the\n  label/subtext to disabled colour and disables tap handling\n@param error if `true`, the radio outline + dot are tinted with the\n  feedback-negative colour. Use to signal validation failure\n@param labelPosition where the label sits relative to the radio",
      "signature": "@Composable\nfun AurumRadioButton(\n    selected: Boolean,\n    onClick: (() -> Unit)?,\n    modifier: Modifier = Modifier,\n    label: String? = null,\n    subtext: String? = null,\n    enabled: Boolean = true,\n    error: Boolean = false,\n    labelPosition: AurumRadioLabelPosition = AurumRadioLabelPosition.End,\n)",
      "params": [
        {
          "name": "selected",
          "type": "Boolean",
          "default": null,
          "doc": "whether this option is currently chosen"
        },
        {
          "name": "onClick",
          "type": "(() -> Unit)?",
          "default": null,
          "doc": "called when the user taps the option, or `null` for"
        },
        {
          "name": "modifier",
          "type": "Modifier",
          "default": "Modifier",
          "doc": "applied to the root container"
        },
        {
          "name": "label",
          "type": "String?",
          "default": "null",
          "doc": "optional label text; `null` renders only the circle"
        },
        {
          "name": "subtext",
          "type": "String?",
          "default": "null",
          "doc": "optional supporting text rendered below the label,"
        },
        {
          "name": "enabled",
          "type": "Boolean",
          "default": "true",
          "doc": "whether the option is interactive — `false` fades the"
        },
        {
          "name": "error",
          "type": "Boolean",
          "default": "false",
          "doc": "if `true`, the radio outline + dot are tinted with the"
        },
        {
          "name": "labelPosition",
          "type": "AurumRadioLabelPosition",
          "default": "AurumRadioLabelPosition.End",
          "doc": "where the label sits relative to the radio"
        }
      ],
      "previews": [
        "PreviewCheckedDefault",
        "PreviewDisabled",
        "PreviewError",
        "PreviewRightAligned",
        "PreviewUncheckedDefault",
        "PreviewWithSubtext",
        "PreviewWithoutLabel"
      ],
      "figmaNodeId": "5126:2507",
      "figmaUrl": "https://www.figma.com/design/YvIxqu2oTlM6UnkL0OloHc/?node-id=5126-2507",
      "figmaTagUrl": "https://www.figma.com/design/YvIxqu2oTlM6UnkL0OloHc/?node-id=5126-2507",
      "codeConnectPath": "aurum/src/main/kotlin/com/jar/app/aurum/component/selection/AurumRadioButton.figma.kt",
      "galleryUrl": "https://changejarapp.github.io/aurum-android/component/selection/AurumRadioButton.html",
      "sourcePath": "aurum/src/main/kotlin/com/jar/app/aurum/component/selection/AurumRadioButton.kt",
      "intendedUse": "Use as the building block inside [AurumRadioGroup]. Reach for it directly only when you need a single radio circle outside a group context (e.g. an option summary card). For sets of mutually-exclusive options, always compose them via [AurumRadioGroup] so selection state stays consistent.",
      "usage": {
        "do": [
          "Place the label `End` (default) for vertical lists; switch to `Start` only inside full-width list rows where the radio anchors the trailing edge.",
          "Use `subtext` for short helper copy that disambiguates the option — keep it under one line.",
          "Pair `error = true` with a `feedback-negative` helper line on the parent surface to communicate validation failure."
        ],
        "dont": [
          "Use a single radio button to represent a binary toggle — use `AurumSwitch` instead.",
          "Render multiple `AurumRadioButton`s manually side-by-side; compose them via [AurumRadioGroup] so the group enforces single-selection invariants.",
          "Hand-roll a \"radio fill\" colour by overlaying `Aurum.colors.*`; recolour through `error` only."
        ]
      },
      "relatedTokens": [
        "feedback.borderNegativeIntense",
        "interactive.bgPrimaryDefault",
        "interactive.bgPrimaryDisabled",
        "spacing.s3",
        "spacing.s4",
        "spacing.s8",
        "surface.borderSurfaceHighContrast",
        "surface.textDefaultDisabled",
        "surface.textDefaultNormal",
        "typography.bodyMMedium",
        "typography.bodyMRegular"
      ]
    },
    {
      "name": "AurumRadioGroup",
      "family": "selection",
      "platforms": [
        "android"
      ],
      "summary": "Aurum's radio group — a vertical stack of mutually-exclusive options.",
      "kdoc": "Aurum's radio group — a vertical stack of mutually-exclusive options.\n\nMaps to the Figma `RadioGroup` component (`5157:2034`) with two\nvariant axes (`Validation`, plus boolean `showLabel` / `showHelptext`).\n\nPass [errorText] to opt into the error variant: every option's circle\ntints to feedback-negative and the helper line below switches from\nthe default disabled-grey to negative-normal.\n\n@param options the choices, in display order\n@param selected the currently-chosen value, or `null` if nothing is\n  selected yet\n@param onSelectionChange called with the new value when the user picks\n  an option\n@param modifier applied to the root column\n@param label optional group label rendered above the options\n@param helperText optional supporting text rendered below the options;\n  suppressed when [errorText] is non-null\n@param errorText error message — when non-null, switches the group\n  into the validation-error visual; replaces [helperText]\n@param enabled gates interaction for the entire group\n@param labelPosition controls each option's label placement\n  (see [AurumRadioLabelPosition])",
      "signature": "@Composable\nfun AurumRadioGroup(\n    options: ImmutableList<AurumRadioOption<T>>,\n    selected: T?,\n    onSelectionChange: (T) -> Unit,\n    modifier: Modifier = Modifier,\n    label: String? = null,\n    helperText: String? = null,\n    errorText: String? = null,\n    enabled: Boolean = true,\n    labelPosition: AurumRadioLabelPosition = AurumRadioLabelPosition.End,\n)",
      "params": [
        {
          "name": "options",
          "type": "ImmutableList<AurumRadioOption<T>>",
          "default": null,
          "doc": "the choices, in display order"
        },
        {
          "name": "selected",
          "type": "T?",
          "default": null,
          "doc": "the currently-chosen value, or `null` if nothing is"
        },
        {
          "name": "onSelectionChange",
          "type": "(T) -> Unit",
          "default": null,
          "doc": "called with the new value when the user picks"
        },
        {
          "name": "modifier",
          "type": "Modifier",
          "default": "Modifier",
          "doc": "applied to the root column"
        },
        {
          "name": "label",
          "type": "String?",
          "default": "null",
          "doc": "optional group label rendered above the options"
        },
        {
          "name": "helperText",
          "type": "String?",
          "default": "null",
          "doc": "optional supporting text rendered below the options;"
        },
        {
          "name": "errorText",
          "type": "String?",
          "default": "null",
          "doc": "error message — when non-null, switches the group"
        },
        {
          "name": "enabled",
          "type": "Boolean",
          "default": "true",
          "doc": "gates interaction for the entire group"
        },
        {
          "name": "labelPosition",
          "type": "AurumRadioLabelPosition",
          "default": "AurumRadioLabelPosition.End",
          "doc": "controls each option's label placement"
        }
      ],
      "previews": [
        "PreviewBasicGroup",
        "PreviewGroupDisabled",
        "PreviewGroupError",
        "PreviewGroupRightAligned",
        "PreviewGroupWithoutSubtext"
      ],
      "figmaNodeId": "5157:2034",
      "figmaUrl": "https://www.figma.com/design/YvIxqu2oTlM6UnkL0OloHc/?node-id=5157-2034",
      "figmaTagUrl": "https://www.figma.com/design/YvIxqu2oTlM6UnkL0OloHc/?node-id=5157-2034",
      "codeConnectPath": "aurum/src/main/kotlin/com/jar/app/aurum/component/selection/AurumRadioGroup.figma.kt",
      "galleryUrl": "https://changejarapp.github.io/aurum-android/component/selection/AurumRadioGroup.html",
      "sourcePath": "aurum/src/main/kotlin/com/jar/app/aurum/component/selection/AurumRadioGroup.kt",
      "intendedUse": "Use to present 2–7 mutually-exclusive options in a vertical list (form choice, plan picker, sort order). For more than 7 options switch to a dropdown / `AurumSelect` (when available) to keep the surface scannable. For exactly 2 balanced options, prefer a segmented control (when available).",
      "usage": {
        "do": [
          "Keep `options` to a stable, bounded set — radios are not meant for paginated or remotely-fetched data.",
          "Set `errorText` together with `feedback-negative` styling to communicate validation failure; clear it the moment the user picks a valid option.",
          "Place the group near its own contextual header — don't rely on `label` alone for grouping cues in dense forms."
        ],
        "dont": [
          "Mix per-option `enabled = false` with a top-level `enabled = false`; pick one disable mode and stick to it.",
          "Use a radio group to fire actions on each tap — use a row of `AurumChip`s for filter behaviour.",
          "Render the same option twice; the group assumes `value` uniqueness for selection comparisons."
        ]
      },
      "relatedTokens": [
        "feedback.textNegativeIntense",
        "spacing.s3",
        "spacing.s4",
        "surface.textDefaultDisabled",
        "surface.textDefaultNormal",
        "typography.bodySRegular",
        "typography.labelLMedium"
      ]
    },
    {
      "name": "AurumSwitch",
      "family": "selection",
      "platforms": [
        "android"
      ],
      "summary": "Aurum's switch (toggle) component.",
      "kdoc": "Aurum's switch (toggle) component.\n\nAllows users to toggle between two states (on/off) for immediate,\nbinary actions such as enabling or disabling a setting.\n\nWraps `material3.Switch` internally, overriding every visible style\nparameter from Aurum tokens. Features consume this composable — never\n`material3.Switch` directly.\n\n@param checked whether the switch is currently in the \"on\" position\n@param onCheckedChange called when the user toggles the switch, or `null`\n  to make the switch read-only (still respects [enabled] for styling)\n@param modifier the [Modifier] to apply\n@param enabled whether the switch is interactive — defaults to `true`",
      "signature": "@Composable\nfun AurumSwitch(\n    checked: Boolean,\n    onCheckedChange: ((Boolean) -> Unit)?,\n    modifier: Modifier = Modifier,\n    enabled: Boolean = true,\n)",
      "params": [
        {
          "name": "checked",
          "type": "Boolean",
          "default": null,
          "doc": "whether the switch is currently in the \"on\" position"
        },
        {
          "name": "onCheckedChange",
          "type": "((Boolean) -> Unit)?",
          "default": null,
          "doc": "called when the user toggles the switch, or `null`"
        },
        {
          "name": "modifier",
          "type": "Modifier",
          "default": "Modifier",
          "doc": "the [Modifier] to apply"
        },
        {
          "name": "enabled",
          "type": "Boolean",
          "default": "true",
          "doc": "whether the switch is interactive — defaults to `true`"
        }
      ],
      "previews": [
        "PreviewAurumSwitchStates"
      ],
      "figmaNodeId": "4018:557",
      "figmaUrl": "https://www.figma.com/design/YvIxqu2oTlM6UnkL0OloHc/?node-id=4018-557",
      "figmaTagUrl": "https://www.figma.com/design/YvIxqu2oTlM6UnkL0OloHc/?node-id=4018-557",
      "codeConnectPath": "aurum/src/main/kotlin/com/jar/app/aurum/component/selection/AurumSwitch.figma.kt",
      "galleryUrl": "https://changejarapp.github.io/aurum-android/component/selection/AurumSwitch.html",
      "sourcePath": "aurum/src/main/kotlin/com/jar/app/aurum/component/selection/AurumSwitch.kt",
      "intendedUse": "Use for binary settings that take effect **immediately** — notifications on/off, dark mode, biometric auth toggle. The state change is the action; there is no separate Save step. For a mutually-exclusive choice (between 2+ named options) use [AurumRadioGroup] instead; for form-style submit-on-confirm fields use a labelled [AurumTextField] or [AurumChip] selection.",
      "usage": {
        "do": [
          "Apply the effect synchronously when `onCheckedChange` fires — no \"Apply\" or \"Save\" step.",
          "Pair with a label and (optionally) a subtitle that names the setting clearly; never use a bare unlabelled switch.",
          "Reflect remote-sync failures by reverting the visual state and surfacing a transient [AurumToast] error."
        ],
        "dont": [
          "Use a switch as a form field that requires a separate submit — users will toggle and walk away expecting it to stick.",
          "Wrap `material3.Switch` directly anywhere in feature code; that's exactly what this component prevents.",
          "Use a switch to represent a 3-state setting (on / off / system-default) — switches are strictly binary."
        ]
      },
      "relatedTokens": [
        "iconSize.md",
        "interactive.bgNeutralDefault",
        "interactive.bgNeutralDisabled",
        "interactive.bgNeutralInverse",
        "interactive.bgPrimaryDefault",
        "interactive.iconNeutralDisabled",
        "interactive.iconPrimaryNormal",
        "spacing.s3",
        "surface.textDefaultNormal",
        "typography.bodyMRegular"
      ]
    },
    {
      "name": "AurumBottomSheet",
      "family": "sheet",
      "platforms": [
        "android"
      ],
      "summary": "Aurum's modal bottom sheet — a pure-Compose primitive built on Material3's [ModalBottomSheet].",
      "kdoc": "Aurum's modal bottom sheet — a pure-Compose primitive built on Material3's\n[ModalBottomSheet]. Renders Figma's bottom-sheet component set at file\nYvIxqu2oTlM6UnkL0OloHc, node 5564:43216.\n\nThe 24 dp grab-handle row sits above the rounded white card on the scrim,\nmatching Figma's notch placement.\n\n  - [AurumBottomSheetType.Strict] — built-in 56 dp page header (title),\n    scrollable [content], optional sticky bottom button. Use for\n    forms / filters / selections. Dismissal is via drag-handle / scrim\n    / system back — there is no top-right close button.\n  - [AurumBottomSheetType.Flexible] — no header, [content] owns its own\n    layout (full-bleed images, Lottie). Use for marketing / onboarding.",
      "signature": "@Composable\nfun AurumBottomSheet(\n    onDismiss: () -> Unit,\n    modifier: Modifier = Modifier,\n    type: AurumBottomSheetType = AurumBottomSheetType.Strict,\n    title: String? = null,\n    primaryButton: (@Composable () -> Unit)? = null,\n    content: @Composable ColumnScope.() -> Unit,\n)",
      "params": [
        {
          "name": "onDismiss",
          "type": "() -> Unit",
          "default": null,
          "doc": ""
        },
        {
          "name": "modifier",
          "type": "Modifier",
          "default": "Modifier",
          "doc": ""
        },
        {
          "name": "type",
          "type": "AurumBottomSheetType",
          "default": "AurumBottomSheetType.Strict",
          "doc": ""
        },
        {
          "name": "title",
          "type": "String?",
          "default": "null",
          "doc": ""
        },
        {
          "name": "primaryButton",
          "type": "(@Composable () -> Unit)?",
          "default": "null",
          "doc": ""
        },
        {
          "name": "content",
          "type": "@Composable ColumnScope.() -> Unit",
          "default": null,
          "doc": ""
        }
      ],
      "previews": [
        "PreviewBottomSheetFlexible",
        "PreviewBottomSheetStrict"
      ],
      "figmaNodeId": "6002:939",
      "figmaUrl": "https://www.figma.com/design/YvIxqu2oTlM6UnkL0OloHc/?node-id=6002-939",
      "figmaTagUrl": "https://www.figma.com/design/YvIxqu2oTlM6UnkL0OloHc/?node-id=6002-939",
      "codeConnectPath": "aurum/src/main/kotlin/com/jar/app/aurum/component/sheet/AurumBottomSheet.figma.kt",
      "galleryUrl": "https://changejarapp.github.io/aurum-android/component/sheet/AurumBottomSheet.html",
      "sourcePath": "aurum/src/main/kotlin/com/jar/app/aurum/component/sheet/AurumBottomSheet.kt",
      "intendedUse": "Use as the only bottom-sheet surface in feature code. Prefer over `material3.ModalBottomSheet` so the handle, corner radius, page header, and scrim are consistent across the app.",
      "usage": {
        "do": [
          "Use `Strict` for any sheet hosting form inputs / lists / filters — the page header gives users a predictable anchor.",
          "Pass [primaryButton] as an [AurumButton] (size [AurumButtonSize.Medium] for `Strict`, [AurumButtonSize.Small] for `Flexible`).",
          "Wrap scrollable content in a `Column(Modifier.verticalScroll(rememberScrollState()))` — the sheet does not scroll on its own."
        ],
        "dont": [
          "Use `Flexible` for forms / inputs — `Strict`'s page header anchors the title as a stable reference while the body scrolls underneath.",
          "Render a custom drag handle inside [content] — the built-in handle is part of the contract.",
          "Place a button inside [content] when [primaryButton] is the right slot — the bottom button is sticky and visually anchored."
        ]
      },
      "relatedTokens": [
        "overlay.bgNormal",
        "radius.xl",
        "spacing.s5",
        "surface.bgPageBase",
        "surface.textDefaultNormal",
        "surface.textDefaultSubtle",
        "typography.bodyMRegular",
        "typography.titleSSemiBold"
      ]
    },
    {
      "name": "AurumSurface",
      "family": "surface",
      "platforms": [
        "android"
      ],
      "summary": "Aurum's base container primitive.",
      "kdoc": "Aurum's base container primitive.\n\nA themed [Box] that applies background colour, shape clipping, optional\nborder, and optional elevation shadow. This is the building block for\ncards, banners, and any other visually-distinct surface.\n\nThis is a **scratch** component — built on [Box] from\n`androidx.compose.foundation`, not on `material3.Surface`.\n\n@param modifier the [Modifier] to apply\n@param color the surface fill colour — defaults to\n  [Aurum.colors.surface.bgSurfaceLowContrast]\n@param shape the clipping shape — defaults to [Aurum.shape.md]\n@param borderColor the stroke colour — `null` means no border (default)\n@param borderWidth the stroke width — defaults to [Aurum.borderWidth.sm]\n@param elevation structured shadow recipe — `null` means flat (default)\n@param content the composable content",
      "signature": "@Composable\nfun AurumSurface(\n    modifier: Modifier = Modifier,\n    color: Color = Aurum.colors.surface.bgSurfaceLowContrast,\n    shape: Shape = Aurum.shape.md,\n    borderColor: Color? = null,\n    borderWidth: Dp = Aurum.borderWidth.sm,\n    elevation: AurumElevationLevel? = null,\n    content: @Composable BoxScope.() -> Unit,\n)",
      "params": [
        {
          "name": "modifier",
          "type": "Modifier",
          "default": "Modifier",
          "doc": "the [Modifier] to apply"
        },
        {
          "name": "color",
          "type": "Color",
          "default": "Aurum.colors.surface.bgSurfaceLowContrast",
          "doc": "the surface fill colour — defaults to"
        },
        {
          "name": "shape",
          "type": "Shape",
          "default": "Aurum.shape.md",
          "doc": "the clipping shape — defaults to [Aurum.shape.md]"
        },
        {
          "name": "borderColor",
          "type": "Color?",
          "default": "null",
          "doc": "the stroke colour — `null` means no border (default)"
        },
        {
          "name": "borderWidth",
          "type": "Dp",
          "default": "Aurum.borderWidth.sm",
          "doc": "the stroke width — defaults to [Aurum.borderWidth.sm]"
        },
        {
          "name": "elevation",
          "type": "AurumElevationLevel?",
          "default": "null",
          "doc": "structured shadow recipe — `null` means flat (default)"
        },
        {
          "name": "content",
          "type": "@Composable BoxScope.() -> Unit",
          "default": null,
          "doc": "the composable content"
        }
      ],
      "previews": [
        "PreviewAurumSurface"
      ],
      "figmaNodeId": null,
      "figmaUrl": null,
      "figmaTagUrl": null,
      "codeConnectPath": null,
      "galleryUrl": "https://changejarapp.github.io/aurum-android/component/surface/AurumSurface.html",
      "sourcePath": "aurum/src/main/kotlin/com/jar/app/aurum/component/surface/AurumSurface.kt",
      "intendedUse": "Use to wrap visually-distinct content blocks that need consistent token-driven styling — cards, banners, sheet contents, any container that wants Aurum's background / radius / border / elevation in one shot. For full-screen scaffolds use [AurumScreen]; for transient feedback use [AurumToast].",
      "usage": {
        "do": [
          "Pick `color` from semantic surface tokens (`bgSurfaceLowContrast` / `bgSurfaceMidContrast` / `bgSurfaceHighContrast`) so contrast hierarchy stays consistent.",
          "Pair `elevation` with a token from [AurumElevationLevel] — never construct ad-hoc shadows.",
          "Use `borderColor = null` (default) when `elevation` is set; combining a hard border with a shadow looks crowded."
        ],
        "dont": [
          "Wrap `material3.Surface` directly anywhere in feature code — that's exactly what this primitive prevents.",
          "Use as a transparent overlay (use a scrim) or as a full-screen background (use [AurumScreen]).",
          "Mix raw `Color`s with `Aurum.colors.*` — recolour through tokens only."
        ]
      },
      "relatedTokens": [
        "borderWidth.sm",
        "elevation.lowRaised",
        "elevation.midRaised",
        "spacing.s4",
        "spacing.s5",
        "surface.bgBrandIntense",
        "surface.bgSurfaceLowContrast",
        "surface.borderSurfaceMidContrast",
        "surface.textOnBrandNormal"
      ]
    },
    {
      "name": "AurumLabel",
      "family": "text",
      "platforms": [
        "android"
      ],
      "summary": "Aurum's label primitive -- a small styled text element used for form field names, section titles, and metadata (status, category).",
      "kdoc": "Aurum's label primitive -- a small styled text element used for form field\nnames, section titles, and metadata (status, category).\n\nLabels are NOT badges. Badges have a pill-shaped coloured container; labels\nare plain styled text with type/emphasis control and optional uppercase\ntransformation.\n\nThis is a **scratch** component -- a thin styling wrapper over [AurumText],\nbuilt on `androidx.compose.foundation` with zero `material3` imports.\n\n## Usage\n\n```kotlin\nAurumLabel(text = \"First name\", type = AurumLabelType.Default)\nAurumLabel(text = \"Section\", type = AurumLabelType.Strong, isUpperCase = true)\n```\n\n@param text the label text to display\n@param modifier the [Modifier] to apply\n@param type the visual type controlling text colour --\n  defaults to [AurumLabelType.Default]\n@param isUpperCase when `true`, transforms [text] to uppercase.\n  Use sparingly for emphasis or small section headers.",
      "signature": "@Composable\nfun AurumLabel(\n    text: String,\n    modifier: Modifier = Modifier,\n    type: AurumLabelType = AurumLabelType.Default,\n    isUpperCase: Boolean = false,\n)",
      "params": [
        {
          "name": "text",
          "type": "String",
          "default": null,
          "doc": "the label text to display"
        },
        {
          "name": "modifier",
          "type": "Modifier",
          "default": "Modifier",
          "doc": "the [Modifier] to apply"
        },
        {
          "name": "type",
          "type": "AurumLabelType",
          "default": "AurumLabelType.Default",
          "doc": "the visual type controlling text colour --"
        },
        {
          "name": "isUpperCase",
          "type": "Boolean",
          "default": "false",
          "doc": "when `true`, transforms [text] to uppercase."
        }
      ],
      "previews": [
        "PreviewAurumLabel"
      ],
      "figmaNodeId": "3774:137816",
      "figmaUrl": "https://www.figma.com/design/YvIxqu2oTlM6UnkL0OloHc/?node-id=3774-137816",
      "figmaTagUrl": "https://www.figma.com/design/YvIxqu2oTlM6UnkL0OloHc/?node-id=3774-137816",
      "codeConnectPath": "aurum/src/main/kotlin/com/jar/app/aurum/component/text/AurumLabel.figma.kt",
      "galleryUrl": "https://changejarapp.github.io/aurum-android/component/text/AurumLabel.html",
      "sourcePath": "aurum/src/main/kotlin/com/jar/app/aurum/component/text/AurumLabel.kt",
      "intendedUse": "Use for short annotative text — form-field labels, helper / caption text, metadata rows. Labels read as supporting context around real content. For paragraph copy reach for [AurumText] with a `bodyM`+ style; for status pills use [AurumBadge].",
      "usage": {
        "do": [
          "Pick `type` from intent — `Default` for neutral context, `Subtle` for de-emphasised metadata, `Strong` when the label needs to stand out as a section break.",
          "Use `isUpperCase = true` only for short section markers (\"DETAILS\", \"OPTIONS\") — uppercase paragraphs become unreadable."
        ],
        "dont": [
          "Use as the page or section title — those are [AurumText] with `titleT*` styles or [AurumSectionHeader].",
          "Reach for [AurumLabel] when you need a coloured pill — that's [AurumBadge]."
        ]
      },
      "relatedTokens": [
        "feedback.textPrimaryIntense",
        "spacing.s3",
        "spacing.s5",
        "surface.textDefaultNormal",
        "surface.textDefaultSubtle",
        "typography.bodySRegular",
        "typography.labelLMedium"
      ]
    },
    {
      "name": "AurumText",
      "family": "text",
      "platforms": [
        "android"
      ],
      "summary": "Aurum's canonical text primitive.",
      "kdoc": "Aurum's canonical text primitive.\n\nWraps [BasicText] (not `material3.Text`) and applies Aurum typography\ntokens. If no [style] is provided, defaults to [Aurum.type.bodyMRegular].\n\n### Foreground resolution order\n1. Explicit [color] parameter — overrides anything in [style], including a [Brush].\n2. `style.brush` — gradient text passes through untouched (use `Aurum.type.foo.copy(brush = myBrush)`\n   or construct a `TextStyle(brush = …, …)`).\n3. `style.color` — honoured if set.\n4. Aurum's default text colour ([Aurum.colors.surface.textDefaultNormal]).\n\nThis is a **scratch** component — built on `androidx.compose.foundation`\nwith zero `material3` imports.\n\n@param text the text to display\n@param modifier the [Modifier] to apply\n@param style the [TextStyle] to use — prefer `Aurum.type.*` roles; may carry a [Brush]\n@param color the text colour — prefer `Aurum.colors.*` tokens. When specified, overrides [style]'s foreground\n  (brush or colour). Leave as [Color.Unspecified] to let the style decide.\n@param textAlign optional text alignment override\n@param maxLines maximum number of lines before truncation\n@param overflow how visual overflow is handled\n@param onTextLayout callback for text layout result",
      "signature": "@Composable\nfun AurumText(\n    text: String,\n    modifier: Modifier = Modifier,\n    style: TextStyle = Aurum.type.bodyMRegular,\n    color: Color = Color.Unspecified,\n    textAlign: TextAlign? = null,\n    maxLines: Int = Int.MAX_VALUE,\n    minLines: Int = 1,\n    overflow: TextOverflow = TextOverflow.Clip,\n    onTextLayout: ((TextLayoutResult) -> Unit)? = null,\n)",
      "params": [
        {
          "name": "text",
          "type": "String",
          "default": null,
          "doc": "the text to display"
        },
        {
          "name": "modifier",
          "type": "Modifier",
          "default": "Modifier",
          "doc": "the [Modifier] to apply"
        },
        {
          "name": "style",
          "type": "TextStyle",
          "default": "Aurum.type.bodyMRegular",
          "doc": "the [TextStyle] to use — prefer `Aurum.type.*` roles; may carry a [Brush]"
        },
        {
          "name": "color",
          "type": "Color",
          "default": "Color.Unspecified",
          "doc": "the text colour — prefer `Aurum.colors.*` tokens. When specified, overrides [style]'s foreground"
        },
        {
          "name": "textAlign",
          "type": "TextAlign?",
          "default": "null",
          "doc": "optional text alignment override"
        },
        {
          "name": "maxLines",
          "type": "Int",
          "default": "Int.MAX_VALUE",
          "doc": "maximum number of lines before truncation"
        },
        {
          "name": "minLines",
          "type": "Int",
          "default": "1",
          "doc": ""
        },
        {
          "name": "overflow",
          "type": "TextOverflow",
          "default": "TextOverflow.Clip",
          "doc": "how visual overflow is handled"
        },
        {
          "name": "onTextLayout",
          "type": "((TextLayoutResult) -> Unit)?",
          "default": "null",
          "doc": "callback for text layout result"
        }
      ],
      "previews": [
        "PreviewAurumText"
      ],
      "figmaNodeId": null,
      "figmaUrl": null,
      "figmaTagUrl": null,
      "codeConnectPath": null,
      "galleryUrl": "https://changejarapp.github.io/aurum-android/component/text/AurumText.html",
      "sourcePath": "aurum/src/main/kotlin/com/jar/app/aurum/component/text/AurumText.kt",
      "intendedUse": "Use as the canonical text primitive for **any** text rendered in feature code. Picks up Aurum typography + colour tokens by default so light/dark/state variants flow without per-call wiring. For small annotative text (form labels, captions) use [AurumLabel]; for paragraph copy use this with a `bodyM`+ style role.",
      "usage": {
        "do": [
          "Set `style = Aurum.type.<role>` to anchor in the design system's typographic scale.",
          "Pass `color` from `Aurum.colors.surface.text*` tokens — never a raw `Color()` literal.",
          "Cap multi-line copy with `maxLines + overflow = TextOverflow.Ellipsis` for predictable truncation in lists / cards."
        ],
        "dont": [
          "Wrap `androidx.compose.material3.Text` directly anywhere in feature code; this is exactly what `AurumText` prevents.",
          "Override `style.color` and `color` together — the explicit `color` param wins; pick one channel.",
          "Pass arbitrary `TextStyle(fontSize = …)` that bypasses `Aurum.type.*` — that's how typography drift starts."
        ]
      },
      "relatedTokens": [
        "spacing.s3",
        "surface.text",
        "surface.textBrandNormal",
        "surface.textDefaultDisabled",
        "surface.textDefaultNormal",
        "surface.textDefaultSubtle",
        "typography.bodyLMedium",
        "typography.bodyMRegular",
        "typography.bodySRegular",
        "typography.displayXXLBold",
        "typography.foo",
        "typography.titleXSSemiBold"
      ]
    }
  ],
  "tokens": {
    "color": {
      "semantic": {
        "surface": [
          {
            "name": "bgPageBase",
            "hex": "#FFFFFF",
            "alpha": 1.0,
            "path": "surface/background/page/base"
          },
          {
            "name": "bgPageBaseAlternate",
            "hex": "#ECEEF3",
            "alpha": 1.0,
            "path": "surface/background/page/base-alternate"
          },
          {
            "name": "bgSurfaceLowContrast",
            "hex": "#FFFFFF",
            "alpha": 1.0,
            "path": "surface/background/surface/lowContrast"
          },
          {
            "name": "bgSurfaceMidContrast",
            "hex": "#ECEEF3",
            "alpha": 1.0,
            "path": "surface/background/surface/midContrast"
          },
          {
            "name": "bgSurfaceHighContrast",
            "hex": "#DCDDE3",
            "alpha": 1.0,
            "path": "surface/background/surface/highContrast"
          },
          {
            "name": "bgBrandSubtle",
            "hex": "#7029CC17",
            "alpha": 0.09000000357627869,
            "path": "surface/background/brand/subtle"
          },
          {
            "name": "bgBrandIntense",
            "hex": "#7029CC",
            "alpha": 1.0,
            "path": "surface/background/brand/intense"
          },
          {
            "name": "borderSurfaceInverse",
            "hex": "#FFFFFF",
            "alpha": 1.0,
            "path": "surface/border/surface/inverse"
          },
          {
            "name": "borderSurfaceLowContrast",
            "hex": "#ECEEF3",
            "alpha": 1.0,
            "path": "surface/border/surface/lowContrast"
          },
          {
            "name": "borderSurfaceMidContrast",
            "hex": "#DCDDE3",
            "alpha": 1.0,
            "path": "surface/border/surface/midContrast"
          },
          {
            "name": "borderSurfaceHighContrast",
            "hex": "#C3C7D1",
            "alpha": 1.0,
            "path": "surface/border/surface/highContrast"
          },
          {
            "name": "borderBrandMuted",
            "hex": "#7029CC17",
            "alpha": 0.09000000357627869,
            "path": "surface/border/brand/muted"
          },
          {
            "name": "borderBrandNormal",
            "hex": "#7029CC",
            "alpha": 1.0,
            "path": "surface/border/brand/normal"
          },
          {
            "name": "textDefaultNormal",
            "hex": "#121212",
            "alpha": 1.0,
            "path": "surface/text/default/normal"
          },
          {
            "name": "textDefaultSubtle",
            "hex": "#4A4F5C",
            "alpha": 1.0,
            "path": "surface/text/default/subtle"
          },
          {
            "name": "textDefaultDisabled",
            "hex": "#848A99",
            "alpha": 1.0,
            "path": "surface/text/default/disabled"
          },
          {
            "name": "textDefaultInverse",
            "hex": "#FFFFFF",
            "alpha": 1.0,
            "path": "surface/text/default/inverse"
          },
          {
            "name": "textBrandNormal",
            "hex": "#7029CC",
            "alpha": 1.0,
            "path": "surface/text/brand/normal"
          },
          {
            "name": "textOnBrandNormal",
            "hex": "#FFFFFF",
            "alpha": 1.0,
            "path": "surface/text/onBrand/normal"
          },
          {
            "name": "textOnBrandSubtle",
            "hex": "#E2D4F5",
            "alpha": 1.0,
            "path": "surface/text/onBrand/subtle"
          },
          {
            "name": "textStaticWhiteNormal",
            "hex": "#FFFFFF",
            "alpha": 1.0,
            "path": "surface/text/staticWhite/normal"
          },
          {
            "name": "textStaticWhiteSubtle",
            "hex": "#FFFFFFE0",
            "alpha": 0.8799999952316284,
            "path": "surface/text/staticWhite/subtle"
          },
          {
            "name": "textStaticWhiteDisabled",
            "hex": "#FFFFFF52",
            "alpha": 0.3199999928474426,
            "path": "surface/text/staticWhite/disabled"
          },
          {
            "name": "textStaticBlackNormal",
            "hex": "#121212",
            "alpha": 1.0,
            "path": "surface/text/staticBlack/normal"
          },
          {
            "name": "textStaticBlackSubtle",
            "hex": "#121212B8",
            "alpha": 0.7200000286102295,
            "path": "surface/text/staticBlack/subtle"
          },
          {
            "name": "textStaticBlackDisabled",
            "hex": "#00000052",
            "alpha": 0.3199999928474426,
            "path": "surface/text/staticBlack/disabled"
          },
          {
            "name": "iconDefaultNormal",
            "hex": "#121212",
            "alpha": 1.0,
            "path": "surface/icon/default/normal"
          },
          {
            "name": "iconDefaultSubtle",
            "hex": "#4A4F5C",
            "alpha": 1.0,
            "path": "surface/icon/default/subtle"
          },
          {
            "name": "iconDefaultDisabled",
            "hex": "#848A99",
            "alpha": 1.0,
            "path": "surface/icon/default/disabled"
          },
          {
            "name": "iconDefaultInverse",
            "hex": "#FFFFFF",
            "alpha": 1.0,
            "path": "surface/icon/default/inverse"
          },
          {
            "name": "iconBrandNormal",
            "hex": "#7029CC",
            "alpha": 1.0,
            "path": "surface/icon/brand/normal"
          },
          {
            "name": "iconOnBrandNormal",
            "hex": "#FFFFFF",
            "alpha": 1.0,
            "path": "surface/icon/onBrand/normal"
          },
          {
            "name": "iconStaticWhiteNormal",
            "hex": "#FFFFFF",
            "alpha": 1.0,
            "path": "surface/icon/staticWhite/normal"
          },
          {
            "name": "iconStaticWhiteSubtle",
            "hex": "#FFFFFFE0",
            "alpha": 0.8799999952316284,
            "path": "surface/icon/staticWhite/subtle"
          },
          {
            "name": "iconStaticWhiteDisabled",
            "hex": "#FFFFFF52",
            "alpha": 0.3199999928474426,
            "path": "surface/icon/staticWhite/disabled"
          },
          {
            "name": "iconStaticBlackNormal",
            "hex": "#121212",
            "alpha": 1.0,
            "path": "surface/icon/staticBlack/normal"
          },
          {
            "name": "iconStaticBlackSubtle",
            "hex": "#121212B8",
            "alpha": 0.7200000286102295,
            "path": "surface/icon/staticBlack/subtle"
          },
          {
            "name": "iconStaticBlackDisabled",
            "hex": "#00000052",
            "alpha": 0.3199999928474426,
            "path": "surface/icon/staticBlack/disabled"
          }
        ],
        "feedback": [
          {
            "name": "bgPositiveIntense",
            "hex": "#10A342",
            "alpha": 1.0,
            "path": "feedback/background/positive/intense"
          },
          {
            "name": "bgPositiveSubtle",
            "hex": "#12B84A17",
            "alpha": 0.09000000357627869,
            "path": "feedback/background/positive/subtle"
          },
          {
            "name": "bgNegativeIntense",
            "hex": "#D83209",
            "alpha": 1.0,
            "path": "feedback/background/negative/intense"
          },
          {
            "name": "bgNegativeSubtle",
            "hex": "#D8320917",
            "alpha": 0.09000000357627869,
            "path": "feedback/background/negative/subtle"
          },
          {
            "name": "bgNoticeIntense",
            "hex": "#DA6105",
            "alpha": 1.0,
            "path": "feedback/background/notice/intense"
          },
          {
            "name": "bgNoticeSubtle",
            "hex": "#F26C0517",
            "alpha": 0.09000000357627869,
            "path": "feedback/background/notice/subtle"
          },
          {
            "name": "bgInformationIntense",
            "hex": "#055FDC",
            "alpha": 1.0,
            "path": "feedback/background/information/intense"
          },
          {
            "name": "bgInformationSubtle",
            "hex": "#055FDC17",
            "alpha": 0.09000000357627869,
            "path": "feedback/background/information/subtle"
          },
          {
            "name": "bgPrimaryIntense",
            "hex": "#7029CC",
            "alpha": 1.0,
            "path": "feedback/background/primary/intense"
          },
          {
            "name": "bgPrimarySubtle",
            "hex": "#7029CC2E",
            "alpha": 0.18000000715255737,
            "path": "feedback/background/primary/subtle"
          },
          {
            "name": "bgNeutralIntense",
            "hex": "#343844",
            "alpha": 1.0,
            "path": "feedback/background/neutral/intense"
          },
          {
            "name": "bgNeutralSubtle",
            "hex": "#6C849D2E",
            "alpha": 0.18000000715255737,
            "path": "feedback/background/neutral/subtle"
          },
          {
            "name": "borderPositiveIntense",
            "hex": "#10A342",
            "alpha": 1.0,
            "path": "feedback/border/positive/intense"
          },
          {
            "name": "borderPositiveSubtle",
            "hex": "#12B84A17",
            "alpha": 0.09000000357627869,
            "path": "feedback/border/positive/subtle"
          },
          {
            "name": "borderNegativeIntense",
            "hex": "#D83209",
            "alpha": 1.0,
            "path": "feedback/border/negative/intense"
          },
          {
            "name": "borderNegativeSubtle",
            "hex": "#D8320917",
            "alpha": 0.09000000357627869,
            "path": "feedback/border/negative/subtle"
          },
          {
            "name": "borderNoticeIntense",
            "hex": "#DA6105",
            "alpha": 1.0,
            "path": "feedback/border/notice/intense"
          },
          {
            "name": "borderNoticeSubtle",
            "hex": "#F26C0517",
            "alpha": 0.09000000357627869,
            "path": "feedback/border/notice/subtle"
          },
          {
            "name": "borderInformationIntense",
            "hex": "#055FDC",
            "alpha": 1.0,
            "path": "feedback/border/information/intense"
          },
          {
            "name": "borderInformationSubtle",
            "hex": "#055FDC17",
            "alpha": 0.09000000357627869,
            "path": "feedback/border/information/subtle"
          },
          {
            "name": "borderNeutralIntense",
            "hex": "#343844",
            "alpha": 1.0,
            "path": "feedback/border/neutral/intense"
          },
          {
            "name": "borderNeutralSubtle",
            "hex": "#6C849D17",
            "alpha": 0.09000000357627869,
            "path": "feedback/border/neutral/subtle"
          },
          {
            "name": "borderPrimaryIntense",
            "hex": "#7029CC",
            "alpha": 1.0,
            "path": "feedback/border/primary/intense"
          },
          {
            "name": "borderPrimarySubtle",
            "hex": "#7029CC2E",
            "alpha": 0.18000000715255737,
            "path": "feedback/border/primary/subtle"
          },
          {
            "name": "textPositiveIntense",
            "hex": "#10A342",
            "alpha": 1.0,
            "path": "feedback/text/positive/intense"
          },
          {
            "name": "textPositiveSubtle",
            "hex": "#2CD163",
            "alpha": 1.0,
            "path": "feedback/text/positive/subtle"
          },
          {
            "name": "textPositiveInverse",
            "hex": "#FFFFFF",
            "alpha": 1.0,
            "path": "feedback/text/positive/inverse"
          },
          {
            "name": "textNegativeIntense",
            "hex": "#D83209",
            "alpha": 1.0,
            "path": "feedback/text/negative/intense"
          },
          {
            "name": "textNegativeSubtle",
            "hex": "#F14C23",
            "alpha": 1.0,
            "path": "feedback/text/negative/subtle"
          },
          {
            "name": "textNegativeInverse",
            "hex": "#FFFFFF",
            "alpha": 1.0,
            "path": "feedback/text/negative/inverse"
          },
          {
            "name": "textNoticeIntense",
            "hex": "#DA6105",
            "alpha": 1.0,
            "path": "feedback/text/notice/intense"
          },
          {
            "name": "textNoticeSubtle",
            "hex": "#F37B1E",
            "alpha": 1.0,
            "path": "feedback/text/notice/subtle"
          },
          {
            "name": "textNoticeInverse",
            "hex": "#FFFFFF",
            "alpha": 1.0,
            "path": "feedback/text/notice/inverse"
          },
          {
            "name": "textInformationIntense",
            "hex": "#055FDC",
            "alpha": 1.0,
            "path": "feedback/text/information/intense"
          },
          {
            "name": "textInformationSubtle",
            "hex": "#3787F7",
            "alpha": 1.0,
            "path": "feedback/text/information/subtle"
          },
          {
            "name": "textInformationInverse",
            "hex": "#FFFFFF",
            "alpha": 1.0,
            "path": "feedback/text/information/inverse"
          },
          {
            "name": "textNeutralIntense",
            "hex": "#121212",
            "alpha": 1.0,
            "path": "feedback/text/neutral/intense"
          },
          {
            "name": "textNeutralSubtle",
            "hex": "#4A4F5C",
            "alpha": 1.0,
            "path": "feedback/text/neutral/subtle"
          },
          {
            "name": "textNeutralInverse",
            "hex": "#FFFFFF",
            "alpha": 1.0,
            "path": "feedback/text/neutral/inverse"
          },
          {
            "name": "textPrimaryIntense",
            "hex": "#7029CC",
            "alpha": 1.0,
            "path": "feedback/text/primary/intense"
          },
          {
            "name": "textPrimarySubtle",
            "hex": "#8D54D6",
            "alpha": 1.0,
            "path": "feedback/text/primary/subtle"
          },
          {
            "name": "textPrimaryInverse",
            "hex": "#FFFFFF",
            "alpha": 1.0,
            "path": "feedback/text/primary/inverse"
          },
          {
            "name": "iconPositiveIntense",
            "hex": "#10A342",
            "alpha": 1.0,
            "path": "feedback/icon/positive/intense"
          },
          {
            "name": "iconPositiveSubtle",
            "hex": "#2CD163",
            "alpha": 1.0,
            "path": "feedback/icon/positive/subtle"
          },
          {
            "name": "iconPositiveInverse",
            "hex": "#FFFFFF",
            "alpha": 1.0,
            "path": "feedback/icon/positive/inverse"
          },
          {
            "name": "iconNegativeIntense",
            "hex": "#D83209",
            "alpha": 1.0,
            "path": "feedback/icon/negative/intense"
          },
          {
            "name": "iconNegativeSubtle",
            "hex": "#F14C23",
            "alpha": 1.0,
            "path": "feedback/icon/negative/subtle"
          },
          {
            "name": "iconNegativeInverse",
            "hex": "#FFFFFF",
            "alpha": 1.0,
            "path": "feedback/icon/negative/inverse"
          },
          {
            "name": "iconNoticeIntense",
            "hex": "#DA6105",
            "alpha": 1.0,
            "path": "feedback/icon/notice/intense"
          },
          {
            "name": "iconNoticeSubtle",
            "hex": "#F37B1E",
            "alpha": 1.0,
            "path": "feedback/icon/notice/subtle"
          },
          {
            "name": "iconNoticeInverse",
            "hex": "#FFFFFF",
            "alpha": 1.0,
            "path": "feedback/icon/notice/inverse"
          },
          {
            "name": "iconInformationIntense",
            "hex": "#055FDC",
            "alpha": 1.0,
            "path": "feedback/icon/information/intense"
          },
          {
            "name": "iconInformationSubtle",
            "hex": "#3787F7",
            "alpha": 1.0,
            "path": "feedback/icon/information/subtle"
          },
          {
            "name": "iconInformationInverse",
            "hex": "#FFFFFF",
            "alpha": 1.0,
            "path": "feedback/icon/information/inverse"
          },
          {
            "name": "iconNeutralIntense",
            "hex": "#343844",
            "alpha": 1.0,
            "path": "feedback/icon/neutral/intense"
          },
          {
            "name": "iconNeutralSubtle",
            "hex": "#4A4F5C",
            "alpha": 1.0,
            "path": "feedback/icon/neutral/subtle"
          },
          {
            "name": "iconNeutralInverse",
            "hex": "#FFFFFF",
            "alpha": 1.0,
            "path": "feedback/icon/neutral/inverse"
          },
          {
            "name": "iconPrimaryIntense",
            "hex": "#7029CC",
            "alpha": 1.0,
            "path": "feedback/icon/primary/intense"
          },
          {
            "name": "iconPrimarySubtle",
            "hex": "#8D54D6",
            "alpha": 1.0,
            "path": "feedback/icon/primary/subtle"
          },
          {
            "name": "iconPrimaryInverse",
            "hex": "#FFFFFF",
            "alpha": 1.0,
            "path": "feedback/icon/primary/inverse"
          }
        ],
        "interactive": [
          {
            "name": "bgPositiveDefault",
            "hex": "#10A342",
            "alpha": 1.0,
            "path": "interactive/background/positive/default"
          },
          {
            "name": "bgPositiveHighlighted",
            "hex": "#0C7A31",
            "alpha": 1.0,
            "path": "interactive/background/positive/highlighted"
          },
          {
            "name": "bgPositiveDisabled",
            "hex": "#6C849D17",
            "alpha": 0.09000000357627869,
            "path": "interactive/background/positive/disabled"
          },
          {
            "name": "bgPositiveFaded",
            "hex": "#D0F5DC",
            "alpha": 1.0,
            "path": "interactive/background/positive/faded"
          },
          {
            "name": "bgNegativeDefault",
            "hex": "#D83209",
            "alpha": 1.0,
            "path": "interactive/background/negative/default"
          },
          {
            "name": "bgNegativeHighlighted",
            "hex": "#902206",
            "alpha": 1.0,
            "path": "interactive/background/negative/highlighted"
          },
          {
            "name": "bgNegativeDisabled",
            "hex": "#6C849D17",
            "alpha": 0.09000000357627869,
            "path": "interactive/background/negative/disabled"
          },
          {
            "name": "bgNegativeFaded",
            "hex": "#FCD7CE",
            "alpha": 1.0,
            "path": "interactive/background/negative/faded"
          },
          {
            "name": "bgInformationDefault",
            "hex": "#055FDC",
            "alpha": 1.0,
            "path": "interactive/background/information/default"
          },
          {
            "name": "bgInformationHighlighted",
            "hex": "#033F93",
            "alpha": 1.0,
            "path": "interactive/background/information/highlighted"
          },
          {
            "name": "bgInformationDisabled",
            "hex": "#6C849D17",
            "alpha": 0.09000000357627869,
            "path": "interactive/background/information/disabled"
          },
          {
            "name": "bgInformationFaded",
            "hex": "#CDE1FD",
            "alpha": 1.0,
            "path": "interactive/background/information/faded"
          },
          {
            "name": "bgNeutralDefault",
            "hex": "#DCDDE3",
            "alpha": 1.0,
            "path": "interactive/background/neutral/default"
          },
          {
            "name": "bgNeutralHighlighted",
            "hex": "#C3C7D1",
            "alpha": 1.0,
            "path": "interactive/background/neutral/highlighted"
          },
          {
            "name": "bgNeutralDisabled",
            "hex": "#6C849D17",
            "alpha": 0.09000000357627869,
            "path": "interactive/background/neutral/disabled"
          },
          {
            "name": "bgNeutralFaded",
            "hex": "#ECEEF3",
            "alpha": 1.0,
            "path": "interactive/background/neutral/faded"
          },
          {
            "name": "bgNeutralInverse",
            "hex": "#FFFFFF",
            "alpha": 1.0,
            "path": "interactive/background/neutral/Inverse"
          },
          {
            "name": "bgPrimaryDefault",
            "hex": "#7029CC",
            "alpha": 1.0,
            "path": "interactive/background/primary/default"
          },
          {
            "name": "bgPrimaryHighlighted",
            "hex": "#43197A",
            "alpha": 1.0,
            "path": "interactive/background/primary/highlighted"
          },
          {
            "name": "bgPrimaryDisabled",
            "hex": "#6C849D17",
            "alpha": 0.09000000357627869,
            "path": "interactive/background/primary/disabled"
          },
          {
            "name": "bgPrimaryFaded",
            "hex": "#E2D4F5",
            "alpha": 1.0,
            "path": "interactive/background/primary/faded"
          },
          {
            "name": "bgStaticWhiteDefault",
            "hex": "#FFFFFF",
            "alpha": 1.0,
            "path": "interactive/background/staticWhite/default"
          },
          {
            "name": "bgStaticWhiteHighlighted",
            "hex": "#FFFFFFCC",
            "alpha": 0.800000011920929,
            "path": "interactive/background/staticWhite/highlighted"
          },
          {
            "name": "bgStaticWhiteDisabled",
            "hex": "#FFFFFF2E",
            "alpha": 0.18000000715255737,
            "path": "interactive/background/staticWhite/disabled"
          },
          {
            "name": "bgStaticWhiteFaded",
            "hex": "#FFFFFF2E",
            "alpha": 0.18000000715255737,
            "path": "interactive/background/staticWhite/faded"
          },
          {
            "name": "bgStaticWhiteFadedHighlighted",
            "hex": "#FFFFFF52",
            "alpha": 0.3199999928474426,
            "path": "interactive/background/staticWhite/fadedHighlighted"
          },
          {
            "name": "bgStaticBlackDefault",
            "hex": "#121212",
            "alpha": 1.0,
            "path": "interactive/background/staticBlack/default"
          },
          {
            "name": "bgStaticBlackHighlighted",
            "hex": "#121212CC",
            "alpha": 0.800000011920929,
            "path": "interactive/background/staticBlack/highlighted"
          },
          {
            "name": "bgStaticBlackDisabled",
            "hex": "#1212122E",
            "alpha": 0.18000000715255737,
            "path": "interactive/background/staticBlack/disabled"
          },
          {
            "name": "bgStaticBlackFaded",
            "hex": "#1212122E",
            "alpha": 0.18000000715255737,
            "path": "interactive/background/staticBlack/faded"
          },
          {
            "name": "bgStaticBlackFadedHighlighted",
            "hex": "#12121252",
            "alpha": 0.3199999928474426,
            "path": "interactive/background/staticBlack/fadedHighlighted"
          },
          {
            "name": "borderPositiveDefault",
            "hex": "#10A342",
            "alpha": 1.0,
            "path": "interactive/border/positive/default"
          },
          {
            "name": "borderPositiveHighlighted",
            "hex": "#0C7A31",
            "alpha": 1.0,
            "path": "interactive/border/positive/highlighted"
          },
          {
            "name": "borderPositiveDisabled",
            "hex": "#6C849D17",
            "alpha": 0.09000000357627869,
            "path": "interactive/border/positive/disabled"
          },
          {
            "name": "borderPositiveMuted",
            "hex": "#12B84A17",
            "alpha": 0.09000000357627869,
            "path": "interactive/border/positive/muted"
          },
          {
            "name": "borderNegativeDefault",
            "hex": "#D83209",
            "alpha": 1.0,
            "path": "interactive/border/negative/default"
          },
          {
            "name": "borderNegativeHighlighted",
            "hex": "#902206",
            "alpha": 1.0,
            "path": "interactive/border/negative/highlighted"
          },
          {
            "name": "borderNegativeDisabled",
            "hex": "#6C849D17",
            "alpha": 0.09000000357627869,
            "path": "interactive/border/negative/disabled"
          },
          {
            "name": "borderNegativeMuted",
            "hex": "#D8320917",
            "alpha": 0.09000000357627869,
            "path": "interactive/border/negative/muted"
          },
          {
            "name": "borderInformationDefault",
            "hex": "#055FDC",
            "alpha": 1.0,
            "path": "interactive/border/information/default"
          },
          {
            "name": "borderInformationHighlighted",
            "hex": "#033F93",
            "alpha": 1.0,
            "path": "interactive/border/information/highlighted"
          },
          {
            "name": "borderInformationDisabled",
            "hex": "#6C849D17",
            "alpha": 0.09000000357627869,
            "path": "interactive/border/information/disabled"
          },
          {
            "name": "borderInformationMuted",
            "hex": "#055FDC17",
            "alpha": 0.09000000357627869,
            "path": "interactive/border/information/muted"
          },
          {
            "name": "borderNeutralDefault",
            "hex": "#ECEEF3",
            "alpha": 1.0,
            "path": "interactive/border/neutral/default"
          },
          {
            "name": "borderNeutralHighlighted",
            "hex": "#A4A9B6",
            "alpha": 1.0,
            "path": "interactive/border/neutral/highlighted"
          },
          {
            "name": "borderNeutralDisabled",
            "hex": "#6C849D17",
            "alpha": 0.09000000357627869,
            "path": "interactive/border/neutral/disabled"
          },
          {
            "name": "borderNeutralMuted",
            "hex": "#6C849D17",
            "alpha": 0.09000000357627869,
            "path": "interactive/border/neutral/muted"
          },
          {
            "name": "borderPrimaryDefault",
            "hex": "#7029CC",
            "alpha": 1.0,
            "path": "interactive/border/primary/default"
          },
          {
            "name": "borderPrimaryHighlighted",
            "hex": "#43197A",
            "alpha": 1.0,
            "path": "interactive/border/primary/highlighted"
          },
          {
            "name": "borderPrimaryDisabled",
            "hex": "#6C849D17",
            "alpha": 0.09000000357627869,
            "path": "interactive/border/primary/disabled"
          },
          {
            "name": "borderPrimaryMuted",
            "hex": "#7029CC17",
            "alpha": 0.09000000357627869,
            "path": "interactive/border/primary/muted"
          },
          {
            "name": "textPositiveNormal",
            "hex": "#10A342",
            "alpha": 1.0,
            "path": "interactive/text/positive/normal"
          },
          {
            "name": "textPositiveSubtle",
            "hex": "#43D675",
            "alpha": 1.0,
            "path": "interactive/text/positive/subtle"
          },
          {
            "name": "textPositiveDisabled",
            "hex": "#C3C7D1",
            "alpha": 1.0,
            "path": "interactive/text/positive/disabled"
          },
          {
            "name": "textNegativeNormal",
            "hex": "#D83209",
            "alpha": 1.0,
            "path": "interactive/text/negative/normal"
          },
          {
            "name": "textNegativeSubtle",
            "hex": "#F3603B",
            "alpha": 1.0,
            "path": "interactive/text/negative/subtle"
          },
          {
            "name": "textNegativeDisabled",
            "hex": "#C3C7D1",
            "alpha": 1.0,
            "path": "interactive/text/negative/disabled"
          },
          {
            "name": "textNoticeNormal",
            "hex": "#055FDC",
            "alpha": 1.0,
            "path": "interactive/text/notice/normal"
          },
          {
            "name": "textNoticeSubtle",
            "hex": "#3787F7",
            "alpha": 1.0,
            "path": "interactive/text/notice/subtle"
          },
          {
            "name": "textNoticeDisabled",
            "hex": "#C3C7D1",
            "alpha": 1.0,
            "path": "interactive/text/notice/disabled"
          },
          {
            "name": "textNeutralNormal",
            "hex": "#121212",
            "alpha": 1.0,
            "path": "interactive/text/neutral/normal"
          },
          {
            "name": "textNeutralSubtle",
            "hex": "#4A4F5C",
            "alpha": 1.0,
            "path": "interactive/text/neutral/subtle"
          },
          {
            "name": "textNeutralDisabled",
            "hex": "#C3C7D1",
            "alpha": 1.0,
            "path": "interactive/text/neutral/disabled"
          },
          {
            "name": "textPrimaryNormal",
            "hex": "#7029CC",
            "alpha": 1.0,
            "path": "interactive/text/primary/normal"
          },
          {
            "name": "textPrimarySubtle",
            "hex": "#8D54D6",
            "alpha": 1.0,
            "path": "interactive/text/primary/subtle"
          },
          {
            "name": "textPrimaryDisabled",
            "hex": "#C3C7D1",
            "alpha": 1.0,
            "path": "interactive/text/primary/disabled"
          },
          {
            "name": "textOnPrimaryNormal",
            "hex": "#FFFFFF",
            "alpha": 1.0,
            "path": "interactive/text/onPrimary/normal"
          },
          {
            "name": "textOnPrimarySubtle",
            "hex": "#FFFFFFE0",
            "alpha": 0.8799999952316284,
            "path": "interactive/text/onPrimary/subtle"
          },
          {
            "name": "textOnPrimaryDisabled",
            "hex": "#FFFFFF52",
            "alpha": 0.3199999928474426,
            "path": "interactive/text/onPrimary/disabled"
          },
          {
            "name": "textStaticWhiteNormal",
            "hex": "#FFFFFF",
            "alpha": 1.0,
            "path": "interactive/text/staticWhite/normal"
          },
          {
            "name": "textStaticWhiteSubtle",
            "hex": "#FFFFFFCC",
            "alpha": 0.800000011920929,
            "path": "interactive/text/staticWhite/subtle"
          },
          {
            "name": "textStaticWhiteDisabled",
            "hex": "#FFFFFF52",
            "alpha": 0.3199999928474426,
            "path": "interactive/text/staticWhite/disabled"
          },
          {
            "name": "textStaticBlackNormal",
            "hex": "#121212",
            "alpha": 1.0,
            "path": "interactive/text/staticBlack/normal"
          },
          {
            "name": "textStaticBlackSubtle",
            "hex": "#121212CC",
            "alpha": 0.800000011920929,
            "path": "interactive/text/staticBlack/subtle"
          },
          {
            "name": "textStaticBlackDisabled",
            "hex": "#12121252",
            "alpha": 0.3199999928474426,
            "path": "interactive/text/staticBlack/disabled"
          },
          {
            "name": "iconPositiveNormal",
            "hex": "#10A342",
            "alpha": 1.0,
            "path": "interactive/icon/positive/normal"
          },
          {
            "name": "iconPositiveSubtle",
            "hex": "#43D675",
            "alpha": 1.0,
            "path": "interactive/icon/positive/subtle"
          },
          {
            "name": "iconPositiveDisabled",
            "hex": "#C3C7D1",
            "alpha": 1.0,
            "path": "interactive/icon/positive/disabled"
          },
          {
            "name": "iconNegativeNormal",
            "hex": "#D83209",
            "alpha": 1.0,
            "path": "interactive/icon/negative/normal"
          },
          {
            "name": "iconNegativeSubtle",
            "hex": "#F3603B",
            "alpha": 1.0,
            "path": "interactive/icon/negative/subtle"
          },
          {
            "name": "iconNegativeDisabled",
            "hex": "#C3C7D1",
            "alpha": 1.0,
            "path": "interactive/icon/negative/disabled"
          },
          {
            "name": "iconNoticeNormal",
            "hex": "#055FDC",
            "alpha": 1.0,
            "path": "interactive/icon/notice/normal"
          },
          {
            "name": "iconNoticeSubtle",
            "hex": "#3787F7",
            "alpha": 1.0,
            "path": "interactive/icon/notice/subtle"
          },
          {
            "name": "iconNoticeDisabled",
            "hex": "#C3C7D1",
            "alpha": 1.0,
            "path": "interactive/icon/notice/disabled"
          },
          {
            "name": "iconPrimaryNormal",
            "hex": "#7029CC",
            "alpha": 1.0,
            "path": "interactive/icon/primary/normal"
          },
          {
            "name": "iconPrimarySubtle",
            "hex": "#8D54D6",
            "alpha": 1.0,
            "path": "interactive/icon/primary/subtle"
          },
          {
            "name": "iconPrimaryDisabled",
            "hex": "#C3C7D1",
            "alpha": 1.0,
            "path": "interactive/icon/primary/disabled"
          },
          {
            "name": "iconOnPrimaryNormal",
            "hex": "#FFFFFF",
            "alpha": 1.0,
            "path": "interactive/icon/onPrimary/normal"
          },
          {
            "name": "iconOnPrimarySubtle",
            "hex": "#FFFFFFE0",
            "alpha": 0.8799999952316284,
            "path": "interactive/icon/onPrimary/subtle"
          },
          {
            "name": "iconOnPrimaryDisabled",
            "hex": "#FFFFFF52",
            "alpha": 0.3199999928474426,
            "path": "interactive/icon/onPrimary/disabled"
          },
          {
            "name": "iconNeutralNormal",
            "hex": "#121212",
            "alpha": 1.0,
            "path": "interactive/icon/neutral/normal"
          },
          {
            "name": "iconNeutralSubtle",
            "hex": "#4A4F5C",
            "alpha": 1.0,
            "path": "interactive/icon/neutral/subtle"
          },
          {
            "name": "iconNeutralDisabled",
            "hex": "#C3C7D1",
            "alpha": 1.0,
            "path": "interactive/icon/neutral/disabled"
          },
          {
            "name": "iconStaticWhiteNormal",
            "hex": "#FFFFFF",
            "alpha": 1.0,
            "path": "interactive/icon/staticWhite/normal"
          },
          {
            "name": "iconStaticWhiteSubtle",
            "hex": "#FFFFFFCC",
            "alpha": 0.800000011920929,
            "path": "interactive/icon/staticWhite/subtle"
          },
          {
            "name": "iconStaticWhiteDisabled",
            "hex": "#FFFFFF52",
            "alpha": 0.3199999928474426,
            "path": "interactive/icon/staticWhite/disabled"
          },
          {
            "name": "iconStaticBlackNormal",
            "hex": "#121212",
            "alpha": 1.0,
            "path": "interactive/icon/staticBlack/normal"
          },
          {
            "name": "iconStaticBlackSubtle",
            "hex": "#121212CC",
            "alpha": 0.800000011920929,
            "path": "interactive/icon/staticBlack/subtle"
          },
          {
            "name": "iconStaticBlackDisabled",
            "hex": "#12121252",
            "alpha": 0.3199999928474426,
            "path": "interactive/icon/staticBlack/disabled"
          }
        ],
        "overlay": [
          {
            "name": "bgNormal",
            "hex": "#121212E0",
            "alpha": 0.8799999952316284,
            "path": "overlay/background/normal"
          },
          {
            "name": "bgSubtle",
            "hex": "#1212128F",
            "alpha": 0.5600000023841858,
            "path": "overlay/background/subtle"
          }
        ],
        "popup": [
          {
            "name": "bgSubtle",
            "hex": "#ECEEF3",
            "alpha": 1.0,
            "path": "popup/background/subtle"
          },
          {
            "name": "bgIntense",
            "hex": "#FFFFFF",
            "alpha": 1.0,
            "path": "popup/background/intense"
          },
          {
            "name": "bordersSubtle",
            "hex": "#DCDDE3",
            "alpha": 1.0,
            "path": "popup/borders/subtle"
          },
          {
            "name": "bordersIntense",
            "hex": "#343844",
            "alpha": 1.0,
            "path": "popup/borders/intense"
          }
        ],
        "elevation": [
          {
            "name": "lowRaised",
            "hex": "#12121217",
            "alpha": 0.09000000357627869,
            "path": "elevation/lowRaised"
          },
          {
            "name": "midRaised",
            "hex": "#1212121F",
            "alpha": 0.11999999731779099,
            "path": "elevation/midRaised"
          },
          {
            "name": "highRaised",
            "hex": "#1212122E",
            "alpha": 0.18000000715255737,
            "path": "elevation/highRaised"
          },
          {
            "name": "_bottomsheet",
            "hex": "#1212122E",
            "alpha": 0.18000000715255737,
            "path": "elevation/_bottomsheet"
          },
          {
            "name": "_toast",
            "hex": "#1212121F",
            "alpha": 0.11999999731779099,
            "path": "elevation/_toast"
          }
        ]
      },
      "visual": {
        "purple": [
          {
            "name": "50",
            "hex": "#E2D4F5",
            "alpha": 1.0,
            "path": "colors/purple/50"
          },
          {
            "name": "100",
            "hex": "#C6A9EB",
            "alpha": 1.0,
            "path": "colors/purple/100"
          },
          {
            "name": "200",
            "hex": "#A97FE0",
            "alpha": 1.0,
            "path": "colors/purple/200"
          },
          {
            "name": "300",
            "hex": "#8D54D6",
            "alpha": 1.0,
            "path": "colors/purple/300"
          },
          {
            "name": "400",
            "hex": "#7E3ED1",
            "alpha": 1.0,
            "path": "colors/purple/400"
          },
          {
            "name": "500",
            "hex": "#7029CC",
            "alpha": 1.0,
            "path": "colors/purple/500"
          },
          {
            "name": "600",
            "hex": "#6525B8",
            "alpha": 1.0,
            "path": "colors/purple/600"
          },
          {
            "name": "700",
            "hex": "#5A21A3",
            "alpha": 1.0,
            "path": "colors/purple/700"
          },
          {
            "name": "800",
            "hex": "#43197A",
            "alpha": 1.0,
            "path": "colors/purple/800"
          },
          {
            "name": "900",
            "hex": "#2D1052",
            "alpha": 1.0,
            "path": "colors/purple/900"
          },
          {
            "name": "1000",
            "hex": "#160829",
            "alpha": 1.0,
            "path": "colors/purple/1000"
          }
        ],
        "yellow": [
          {
            "name": "50",
            "hex": "#FDF4CE",
            "alpha": 1.0,
            "path": "colors/yellow/50"
          },
          {
            "name": "100",
            "hex": "#FCE99D",
            "alpha": 1.0,
            "path": "colors/yellow/100"
          },
          {
            "name": "200",
            "hex": "#FADE6C",
            "alpha": 1.0,
            "path": "colors/yellow/200"
          },
          {
            "name": "300",
            "hex": "#F9D33B",
            "alpha": 1.0,
            "path": "colors/yellow/300"
          },
          {
            "name": "400",
            "hex": "#F8CD23",
            "alpha": 1.0,
            "path": "colors/yellow/400"
          },
          {
            "name": "500",
            "hex": "#F7C80A",
            "alpha": 1.0,
            "path": "colors/yellow/500"
          },
          {
            "name": "600",
            "hex": "#DEB409",
            "alpha": 1.0,
            "path": "colors/yellow/600"
          },
          {
            "name": "700",
            "hex": "#C6A008",
            "alpha": 1.0,
            "path": "colors/yellow/700"
          },
          {
            "name": "800",
            "hex": "#947806",
            "alpha": 1.0,
            "path": "colors/yellow/800"
          },
          {
            "name": "900",
            "hex": "#635004",
            "alpha": 1.0,
            "path": "colors/yellow/900"
          },
          {
            "name": "1000",
            "hex": "#312802",
            "alpha": 1.0,
            "path": "colors/yellow/1000"
          }
        ],
        "green": [
          {
            "name": "50",
            "hex": "#D0F5DC",
            "alpha": 1.0,
            "path": "colors/green/50"
          },
          {
            "name": "100",
            "hex": "#A1EBBA",
            "alpha": 1.0,
            "path": "colors/green/100"
          },
          {
            "name": "200",
            "hex": "#72E097",
            "alpha": 1.0,
            "path": "colors/green/200"
          },
          {
            "name": "300",
            "hex": "#43D675",
            "alpha": 1.0,
            "path": "colors/green/300"
          },
          {
            "name": "400",
            "hex": "#2CD163",
            "alpha": 1.0,
            "path": "colors/green/400"
          },
          {
            "name": "500",
            "hex": "#14CC52",
            "alpha": 1.0,
            "path": "colors/green/500"
          },
          {
            "name": "600",
            "hex": "#12B84A",
            "alpha": 1.0,
            "path": "colors/green/600"
          },
          {
            "name": "700",
            "hex": "#10A342",
            "alpha": 1.0,
            "path": "colors/green/700"
          },
          {
            "name": "800",
            "hex": "#0C7A31",
            "alpha": 1.0,
            "path": "colors/green/800"
          },
          {
            "name": "900",
            "hex": "#085221",
            "alpha": 1.0,
            "path": "colors/green/900"
          },
          {
            "name": "1000",
            "hex": "#042910",
            "alpha": 1.0,
            "path": "colors/green/1000"
          }
        ],
        "red": [
          {
            "name": "50",
            "hex": "#FCD7CE",
            "alpha": 1.0,
            "path": "colors/red/50"
          },
          {
            "name": "100",
            "hex": "#F9AF9D",
            "alpha": 1.0,
            "path": "colors/red/100"
          },
          {
            "name": "200",
            "hex": "#F6886C",
            "alpha": 1.0,
            "path": "colors/red/200"
          },
          {
            "name": "300",
            "hex": "#F3603B",
            "alpha": 1.0,
            "path": "colors/red/300"
          },
          {
            "name": "400",
            "hex": "#F14C23",
            "alpha": 1.0,
            "path": "colors/red/400"
          },
          {
            "name": "500",
            "hex": "#F0380A",
            "alpha": 1.0,
            "path": "colors/red/500"
          },
          {
            "name": "600",
            "hex": "#D83209",
            "alpha": 1.0,
            "path": "colors/red/600"
          },
          {
            "name": "700",
            "hex": "#C02D08",
            "alpha": 1.0,
            "path": "colors/red/700"
          },
          {
            "name": "800",
            "hex": "#902206",
            "alpha": 1.0,
            "path": "colors/red/800"
          },
          {
            "name": "900",
            "hex": "#601604",
            "alpha": 1.0,
            "path": "colors/red/900"
          },
          {
            "name": "1000",
            "hex": "#300B02",
            "alpha": 1.0,
            "path": "colors/red/1000"
          }
        ],
        "orange": [
          {
            "name": "50",
            "hex": "#FCE2CD",
            "alpha": 1.0,
            "path": "colors/orange/50"
          },
          {
            "name": "100",
            "hex": "#FAC49B",
            "alpha": 1.0,
            "path": "colors/orange/100"
          },
          {
            "name": "200",
            "hex": "#F7A769",
            "alpha": 1.0,
            "path": "colors/orange/200"
          },
          {
            "name": "300",
            "hex": "#F58937",
            "alpha": 1.0,
            "path": "colors/orange/300"
          },
          {
            "name": "400",
            "hex": "#F37B1E",
            "alpha": 1.0,
            "path": "colors/orange/400"
          },
          {
            "name": "500",
            "hex": "#F26C05",
            "alpha": 1.0,
            "path": "colors/orange/500"
          },
          {
            "name": "600",
            "hex": "#DA6105",
            "alpha": 1.0,
            "path": "colors/orange/600"
          },
          {
            "name": "700",
            "hex": "#C25604",
            "alpha": 1.0,
            "path": "colors/orange/700"
          },
          {
            "name": "800",
            "hex": "#914103",
            "alpha": 1.0,
            "path": "colors/orange/800"
          },
          {
            "name": "900",
            "hex": "#612B02",
            "alpha": 1.0,
            "path": "colors/orange/900"
          },
          {
            "name": "1000",
            "hex": "#301601",
            "alpha": 1.0,
            "path": "colors/orange/1000"
          }
        ],
        "blue": [
          {
            "name": "50",
            "hex": "#CDE1FD",
            "alpha": 1.0,
            "path": "colors/blue/50"
          },
          {
            "name": "100",
            "hex": "#9BC3FB",
            "alpha": 1.0,
            "path": "colors/blue/100"
          },
          {
            "name": "200",
            "hex": "#69A5F9",
            "alpha": 1.0,
            "path": "colors/blue/200"
          },
          {
            "name": "300",
            "hex": "#3787F7",
            "alpha": 1.0,
            "path": "colors/blue/300"
          },
          {
            "name": "400",
            "hex": "#1E78F6",
            "alpha": 1.0,
            "path": "colors/blue/400"
          },
          {
            "name": "500",
            "hex": "#0569F5",
            "alpha": 1.0,
            "path": "colors/blue/500"
          },
          {
            "name": "600",
            "hex": "#055FDC",
            "alpha": 1.0,
            "path": "colors/blue/600"
          },
          {
            "name": "700",
            "hex": "#0454C4",
            "alpha": 1.0,
            "path": "colors/blue/700"
          },
          {
            "name": "800",
            "hex": "#033F93",
            "alpha": 1.0,
            "path": "colors/blue/800"
          },
          {
            "name": "900",
            "hex": "#022A62",
            "alpha": 1.0,
            "path": "colors/blue/900"
          },
          {
            "name": "1000",
            "hex": "#011531",
            "alpha": 1.0,
            "path": "colors/blue/1000"
          }
        ],
        "pink": [
          {
            "name": "50",
            "hex": "#FCCEE9",
            "alpha": 1.0,
            "path": "colors/pink/50"
          },
          {
            "name": "100",
            "hex": "#FA9ED3",
            "alpha": 1.0,
            "path": "colors/pink/100"
          },
          {
            "name": "200",
            "hex": "#F76DBE",
            "alpha": 1.0,
            "path": "colors/pink/200"
          },
          {
            "name": "300",
            "hex": "#F53DA8",
            "alpha": 1.0,
            "path": "colors/pink/300"
          },
          {
            "name": "400",
            "hex": "#F3249D",
            "alpha": 1.0,
            "path": "colors/pink/400"
          },
          {
            "name": "500",
            "hex": "#F20C92",
            "alpha": 1.0,
            "path": "colors/pink/500"
          },
          {
            "name": "600",
            "hex": "#DA0B83",
            "alpha": 1.0,
            "path": "colors/pink/600"
          },
          {
            "name": "700",
            "hex": "#C20A75",
            "alpha": 1.0,
            "path": "colors/pink/700"
          },
          {
            "name": "800",
            "hex": "#910758",
            "alpha": 1.0,
            "path": "colors/pink/800"
          },
          {
            "name": "900",
            "hex": "#61053A",
            "alpha": 1.0,
            "path": "colors/pink/900"
          },
          {
            "name": "1000",
            "hex": "#30021D",
            "alpha": 1.0,
            "path": "colors/pink/1000"
          }
        ],
        "silver": [
          {
            "name": "50",
            "hex": "#EEF1FC",
            "alpha": 1.0,
            "path": "colors/silver/50"
          },
          {
            "name": "100",
            "hex": "#E1E6F9",
            "alpha": 1.0,
            "path": "colors/silver/100"
          },
          {
            "name": "200",
            "hex": "#CBD3F3",
            "alpha": 1.0,
            "path": "colors/silver/200"
          },
          {
            "name": "300",
            "hex": "#A1B0E5",
            "alpha": 1.0,
            "path": "colors/silver/300"
          },
          {
            "name": "400",
            "hex": "#7A8ACC",
            "alpha": 1.0,
            "path": "colors/silver/400"
          },
          {
            "name": "500",
            "hex": "#6070AE",
            "alpha": 1.0,
            "path": "colors/silver/500"
          },
          {
            "name": "600",
            "hex": "#4C588B",
            "alpha": 1.0,
            "path": "colors/silver/600"
          },
          {
            "name": "700",
            "hex": "#303C6E",
            "alpha": 1.0,
            "path": "colors/silver/700"
          },
          {
            "name": "800",
            "hex": "#263056",
            "alpha": 1.0,
            "path": "colors/silver/800"
          },
          {
            "name": "900",
            "hex": "#1C233E",
            "alpha": 1.0,
            "path": "colors/silver/900"
          },
          {
            "name": "1000",
            "hex": "#14182A",
            "alpha": 1.0,
            "path": "colors/silver/1000"
          }
        ]
      }
    },
    "spacing": [
      {
        "name": "s0",
        "dp": 0.0,
        "comment": ""
      },
      {
        "name": "s1",
        "dp": 2.0,
        "comment": ""
      },
      {
        "name": "s2",
        "dp": 4.0,
        "comment": ""
      },
      {
        "name": "s3",
        "dp": 8.0,
        "comment": ""
      },
      {
        "name": "s4",
        "dp": 12.0,
        "comment": ""
      },
      {
        "name": "s5",
        "dp": 16.0,
        "comment": ""
      },
      {
        "name": "s6",
        "dp": 20.0,
        "comment": ""
      },
      {
        "name": "s7",
        "dp": 24.0,
        "comment": ""
      },
      {
        "name": "s8",
        "dp": 32.0,
        "comment": ""
      },
      {
        "name": "s9",
        "dp": 40.0,
        "comment": ""
      },
      {
        "name": "s10",
        "dp": 48.0,
        "comment": ""
      },
      {
        "name": "s11",
        "dp": 56.0,
        "comment": ""
      }
    ],
    "radius": [
      {
        "name": "none",
        "dp": 0.0,
        "comment": ""
      },
      {
        "name": "xs",
        "dp": 1.5,
        "comment": ""
      },
      {
        "name": "sm",
        "dp": 2.0,
        "comment": ""
      },
      {
        "name": "md",
        "dp": 4.0,
        "comment": ""
      },
      {
        "name": "lg",
        "dp": 8.0,
        "comment": ""
      },
      {
        "name": "xl",
        "dp": 16.0,
        "comment": ""
      },
      {
        "name": "xxl",
        "dp": 24.0,
        "comment": ""
      },
      {
        "name": "max",
        "dp": 1000.0,
        "comment": "Pill sentinel — use AurumShapes.pill instead of this raw value"
      }
    ],
    "borderWidth": [
      {
        "name": "none",
        "dp": 0.0,
        "comment": ""
      },
      {
        "name": "xs",
        "dp": 0.5,
        "comment": ""
      },
      {
        "name": "sm",
        "dp": 1.0,
        "comment": ""
      },
      {
        "name": "md",
        "dp": 1.5,
        "comment": ""
      },
      {
        "name": "lg",
        "dp": 2.0,
        "comment": ""
      },
      {
        "name": "xl",
        "dp": 4.0,
        "comment": ""
      }
    ],
    "iconSize": [
      {
        "name": "xs",
        "dp": 8.0,
        "comment": ""
      },
      {
        "name": "sm",
        "dp": 12.0,
        "comment": ""
      },
      {
        "name": "md",
        "dp": 16.0,
        "comment": ""
      },
      {
        "name": "lg",
        "dp": 20.0,
        "comment": ""
      },
      {
        "name": "xl",
        "dp": 24.0,
        "comment": "Canonical icon size — default for navigation and action icons"
      },
      {
        "name": "xxl",
        "dp": 32.0,
        "comment": ""
      }
    ],
    "elevation": [
      {
        "name": "lowRaised",
        "offsetY": 2.0,
        "blur": 16.0,
        "tintName": "lowRaised"
      },
      {
        "name": "midRaised",
        "offsetY": 8.0,
        "blur": 24.0,
        "tintName": "midRaised"
      },
      {
        "name": "highRaised",
        "offsetY": 16.0,
        "blur": 48.0,
        "tintName": "highRaised"
      },
      {
        "name": "bottomSheet",
        "offsetY": 16.0,
        "blur": 48.0,
        "tintName": "bottomSheet"
      }
    ],
    "typography": [
      {
        "name": "displaySBold",
        "sizeSp": 16.0,
        "lineHeightSp": 24.0,
        "weight": "Bold",
        "family": "display"
      },
      {
        "name": "displayMBold",
        "sizeSp": 20.0,
        "lineHeightSp": 28.0,
        "weight": "Bold",
        "family": "display"
      },
      {
        "name": "displayLBold",
        "sizeSp": 24.0,
        "lineHeightSp": 32.0,
        "weight": "Bold",
        "family": "display"
      },
      {
        "name": "displayXLBold",
        "sizeSp": 28.0,
        "lineHeightSp": 36.0,
        "weight": "Bold",
        "family": "display"
      },
      {
        "name": "displayXXLBold",
        "sizeSp": 32.0,
        "lineHeightSp": 40.0,
        "weight": "Bold",
        "family": "display"
      },
      {
        "name": "displaySMedium",
        "sizeSp": 16.0,
        "lineHeightSp": 24.0,
        "weight": "Medium",
        "family": "display"
      },
      {
        "name": "displayMMedium",
        "sizeSp": 20.0,
        "lineHeightSp": 28.0,
        "weight": "Medium",
        "family": "display"
      },
      {
        "name": "displayLMedium",
        "sizeSp": 24.0,
        "lineHeightSp": 32.0,
        "weight": "Medium",
        "family": "display"
      },
      {
        "name": "displayXLMedium",
        "sizeSp": 28.0,
        "lineHeightSp": 36.0,
        "weight": "Medium",
        "family": "display"
      },
      {
        "name": "displayXXLMedium",
        "sizeSp": 32.0,
        "lineHeightSp": 40.0,
        "weight": "Medium",
        "family": "display"
      },
      {
        "name": "titleXSBold",
        "sizeSp": 14.0,
        "lineHeightSp": 20.0,
        "weight": "Bold",
        "family": "primary"
      },
      {
        "name": "titleSBold",
        "sizeSp": 16.0,
        "lineHeightSp": 24.0,
        "weight": "Bold",
        "family": "primary"
      },
      {
        "name": "titleMBold",
        "sizeSp": 20.0,
        "lineHeightSp": 28.0,
        "weight": "Bold",
        "family": "primary"
      },
      {
        "name": "titleLBold",
        "sizeSp": 24.0,
        "lineHeightSp": 32.0,
        "weight": "Bold",
        "family": "primary"
      },
      {
        "name": "titleXLBold",
        "sizeSp": 28.0,
        "lineHeightSp": 36.0,
        "weight": "Bold",
        "family": "primary"
      },
      {
        "name": "titleXXLBold",
        "sizeSp": 32.0,
        "lineHeightSp": 40.0,
        "weight": "Bold",
        "family": "primary"
      },
      {
        "name": "titleXSSemiBold",
        "sizeSp": 14.0,
        "lineHeightSp": 20.0,
        "weight": "SemiBold",
        "family": "primary"
      },
      {
        "name": "titleSSemiBold",
        "sizeSp": 16.0,
        "lineHeightSp": 24.0,
        "weight": "SemiBold",
        "family": "primary"
      },
      {
        "name": "titleMSemiBold",
        "sizeSp": 20.0,
        "lineHeightSp": 28.0,
        "weight": "SemiBold",
        "family": "primary"
      },
      {
        "name": "titleLSemiBold",
        "sizeSp": 24.0,
        "lineHeightSp": 32.0,
        "weight": "SemiBold",
        "family": "primary"
      },
      {
        "name": "titleXLSemiBold",
        "sizeSp": 28.0,
        "lineHeightSp": 36.0,
        "weight": "SemiBold",
        "family": "primary"
      },
      {
        "name": "titleXXLSemiBold",
        "sizeSp": 32.0,
        "lineHeightSp": 40.0,
        "weight": "SemiBold",
        "family": "primary"
      },
      {
        "name": "bodyXSRegular",
        "sizeSp": 10.0,
        "lineHeightSp": 14.0,
        "weight": "Normal",
        "family": "primary"
      },
      {
        "name": "bodySRegular",
        "sizeSp": 12.0,
        "lineHeightSp": 16.0,
        "weight": "Normal",
        "family": "primary"
      },
      {
        "name": "bodyMRegular",
        "sizeSp": 14.0,
        "lineHeightSp": 20.0,
        "weight": "Normal",
        "family": "primary"
      },
      {
        "name": "bodyLRegular",
        "sizeSp": 16.0,
        "lineHeightSp": 24.0,
        "weight": "Normal",
        "family": "primary"
      },
      {
        "name": "bodyXLRegular",
        "sizeSp": 20.0,
        "lineHeightSp": 28.0,
        "weight": "Normal",
        "family": "primary"
      },
      {
        "name": "bodyXSMedium",
        "sizeSp": 10.0,
        "lineHeightSp": 14.0,
        "weight": "Medium",
        "family": "primary"
      },
      {
        "name": "bodySMedium",
        "sizeSp": 12.0,
        "lineHeightSp": 16.0,
        "weight": "Medium",
        "family": "primary"
      },
      {
        "name": "bodyMMedium",
        "sizeSp": 14.0,
        "lineHeightSp": 20.0,
        "weight": "Medium",
        "family": "primary"
      },
      {
        "name": "bodyLMedium",
        "sizeSp": 16.0,
        "lineHeightSp": 24.0,
        "weight": "Medium",
        "family": "primary"
      },
      {
        "name": "bodyXLMedium",
        "sizeSp": 20.0,
        "lineHeightSp": 28.0,
        "weight": "Medium",
        "family": "primary"
      },
      {
        "name": "labelSBold",
        "sizeSp": 9.0,
        "lineHeightSp": 14.0,
        "weight": "Bold",
        "family": "primary"
      },
      {
        "name": "labelMBold",
        "sizeSp": 10.0,
        "lineHeightSp": 14.0,
        "weight": "Bold",
        "family": "primary"
      },
      {
        "name": "labelLBold",
        "sizeSp": 12.0,
        "lineHeightSp": 16.0,
        "weight": "Bold",
        "family": "primary"
      },
      {
        "name": "labelSMedium",
        "sizeSp": 9.0,
        "lineHeightSp": 14.0,
        "weight": "Medium",
        "family": "primary"
      },
      {
        "name": "labelMMedium",
        "sizeSp": 10.0,
        "lineHeightSp": 14.0,
        "weight": "Medium",
        "family": "primary"
      },
      {
        "name": "labelLMedium",
        "sizeSp": 12.0,
        "lineHeightSp": 16.0,
        "weight": "Medium",
        "family": "primary"
      },
      {
        "name": "numXS",
        "sizeSp": 14.0,
        "lineHeightSp": 20.0,
        "weight": "Bold",
        "family": "primary"
      },
      {
        "name": "numS",
        "sizeSp": 16.0,
        "lineHeightSp": 24.0,
        "weight": "Bold",
        "family": "primary"
      },
      {
        "name": "numM",
        "sizeSp": 20.0,
        "lineHeightSp": 28.0,
        "weight": "Bold",
        "family": "primary"
      },
      {
        "name": "numL",
        "sizeSp": 24.0,
        "lineHeightSp": 32.0,
        "weight": "Bold",
        "family": "primary"
      },
      {
        "name": "numXL",
        "sizeSp": 28.0,
        "lineHeightSp": 36.0,
        "weight": "Bold",
        "family": "primary"
      },
      {
        "name": "numXXL",
        "sizeSp": 32.0,
        "lineHeightSp": 40.0,
        "weight": "Bold",
        "family": "primary"
      },
      {
        "name": "num3XL",
        "sizeSp": 40.0,
        "lineHeightSp": 48.0,
        "weight": "Bold",
        "family": "primary"
      }
    ]
  },
  "icons": [
    {
      "name": "ArrowDown",
      "category": "Navigation",
      "lineDrawable": "aurum_ic_navigation_arrow_down",
      "fillDrawable": "aurum_ic_navigation_arrow_down_filled",
      "lineFigmaNodeId": "5162:1059",
      "fillFigmaNodeId": "5162:944",
      "lineFigmaUrl": "https://www.figma.com/design/YvIxqu2oTlM6UnkL0OloHc/?node-id=5162-1059",
      "fillFigmaUrl": "https://www.figma.com/design/YvIxqu2oTlM6UnkL0OloHc/?node-id=5162-944",
      "tags": [
        "down",
        "south",
        "below"
      ]
    },
    {
      "name": "ArrowDownLeft",
      "category": "Navigation",
      "lineDrawable": "aurum_ic_navigation_arrow_down_left",
      "fillDrawable": "aurum_ic_navigation_arrow_down_left_filled",
      "lineFigmaNodeId": "5874:1925",
      "fillFigmaNodeId": "5874:1925",
      "lineFigmaUrl": "https://www.figma.com/design/YvIxqu2oTlM6UnkL0OloHc/?node-id=5874-1925",
      "fillFigmaUrl": "https://www.figma.com/design/YvIxqu2oTlM6UnkL0OloHc/?node-id=5874-1925"
    },
    {
      "name": "ArrowLeft",
      "category": "Navigation",
      "lineDrawable": "aurum_ic_navigation_arrow_left",
      "fillDrawable": "aurum_ic_navigation_arrow_left_filled",
      "lineFigmaNodeId": "5162:1053",
      "fillFigmaNodeId": "5162:938",
      "lineFigmaUrl": "https://www.figma.com/design/YvIxqu2oTlM6UnkL0OloHc/?node-id=5162-1053",
      "fillFigmaUrl": "https://www.figma.com/design/YvIxqu2oTlM6UnkL0OloHc/?node-id=5162-938",
      "tags": [
        "left",
        "back",
        "west",
        "previous"
      ]
    },
    {
      "name": "ArrowRight",
      "category": "Navigation",
      "lineDrawable": "aurum_ic_navigation_arrow_right",
      "fillDrawable": "aurum_ic_navigation_arrow_right_filled",
      "lineFigmaNodeId": "5162:1055",
      "fillFigmaNodeId": "5162:940",
      "lineFigmaUrl": "https://www.figma.com/design/YvIxqu2oTlM6UnkL0OloHc/?node-id=5162-1055",
      "fillFigmaUrl": "https://www.figma.com/design/YvIxqu2oTlM6UnkL0OloHc/?node-id=5162-940",
      "tags": [
        "right",
        "forward",
        "east",
        "next",
        "send"
      ]
    },
    {
      "name": "ArrowUp",
      "category": "Navigation",
      "lineDrawable": "aurum_ic_navigation_arrow_up",
      "fillDrawable": "aurum_ic_navigation_arrow_up_filled",
      "lineFigmaNodeId": "5162:1057",
      "fillFigmaNodeId": "5162:942",
      "lineFigmaUrl": "https://www.figma.com/design/YvIxqu2oTlM6UnkL0OloHc/?node-id=5162-1057",
      "fillFigmaUrl": "https://www.figma.com/design/YvIxqu2oTlM6UnkL0OloHc/?node-id=5162-942",
      "tags": [
        "up",
        "north",
        "above"
      ]
    },
    {
      "name": "ArrowUpRight",
      "category": "Navigation",
      "lineDrawable": "aurum_ic_navigation_arrow_up_right",
      "fillDrawable": "aurum_ic_navigation_arrow_up_right_filled",
      "lineFigmaNodeId": "5874:1926",
      "fillFigmaNodeId": "5874:1926",
      "lineFigmaUrl": "https://www.figma.com/design/YvIxqu2oTlM6UnkL0OloHc/?node-id=5874-1926",
      "fillFigmaUrl": "https://www.figma.com/design/YvIxqu2oTlM6UnkL0OloHc/?node-id=5874-1926"
    },
    {
      "name": "CaretBoldDown",
      "category": "Navigation",
      "lineDrawable": "aurum_ic_navigation_caret_bold_down",
      "fillDrawable": "aurum_ic_navigation_caret_bold_down_filled",
      "lineFigmaNodeId": "7570:656",
      "fillFigmaNodeId": "7570:656",
      "lineFigmaUrl": "https://www.figma.com/design/YvIxqu2oTlM6UnkL0OloHc/?node-id=7570-656",
      "fillFigmaUrl": "https://www.figma.com/design/YvIxqu2oTlM6UnkL0OloHc/?node-id=7570-656"
    },
    {
      "name": "CaretBoldLeft",
      "category": "Navigation",
      "lineDrawable": "aurum_ic_navigation_caret_bold_left",
      "fillDrawable": "aurum_ic_navigation_caret_bold_left_filled",
      "lineFigmaNodeId": "7570:657",
      "fillFigmaNodeId": "7570:657",
      "lineFigmaUrl": "https://www.figma.com/design/YvIxqu2oTlM6UnkL0OloHc/?node-id=7570-657",
      "fillFigmaUrl": "https://www.figma.com/design/YvIxqu2oTlM6UnkL0OloHc/?node-id=7570-657"
    },
    {
      "name": "CaretBoldRight",
      "category": "Navigation",
      "lineDrawable": "aurum_ic_navigation_caret_bold_right",
      "fillDrawable": "aurum_ic_navigation_caret_bold_right_filled",
      "lineFigmaNodeId": "7570:654",
      "fillFigmaNodeId": "7570:654",
      "lineFigmaUrl": "https://www.figma.com/design/YvIxqu2oTlM6UnkL0OloHc/?node-id=7570-654",
      "fillFigmaUrl": "https://www.figma.com/design/YvIxqu2oTlM6UnkL0OloHc/?node-id=7570-654"
    },
    {
      "name": "CaretBoldUp",
      "category": "Navigation",
      "lineDrawable": "aurum_ic_navigation_caret_bold_up",
      "fillDrawable": "aurum_ic_navigation_caret_bold_up_filled",
      "lineFigmaNodeId": "7570:655",
      "fillFigmaNodeId": "7570:655",
      "lineFigmaUrl": "https://www.figma.com/design/YvIxqu2oTlM6UnkL0OloHc/?node-id=7570-655",
      "fillFigmaUrl": "https://www.figma.com/design/YvIxqu2oTlM6UnkL0OloHc/?node-id=7570-655"
    },
    {
      "name": "CaretDown",
      "category": "Navigation",
      "lineDrawable": "aurum_ic_navigation_caret_down",
      "fillDrawable": "aurum_ic_navigation_caret_down_filled",
      "lineFigmaNodeId": "6419:335",
      "fillFigmaNodeId": "6419:335",
      "lineFigmaUrl": "https://www.figma.com/design/YvIxqu2oTlM6UnkL0OloHc/?node-id=6419-335",
      "fillFigmaUrl": "https://www.figma.com/design/YvIxqu2oTlM6UnkL0OloHc/?node-id=6419-335"
    },
    {
      "name": "CaretLeft",
      "category": "Navigation",
      "lineDrawable": "aurum_ic_navigation_caret_left",
      "fillDrawable": "aurum_ic_navigation_caret_left_filled",
      "lineFigmaNodeId": "6419:336",
      "fillFigmaNodeId": "6419:336",
      "lineFigmaUrl": "https://www.figma.com/design/YvIxqu2oTlM6UnkL0OloHc/?node-id=6419-336",
      "fillFigmaUrl": "https://www.figma.com/design/YvIxqu2oTlM6UnkL0OloHc/?node-id=6419-336"
    },
    {
      "name": "CaretRight",
      "category": "Navigation",
      "lineDrawable": "aurum_ic_navigation_caret_right",
      "fillDrawable": "aurum_ic_navigation_caret_right_filled",
      "lineFigmaNodeId": "6419:337",
      "fillFigmaNodeId": "6419:337",
      "lineFigmaUrl": "https://www.figma.com/design/YvIxqu2oTlM6UnkL0OloHc/?node-id=6419-337",
      "fillFigmaUrl": "https://www.figma.com/design/YvIxqu2oTlM6UnkL0OloHc/?node-id=6419-337"
    },
    {
      "name": "CaretUp",
      "category": "Navigation",
      "lineDrawable": "aurum_ic_navigation_caret_up",
      "fillDrawable": "aurum_ic_navigation_caret_up_filled",
      "lineFigmaNodeId": "6419:334",
      "fillFigmaNodeId": "6419:334",
      "lineFigmaUrl": "https://www.figma.com/design/YvIxqu2oTlM6UnkL0OloHc/?node-id=6419-334",
      "fillFigmaUrl": "https://www.figma.com/design/YvIxqu2oTlM6UnkL0OloHc/?node-id=6419-334"
    },
    {
      "name": "ChevronDown",
      "category": "Navigation",
      "lineDrawable": "aurum_ic_navigation_chevron_down",
      "fillDrawable": "aurum_ic_navigation_chevron_down_filled",
      "lineFigmaNodeId": "5162:1067",
      "fillFigmaNodeId": "5162:952",
      "lineFigmaUrl": "https://www.figma.com/design/YvIxqu2oTlM6UnkL0OloHc/?node-id=5162-1067",
      "fillFigmaUrl": "https://www.figma.com/design/YvIxqu2oTlM6UnkL0OloHc/?node-id=5162-952",
      "tags": [
        "down",
        "expand",
        "open",
        "collapse"
      ]
    },
    {
      "name": "ChevronLeft",
      "category": "Navigation",
      "lineDrawable": "aurum_ic_navigation_chevron_left",
      "fillDrawable": "aurum_ic_navigation_chevron_left_filled",
      "lineFigmaNodeId": "5162:1063",
      "fillFigmaNodeId": "5162:948",
      "lineFigmaUrl": "https://www.figma.com/design/YvIxqu2oTlM6UnkL0OloHc/?node-id=5162-1063",
      "fillFigmaUrl": "https://www.figma.com/design/YvIxqu2oTlM6UnkL0OloHc/?node-id=5162-948",
      "tags": [
        "back",
        "previous",
        "collapse-left"
      ]
    },
    {
      "name": "ChevronRight",
      "category": "Navigation",
      "lineDrawable": "aurum_ic_navigation_chevron_right",
      "fillDrawable": "aurum_ic_navigation_chevron_right_filled",
      "lineFigmaNodeId": "5162:1061",
      "fillFigmaNodeId": "5162:946",
      "lineFigmaUrl": "https://www.figma.com/design/YvIxqu2oTlM6UnkL0OloHc/?node-id=5162-1061",
      "fillFigmaUrl": "https://www.figma.com/design/YvIxqu2oTlM6UnkL0OloHc/?node-id=5162-946",
      "tags": [
        "forward",
        "next",
        "expand-right"
      ]
    },
    {
      "name": "ChevronUp",
      "category": "Navigation",
      "lineDrawable": "aurum_ic_navigation_chevron_up",
      "fillDrawable": "aurum_ic_navigation_chevron_up_filled",
      "lineFigmaNodeId": "5162:1065",
      "fillFigmaNodeId": "5162:950",
      "lineFigmaUrl": "https://www.figma.com/design/YvIxqu2oTlM6UnkL0OloHc/?node-id=5162-1065",
      "fillFigmaUrl": "https://www.figma.com/design/YvIxqu2oTlM6UnkL0OloHc/?node-id=5162-950",
      "tags": [
        "up",
        "collapse",
        "close"
      ]
    },
    {
      "name": "Close",
      "category": "Navigation",
      "lineDrawable": "aurum_ic_navigation_close",
      "fillDrawable": "aurum_ic_navigation_close_filled",
      "lineFigmaNodeId": "5162:1069",
      "fillFigmaNodeId": "5311:823",
      "lineFigmaUrl": "https://www.figma.com/design/YvIxqu2oTlM6UnkL0OloHc/?node-id=5162-1069",
      "fillFigmaUrl": "https://www.figma.com/design/YvIxqu2oTlM6UnkL0OloHc/?node-id=5311-823",
      "tags": [
        "x",
        "cross",
        "dismiss",
        "exit",
        "cancel"
      ]
    },
    {
      "name": "Add",
      "category": "Action",
      "lineDrawable": "aurum_ic_action_add",
      "fillDrawable": "aurum_ic_action_add_filled",
      "lineFigmaNodeId": "5322:1592",
      "fillFigmaNodeId": "5322:1593",
      "lineFigmaUrl": "https://www.figma.com/design/YvIxqu2oTlM6UnkL0OloHc/?node-id=5322-1592",
      "fillFigmaUrl": "https://www.figma.com/design/YvIxqu2oTlM6UnkL0OloHc/?node-id=5322-1593",
      "tags": [
        "plus",
        "create",
        "new"
      ]
    },
    {
      "name": "Copy",
      "category": "Action",
      "lineDrawable": "aurum_ic_action_copy",
      "fillDrawable": "aurum_ic_action_copy_filled",
      "lineFigmaNodeId": "5162:1075",
      "fillFigmaNodeId": "5162:960",
      "lineFigmaUrl": "https://www.figma.com/design/YvIxqu2oTlM6UnkL0OloHc/?node-id=5162-1075",
      "fillFigmaUrl": "https://www.figma.com/design/YvIxqu2oTlM6UnkL0OloHc/?node-id=5162-960",
      "tags": [
        "duplicate",
        "clone"
      ]
    },
    {
      "name": "Delete",
      "category": "Action",
      "lineDrawable": "aurum_ic_action_delete",
      "fillDrawable": "aurum_ic_action_delete_filled",
      "lineFigmaNodeId": "5162:1107",
      "fillFigmaNodeId": "5162:992",
      "lineFigmaUrl": "https://www.figma.com/design/YvIxqu2oTlM6UnkL0OloHc/?node-id=5162-1107",
      "fillFigmaUrl": "https://www.figma.com/design/YvIxqu2oTlM6UnkL0OloHc/?node-id=5162-992",
      "tags": [
        "trash",
        "remove",
        "bin",
        "garbage",
        "discard"
      ]
    },
    {
      "name": "Download",
      "category": "Action",
      "lineDrawable": "aurum_ic_action_download",
      "fillDrawable": "aurum_ic_action_download_filled",
      "lineFigmaNodeId": "5162:1071",
      "fillFigmaNodeId": "5162:956",
      "lineFigmaUrl": "https://www.figma.com/design/YvIxqu2oTlM6UnkL0OloHc/?node-id=5162-1071",
      "fillFigmaUrl": "https://www.figma.com/design/YvIxqu2oTlM6UnkL0OloHc/?node-id=5162-956",
      "tags": [
        "save",
        "export",
        "fetch"
      ]
    },
    {
      "name": "Edit",
      "category": "Action",
      "lineDrawable": "aurum_ic_action_edit",
      "fillDrawable": "aurum_ic_action_edit_filled",
      "lineFigmaNodeId": "5162:1051",
      "fillFigmaNodeId": "5162:936",
      "lineFigmaUrl": "https://www.figma.com/design/YvIxqu2oTlM6UnkL0OloHc/?node-id=5162-1051",
      "fillFigmaUrl": "https://www.figma.com/design/YvIxqu2oTlM6UnkL0OloHc/?node-id=5162-936",
      "tags": [
        "pencil",
        "modify",
        "compose",
        "write"
      ]
    },
    {
      "name": "Filter",
      "category": "Action",
      "lineDrawable": "aurum_ic_action_filter",
      "fillDrawable": "aurum_ic_action_filter_filled",
      "lineFigmaNodeId": "5861:1987",
      "fillFigmaNodeId": "5861:1986",
      "lineFigmaUrl": "https://www.figma.com/design/YvIxqu2oTlM6UnkL0OloHc/?node-id=5861-1987",
      "fillFigmaUrl": "https://www.figma.com/design/YvIxqu2oTlM6UnkL0OloHc/?node-id=5861-1986"
    },
    {
      "name": "History",
      "category": "Action",
      "lineDrawable": "aurum_ic_action_history",
      "fillDrawable": "aurum_ic_action_history_filled",
      "lineFigmaNodeId": "5162:1083",
      "fillFigmaNodeId": "5162:968",
      "lineFigmaUrl": "https://www.figma.com/design/YvIxqu2oTlM6UnkL0OloHc/?node-id=5162-1083",
      "fillFigmaUrl": "https://www.figma.com/design/YvIxqu2oTlM6UnkL0OloHc/?node-id=5162-968",
      "tags": [
        "clock",
        "recent",
        "past",
        "log"
      ]
    },
    {
      "name": "Link",
      "category": "Action",
      "lineDrawable": "aurum_ic_action_link",
      "fillDrawable": "aurum_ic_action_link_filled",
      "lineFigmaNodeId": "5162:1077",
      "fillFigmaNodeId": "5162:962",
      "lineFigmaUrl": "https://www.figma.com/design/YvIxqu2oTlM6UnkL0OloHc/?node-id=5162-1077",
      "fillFigmaUrl": "https://www.figma.com/design/YvIxqu2oTlM6UnkL0OloHc/?node-id=5162-962",
      "tags": [
        "chain",
        "url",
        "hyperlink"
      ]
    },
    {
      "name": "Minus",
      "category": "Action",
      "lineDrawable": "aurum_ic_action_minus",
      "fillDrawable": "aurum_ic_action_minus_filled",
      "lineFigmaNodeId": "5322:1594",
      "fillFigmaNodeId": "5322:1595",
      "lineFigmaUrl": "https://www.figma.com/design/YvIxqu2oTlM6UnkL0OloHc/?node-id=5322-1594",
      "fillFigmaUrl": "https://www.figma.com/design/YvIxqu2oTlM6UnkL0OloHc/?node-id=5322-1595"
    },
    {
      "name": "MoreHorizontal",
      "category": "Action",
      "lineDrawable": "aurum_ic_action_more_horizontal",
      "fillDrawable": "aurum_ic_action_more_horizontal_filled",
      "lineFigmaNodeId": "5431:2847",
      "fillFigmaNodeId": "5431:2849",
      "lineFigmaUrl": "https://www.figma.com/design/YvIxqu2oTlM6UnkL0OloHc/?node-id=5431-2847",
      "fillFigmaUrl": "https://www.figma.com/design/YvIxqu2oTlM6UnkL0OloHc/?node-id=5431-2849"
    },
    {
      "name": "Overflow",
      "category": "Action",
      "lineDrawable": "aurum_ic_action_overflow",
      "fillDrawable": "aurum_ic_action_overflow_filled",
      "lineFigmaNodeId": "5431:2848",
      "fillFigmaNodeId": "5431:2850",
      "lineFigmaUrl": "https://www.figma.com/design/YvIxqu2oTlM6UnkL0OloHc/?node-id=5431-2848",
      "fillFigmaUrl": "https://www.figma.com/design/YvIxqu2oTlM6UnkL0OloHc/?node-id=5431-2850",
      "tags": [
        "more",
        "menu",
        "kebab",
        "dots",
        "ellipsis"
      ]
    },
    {
      "name": "QrCode",
      "category": "Action",
      "lineDrawable": "aurum_ic_action_qr_code",
      "fillDrawable": "aurum_ic_action_qr_code_filled",
      "lineFigmaNodeId": "5162:1093",
      "fillFigmaNodeId": "5162:978",
      "lineFigmaUrl": "https://www.figma.com/design/YvIxqu2oTlM6UnkL0OloHc/?node-id=5162-1093",
      "fillFigmaUrl": "https://www.figma.com/design/YvIxqu2oTlM6UnkL0OloHc/?node-id=5162-978",
      "tags": [
        "qr",
        "scan",
        "barcode"
      ]
    },
    {
      "name": "Refresh",
      "category": "Action",
      "lineDrawable": "aurum_ic_action_refresh",
      "fillDrawable": "aurum_ic_action_refresh_filled",
      "lineFigmaNodeId": "5162:1085",
      "fillFigmaNodeId": "5162:970",
      "lineFigmaUrl": "https://www.figma.com/design/YvIxqu2oTlM6UnkL0OloHc/?node-id=5162-1085",
      "fillFigmaUrl": "https://www.figma.com/design/YvIxqu2oTlM6UnkL0OloHc/?node-id=5162-970",
      "tags": [
        "reload",
        "sync",
        "update",
        "retry"
      ]
    },
    {
      "name": "Search",
      "category": "Action",
      "lineDrawable": "aurum_ic_action_search",
      "fillDrawable": "aurum_ic_action_search_filled",
      "lineFigmaNodeId": "5162:1089",
      "fillFigmaNodeId": "5162:974",
      "lineFigmaUrl": "https://www.figma.com/design/YvIxqu2oTlM6UnkL0OloHc/?node-id=5162-1089",
      "fillFigmaUrl": "https://www.figma.com/design/YvIxqu2oTlM6UnkL0OloHc/?node-id=5162-974",
      "tags": [
        "find",
        "magnify",
        "lookup"
      ]
    },
    {
      "name": "Share",
      "category": "Action",
      "lineDrawable": "aurum_ic_action_share",
      "fillDrawable": "aurum_ic_action_share_filled",
      "lineFigmaNodeId": "5162:1049",
      "fillFigmaNodeId": "5162:934",
      "lineFigmaUrl": "https://www.figma.com/design/YvIxqu2oTlM6UnkL0OloHc/?node-id=5162-1049",
      "fillFigmaUrl": "https://www.figma.com/design/YvIxqu2oTlM6UnkL0OloHc/?node-id=5162-934",
      "tags": [
        "send",
        "forward",
        "publish"
      ]
    },
    {
      "name": "SortAscending",
      "category": "Action",
      "lineDrawable": "aurum_ic_action_sort_ascending",
      "fillDrawable": "aurum_ic_action_sort_ascending_filled",
      "lineFigmaNodeId": "5162:1097",
      "fillFigmaNodeId": "5162:982",
      "lineFigmaUrl": "https://www.figma.com/design/YvIxqu2oTlM6UnkL0OloHc/?node-id=5162-1097",
      "fillFigmaUrl": "https://www.figma.com/design/YvIxqu2oTlM6UnkL0OloHc/?node-id=5162-982",
      "tags": [
        "sort",
        "asc",
        "az"
      ]
    },
    {
      "name": "SortDescending",
      "category": "Action",
      "lineDrawable": "aurum_ic_action_sort_descending",
      "fillDrawable": "aurum_ic_action_sort_descending_filled",
      "lineFigmaNodeId": "5162:1095",
      "fillFigmaNodeId": "5162:980",
      "lineFigmaUrl": "https://www.figma.com/design/YvIxqu2oTlM6UnkL0OloHc/?node-id=5162-1095",
      "fillFigmaUrl": "https://www.figma.com/design/YvIxqu2oTlM6UnkL0OloHc/?node-id=5162-980",
      "tags": [
        "sort",
        "desc",
        "za"
      ]
    },
    {
      "name": "Upload",
      "category": "Action",
      "lineDrawable": "aurum_ic_action_upload",
      "fillDrawable": "aurum_ic_action_upload_filled",
      "lineFigmaNodeId": "5162:1073",
      "fillFigmaNodeId": "5162:958",
      "lineFigmaUrl": "https://www.figma.com/design/YvIxqu2oTlM6UnkL0OloHc/?node-id=5162-1073",
      "fillFigmaUrl": "https://www.figma.com/design/YvIxqu2oTlM6UnkL0OloHc/?node-id=5162-958",
      "tags": [
        "import",
        "send-up",
        "publish"
      ]
    },
    {
      "name": "Bookmark",
      "category": "Content",
      "lineDrawable": "aurum_ic_content_bookmark",
      "fillDrawable": "aurum_ic_content_bookmark_filled",
      "lineFigmaNodeId": "5162:1047",
      "fillFigmaNodeId": "5162:932",
      "lineFigmaUrl": "https://www.figma.com/design/YvIxqu2oTlM6UnkL0OloHc/?node-id=5162-1047",
      "fillFigmaUrl": "https://www.figma.com/design/YvIxqu2oTlM6UnkL0OloHc/?node-id=5162-932",
      "tags": [
        "save",
        "favourite",
        "pin",
        "ribbon"
      ]
    },
    {
      "name": "Broadcast",
      "category": "Content",
      "lineDrawable": "aurum_ic_content_broadcast",
      "fillDrawable": "aurum_ic_content_broadcast_filled",
      "lineFigmaNodeId": "5162:1037",
      "fillFigmaNodeId": "5162:922",
      "lineFigmaUrl": "https://www.figma.com/design/YvIxqu2oTlM6UnkL0OloHc/?node-id=5162-1037",
      "fillFigmaUrl": "https://www.figma.com/design/YvIxqu2oTlM6UnkL0OloHc/?node-id=5162-922",
      "tags": [
        "antenna",
        "wifi",
        "live",
        "signal"
      ]
    },
    {
      "name": "ChartBar",
      "category": "Content",
      "lineDrawable": "aurum_ic_content_chart_bar",
      "fillDrawable": "aurum_ic_content_chart_bar_filled",
      "lineFigmaNodeId": "6473:23775",
      "fillFigmaNodeId": "6473:23774",
      "lineFigmaUrl": "https://www.figma.com/design/YvIxqu2oTlM6UnkL0OloHc/?node-id=6473-23775",
      "fillFigmaUrl": "https://www.figma.com/design/YvIxqu2oTlM6UnkL0OloHc/?node-id=6473-23774"
    },
    {
      "name": "Chat",
      "category": "Content",
      "lineDrawable": "aurum_ic_content_chat",
      "fillDrawable": "aurum_ic_content_chat_filled",
      "lineFigmaNodeId": "5162:1137",
      "fillFigmaNodeId": "5162:1023",
      "lineFigmaUrl": "https://www.figma.com/design/YvIxqu2oTlM6UnkL0OloHc/?node-id=5162-1137",
      "fillFigmaUrl": "https://www.figma.com/design/YvIxqu2oTlM6UnkL0OloHc/?node-id=5162-1023",
      "tags": [
        "message",
        "talk",
        "conversation",
        "speech"
      ]
    },
    {
      "name": "ChatBubble",
      "category": "Content",
      "lineDrawable": "aurum_ic_content_chat_bubble",
      "fillDrawable": "aurum_ic_content_chat_bubble_filled",
      "lineFigmaNodeId": "5917:1284",
      "fillFigmaNodeId": "5917:1279",
      "lineFigmaUrl": "https://www.figma.com/design/YvIxqu2oTlM6UnkL0OloHc/?node-id=5917-1284",
      "fillFigmaUrl": "https://www.figma.com/design/YvIxqu2oTlM6UnkL0OloHc/?node-id=5917-1279"
    },
    {
      "name": "Document",
      "category": "Content",
      "lineDrawable": "aurum_ic_content_document",
      "fillDrawable": "aurum_ic_content_document_filled",
      "lineFigmaNodeId": "5162:1031",
      "fillFigmaNodeId": "5162:916",
      "lineFigmaUrl": "https://www.figma.com/design/YvIxqu2oTlM6UnkL0OloHc/?node-id=5162-1031",
      "fillFigmaUrl": "https://www.figma.com/design/YvIxqu2oTlM6UnkL0OloHc/?node-id=5162-916",
      "tags": [
        "file",
        "page",
        "paper"
      ]
    },
    {
      "name": "Gift",
      "category": "Content",
      "lineDrawable": "aurum_ic_content_gift",
      "fillDrawable": "aurum_ic_content_gift_filled",
      "lineFigmaNodeId": "5162:1033",
      "fillFigmaNodeId": "5162:918",
      "lineFigmaUrl": "https://www.figma.com/design/YvIxqu2oTlM6UnkL0OloHc/?node-id=5162-1033",
      "fillFigmaUrl": "https://www.figma.com/design/YvIxqu2oTlM6UnkL0OloHc/?node-id=5162-918",
      "tags": [
        "present",
        "reward",
        "voucher",
        "box"
      ]
    },
    {
      "name": "Heart",
      "category": "Content",
      "lineDrawable": "aurum_ic_content_heart",
      "fillDrawable": "aurum_ic_content_heart_filled",
      "lineFigmaNodeId": "5162:1045",
      "fillFigmaNodeId": "5162:930",
      "lineFigmaUrl": "https://www.figma.com/design/YvIxqu2oTlM6UnkL0OloHc/?node-id=5162-1045",
      "fillFigmaUrl": "https://www.figma.com/design/YvIxqu2oTlM6UnkL0OloHc/?node-id=5162-930",
      "tags": [
        "like",
        "love",
        "favourite"
      ]
    },
    {
      "name": "Image",
      "category": "Content",
      "lineDrawable": "aurum_ic_content_image",
      "fillDrawable": "aurum_ic_content_image_filled",
      "lineFigmaNodeId": "5364:107",
      "fillFigmaNodeId": "5364:108",
      "lineFigmaUrl": "https://www.figma.com/design/YvIxqu2oTlM6UnkL0OloHc/?node-id=5364-107",
      "fillFigmaUrl": "https://www.figma.com/design/YvIxqu2oTlM6UnkL0OloHc/?node-id=5364-108"
    },
    {
      "name": "List",
      "category": "Content",
      "lineDrawable": "aurum_ic_content_list",
      "fillDrawable": "aurum_ic_content_list_filled",
      "lineFigmaNodeId": "5162:1035",
      "fillFigmaNodeId": "5162:920",
      "lineFigmaUrl": "https://www.figma.com/design/YvIxqu2oTlM6UnkL0OloHc/?node-id=5162-1035",
      "fillFigmaUrl": "https://www.figma.com/design/YvIxqu2oTlM6UnkL0OloHc/?node-id=5162-920",
      "tags": [
        "menu",
        "items",
        "rows",
        "lines"
      ]
    },
    {
      "name": "Star",
      "category": "Content",
      "lineDrawable": "aurum_ic_content_star",
      "fillDrawable": "aurum_ic_content_star_filled",
      "lineFigmaNodeId": "6423:347",
      "fillFigmaNodeId": "6423:347",
      "lineFigmaUrl": "https://www.figma.com/design/YvIxqu2oTlM6UnkL0OloHc/?node-id=6423-347",
      "fillFigmaUrl": "https://www.figma.com/design/YvIxqu2oTlM6UnkL0OloHc/?node-id=6423-347"
    },
    {
      "name": "Camera",
      "category": "Media",
      "lineDrawable": "aurum_ic_media_camera",
      "fillDrawable": "aurum_ic_media_camera_filled",
      "lineFigmaNodeId": "5162:1113",
      "fillFigmaNodeId": "5162:998",
      "lineFigmaUrl": "https://www.figma.com/design/YvIxqu2oTlM6UnkL0OloHc/?node-id=5162-1113",
      "fillFigmaUrl": "https://www.figma.com/design/YvIxqu2oTlM6UnkL0OloHc/?node-id=5162-998",
      "tags": [
        "photo",
        "picture",
        "snap",
        "shot"
      ]
    },
    {
      "name": "Microphone",
      "category": "Media",
      "lineDrawable": "aurum_ic_media_microphone",
      "fillDrawable": "aurum_ic_media_microphone_filled",
      "lineFigmaNodeId": "5162:1123",
      "fillFigmaNodeId": "5162:1008",
      "lineFigmaUrl": "https://www.figma.com/design/YvIxqu2oTlM6UnkL0OloHc/?node-id=5162-1123",
      "fillFigmaUrl": "https://www.figma.com/design/YvIxqu2oTlM6UnkL0OloHc/?node-id=5162-1008",
      "tags": [
        "mic",
        "record",
        "voice",
        "audio"
      ]
    },
    {
      "name": "Pause",
      "category": "Media",
      "lineDrawable": "aurum_ic_media_pause",
      "fillDrawable": "aurum_ic_media_pause_filled",
      "lineFigmaNodeId": "5162:1111",
      "fillFigmaNodeId": "5162:996",
      "lineFigmaUrl": "https://www.figma.com/design/YvIxqu2oTlM6UnkL0OloHc/?node-id=5162-1111",
      "fillFigmaUrl": "https://www.figma.com/design/YvIxqu2oTlM6UnkL0OloHc/?node-id=5162-996",
      "tags": [
        "stop",
        "halt"
      ]
    },
    {
      "name": "Play",
      "category": "Media",
      "lineDrawable": "aurum_ic_media_play",
      "fillDrawable": "aurum_ic_media_play_filled",
      "lineFigmaNodeId": "5162:1109",
      "fillFigmaNodeId": "5162:994",
      "lineFigmaUrl": "https://www.figma.com/design/YvIxqu2oTlM6UnkL0OloHc/?node-id=5162-1109",
      "fillFigmaUrl": "https://www.figma.com/design/YvIxqu2oTlM6UnkL0OloHc/?node-id=5162-994",
      "tags": [
        "start",
        "resume",
        "go"
      ]
    },
    {
      "name": "PlayCircle",
      "category": "Media",
      "lineDrawable": "aurum_ic_media_play_circle",
      "fillDrawable": "aurum_ic_media_play_circle_filled",
      "lineFigmaNodeId": "6767:405",
      "fillFigmaNodeId": "6767:405",
      "lineFigmaUrl": "https://www.figma.com/design/YvIxqu2oTlM6UnkL0OloHc/?node-id=6767-405",
      "fillFigmaUrl": "https://www.figma.com/design/YvIxqu2oTlM6UnkL0OloHc/?node-id=6767-405"
    },
    {
      "name": "Replay",
      "category": "Media",
      "lineDrawable": "aurum_ic_media_replay",
      "fillDrawable": "aurum_ic_media_replay_filled",
      "lineFigmaNodeId": "5913:680",
      "fillFigmaNodeId": "5913:681",
      "lineFigmaUrl": "https://www.figma.com/design/YvIxqu2oTlM6UnkL0OloHc/?node-id=5913-680",
      "fillFigmaUrl": "https://www.figma.com/design/YvIxqu2oTlM6UnkL0OloHc/?node-id=5913-681"
    },
    {
      "name": "VolumeOff",
      "category": "Media",
      "lineDrawable": "aurum_ic_media_volume_off",
      "fillDrawable": "aurum_ic_media_volume_off_filled",
      "lineFigmaNodeId": "5162:1133",
      "fillFigmaNodeId": "5162:1018",
      "lineFigmaUrl": "https://www.figma.com/design/YvIxqu2oTlM6UnkL0OloHc/?node-id=5162-1133",
      "fillFigmaUrl": "https://www.figma.com/design/YvIxqu2oTlM6UnkL0OloHc/?node-id=5162-1018",
      "tags": [
        "mute",
        "silent",
        "quiet"
      ]
    },
    {
      "name": "VolumeOn",
      "category": "Media",
      "lineDrawable": "aurum_ic_media_volume_on",
      "fillDrawable": "aurum_ic_media_volume_on_filled",
      "lineFigmaNodeId": "5162:1131",
      "fillFigmaNodeId": "5162:1016",
      "lineFigmaUrl": "https://www.figma.com/design/YvIxqu2oTlM6UnkL0OloHc/?node-id=5162-1131",
      "fillFigmaUrl": "https://www.figma.com/design/YvIxqu2oTlM6UnkL0OloHc/?node-id=5162-1016",
      "tags": [
        "unmute",
        "loud",
        "sound"
      ]
    },
    {
      "name": "Bank",
      "category": "Commerce",
      "lineDrawable": "aurum_ic_commerce_bank",
      "fillDrawable": "aurum_ic_commerce_bank_filled",
      "lineFigmaNodeId": "6469:23762",
      "fillFigmaNodeId": "6469:23761",
      "lineFigmaUrl": "https://www.figma.com/design/YvIxqu2oTlM6UnkL0OloHc/?node-id=6469-23762",
      "fillFigmaUrl": "https://www.figma.com/design/YvIxqu2oTlM6UnkL0OloHc/?node-id=6469-23761"
    },
    {
      "name": "Cart",
      "category": "Commerce",
      "lineDrawable": "aurum_ic_commerce_cart",
      "fillDrawable": "aurum_ic_commerce_cart_filled",
      "lineFigmaNodeId": "5162:1079",
      "fillFigmaNodeId": "5162:964",
      "lineFigmaUrl": "https://www.figma.com/design/YvIxqu2oTlM6UnkL0OloHc/?node-id=5162-1079",
      "fillFigmaUrl": "https://www.figma.com/design/YvIxqu2oTlM6UnkL0OloHc/?node-id=5162-964",
      "tags": [
        "basket",
        "shop",
        "trolley",
        "bag"
      ]
    },
    {
      "name": "Rupee",
      "category": "Commerce",
      "lineDrawable": "aurum_ic_commerce_rupee",
      "fillDrawable": "aurum_ic_commerce_rupee_filled",
      "lineFigmaNodeId": "5162:1139",
      "fillFigmaNodeId": "5162:1025",
      "lineFigmaUrl": "https://www.figma.com/design/YvIxqu2oTlM6UnkL0OloHc/?node-id=5162-1139",
      "fillFigmaUrl": "https://www.figma.com/design/YvIxqu2oTlM6UnkL0OloHc/?node-id=5162-1025",
      "tags": [
        "inr",
        "money",
        "currency",
        "price"
      ]
    },
    {
      "name": "Wallet",
      "category": "Commerce",
      "lineDrawable": "aurum_ic_commerce_wallet",
      "fillDrawable": "aurum_ic_commerce_wallet_filled",
      "lineFigmaNodeId": "5162:1081",
      "fillFigmaNodeId": "5162:966",
      "lineFigmaUrl": "https://www.figma.com/design/YvIxqu2oTlM6UnkL0OloHc/?node-id=5162-1081",
      "fillFigmaUrl": "https://www.figma.com/design/YvIxqu2oTlM6UnkL0OloHc/?node-id=5162-966",
      "tags": [
        "money",
        "balance",
        "purse",
        "funds"
      ]
    },
    {
      "name": "Withdraw",
      "category": "Commerce",
      "lineDrawable": "aurum_ic_commerce_withdraw",
      "fillDrawable": "aurum_ic_commerce_withdraw_filled",
      "lineFigmaNodeId": "5358:456",
      "fillFigmaNodeId": "5358:465",
      "lineFigmaUrl": "https://www.figma.com/design/YvIxqu2oTlM6UnkL0OloHc/?node-id=5358-456",
      "fillFigmaUrl": "https://www.figma.com/design/YvIxqu2oTlM6UnkL0OloHc/?node-id=5358-465"
    },
    {
      "name": "Compress",
      "category": "System",
      "lineDrawable": "aurum_ic_system_compress",
      "fillDrawable": "aurum_ic_system_compress_filled",
      "lineFigmaNodeId": "5162:1129",
      "fillFigmaNodeId": "5162:1014",
      "lineFigmaUrl": "https://www.figma.com/design/YvIxqu2oTlM6UnkL0OloHc/?node-id=5162-1129",
      "fillFigmaUrl": "https://www.figma.com/design/YvIxqu2oTlM6UnkL0OloHc/?node-id=5162-1014",
      "tags": [
        "minimise",
        "collapse",
        "shrink",
        "small"
      ]
    },
    {
      "name": "Expand",
      "category": "System",
      "lineDrawable": "aurum_ic_system_expand",
      "fillDrawable": "aurum_ic_system_expand_filled",
      "lineFigmaNodeId": "5162:1127",
      "fillFigmaNodeId": "5162:1012",
      "lineFigmaUrl": "https://www.figma.com/design/YvIxqu2oTlM6UnkL0OloHc/?node-id=5162-1127",
      "fillFigmaUrl": "https://www.figma.com/design/YvIxqu2oTlM6UnkL0OloHc/?node-id=5162-1012",
      "tags": [
        "maximise",
        "fullscreen",
        "grow",
        "large"
      ]
    },
    {
      "name": "Lock",
      "category": "System",
      "lineDrawable": "aurum_ic_system_lock",
      "fillDrawable": "aurum_ic_system_lock_filled",
      "lineFigmaNodeId": "5162:1115",
      "fillFigmaNodeId": "5162:1000",
      "lineFigmaUrl": "https://www.figma.com/design/YvIxqu2oTlM6UnkL0OloHc/?node-id=5162-1115",
      "fillFigmaUrl": "https://www.figma.com/design/YvIxqu2oTlM6UnkL0OloHc/?node-id=5162-1000",
      "tags": [
        "secure",
        "locked",
        "private",
        "padlock"
      ]
    },
    {
      "name": "Settings",
      "category": "System",
      "lineDrawable": "aurum_ic_system_settings",
      "fillDrawable": "aurum_ic_system_settings_filled",
      "lineFigmaNodeId": "5162:1141",
      "fillFigmaNodeId": "5162:1027",
      "lineFigmaUrl": "https://www.figma.com/design/YvIxqu2oTlM6UnkL0OloHc/?node-id=5162-1141",
      "fillFigmaUrl": "https://www.figma.com/design/YvIxqu2oTlM6UnkL0OloHc/?node-id=5162-1027",
      "tags": [
        "gear",
        "cog",
        "preferences",
        "config",
        "options"
      ]
    },
    {
      "name": "SignIn",
      "category": "System",
      "lineDrawable": "aurum_ic_system_sign_in",
      "fillDrawable": "aurum_ic_system_sign_in_filled",
      "lineFigmaNodeId": "5162:1121",
      "fillFigmaNodeId": "5162:1006",
      "lineFigmaUrl": "https://www.figma.com/design/YvIxqu2oTlM6UnkL0OloHc/?node-id=5162-1121",
      "fillFigmaUrl": "https://www.figma.com/design/YvIxqu2oTlM6UnkL0OloHc/?node-id=5162-1006",
      "tags": [
        "login",
        "enter",
        "log-in"
      ]
    },
    {
      "name": "SignOut",
      "category": "System",
      "lineDrawable": "aurum_ic_system_sign_out",
      "fillDrawable": "aurum_ic_system_sign_out_filled",
      "lineFigmaNodeId": "5162:1119",
      "fillFigmaNodeId": "5162:1004",
      "lineFigmaUrl": "https://www.figma.com/design/YvIxqu2oTlM6UnkL0OloHc/?node-id=5162-1119",
      "fillFigmaUrl": "https://www.figma.com/design/YvIxqu2oTlM6UnkL0OloHc/?node-id=5162-1004",
      "tags": [
        "logout",
        "exit",
        "leave",
        "log-out"
      ]
    },
    {
      "name": "Unlock",
      "category": "System",
      "lineDrawable": "aurum_ic_system_unlock",
      "fillDrawable": "aurum_ic_system_unlock_filled",
      "lineFigmaNodeId": "5162:1117",
      "fillFigmaNodeId": "5162:1002",
      "lineFigmaUrl": "https://www.figma.com/design/YvIxqu2oTlM6UnkL0OloHc/?node-id=5162-1117",
      "fillFigmaUrl": "https://www.figma.com/design/YvIxqu2oTlM6UnkL0OloHc/?node-id=5162-1002",
      "tags": [
        "unlocked",
        "open",
        "padlock-open"
      ]
    },
    {
      "name": "Bell",
      "category": "Status",
      "lineDrawable": "aurum_ic_status_bell",
      "fillDrawable": "aurum_ic_status_bell_filled",
      "lineFigmaNodeId": "5162:1039",
      "fillFigmaNodeId": "5162:924",
      "lineFigmaUrl": "https://www.figma.com/design/YvIxqu2oTlM6UnkL0OloHc/?node-id=5162-1039",
      "fillFigmaUrl": "https://www.figma.com/design/YvIxqu2oTlM6UnkL0OloHc/?node-id=5162-924",
      "tags": [
        "notification",
        "alert",
        "alarm",
        "ring"
      ]
    },
    {
      "name": "Discount",
      "category": "Status",
      "lineDrawable": "aurum_ic_status_discount",
      "fillDrawable": "aurum_ic_status_discount_filled",
      "lineFigmaNodeId": "5162:1103",
      "fillFigmaNodeId": "5162:988",
      "lineFigmaUrl": "https://www.figma.com/design/YvIxqu2oTlM6UnkL0OloHc/?node-id=5162-1103",
      "fillFigmaUrl": "https://www.figma.com/design/YvIxqu2oTlM6UnkL0OloHc/?node-id=5162-988",
      "tags": [
        "offer",
        "deal",
        "tag",
        "promo",
        "sale"
      ]
    },
    {
      "name": "Help",
      "category": "Status",
      "lineDrawable": "aurum_ic_status_help",
      "fillDrawable": "aurum_ic_status_help_filled",
      "lineFigmaNodeId": "5162:1091",
      "fillFigmaNodeId": "5162:976",
      "lineFigmaUrl": "https://www.figma.com/design/YvIxqu2oTlM6UnkL0OloHc/?node-id=5162-1091",
      "fillFigmaUrl": "https://www.figma.com/design/YvIxqu2oTlM6UnkL0OloHc/?node-id=5162-976",
      "tags": [
        "question",
        "support",
        "info",
        "doubt",
        "faq"
      ]
    },
    {
      "name": "Info",
      "category": "Status",
      "lineDrawable": "aurum_ic_status_info",
      "fillDrawable": "aurum_ic_status_info_filled",
      "lineFigmaNodeId": "5162:1043",
      "fillFigmaNodeId": "5162:928",
      "lineFigmaUrl": "https://www.figma.com/design/YvIxqu2oTlM6UnkL0OloHc/?node-id=5162-1043",
      "fillFigmaUrl": "https://www.figma.com/design/YvIxqu2oTlM6UnkL0OloHc/?node-id=5162-928",
      "tags": [
        "i",
        "details",
        "about"
      ]
    },
    {
      "name": "Loader",
      "category": "Status",
      "lineDrawable": "aurum_ic_status_loader",
      "fillDrawable": "aurum_ic_status_loader_filled",
      "lineFigmaNodeId": "5480:3920",
      "fillFigmaNodeId": "5480:3920",
      "lineFigmaUrl": "https://www.figma.com/design/YvIxqu2oTlM6UnkL0OloHc/?node-id=5480-3920",
      "fillFigmaUrl": "https://www.figma.com/design/YvIxqu2oTlM6UnkL0OloHc/?node-id=5480-3920"
    },
    {
      "name": "Pending",
      "category": "Status",
      "lineDrawable": "aurum_ic_status_pending",
      "fillDrawable": "aurum_ic_status_pending_filled",
      "lineFigmaNodeId": "5322:1579",
      "fillFigmaNodeId": "5322:1580",
      "lineFigmaUrl": "https://www.figma.com/design/YvIxqu2oTlM6UnkL0OloHc/?node-id=5322-1579",
      "fillFigmaUrl": "https://www.figma.com/design/YvIxqu2oTlM6UnkL0OloHc/?node-id=5322-1580"
    },
    {
      "name": "Shield",
      "category": "Status",
      "lineDrawable": "aurum_ic_status_shield",
      "fillDrawable": "aurum_ic_status_shield_filled",
      "lineFigmaNodeId": "5162:1105",
      "fillFigmaNodeId": "5162:990",
      "lineFigmaUrl": "https://www.figma.com/design/YvIxqu2oTlM6UnkL0OloHc/?node-id=5162-1105",
      "fillFigmaUrl": "https://www.figma.com/design/YvIxqu2oTlM6UnkL0OloHc/?node-id=5162-990",
      "tags": [
        "secure",
        "protect",
        "guard",
        "safety"
      ]
    },
    {
      "name": "Success",
      "category": "Status",
      "lineDrawable": "aurum_ic_status_success",
      "fillDrawable": "aurum_ic_status_success_filled",
      "lineFigmaNodeId": "5311:811",
      "fillFigmaNodeId": "5311:811",
      "lineFigmaUrl": "https://www.figma.com/design/YvIxqu2oTlM6UnkL0OloHc/?node-id=5311-811",
      "fillFigmaUrl": "https://www.figma.com/design/YvIxqu2oTlM6UnkL0OloHc/?node-id=5311-811"
    },
    {
      "name": "Timer",
      "category": "Status",
      "lineDrawable": "aurum_ic_status_timer",
      "fillDrawable": "aurum_ic_status_timer_filled",
      "lineFigmaNodeId": "5896:644",
      "fillFigmaNodeId": "5896:645",
      "lineFigmaUrl": "https://www.figma.com/design/YvIxqu2oTlM6UnkL0OloHc/?node-id=5896-644",
      "fillFigmaUrl": "https://www.figma.com/design/YvIxqu2oTlM6UnkL0OloHc/?node-id=5896-645"
    },
    {
      "name": "Verified",
      "category": "Status",
      "lineDrawable": "aurum_ic_status_verified",
      "fillDrawable": "aurum_ic_status_verified_filled",
      "lineFigmaNodeId": "5162:1099",
      "fillFigmaNodeId": "5162:984",
      "lineFigmaUrl": "https://www.figma.com/design/YvIxqu2oTlM6UnkL0OloHc/?node-id=5162-1099",
      "fillFigmaUrl": "https://www.figma.com/design/YvIxqu2oTlM6UnkL0OloHc/?node-id=5162-984",
      "tags": [
        "badge",
        "trusted",
        "approved",
        "official",
        "tick"
      ]
    },
    {
      "name": "Warning",
      "category": "Status",
      "lineDrawable": "aurum_ic_status_warning",
      "fillDrawable": "aurum_ic_status_warning_filled",
      "lineFigmaNodeId": "5308:802",
      "fillFigmaNodeId": "5308:805",
      "lineFigmaUrl": "https://www.figma.com/design/YvIxqu2oTlM6UnkL0OloHc/?node-id=5308-802",
      "fillFigmaUrl": "https://www.figma.com/design/YvIxqu2oTlM6UnkL0OloHc/?node-id=5308-805"
    },
    {
      "name": "Calendar",
      "category": "User",
      "lineDrawable": "aurum_ic_user_calendar",
      "fillDrawable": "aurum_ic_user_calendar_filled",
      "lineFigmaNodeId": "5162:1125",
      "fillFigmaNodeId": "5162:1010",
      "lineFigmaUrl": "https://www.figma.com/design/YvIxqu2oTlM6UnkL0OloHc/?node-id=5162-1125",
      "fillFigmaUrl": "https://www.figma.com/design/YvIxqu2oTlM6UnkL0OloHc/?node-id=5162-1010",
      "tags": [
        "date",
        "schedule",
        "month",
        "day"
      ]
    },
    {
      "name": "Home",
      "category": "User",
      "lineDrawable": "aurum_ic_user_home",
      "fillDrawable": "aurum_ic_user_home_filled",
      "lineFigmaNodeId": "5162:1029",
      "fillFigmaNodeId": "5162:914",
      "lineFigmaUrl": "https://www.figma.com/design/YvIxqu2oTlM6UnkL0OloHc/?node-id=5162-1029",
      "fillFigmaUrl": "https://www.figma.com/design/YvIxqu2oTlM6UnkL0OloHc/?node-id=5162-914",
      "tags": [
        "house",
        "main",
        "dashboard"
      ]
    },
    {
      "name": "Location",
      "category": "User",
      "lineDrawable": "aurum_ic_user_location",
      "fillDrawable": "aurum_ic_user_location_filled",
      "lineFigmaNodeId": "5162:1135",
      "fillFigmaNodeId": "5162:1021",
      "lineFigmaUrl": "https://www.figma.com/design/YvIxqu2oTlM6UnkL0OloHc/?node-id=5162-1135",
      "fillFigmaUrl": "https://www.figma.com/design/YvIxqu2oTlM6UnkL0OloHc/?node-id=5162-1021",
      "tags": [
        "pin",
        "map",
        "place",
        "marker",
        "gps"
      ]
    },
    {
      "name": "Nek",
      "category": "User",
      "lineDrawable": "aurum_ic_user_nek",
      "fillDrawable": "aurum_ic_user_nek_filled",
      "lineFigmaNodeId": "5566:790",
      "fillFigmaNodeId": "5566:790",
      "lineFigmaUrl": "https://www.figma.com/design/YvIxqu2oTlM6UnkL0OloHc/?node-id=5566-790",
      "fillFigmaUrl": "https://www.figma.com/design/YvIxqu2oTlM6UnkL0OloHc/?node-id=5566-790"
    },
    {
      "name": "Phone",
      "category": "User",
      "lineDrawable": "aurum_ic_user_phone",
      "fillDrawable": "aurum_ic_user_phone_filled",
      "lineFigmaNodeId": "5917:1283",
      "fillFigmaNodeId": "5917:1280",
      "lineFigmaUrl": "https://www.figma.com/design/YvIxqu2oTlM6UnkL0OloHc/?node-id=5917-1283",
      "fillFigmaUrl": "https://www.figma.com/design/YvIxqu2oTlM6UnkL0OloHc/?node-id=5917-1280"
    },
    {
      "name": "Support",
      "category": "User",
      "lineDrawable": "aurum_ic_user_support",
      "fillDrawable": "aurum_ic_user_support_filled",
      "lineFigmaNodeId": "5162:1087",
      "fillFigmaNodeId": "5162:972",
      "lineFigmaUrl": "https://www.figma.com/design/YvIxqu2oTlM6UnkL0OloHc/?node-id=5162-1087",
      "fillFigmaUrl": "https://www.figma.com/design/YvIxqu2oTlM6UnkL0OloHc/?node-id=5162-972",
      "tags": [
        "headset",
        "agent",
        "help",
        "service"
      ]
    },
    {
      "name": "Translate",
      "category": "User",
      "lineDrawable": "aurum_ic_user_translate",
      "fillDrawable": "aurum_ic_user_translate_filled",
      "lineFigmaNodeId": "5162:1101",
      "fillFigmaNodeId": "5162:986",
      "lineFigmaUrl": "https://www.figma.com/design/YvIxqu2oTlM6UnkL0OloHc/?node-id=5162-1101",
      "fillFigmaUrl": "https://www.figma.com/design/YvIxqu2oTlM6UnkL0OloHc/?node-id=5162-986",
      "tags": [
        "language",
        "globe",
        "locale"
      ]
    },
    {
      "name": "User",
      "category": "User",
      "lineDrawable": "aurum_ic_user_user",
      "fillDrawable": "aurum_ic_user_user_filled",
      "lineFigmaNodeId": "5162:1041",
      "fillFigmaNodeId": "5162:926",
      "lineFigmaUrl": "https://www.figma.com/design/YvIxqu2oTlM6UnkL0OloHc/?node-id=5162-1041",
      "fillFigmaUrl": "https://www.figma.com/design/YvIxqu2oTlM6UnkL0OloHc/?node-id=5162-926",
      "tags": [
        "person",
        "profile",
        "account",
        "avatar"
      ]
    },
    {
      "name": "WhatsApp",
      "category": "User",
      "lineDrawable": "aurum_ic_user_whatsapp",
      "fillDrawable": "aurum_ic_user_whatsapp_filled",
      "lineFigmaNodeId": "5917:1282",
      "fillFigmaNodeId": "5917:1281",
      "lineFigmaUrl": "https://www.figma.com/design/YvIxqu2oTlM6UnkL0OloHc/?node-id=5917-1282",
      "fillFigmaUrl": "https://www.figma.com/design/YvIxqu2oTlM6UnkL0OloHc/?node-id=5917-1281"
    },
    {
      "name": "Check",
      "category": "Selection",
      "lineDrawable": "aurum_ic_selection_check",
      "fillDrawable": "aurum_ic_selection_check_filled",
      "lineFigmaNodeId": "5308:800",
      "fillFigmaNodeId": "5308:800",
      "lineFigmaUrl": "https://www.figma.com/design/YvIxqu2oTlM6UnkL0OloHc/?node-id=5308-800",
      "fillFigmaUrl": "https://www.figma.com/design/YvIxqu2oTlM6UnkL0OloHc/?node-id=5308-800",
      "tags": [
        "tick",
        "done",
        "ok",
        "confirm",
        "success"
      ]
    }
  ],
  "codeConnect": [
    {
      "component": "AurumButton",
      "figmaNodeId": "4692:1074",
      "figmaUrl": "https://www.figma.com/design/YvIxqu2oTlM6UnkL0OloHc/?node-id=4692-1074",
      "kotlinPath": "aurum/src/main/kotlin/com/jar/app/aurum/component/button/AurumButton.figma.kt"
    },
    {
      "component": "AurumLinkButton",
      "figmaNodeId": "4784:1286",
      "figmaUrl": "https://www.figma.com/design/YvIxqu2oTlM6UnkL0OloHc/?node-id=4784-1286",
      "kotlinPath": "aurum/src/main/kotlin/com/jar/app/aurum/component/button/AurumLinkButton.figma.kt"
    },
    {
      "component": "AurumTransactionListCard",
      "figmaNodeId": "5576:19749",
      "figmaUrl": "https://www.figma.com/design/YvIxqu2oTlM6UnkL0OloHc/?node-id=5576-19749",
      "kotlinPath": "aurum/src/main/kotlin/com/jar/app/aurum/component/card/AurumTransactionListCard.figma.kt"
    },
    {
      "component": "AurumChip",
      "figmaNodeId": "4446:701",
      "figmaUrl": "https://www.figma.com/design/YvIxqu2oTlM6UnkL0OloHc/?node-id=4446-701",
      "kotlinPath": "aurum/src/main/kotlin/com/jar/app/aurum/component/chip/AurumChip.figma.kt"
    },
    {
      "component": "AurumPill",
      "figmaNodeId": "5891:802",
      "figmaUrl": "https://www.figma.com/design/YvIxqu2oTlM6UnkL0OloHc/?node-id=5891-802",
      "kotlinPath": "aurum/src/main/kotlin/com/jar/app/aurum/component/chip/AurumPill.figma.kt"
    },
    {
      "component": "AurumBadge",
      "figmaNodeId": "4240:10542",
      "figmaUrl": "https://www.figma.com/design/YvIxqu2oTlM6UnkL0OloHc/?node-id=4240-10542",
      "kotlinPath": "aurum/src/main/kotlin/com/jar/app/aurum/component/feedback/AurumBadge.figma.kt"
    },
    {
      "component": "AurumLoader",
      "figmaNodeId": "4530:2084",
      "figmaUrl": "https://www.figma.com/design/YvIxqu2oTlM6UnkL0OloHc/?node-id=4530-2084",
      "kotlinPath": "aurum/src/main/kotlin/com/jar/app/aurum/component/feedback/AurumLoader.figma.kt"
    },
    {
      "component": "AurumProgressBar",
      "figmaNodeId": "5934:846",
      "figmaUrl": "https://www.figma.com/design/YvIxqu2oTlM6UnkL0OloHc/?node-id=5934-846",
      "kotlinPath": "aurum/src/main/kotlin/com/jar/app/aurum/component/feedback/AurumProgressBar.figma.kt"
    },
    {
      "component": "AurumSegmentedProgressBar",
      "figmaNodeId": "5889:2361",
      "figmaUrl": "https://www.figma.com/design/YvIxqu2oTlM6UnkL0OloHc/?node-id=5889-2361",
      "kotlinPath": "aurum/src/main/kotlin/com/jar/app/aurum/component/feedback/AurumSegmentedProgressBar.figma.kt"
    },
    {
      "component": "AurumToast",
      "figmaNodeId": "6014:2621",
      "figmaUrl": "https://www.figma.com/design/YvIxqu2oTlM6UnkL0OloHc/?node-id=6014-2621",
      "kotlinPath": "aurum/src/main/kotlin/com/jar/app/aurum/component/feedback/AurumToast.figma.kt"
    },
    {
      "component": "AurumAmountInput",
      "figmaNodeId": "5080:261",
      "figmaUrl": "https://www.figma.com/design/YvIxqu2oTlM6UnkL0OloHc/?node-id=5080-261",
      "kotlinPath": "aurum/src/main/kotlin/com/jar/app/aurum/component/field/AurumAmountInput.figma.kt"
    },
    {
      "component": "AurumOtpInput",
      "figmaNodeId": "4975:1630",
      "figmaUrl": "https://www.figma.com/design/YvIxqu2oTlM6UnkL0OloHc/?node-id=4975-1630",
      "kotlinPath": "aurum/src/main/kotlin/com/jar/app/aurum/component/field/AurumOtpInput.figma.kt"
    },
    {
      "component": "AurumPhoneNumberInput",
      "figmaNodeId": "4904:2455",
      "figmaUrl": "https://www.figma.com/design/YvIxqu2oTlM6UnkL0OloHc/?node-id=4904-2455",
      "kotlinPath": "aurum/src/main/kotlin/com/jar/app/aurum/component/field/AurumPhoneNumberInput.figma.kt"
    },
    {
      "component": "AurumTextField",
      "figmaNodeId": "4623:373",
      "figmaUrl": "https://www.figma.com/design/YvIxqu2oTlM6UnkL0OloHc/?node-id=4623-373",
      "kotlinPath": "aurum/src/main/kotlin/com/jar/app/aurum/component/field/AurumTextField.figma.kt"
    },
    {
      "component": "AurumIcons.Add",
      "figmaNodeId": "5322:1592",
      "figmaUrl": "https://www.figma.com/design/YvIxqu2oTlM6UnkL0OloHc/?node-id=5322-1592",
      "kotlinPath": "aurum/src/main/kotlin/com/jar/app/aurum/component/icon/figma_connect/AurumIconAdd.figma.kt"
    },
    {
      "component": "AurumIcons.AddFilled",
      "figmaNodeId": "5322:1593",
      "figmaUrl": "https://www.figma.com/design/YvIxqu2oTlM6UnkL0OloHc/?node-id=5322-1593",
      "kotlinPath": "aurum/src/main/kotlin/com/jar/app/aurum/component/icon/figma_connect/AurumIconAddFilled.figma.kt"
    },
    {
      "component": "AurumIcons.ArrowDown",
      "figmaNodeId": "5162:1059",
      "figmaUrl": "https://www.figma.com/design/YvIxqu2oTlM6UnkL0OloHc/?node-id=5162-1059",
      "kotlinPath": "aurum/src/main/kotlin/com/jar/app/aurum/component/icon/figma_connect/AurumIconArrowDown.figma.kt"
    },
    {
      "component": "AurumIcons.ArrowDownFilled",
      "figmaNodeId": "5162:944",
      "figmaUrl": "https://www.figma.com/design/YvIxqu2oTlM6UnkL0OloHc/?node-id=5162-944",
      "kotlinPath": "aurum/src/main/kotlin/com/jar/app/aurum/component/icon/figma_connect/AurumIconArrowDownFilled.figma.kt"
    },
    {
      "component": "AurumIcons.ArrowDownLeft",
      "figmaNodeId": "5874:1925",
      "figmaUrl": "https://www.figma.com/design/YvIxqu2oTlM6UnkL0OloHc/?node-id=5874-1925",
      "kotlinPath": "aurum/src/main/kotlin/com/jar/app/aurum/component/icon/figma_connect/AurumIconArrowDownLeft.figma.kt"
    },
    {
      "component": "AurumIcons.ArrowDownLeftFilled",
      "figmaNodeId": "5874:1925",
      "figmaUrl": "https://www.figma.com/design/YvIxqu2oTlM6UnkL0OloHc/?node-id=5874-1925",
      "kotlinPath": "aurum/src/main/kotlin/com/jar/app/aurum/component/icon/figma_connect/AurumIconArrowDownLeftFilled.figma.kt"
    },
    {
      "component": "AurumIcons.ArrowLeft",
      "figmaNodeId": "5162:1053",
      "figmaUrl": "https://www.figma.com/design/YvIxqu2oTlM6UnkL0OloHc/?node-id=5162-1053",
      "kotlinPath": "aurum/src/main/kotlin/com/jar/app/aurum/component/icon/figma_connect/AurumIconArrowLeft.figma.kt"
    },
    {
      "component": "AurumIcons.ArrowLeftFilled",
      "figmaNodeId": "5162:938",
      "figmaUrl": "https://www.figma.com/design/YvIxqu2oTlM6UnkL0OloHc/?node-id=5162-938",
      "kotlinPath": "aurum/src/main/kotlin/com/jar/app/aurum/component/icon/figma_connect/AurumIconArrowLeftFilled.figma.kt"
    },
    {
      "component": "AurumIcons.ArrowRight",
      "figmaNodeId": "5162:1055",
      "figmaUrl": "https://www.figma.com/design/YvIxqu2oTlM6UnkL0OloHc/?node-id=5162-1055",
      "kotlinPath": "aurum/src/main/kotlin/com/jar/app/aurum/component/icon/figma_connect/AurumIconArrowRight.figma.kt"
    },
    {
      "component": "AurumIcons.ArrowRightFilled",
      "figmaNodeId": "5162:940",
      "figmaUrl": "https://www.figma.com/design/YvIxqu2oTlM6UnkL0OloHc/?node-id=5162-940",
      "kotlinPath": "aurum/src/main/kotlin/com/jar/app/aurum/component/icon/figma_connect/AurumIconArrowRightFilled.figma.kt"
    },
    {
      "component": "AurumIcons.ArrowUp",
      "figmaNodeId": "5162:1057",
      "figmaUrl": "https://www.figma.com/design/YvIxqu2oTlM6UnkL0OloHc/?node-id=5162-1057",
      "kotlinPath": "aurum/src/main/kotlin/com/jar/app/aurum/component/icon/figma_connect/AurumIconArrowUp.figma.kt"
    },
    {
      "component": "AurumIcons.ArrowUpFilled",
      "figmaNodeId": "5162:942",
      "figmaUrl": "https://www.figma.com/design/YvIxqu2oTlM6UnkL0OloHc/?node-id=5162-942",
      "kotlinPath": "aurum/src/main/kotlin/com/jar/app/aurum/component/icon/figma_connect/AurumIconArrowUpFilled.figma.kt"
    },
    {
      "component": "AurumIcons.ArrowUpRight",
      "figmaNodeId": "5874:1926",
      "figmaUrl": "https://www.figma.com/design/YvIxqu2oTlM6UnkL0OloHc/?node-id=5874-1926",
      "kotlinPath": "aurum/src/main/kotlin/com/jar/app/aurum/component/icon/figma_connect/AurumIconArrowUpRight.figma.kt"
    },
    {
      "component": "AurumIcons.ArrowUpRightFilled",
      "figmaNodeId": "5874:1926",
      "figmaUrl": "https://www.figma.com/design/YvIxqu2oTlM6UnkL0OloHc/?node-id=5874-1926",
      "kotlinPath": "aurum/src/main/kotlin/com/jar/app/aurum/component/icon/figma_connect/AurumIconArrowUpRightFilled.figma.kt"
    },
    {
      "component": "AurumIcons.Bank",
      "figmaNodeId": "6469:23762",
      "figmaUrl": "https://www.figma.com/design/YvIxqu2oTlM6UnkL0OloHc/?node-id=6469-23762",
      "kotlinPath": "aurum/src/main/kotlin/com/jar/app/aurum/component/icon/figma_connect/AurumIconBank.figma.kt"
    },
    {
      "component": "AurumIcons.BankFilled",
      "figmaNodeId": "6469:23761",
      "figmaUrl": "https://www.figma.com/design/YvIxqu2oTlM6UnkL0OloHc/?node-id=6469-23761",
      "kotlinPath": "aurum/src/main/kotlin/com/jar/app/aurum/component/icon/figma_connect/AurumIconBankFilled.figma.kt"
    },
    {
      "component": "AurumIcons.Bell",
      "figmaNodeId": "5162:1039",
      "figmaUrl": "https://www.figma.com/design/YvIxqu2oTlM6UnkL0OloHc/?node-id=5162-1039",
      "kotlinPath": "aurum/src/main/kotlin/com/jar/app/aurum/component/icon/figma_connect/AurumIconBell.figma.kt"
    },
    {
      "component": "AurumIcons.BellFilled",
      "figmaNodeId": "5162:924",
      "figmaUrl": "https://www.figma.com/design/YvIxqu2oTlM6UnkL0OloHc/?node-id=5162-924",
      "kotlinPath": "aurum/src/main/kotlin/com/jar/app/aurum/component/icon/figma_connect/AurumIconBellFilled.figma.kt"
    },
    {
      "component": "AurumIcons.Bookmark",
      "figmaNodeId": "5162:1047",
      "figmaUrl": "https://www.figma.com/design/YvIxqu2oTlM6UnkL0OloHc/?node-id=5162-1047",
      "kotlinPath": "aurum/src/main/kotlin/com/jar/app/aurum/component/icon/figma_connect/AurumIconBookmark.figma.kt"
    },
    {
      "component": "AurumIcons.BookmarkFilled",
      "figmaNodeId": "5162:932",
      "figmaUrl": "https://www.figma.com/design/YvIxqu2oTlM6UnkL0OloHc/?node-id=5162-932",
      "kotlinPath": "aurum/src/main/kotlin/com/jar/app/aurum/component/icon/figma_connect/AurumIconBookmarkFilled.figma.kt"
    },
    {
      "component": "AurumIcons.Broadcast",
      "figmaNodeId": "5162:1037",
      "figmaUrl": "https://www.figma.com/design/YvIxqu2oTlM6UnkL0OloHc/?node-id=5162-1037",
      "kotlinPath": "aurum/src/main/kotlin/com/jar/app/aurum/component/icon/figma_connect/AurumIconBroadcast.figma.kt"
    },
    {
      "component": "AurumIcons.BroadcastFilled",
      "figmaNodeId": "5162:922",
      "figmaUrl": "https://www.figma.com/design/YvIxqu2oTlM6UnkL0OloHc/?node-id=5162-922",
      "kotlinPath": "aurum/src/main/kotlin/com/jar/app/aurum/component/icon/figma_connect/AurumIconBroadcastFilled.figma.kt"
    },
    {
      "component": "AurumIcons.Calendar",
      "figmaNodeId": "5162:1125",
      "figmaUrl": "https://www.figma.com/design/YvIxqu2oTlM6UnkL0OloHc/?node-id=5162-1125",
      "kotlinPath": "aurum/src/main/kotlin/com/jar/app/aurum/component/icon/figma_connect/AurumIconCalendar.figma.kt"
    },
    {
      "component": "AurumIcons.CalendarFilled",
      "figmaNodeId": "5162:1010",
      "figmaUrl": "https://www.figma.com/design/YvIxqu2oTlM6UnkL0OloHc/?node-id=5162-1010",
      "kotlinPath": "aurum/src/main/kotlin/com/jar/app/aurum/component/icon/figma_connect/AurumIconCalendarFilled.figma.kt"
    },
    {
      "component": "AurumIcons.Camera",
      "figmaNodeId": "5162:1113",
      "figmaUrl": "https://www.figma.com/design/YvIxqu2oTlM6UnkL0OloHc/?node-id=5162-1113",
      "kotlinPath": "aurum/src/main/kotlin/com/jar/app/aurum/component/icon/figma_connect/AurumIconCamera.figma.kt"
    },
    {
      "component": "AurumIcons.CameraFilled",
      "figmaNodeId": "5162:998",
      "figmaUrl": "https://www.figma.com/design/YvIxqu2oTlM6UnkL0OloHc/?node-id=5162-998",
      "kotlinPath": "aurum/src/main/kotlin/com/jar/app/aurum/component/icon/figma_connect/AurumIconCameraFilled.figma.kt"
    },
    {
      "component": "AurumIcons.CaretBoldDown",
      "figmaNodeId": "7570:656",
      "figmaUrl": "https://www.figma.com/design/YvIxqu2oTlM6UnkL0OloHc/?node-id=7570-656",
      "kotlinPath": "aurum/src/main/kotlin/com/jar/app/aurum/component/icon/figma_connect/AurumIconCaretBoldDown.figma.kt"
    },
    {
      "component": "AurumIcons.CaretBoldDownFilled",
      "figmaNodeId": "7570:656",
      "figmaUrl": "https://www.figma.com/design/YvIxqu2oTlM6UnkL0OloHc/?node-id=7570-656",
      "kotlinPath": "aurum/src/main/kotlin/com/jar/app/aurum/component/icon/figma_connect/AurumIconCaretBoldDownFilled.figma.kt"
    },
    {
      "component": "AurumIcons.CaretBoldLeft",
      "figmaNodeId": "7570:657",
      "figmaUrl": "https://www.figma.com/design/YvIxqu2oTlM6UnkL0OloHc/?node-id=7570-657",
      "kotlinPath": "aurum/src/main/kotlin/com/jar/app/aurum/component/icon/figma_connect/AurumIconCaretBoldLeft.figma.kt"
    },
    {
      "component": "AurumIcons.CaretBoldLeftFilled",
      "figmaNodeId": "7570:657",
      "figmaUrl": "https://www.figma.com/design/YvIxqu2oTlM6UnkL0OloHc/?node-id=7570-657",
      "kotlinPath": "aurum/src/main/kotlin/com/jar/app/aurum/component/icon/figma_connect/AurumIconCaretBoldLeftFilled.figma.kt"
    },
    {
      "component": "AurumIcons.CaretBoldRight",
      "figmaNodeId": "7570:654",
      "figmaUrl": "https://www.figma.com/design/YvIxqu2oTlM6UnkL0OloHc/?node-id=7570-654",
      "kotlinPath": "aurum/src/main/kotlin/com/jar/app/aurum/component/icon/figma_connect/AurumIconCaretBoldRight.figma.kt"
    },
    {
      "component": "AurumIcons.CaretBoldRightFilled",
      "figmaNodeId": "7570:654",
      "figmaUrl": "https://www.figma.com/design/YvIxqu2oTlM6UnkL0OloHc/?node-id=7570-654",
      "kotlinPath": "aurum/src/main/kotlin/com/jar/app/aurum/component/icon/figma_connect/AurumIconCaretBoldRightFilled.figma.kt"
    },
    {
      "component": "AurumIcons.CaretBoldUp",
      "figmaNodeId": "7570:655",
      "figmaUrl": "https://www.figma.com/design/YvIxqu2oTlM6UnkL0OloHc/?node-id=7570-655",
      "kotlinPath": "aurum/src/main/kotlin/com/jar/app/aurum/component/icon/figma_connect/AurumIconCaretBoldUp.figma.kt"
    },
    {
      "component": "AurumIcons.CaretBoldUpFilled",
      "figmaNodeId": "7570:655",
      "figmaUrl": "https://www.figma.com/design/YvIxqu2oTlM6UnkL0OloHc/?node-id=7570-655",
      "kotlinPath": "aurum/src/main/kotlin/com/jar/app/aurum/component/icon/figma_connect/AurumIconCaretBoldUpFilled.figma.kt"
    },
    {
      "component": "AurumIcons.CaretDown",
      "figmaNodeId": "6419:335",
      "figmaUrl": "https://www.figma.com/design/YvIxqu2oTlM6UnkL0OloHc/?node-id=6419-335",
      "kotlinPath": "aurum/src/main/kotlin/com/jar/app/aurum/component/icon/figma_connect/AurumIconCaretDown.figma.kt"
    },
    {
      "component": "AurumIcons.CaretDownFilled",
      "figmaNodeId": "6419:335",
      "figmaUrl": "https://www.figma.com/design/YvIxqu2oTlM6UnkL0OloHc/?node-id=6419-335",
      "kotlinPath": "aurum/src/main/kotlin/com/jar/app/aurum/component/icon/figma_connect/AurumIconCaretDownFilled.figma.kt"
    },
    {
      "component": "AurumIcons.CaretLeft",
      "figmaNodeId": "6419:336",
      "figmaUrl": "https://www.figma.com/design/YvIxqu2oTlM6UnkL0OloHc/?node-id=6419-336",
      "kotlinPath": "aurum/src/main/kotlin/com/jar/app/aurum/component/icon/figma_connect/AurumIconCaretLeft.figma.kt"
    },
    {
      "component": "AurumIcons.CaretLeftFilled",
      "figmaNodeId": "6419:336",
      "figmaUrl": "https://www.figma.com/design/YvIxqu2oTlM6UnkL0OloHc/?node-id=6419-336",
      "kotlinPath": "aurum/src/main/kotlin/com/jar/app/aurum/component/icon/figma_connect/AurumIconCaretLeftFilled.figma.kt"
    },
    {
      "component": "AurumIcons.CaretRight",
      "figmaNodeId": "6419:337",
      "figmaUrl": "https://www.figma.com/design/YvIxqu2oTlM6UnkL0OloHc/?node-id=6419-337",
      "kotlinPath": "aurum/src/main/kotlin/com/jar/app/aurum/component/icon/figma_connect/AurumIconCaretRight.figma.kt"
    },
    {
      "component": "AurumIcons.CaretRightFilled",
      "figmaNodeId": "6419:337",
      "figmaUrl": "https://www.figma.com/design/YvIxqu2oTlM6UnkL0OloHc/?node-id=6419-337",
      "kotlinPath": "aurum/src/main/kotlin/com/jar/app/aurum/component/icon/figma_connect/AurumIconCaretRightFilled.figma.kt"
    },
    {
      "component": "AurumIcons.CaretUp",
      "figmaNodeId": "6419:334",
      "figmaUrl": "https://www.figma.com/design/YvIxqu2oTlM6UnkL0OloHc/?node-id=6419-334",
      "kotlinPath": "aurum/src/main/kotlin/com/jar/app/aurum/component/icon/figma_connect/AurumIconCaretUp.figma.kt"
    },
    {
      "component": "AurumIcons.CaretUpFilled",
      "figmaNodeId": "6419:334",
      "figmaUrl": "https://www.figma.com/design/YvIxqu2oTlM6UnkL0OloHc/?node-id=6419-334",
      "kotlinPath": "aurum/src/main/kotlin/com/jar/app/aurum/component/icon/figma_connect/AurumIconCaretUpFilled.figma.kt"
    },
    {
      "component": "AurumIcons.Cart",
      "figmaNodeId": "5162:1079",
      "figmaUrl": "https://www.figma.com/design/YvIxqu2oTlM6UnkL0OloHc/?node-id=5162-1079",
      "kotlinPath": "aurum/src/main/kotlin/com/jar/app/aurum/component/icon/figma_connect/AurumIconCart.figma.kt"
    },
    {
      "component": "AurumIcons.CartFilled",
      "figmaNodeId": "5162:964",
      "figmaUrl": "https://www.figma.com/design/YvIxqu2oTlM6UnkL0OloHc/?node-id=5162-964",
      "kotlinPath": "aurum/src/main/kotlin/com/jar/app/aurum/component/icon/figma_connect/AurumIconCartFilled.figma.kt"
    },
    {
      "component": "AurumIcons.ChartBar",
      "figmaNodeId": "6473:23775",
      "figmaUrl": "https://www.figma.com/design/YvIxqu2oTlM6UnkL0OloHc/?node-id=6473-23775",
      "kotlinPath": "aurum/src/main/kotlin/com/jar/app/aurum/component/icon/figma_connect/AurumIconChartBar.figma.kt"
    },
    {
      "component": "AurumIcons.ChartBarFilled",
      "figmaNodeId": "6473:23774",
      "figmaUrl": "https://www.figma.com/design/YvIxqu2oTlM6UnkL0OloHc/?node-id=6473-23774",
      "kotlinPath": "aurum/src/main/kotlin/com/jar/app/aurum/component/icon/figma_connect/AurumIconChartBarFilled.figma.kt"
    },
    {
      "component": "AurumIcons.Chat",
      "figmaNodeId": "5162:1137",
      "figmaUrl": "https://www.figma.com/design/YvIxqu2oTlM6UnkL0OloHc/?node-id=5162-1137",
      "kotlinPath": "aurum/src/main/kotlin/com/jar/app/aurum/component/icon/figma_connect/AurumIconChat.figma.kt"
    },
    {
      "component": "AurumIcons.ChatBubble",
      "figmaNodeId": "5917:1284",
      "figmaUrl": "https://www.figma.com/design/YvIxqu2oTlM6UnkL0OloHc/?node-id=5917-1284",
      "kotlinPath": "aurum/src/main/kotlin/com/jar/app/aurum/component/icon/figma_connect/AurumIconChatBubble.figma.kt"
    },
    {
      "component": "AurumIcons.ChatBubbleFilled",
      "figmaNodeId": "5917:1279",
      "figmaUrl": "https://www.figma.com/design/YvIxqu2oTlM6UnkL0OloHc/?node-id=5917-1279",
      "kotlinPath": "aurum/src/main/kotlin/com/jar/app/aurum/component/icon/figma_connect/AurumIconChatBubbleFilled.figma.kt"
    },
    {
      "component": "AurumIcons.ChatFilled",
      "figmaNodeId": "5162:1023",
      "figmaUrl": "https://www.figma.com/design/YvIxqu2oTlM6UnkL0OloHc/?node-id=5162-1023",
      "kotlinPath": "aurum/src/main/kotlin/com/jar/app/aurum/component/icon/figma_connect/AurumIconChatFilled.figma.kt"
    },
    {
      "component": "AurumIcons.Check",
      "figmaNodeId": "5308:800",
      "figmaUrl": "https://www.figma.com/design/YvIxqu2oTlM6UnkL0OloHc/?node-id=5308-800",
      "kotlinPath": "aurum/src/main/kotlin/com/jar/app/aurum/component/icon/figma_connect/AurumIconCheck.figma.kt"
    },
    {
      "component": "AurumIcons.CheckFilled",
      "figmaNodeId": "5308:800",
      "figmaUrl": "https://www.figma.com/design/YvIxqu2oTlM6UnkL0OloHc/?node-id=5308-800",
      "kotlinPath": "aurum/src/main/kotlin/com/jar/app/aurum/component/icon/figma_connect/AurumIconCheckFilled.figma.kt"
    },
    {
      "component": "AurumIcons.ChevronDown",
      "figmaNodeId": "5162:1067",
      "figmaUrl": "https://www.figma.com/design/YvIxqu2oTlM6UnkL0OloHc/?node-id=5162-1067",
      "kotlinPath": "aurum/src/main/kotlin/com/jar/app/aurum/component/icon/figma_connect/AurumIconChevronDown.figma.kt"
    },
    {
      "component": "AurumIcons.ChevronDownFilled",
      "figmaNodeId": "5162:952",
      "figmaUrl": "https://www.figma.com/design/YvIxqu2oTlM6UnkL0OloHc/?node-id=5162-952",
      "kotlinPath": "aurum/src/main/kotlin/com/jar/app/aurum/component/icon/figma_connect/AurumIconChevronDownFilled.figma.kt"
    },
    {
      "component": "AurumIcons.ChevronLeft",
      "figmaNodeId": "5162:1063",
      "figmaUrl": "https://www.figma.com/design/YvIxqu2oTlM6UnkL0OloHc/?node-id=5162-1063",
      "kotlinPath": "aurum/src/main/kotlin/com/jar/app/aurum/component/icon/figma_connect/AurumIconChevronLeft.figma.kt"
    },
    {
      "component": "AurumIcons.ChevronLeftFilled",
      "figmaNodeId": "5162:948",
      "figmaUrl": "https://www.figma.com/design/YvIxqu2oTlM6UnkL0OloHc/?node-id=5162-948",
      "kotlinPath": "aurum/src/main/kotlin/com/jar/app/aurum/component/icon/figma_connect/AurumIconChevronLeftFilled.figma.kt"
    },
    {
      "component": "AurumIcons.ChevronRight",
      "figmaNodeId": "5162:1061",
      "figmaUrl": "https://www.figma.com/design/YvIxqu2oTlM6UnkL0OloHc/?node-id=5162-1061",
      "kotlinPath": "aurum/src/main/kotlin/com/jar/app/aurum/component/icon/figma_connect/AurumIconChevronRight.figma.kt"
    },
    {
      "component": "AurumIcons.ChevronRightFilled",
      "figmaNodeId": "5162:946",
      "figmaUrl": "https://www.figma.com/design/YvIxqu2oTlM6UnkL0OloHc/?node-id=5162-946",
      "kotlinPath": "aurum/src/main/kotlin/com/jar/app/aurum/component/icon/figma_connect/AurumIconChevronRightFilled.figma.kt"
    },
    {
      "component": "AurumIcons.ChevronUp",
      "figmaNodeId": "5162:1065",
      "figmaUrl": "https://www.figma.com/design/YvIxqu2oTlM6UnkL0OloHc/?node-id=5162-1065",
      "kotlinPath": "aurum/src/main/kotlin/com/jar/app/aurum/component/icon/figma_connect/AurumIconChevronUp.figma.kt"
    },
    {
      "component": "AurumIcons.ChevronUpFilled",
      "figmaNodeId": "5162:950",
      "figmaUrl": "https://www.figma.com/design/YvIxqu2oTlM6UnkL0OloHc/?node-id=5162-950",
      "kotlinPath": "aurum/src/main/kotlin/com/jar/app/aurum/component/icon/figma_connect/AurumIconChevronUpFilled.figma.kt"
    },
    {
      "component": "AurumIcons.Close",
      "figmaNodeId": "5162:1069",
      "figmaUrl": "https://www.figma.com/design/YvIxqu2oTlM6UnkL0OloHc/?node-id=5162-1069",
      "kotlinPath": "aurum/src/main/kotlin/com/jar/app/aurum/component/icon/figma_connect/AurumIconClose.figma.kt"
    },
    {
      "component": "AurumIcons.CloseFilled",
      "figmaNodeId": "5311:823",
      "figmaUrl": "https://www.figma.com/design/YvIxqu2oTlM6UnkL0OloHc/?node-id=5311-823",
      "kotlinPath": "aurum/src/main/kotlin/com/jar/app/aurum/component/icon/figma_connect/AurumIconCloseFilled.figma.kt"
    },
    {
      "component": "AurumIcons.Compress",
      "figmaNodeId": "5162:1129",
      "figmaUrl": "https://www.figma.com/design/YvIxqu2oTlM6UnkL0OloHc/?node-id=5162-1129",
      "kotlinPath": "aurum/src/main/kotlin/com/jar/app/aurum/component/icon/figma_connect/AurumIconCompress.figma.kt"
    },
    {
      "component": "AurumIcons.CompressFilled",
      "figmaNodeId": "5162:1014",
      "figmaUrl": "https://www.figma.com/design/YvIxqu2oTlM6UnkL0OloHc/?node-id=5162-1014",
      "kotlinPath": "aurum/src/main/kotlin/com/jar/app/aurum/component/icon/figma_connect/AurumIconCompressFilled.figma.kt"
    },
    {
      "component": "AurumIcons.Copy",
      "figmaNodeId": "5162:1075",
      "figmaUrl": "https://www.figma.com/design/YvIxqu2oTlM6UnkL0OloHc/?node-id=5162-1075",
      "kotlinPath": "aurum/src/main/kotlin/com/jar/app/aurum/component/icon/figma_connect/AurumIconCopy.figma.kt"
    },
    {
      "component": "AurumIcons.CopyFilled",
      "figmaNodeId": "5162:960",
      "figmaUrl": "https://www.figma.com/design/YvIxqu2oTlM6UnkL0OloHc/?node-id=5162-960",
      "kotlinPath": "aurum/src/main/kotlin/com/jar/app/aurum/component/icon/figma_connect/AurumIconCopyFilled.figma.kt"
    },
    {
      "component": "AurumIcons.Delete",
      "figmaNodeId": "5162:1107",
      "figmaUrl": "https://www.figma.com/design/YvIxqu2oTlM6UnkL0OloHc/?node-id=5162-1107",
      "kotlinPath": "aurum/src/main/kotlin/com/jar/app/aurum/component/icon/figma_connect/AurumIconDelete.figma.kt"
    },
    {
      "component": "AurumIcons.DeleteFilled",
      "figmaNodeId": "5162:992",
      "figmaUrl": "https://www.figma.com/design/YvIxqu2oTlM6UnkL0OloHc/?node-id=5162-992",
      "kotlinPath": "aurum/src/main/kotlin/com/jar/app/aurum/component/icon/figma_connect/AurumIconDeleteFilled.figma.kt"
    },
    {
      "component": "AurumIcons.Discount",
      "figmaNodeId": "5162:1103",
      "figmaUrl": "https://www.figma.com/design/YvIxqu2oTlM6UnkL0OloHc/?node-id=5162-1103",
      "kotlinPath": "aurum/src/main/kotlin/com/jar/app/aurum/component/icon/figma_connect/AurumIconDiscount.figma.kt"
    },
    {
      "component": "AurumIcons.DiscountFilled",
      "figmaNodeId": "5162:988",
      "figmaUrl": "https://www.figma.com/design/YvIxqu2oTlM6UnkL0OloHc/?node-id=5162-988",
      "kotlinPath": "aurum/src/main/kotlin/com/jar/app/aurum/component/icon/figma_connect/AurumIconDiscountFilled.figma.kt"
    },
    {
      "component": "AurumIcons.Document",
      "figmaNodeId": "5162:1031",
      "figmaUrl": "https://www.figma.com/design/YvIxqu2oTlM6UnkL0OloHc/?node-id=5162-1031",
      "kotlinPath": "aurum/src/main/kotlin/com/jar/app/aurum/component/icon/figma_connect/AurumIconDocument.figma.kt"
    },
    {
      "component": "AurumIcons.DocumentFilled",
      "figmaNodeId": "5162:916",
      "figmaUrl": "https://www.figma.com/design/YvIxqu2oTlM6UnkL0OloHc/?node-id=5162-916",
      "kotlinPath": "aurum/src/main/kotlin/com/jar/app/aurum/component/icon/figma_connect/AurumIconDocumentFilled.figma.kt"
    },
    {
      "component": "AurumIcons.Download",
      "figmaNodeId": "5162:1071",
      "figmaUrl": "https://www.figma.com/design/YvIxqu2oTlM6UnkL0OloHc/?node-id=5162-1071",
      "kotlinPath": "aurum/src/main/kotlin/com/jar/app/aurum/component/icon/figma_connect/AurumIconDownload.figma.kt"
    },
    {
      "component": "AurumIcons.DownloadFilled",
      "figmaNodeId": "5162:956",
      "figmaUrl": "https://www.figma.com/design/YvIxqu2oTlM6UnkL0OloHc/?node-id=5162-956",
      "kotlinPath": "aurum/src/main/kotlin/com/jar/app/aurum/component/icon/figma_connect/AurumIconDownloadFilled.figma.kt"
    },
    {
      "component": "AurumIcons.Edit",
      "figmaNodeId": "5162:1051",
      "figmaUrl": "https://www.figma.com/design/YvIxqu2oTlM6UnkL0OloHc/?node-id=5162-1051",
      "kotlinPath": "aurum/src/main/kotlin/com/jar/app/aurum/component/icon/figma_connect/AurumIconEdit.figma.kt"
    },
    {
      "component": "AurumIcons.EditFilled",
      "figmaNodeId": "5162:936",
      "figmaUrl": "https://www.figma.com/design/YvIxqu2oTlM6UnkL0OloHc/?node-id=5162-936",
      "kotlinPath": "aurum/src/main/kotlin/com/jar/app/aurum/component/icon/figma_connect/AurumIconEditFilled.figma.kt"
    },
    {
      "component": "AurumIcons.Expand",
      "figmaNodeId": "5162:1127",
      "figmaUrl": "https://www.figma.com/design/YvIxqu2oTlM6UnkL0OloHc/?node-id=5162-1127",
      "kotlinPath": "aurum/src/main/kotlin/com/jar/app/aurum/component/icon/figma_connect/AurumIconExpand.figma.kt"
    },
    {
      "component": "AurumIcons.ExpandFilled",
      "figmaNodeId": "5162:1012",
      "figmaUrl": "https://www.figma.com/design/YvIxqu2oTlM6UnkL0OloHc/?node-id=5162-1012",
      "kotlinPath": "aurum/src/main/kotlin/com/jar/app/aurum/component/icon/figma_connect/AurumIconExpandFilled.figma.kt"
    },
    {
      "component": "AurumIcons.Filter",
      "figmaNodeId": "5861:1987",
      "figmaUrl": "https://www.figma.com/design/YvIxqu2oTlM6UnkL0OloHc/?node-id=5861-1987",
      "kotlinPath": "aurum/src/main/kotlin/com/jar/app/aurum/component/icon/figma_connect/AurumIconFilter.figma.kt"
    },
    {
      "component": "AurumIcons.FilterFilled",
      "figmaNodeId": "5861:1986",
      "figmaUrl": "https://www.figma.com/design/YvIxqu2oTlM6UnkL0OloHc/?node-id=5861-1986",
      "kotlinPath": "aurum/src/main/kotlin/com/jar/app/aurum/component/icon/figma_connect/AurumIconFilterFilled.figma.kt"
    },
    {
      "component": "AurumIcons.Gift",
      "figmaNodeId": "5162:1033",
      "figmaUrl": "https://www.figma.com/design/YvIxqu2oTlM6UnkL0OloHc/?node-id=5162-1033",
      "kotlinPath": "aurum/src/main/kotlin/com/jar/app/aurum/component/icon/figma_connect/AurumIconGift.figma.kt"
    },
    {
      "component": "AurumIcons.GiftFilled",
      "figmaNodeId": "5162:918",
      "figmaUrl": "https://www.figma.com/design/YvIxqu2oTlM6UnkL0OloHc/?node-id=5162-918",
      "kotlinPath": "aurum/src/main/kotlin/com/jar/app/aurum/component/icon/figma_connect/AurumIconGiftFilled.figma.kt"
    },
    {
      "component": "AurumIcons.Heart",
      "figmaNodeId": "5162:1045",
      "figmaUrl": "https://www.figma.com/design/YvIxqu2oTlM6UnkL0OloHc/?node-id=5162-1045",
      "kotlinPath": "aurum/src/main/kotlin/com/jar/app/aurum/component/icon/figma_connect/AurumIconHeart.figma.kt"
    },
    {
      "component": "AurumIcons.HeartFilled",
      "figmaNodeId": "5162:930",
      "figmaUrl": "https://www.figma.com/design/YvIxqu2oTlM6UnkL0OloHc/?node-id=5162-930",
      "kotlinPath": "aurum/src/main/kotlin/com/jar/app/aurum/component/icon/figma_connect/AurumIconHeartFilled.figma.kt"
    },
    {
      "component": "AurumIcons.Help",
      "figmaNodeId": "5162:1091",
      "figmaUrl": "https://www.figma.com/design/YvIxqu2oTlM6UnkL0OloHc/?node-id=5162-1091",
      "kotlinPath": "aurum/src/main/kotlin/com/jar/app/aurum/component/icon/figma_connect/AurumIconHelp.figma.kt"
    },
    {
      "component": "AurumIcons.HelpFilled",
      "figmaNodeId": "5162:976",
      "figmaUrl": "https://www.figma.com/design/YvIxqu2oTlM6UnkL0OloHc/?node-id=5162-976",
      "kotlinPath": "aurum/src/main/kotlin/com/jar/app/aurum/component/icon/figma_connect/AurumIconHelpFilled.figma.kt"
    },
    {
      "component": "AurumIcons.History",
      "figmaNodeId": "5162:1083",
      "figmaUrl": "https://www.figma.com/design/YvIxqu2oTlM6UnkL0OloHc/?node-id=5162-1083",
      "kotlinPath": "aurum/src/main/kotlin/com/jar/app/aurum/component/icon/figma_connect/AurumIconHistory.figma.kt"
    },
    {
      "component": "AurumIcons.HistoryFilled",
      "figmaNodeId": "5162:968",
      "figmaUrl": "https://www.figma.com/design/YvIxqu2oTlM6UnkL0OloHc/?node-id=5162-968",
      "kotlinPath": "aurum/src/main/kotlin/com/jar/app/aurum/component/icon/figma_connect/AurumIconHistoryFilled.figma.kt"
    },
    {
      "component": "AurumIcons.Home",
      "figmaNodeId": "5162:1029",
      "figmaUrl": "https://www.figma.com/design/YvIxqu2oTlM6UnkL0OloHc/?node-id=5162-1029",
      "kotlinPath": "aurum/src/main/kotlin/com/jar/app/aurum/component/icon/figma_connect/AurumIconHome.figma.kt"
    },
    {
      "component": "AurumIcons.HomeFilled",
      "figmaNodeId": "5162:914",
      "figmaUrl": "https://www.figma.com/design/YvIxqu2oTlM6UnkL0OloHc/?node-id=5162-914",
      "kotlinPath": "aurum/src/main/kotlin/com/jar/app/aurum/component/icon/figma_connect/AurumIconHomeFilled.figma.kt"
    },
    {
      "component": "AurumIcons.Image",
      "figmaNodeId": "5364:107",
      "figmaUrl": "https://www.figma.com/design/YvIxqu2oTlM6UnkL0OloHc/?node-id=5364-107",
      "kotlinPath": "aurum/src/main/kotlin/com/jar/app/aurum/component/icon/figma_connect/AurumIconImage.figma.kt"
    },
    {
      "component": "AurumIcons.ImageFilled",
      "figmaNodeId": "5364:108",
      "figmaUrl": "https://www.figma.com/design/YvIxqu2oTlM6UnkL0OloHc/?node-id=5364-108",
      "kotlinPath": "aurum/src/main/kotlin/com/jar/app/aurum/component/icon/figma_connect/AurumIconImageFilled.figma.kt"
    },
    {
      "component": "AurumIcons.Info",
      "figmaNodeId": "5162:1043",
      "figmaUrl": "https://www.figma.com/design/YvIxqu2oTlM6UnkL0OloHc/?node-id=5162-1043",
      "kotlinPath": "aurum/src/main/kotlin/com/jar/app/aurum/component/icon/figma_connect/AurumIconInfo.figma.kt"
    },
    {
      "component": "AurumIcons.InfoFilled",
      "figmaNodeId": "5162:928",
      "figmaUrl": "https://www.figma.com/design/YvIxqu2oTlM6UnkL0OloHc/?node-id=5162-928",
      "kotlinPath": "aurum/src/main/kotlin/com/jar/app/aurum/component/icon/figma_connect/AurumIconInfoFilled.figma.kt"
    },
    {
      "component": "AurumIcons.Link",
      "figmaNodeId": "5162:1077",
      "figmaUrl": "https://www.figma.com/design/YvIxqu2oTlM6UnkL0OloHc/?node-id=5162-1077",
      "kotlinPath": "aurum/src/main/kotlin/com/jar/app/aurum/component/icon/figma_connect/AurumIconLink.figma.kt"
    },
    {
      "component": "AurumIcons.LinkFilled",
      "figmaNodeId": "5162:962",
      "figmaUrl": "https://www.figma.com/design/YvIxqu2oTlM6UnkL0OloHc/?node-id=5162-962",
      "kotlinPath": "aurum/src/main/kotlin/com/jar/app/aurum/component/icon/figma_connect/AurumIconLinkFilled.figma.kt"
    },
    {
      "component": "AurumIcons.List",
      "figmaNodeId": "5162:1035",
      "figmaUrl": "https://www.figma.com/design/YvIxqu2oTlM6UnkL0OloHc/?node-id=5162-1035",
      "kotlinPath": "aurum/src/main/kotlin/com/jar/app/aurum/component/icon/figma_connect/AurumIconList.figma.kt"
    },
    {
      "component": "AurumIcons.ListFilled",
      "figmaNodeId": "5162:920",
      "figmaUrl": "https://www.figma.com/design/YvIxqu2oTlM6UnkL0OloHc/?node-id=5162-920",
      "kotlinPath": "aurum/src/main/kotlin/com/jar/app/aurum/component/icon/figma_connect/AurumIconListFilled.figma.kt"
    },
    {
      "component": "AurumIcons.Loader",
      "figmaNodeId": "5480:3920",
      "figmaUrl": "https://www.figma.com/design/YvIxqu2oTlM6UnkL0OloHc/?node-id=5480-3920",
      "kotlinPath": "aurum/src/main/kotlin/com/jar/app/aurum/component/icon/figma_connect/AurumIconLoader.figma.kt"
    },
    {
      "component": "AurumIcons.LoaderFilled",
      "figmaNodeId": "5480:3920",
      "figmaUrl": "https://www.figma.com/design/YvIxqu2oTlM6UnkL0OloHc/?node-id=5480-3920",
      "kotlinPath": "aurum/src/main/kotlin/com/jar/app/aurum/component/icon/figma_connect/AurumIconLoaderFilled.figma.kt"
    },
    {
      "component": "AurumIcons.Location",
      "figmaNodeId": "5162:1135",
      "figmaUrl": "https://www.figma.com/design/YvIxqu2oTlM6UnkL0OloHc/?node-id=5162-1135",
      "kotlinPath": "aurum/src/main/kotlin/com/jar/app/aurum/component/icon/figma_connect/AurumIconLocation.figma.kt"
    },
    {
      "component": "AurumIcons.LocationFilled",
      "figmaNodeId": "5162:1021",
      "figmaUrl": "https://www.figma.com/design/YvIxqu2oTlM6UnkL0OloHc/?node-id=5162-1021",
      "kotlinPath": "aurum/src/main/kotlin/com/jar/app/aurum/component/icon/figma_connect/AurumIconLocationFilled.figma.kt"
    },
    {
      "component": "AurumIcons.Lock",
      "figmaNodeId": "5162:1115",
      "figmaUrl": "https://www.figma.com/design/YvIxqu2oTlM6UnkL0OloHc/?node-id=5162-1115",
      "kotlinPath": "aurum/src/main/kotlin/com/jar/app/aurum/component/icon/figma_connect/AurumIconLock.figma.kt"
    },
    {
      "component": "AurumIcons.LockFilled",
      "figmaNodeId": "5162:1000",
      "figmaUrl": "https://www.figma.com/design/YvIxqu2oTlM6UnkL0OloHc/?node-id=5162-1000",
      "kotlinPath": "aurum/src/main/kotlin/com/jar/app/aurum/component/icon/figma_connect/AurumIconLockFilled.figma.kt"
    },
    {
      "component": "AurumIcons.Microphone",
      "figmaNodeId": "5162:1123",
      "figmaUrl": "https://www.figma.com/design/YvIxqu2oTlM6UnkL0OloHc/?node-id=5162-1123",
      "kotlinPath": "aurum/src/main/kotlin/com/jar/app/aurum/component/icon/figma_connect/AurumIconMicrophone.figma.kt"
    },
    {
      "component": "AurumIcons.MicrophoneFilled",
      "figmaNodeId": "5162:1008",
      "figmaUrl": "https://www.figma.com/design/YvIxqu2oTlM6UnkL0OloHc/?node-id=5162-1008",
      "kotlinPath": "aurum/src/main/kotlin/com/jar/app/aurum/component/icon/figma_connect/AurumIconMicrophoneFilled.figma.kt"
    },
    {
      "component": "AurumIcons.Minus",
      "figmaNodeId": "5322:1594",
      "figmaUrl": "https://www.figma.com/design/YvIxqu2oTlM6UnkL0OloHc/?node-id=5322-1594",
      "kotlinPath": "aurum/src/main/kotlin/com/jar/app/aurum/component/icon/figma_connect/AurumIconMinus.figma.kt"
    },
    {
      "component": "AurumIcons.MinusFilled",
      "figmaNodeId": "5322:1595",
      "figmaUrl": "https://www.figma.com/design/YvIxqu2oTlM6UnkL0OloHc/?node-id=5322-1595",
      "kotlinPath": "aurum/src/main/kotlin/com/jar/app/aurum/component/icon/figma_connect/AurumIconMinusFilled.figma.kt"
    },
    {
      "component": "AurumIcons.MoreHorizontal",
      "figmaNodeId": "5431:2847",
      "figmaUrl": "https://www.figma.com/design/YvIxqu2oTlM6UnkL0OloHc/?node-id=5431-2847",
      "kotlinPath": "aurum/src/main/kotlin/com/jar/app/aurum/component/icon/figma_connect/AurumIconMoreHorizontal.figma.kt"
    },
    {
      "component": "AurumIcons.MoreHorizontalFilled",
      "figmaNodeId": "5431:2849",
      "figmaUrl": "https://www.figma.com/design/YvIxqu2oTlM6UnkL0OloHc/?node-id=5431-2849",
      "kotlinPath": "aurum/src/main/kotlin/com/jar/app/aurum/component/icon/figma_connect/AurumIconMoreHorizontalFilled.figma.kt"
    },
    {
      "component": "AurumIcons.Nek",
      "figmaNodeId": "5566:790",
      "figmaUrl": "https://www.figma.com/design/YvIxqu2oTlM6UnkL0OloHc/?node-id=5566-790",
      "kotlinPath": "aurum/src/main/kotlin/com/jar/app/aurum/component/icon/figma_connect/AurumIconNek.figma.kt"
    },
    {
      "component": "AurumIcons.NekFilled",
      "figmaNodeId": "5566:790",
      "figmaUrl": "https://www.figma.com/design/YvIxqu2oTlM6UnkL0OloHc/?node-id=5566-790",
      "kotlinPath": "aurum/src/main/kotlin/com/jar/app/aurum/component/icon/figma_connect/AurumIconNekFilled.figma.kt"
    },
    {
      "component": "AurumIcons.Overflow",
      "figmaNodeId": "5431:2848",
      "figmaUrl": "https://www.figma.com/design/YvIxqu2oTlM6UnkL0OloHc/?node-id=5431-2848",
      "kotlinPath": "aurum/src/main/kotlin/com/jar/app/aurum/component/icon/figma_connect/AurumIconOverflow.figma.kt"
    },
    {
      "component": "AurumIcons.OverflowFilled",
      "figmaNodeId": "5431:2850",
      "figmaUrl": "https://www.figma.com/design/YvIxqu2oTlM6UnkL0OloHc/?node-id=5431-2850",
      "kotlinPath": "aurum/src/main/kotlin/com/jar/app/aurum/component/icon/figma_connect/AurumIconOverflowFilled.figma.kt"
    },
    {
      "component": "AurumIcons.Pause",
      "figmaNodeId": "5162:1111",
      "figmaUrl": "https://www.figma.com/design/YvIxqu2oTlM6UnkL0OloHc/?node-id=5162-1111",
      "kotlinPath": "aurum/src/main/kotlin/com/jar/app/aurum/component/icon/figma_connect/AurumIconPause.figma.kt"
    },
    {
      "component": "AurumIcons.PauseFilled",
      "figmaNodeId": "5162:996",
      "figmaUrl": "https://www.figma.com/design/YvIxqu2oTlM6UnkL0OloHc/?node-id=5162-996",
      "kotlinPath": "aurum/src/main/kotlin/com/jar/app/aurum/component/icon/figma_connect/AurumIconPauseFilled.figma.kt"
    },
    {
      "component": "AurumIcons.Pending",
      "figmaNodeId": "5322:1579",
      "figmaUrl": "https://www.figma.com/design/YvIxqu2oTlM6UnkL0OloHc/?node-id=5322-1579",
      "kotlinPath": "aurum/src/main/kotlin/com/jar/app/aurum/component/icon/figma_connect/AurumIconPending.figma.kt"
    },
    {
      "component": "AurumIcons.PendingFilled",
      "figmaNodeId": "5322:1580",
      "figmaUrl": "https://www.figma.com/design/YvIxqu2oTlM6UnkL0OloHc/?node-id=5322-1580",
      "kotlinPath": "aurum/src/main/kotlin/com/jar/app/aurum/component/icon/figma_connect/AurumIconPendingFilled.figma.kt"
    },
    {
      "component": "AurumIcons.Phone",
      "figmaNodeId": "5917:1283",
      "figmaUrl": "https://www.figma.com/design/YvIxqu2oTlM6UnkL0OloHc/?node-id=5917-1283",
      "kotlinPath": "aurum/src/main/kotlin/com/jar/app/aurum/component/icon/figma_connect/AurumIconPhone.figma.kt"
    },
    {
      "component": "AurumIcons.PhoneFilled",
      "figmaNodeId": "5917:1280",
      "figmaUrl": "https://www.figma.com/design/YvIxqu2oTlM6UnkL0OloHc/?node-id=5917-1280",
      "kotlinPath": "aurum/src/main/kotlin/com/jar/app/aurum/component/icon/figma_connect/AurumIconPhoneFilled.figma.kt"
    },
    {
      "component": "AurumIcons.Play",
      "figmaNodeId": "5162:1109",
      "figmaUrl": "https://www.figma.com/design/YvIxqu2oTlM6UnkL0OloHc/?node-id=5162-1109",
      "kotlinPath": "aurum/src/main/kotlin/com/jar/app/aurum/component/icon/figma_connect/AurumIconPlay.figma.kt"
    },
    {
      "component": "AurumIcons.PlayCircle",
      "figmaNodeId": "6767:405",
      "figmaUrl": "https://www.figma.com/design/YvIxqu2oTlM6UnkL0OloHc/?node-id=6767-405",
      "kotlinPath": "aurum/src/main/kotlin/com/jar/app/aurum/component/icon/figma_connect/AurumIconPlayCircle.figma.kt"
    },
    {
      "component": "AurumIcons.PlayCircleFilled",
      "figmaNodeId": "6767:405",
      "figmaUrl": "https://www.figma.com/design/YvIxqu2oTlM6UnkL0OloHc/?node-id=6767-405",
      "kotlinPath": "aurum/src/main/kotlin/com/jar/app/aurum/component/icon/figma_connect/AurumIconPlayCircleFilled.figma.kt"
    },
    {
      "component": "AurumIcons.PlayFilled",
      "figmaNodeId": "5162:994",
      "figmaUrl": "https://www.figma.com/design/YvIxqu2oTlM6UnkL0OloHc/?node-id=5162-994",
      "kotlinPath": "aurum/src/main/kotlin/com/jar/app/aurum/component/icon/figma_connect/AurumIconPlayFilled.figma.kt"
    },
    {
      "component": "AurumIcons.QrCode",
      "figmaNodeId": "5162:1093",
      "figmaUrl": "https://www.figma.com/design/YvIxqu2oTlM6UnkL0OloHc/?node-id=5162-1093",
      "kotlinPath": "aurum/src/main/kotlin/com/jar/app/aurum/component/icon/figma_connect/AurumIconQrCode.figma.kt"
    },
    {
      "component": "AurumIcons.QrCodeFilled",
      "figmaNodeId": "5162:978",
      "figmaUrl": "https://www.figma.com/design/YvIxqu2oTlM6UnkL0OloHc/?node-id=5162-978",
      "kotlinPath": "aurum/src/main/kotlin/com/jar/app/aurum/component/icon/figma_connect/AurumIconQrCodeFilled.figma.kt"
    },
    {
      "component": "AurumIcons.Refresh",
      "figmaNodeId": "5162:1085",
      "figmaUrl": "https://www.figma.com/design/YvIxqu2oTlM6UnkL0OloHc/?node-id=5162-1085",
      "kotlinPath": "aurum/src/main/kotlin/com/jar/app/aurum/component/icon/figma_connect/AurumIconRefresh.figma.kt"
    },
    {
      "component": "AurumIcons.RefreshFilled",
      "figmaNodeId": "5162:970",
      "figmaUrl": "https://www.figma.com/design/YvIxqu2oTlM6UnkL0OloHc/?node-id=5162-970",
      "kotlinPath": "aurum/src/main/kotlin/com/jar/app/aurum/component/icon/figma_connect/AurumIconRefreshFilled.figma.kt"
    },
    {
      "component": "AurumIcons.Replay",
      "figmaNodeId": "5913:680",
      "figmaUrl": "https://www.figma.com/design/YvIxqu2oTlM6UnkL0OloHc/?node-id=5913-680",
      "kotlinPath": "aurum/src/main/kotlin/com/jar/app/aurum/component/icon/figma_connect/AurumIconReplay.figma.kt"
    },
    {
      "component": "AurumIcons.ReplayFilled",
      "figmaNodeId": "5913:681",
      "figmaUrl": "https://www.figma.com/design/YvIxqu2oTlM6UnkL0OloHc/?node-id=5913-681",
      "kotlinPath": "aurum/src/main/kotlin/com/jar/app/aurum/component/icon/figma_connect/AurumIconReplayFilled.figma.kt"
    },
    {
      "component": "AurumIcons.Rupee",
      "figmaNodeId": "5162:1139",
      "figmaUrl": "https://www.figma.com/design/YvIxqu2oTlM6UnkL0OloHc/?node-id=5162-1139",
      "kotlinPath": "aurum/src/main/kotlin/com/jar/app/aurum/component/icon/figma_connect/AurumIconRupee.figma.kt"
    },
    {
      "component": "AurumIcons.RupeeFilled",
      "figmaNodeId": "5162:1025",
      "figmaUrl": "https://www.figma.com/design/YvIxqu2oTlM6UnkL0OloHc/?node-id=5162-1025",
      "kotlinPath": "aurum/src/main/kotlin/com/jar/app/aurum/component/icon/figma_connect/AurumIconRupeeFilled.figma.kt"
    },
    {
      "component": "AurumIcons.Search",
      "figmaNodeId": "5162:1089",
      "figmaUrl": "https://www.figma.com/design/YvIxqu2oTlM6UnkL0OloHc/?node-id=5162-1089",
      "kotlinPath": "aurum/src/main/kotlin/com/jar/app/aurum/component/icon/figma_connect/AurumIconSearch.figma.kt"
    },
    {
      "component": "AurumIcons.SearchFilled",
      "figmaNodeId": "5162:974",
      "figmaUrl": "https://www.figma.com/design/YvIxqu2oTlM6UnkL0OloHc/?node-id=5162-974",
      "kotlinPath": "aurum/src/main/kotlin/com/jar/app/aurum/component/icon/figma_connect/AurumIconSearchFilled.figma.kt"
    },
    {
      "component": "AurumIcons.Settings",
      "figmaNodeId": "5162:1141",
      "figmaUrl": "https://www.figma.com/design/YvIxqu2oTlM6UnkL0OloHc/?node-id=5162-1141",
      "kotlinPath": "aurum/src/main/kotlin/com/jar/app/aurum/component/icon/figma_connect/AurumIconSettings.figma.kt"
    },
    {
      "component": "AurumIcons.SettingsFilled",
      "figmaNodeId": "5162:1027",
      "figmaUrl": "https://www.figma.com/design/YvIxqu2oTlM6UnkL0OloHc/?node-id=5162-1027",
      "kotlinPath": "aurum/src/main/kotlin/com/jar/app/aurum/component/icon/figma_connect/AurumIconSettingsFilled.figma.kt"
    },
    {
      "component": "AurumIcons.Share",
      "figmaNodeId": "5162:1049",
      "figmaUrl": "https://www.figma.com/design/YvIxqu2oTlM6UnkL0OloHc/?node-id=5162-1049",
      "kotlinPath": "aurum/src/main/kotlin/com/jar/app/aurum/component/icon/figma_connect/AurumIconShare.figma.kt"
    },
    {
      "component": "AurumIcons.ShareFilled",
      "figmaNodeId": "5162:934",
      "figmaUrl": "https://www.figma.com/design/YvIxqu2oTlM6UnkL0OloHc/?node-id=5162-934",
      "kotlinPath": "aurum/src/main/kotlin/com/jar/app/aurum/component/icon/figma_connect/AurumIconShareFilled.figma.kt"
    },
    {
      "component": "AurumIcons.Shield",
      "figmaNodeId": "5162:1105",
      "figmaUrl": "https://www.figma.com/design/YvIxqu2oTlM6UnkL0OloHc/?node-id=5162-1105",
      "kotlinPath": "aurum/src/main/kotlin/com/jar/app/aurum/component/icon/figma_connect/AurumIconShield.figma.kt"
    },
    {
      "component": "AurumIcons.ShieldFilled",
      "figmaNodeId": "5162:990",
      "figmaUrl": "https://www.figma.com/design/YvIxqu2oTlM6UnkL0OloHc/?node-id=5162-990",
      "kotlinPath": "aurum/src/main/kotlin/com/jar/app/aurum/component/icon/figma_connect/AurumIconShieldFilled.figma.kt"
    },
    {
      "component": "AurumIcons.SignIn",
      "figmaNodeId": "5162:1121",
      "figmaUrl": "https://www.figma.com/design/YvIxqu2oTlM6UnkL0OloHc/?node-id=5162-1121",
      "kotlinPath": "aurum/src/main/kotlin/com/jar/app/aurum/component/icon/figma_connect/AurumIconSignIn.figma.kt"
    },
    {
      "component": "AurumIcons.SignInFilled",
      "figmaNodeId": "5162:1006",
      "figmaUrl": "https://www.figma.com/design/YvIxqu2oTlM6UnkL0OloHc/?node-id=5162-1006",
      "kotlinPath": "aurum/src/main/kotlin/com/jar/app/aurum/component/icon/figma_connect/AurumIconSignInFilled.figma.kt"
    },
    {
      "component": "AurumIcons.SignOut",
      "figmaNodeId": "5162:1119",
      "figmaUrl": "https://www.figma.com/design/YvIxqu2oTlM6UnkL0OloHc/?node-id=5162-1119",
      "kotlinPath": "aurum/src/main/kotlin/com/jar/app/aurum/component/icon/figma_connect/AurumIconSignOut.figma.kt"
    },
    {
      "component": "AurumIcons.SignOutFilled",
      "figmaNodeId": "5162:1004",
      "figmaUrl": "https://www.figma.com/design/YvIxqu2oTlM6UnkL0OloHc/?node-id=5162-1004",
      "kotlinPath": "aurum/src/main/kotlin/com/jar/app/aurum/component/icon/figma_connect/AurumIconSignOutFilled.figma.kt"
    },
    {
      "component": "AurumIcons.SortAscending",
      "figmaNodeId": "5162:1097",
      "figmaUrl": "https://www.figma.com/design/YvIxqu2oTlM6UnkL0OloHc/?node-id=5162-1097",
      "kotlinPath": "aurum/src/main/kotlin/com/jar/app/aurum/component/icon/figma_connect/AurumIconSortAscending.figma.kt"
    },
    {
      "component": "AurumIcons.SortAscendingFilled",
      "figmaNodeId": "5162:982",
      "figmaUrl": "https://www.figma.com/design/YvIxqu2oTlM6UnkL0OloHc/?node-id=5162-982",
      "kotlinPath": "aurum/src/main/kotlin/com/jar/app/aurum/component/icon/figma_connect/AurumIconSortAscendingFilled.figma.kt"
    },
    {
      "component": "AurumIcons.SortDescending",
      "figmaNodeId": "5162:1095",
      "figmaUrl": "https://www.figma.com/design/YvIxqu2oTlM6UnkL0OloHc/?node-id=5162-1095",
      "kotlinPath": "aurum/src/main/kotlin/com/jar/app/aurum/component/icon/figma_connect/AurumIconSortDescending.figma.kt"
    },
    {
      "component": "AurumIcons.SortDescendingFilled",
      "figmaNodeId": "5162:980",
      "figmaUrl": "https://www.figma.com/design/YvIxqu2oTlM6UnkL0OloHc/?node-id=5162-980",
      "kotlinPath": "aurum/src/main/kotlin/com/jar/app/aurum/component/icon/figma_connect/AurumIconSortDescendingFilled.figma.kt"
    },
    {
      "component": "AurumIcons.Star",
      "figmaNodeId": "6423:347",
      "figmaUrl": "https://www.figma.com/design/YvIxqu2oTlM6UnkL0OloHc/?node-id=6423-347",
      "kotlinPath": "aurum/src/main/kotlin/com/jar/app/aurum/component/icon/figma_connect/AurumIconStar.figma.kt"
    },
    {
      "component": "AurumIcons.StarFilled",
      "figmaNodeId": "6423:347",
      "figmaUrl": "https://www.figma.com/design/YvIxqu2oTlM6UnkL0OloHc/?node-id=6423-347",
      "kotlinPath": "aurum/src/main/kotlin/com/jar/app/aurum/component/icon/figma_connect/AurumIconStarFilled.figma.kt"
    },
    {
      "component": "AurumIcons.Success",
      "figmaNodeId": "5311:811",
      "figmaUrl": "https://www.figma.com/design/YvIxqu2oTlM6UnkL0OloHc/?node-id=5311-811",
      "kotlinPath": "aurum/src/main/kotlin/com/jar/app/aurum/component/icon/figma_connect/AurumIconSuccess.figma.kt"
    },
    {
      "component": "AurumIcons.SuccessFilled",
      "figmaNodeId": "5311:811",
      "figmaUrl": "https://www.figma.com/design/YvIxqu2oTlM6UnkL0OloHc/?node-id=5311-811",
      "kotlinPath": "aurum/src/main/kotlin/com/jar/app/aurum/component/icon/figma_connect/AurumIconSuccessFilled.figma.kt"
    },
    {
      "component": "AurumIcons.Support",
      "figmaNodeId": "5162:1087",
      "figmaUrl": "https://www.figma.com/design/YvIxqu2oTlM6UnkL0OloHc/?node-id=5162-1087",
      "kotlinPath": "aurum/src/main/kotlin/com/jar/app/aurum/component/icon/figma_connect/AurumIconSupport.figma.kt"
    },
    {
      "component": "AurumIcons.SupportFilled",
      "figmaNodeId": "5162:972",
      "figmaUrl": "https://www.figma.com/design/YvIxqu2oTlM6UnkL0OloHc/?node-id=5162-972",
      "kotlinPath": "aurum/src/main/kotlin/com/jar/app/aurum/component/icon/figma_connect/AurumIconSupportFilled.figma.kt"
    },
    {
      "component": "AurumIcons.Timer",
      "figmaNodeId": "5896:644",
      "figmaUrl": "https://www.figma.com/design/YvIxqu2oTlM6UnkL0OloHc/?node-id=5896-644",
      "kotlinPath": "aurum/src/main/kotlin/com/jar/app/aurum/component/icon/figma_connect/AurumIconTimer.figma.kt"
    },
    {
      "component": "AurumIcons.TimerFilled",
      "figmaNodeId": "5896:645",
      "figmaUrl": "https://www.figma.com/design/YvIxqu2oTlM6UnkL0OloHc/?node-id=5896-645",
      "kotlinPath": "aurum/src/main/kotlin/com/jar/app/aurum/component/icon/figma_connect/AurumIconTimerFilled.figma.kt"
    },
    {
      "component": "AurumIcons.Translate",
      "figmaNodeId": "5162:1101",
      "figmaUrl": "https://www.figma.com/design/YvIxqu2oTlM6UnkL0OloHc/?node-id=5162-1101",
      "kotlinPath": "aurum/src/main/kotlin/com/jar/app/aurum/component/icon/figma_connect/AurumIconTranslate.figma.kt"
    },
    {
      "component": "AurumIcons.TranslateFilled",
      "figmaNodeId": "5162:986",
      "figmaUrl": "https://www.figma.com/design/YvIxqu2oTlM6UnkL0OloHc/?node-id=5162-986",
      "kotlinPath": "aurum/src/main/kotlin/com/jar/app/aurum/component/icon/figma_connect/AurumIconTranslateFilled.figma.kt"
    },
    {
      "component": "AurumIcons.Unlock",
      "figmaNodeId": "5162:1117",
      "figmaUrl": "https://www.figma.com/design/YvIxqu2oTlM6UnkL0OloHc/?node-id=5162-1117",
      "kotlinPath": "aurum/src/main/kotlin/com/jar/app/aurum/component/icon/figma_connect/AurumIconUnlock.figma.kt"
    },
    {
      "component": "AurumIcons.UnlockFilled",
      "figmaNodeId": "5162:1002",
      "figmaUrl": "https://www.figma.com/design/YvIxqu2oTlM6UnkL0OloHc/?node-id=5162-1002",
      "kotlinPath": "aurum/src/main/kotlin/com/jar/app/aurum/component/icon/figma_connect/AurumIconUnlockFilled.figma.kt"
    },
    {
      "component": "AurumIcons.Upload",
      "figmaNodeId": "5162:1073",
      "figmaUrl": "https://www.figma.com/design/YvIxqu2oTlM6UnkL0OloHc/?node-id=5162-1073",
      "kotlinPath": "aurum/src/main/kotlin/com/jar/app/aurum/component/icon/figma_connect/AurumIconUpload.figma.kt"
    },
    {
      "component": "AurumIcons.UploadFilled",
      "figmaNodeId": "5162:958",
      "figmaUrl": "https://www.figma.com/design/YvIxqu2oTlM6UnkL0OloHc/?node-id=5162-958",
      "kotlinPath": "aurum/src/main/kotlin/com/jar/app/aurum/component/icon/figma_connect/AurumIconUploadFilled.figma.kt"
    },
    {
      "component": "AurumIcons.User",
      "figmaNodeId": "5162:1041",
      "figmaUrl": "https://www.figma.com/design/YvIxqu2oTlM6UnkL0OloHc/?node-id=5162-1041",
      "kotlinPath": "aurum/src/main/kotlin/com/jar/app/aurum/component/icon/figma_connect/AurumIconUser.figma.kt"
    },
    {
      "component": "AurumIcons.UserFilled",
      "figmaNodeId": "5162:926",
      "figmaUrl": "https://www.figma.com/design/YvIxqu2oTlM6UnkL0OloHc/?node-id=5162-926",
      "kotlinPath": "aurum/src/main/kotlin/com/jar/app/aurum/component/icon/figma_connect/AurumIconUserFilled.figma.kt"
    },
    {
      "component": "AurumIcons.Verified",
      "figmaNodeId": "5162:1099",
      "figmaUrl": "https://www.figma.com/design/YvIxqu2oTlM6UnkL0OloHc/?node-id=5162-1099",
      "kotlinPath": "aurum/src/main/kotlin/com/jar/app/aurum/component/icon/figma_connect/AurumIconVerified.figma.kt"
    },
    {
      "component": "AurumIcons.VerifiedFilled",
      "figmaNodeId": "5162:984",
      "figmaUrl": "https://www.figma.com/design/YvIxqu2oTlM6UnkL0OloHc/?node-id=5162-984",
      "kotlinPath": "aurum/src/main/kotlin/com/jar/app/aurum/component/icon/figma_connect/AurumIconVerifiedFilled.figma.kt"
    },
    {
      "component": "AurumIcons.VolumeOff",
      "figmaNodeId": "5162:1133",
      "figmaUrl": "https://www.figma.com/design/YvIxqu2oTlM6UnkL0OloHc/?node-id=5162-1133",
      "kotlinPath": "aurum/src/main/kotlin/com/jar/app/aurum/component/icon/figma_connect/AurumIconVolumeOff.figma.kt"
    },
    {
      "component": "AurumIcons.VolumeOffFilled",
      "figmaNodeId": "5162:1018",
      "figmaUrl": "https://www.figma.com/design/YvIxqu2oTlM6UnkL0OloHc/?node-id=5162-1018",
      "kotlinPath": "aurum/src/main/kotlin/com/jar/app/aurum/component/icon/figma_connect/AurumIconVolumeOffFilled.figma.kt"
    },
    {
      "component": "AurumIcons.VolumeOn",
      "figmaNodeId": "5162:1131",
      "figmaUrl": "https://www.figma.com/design/YvIxqu2oTlM6UnkL0OloHc/?node-id=5162-1131",
      "kotlinPath": "aurum/src/main/kotlin/com/jar/app/aurum/component/icon/figma_connect/AurumIconVolumeOn.figma.kt"
    },
    {
      "component": "AurumIcons.VolumeOnFilled",
      "figmaNodeId": "5162:1016",
      "figmaUrl": "https://www.figma.com/design/YvIxqu2oTlM6UnkL0OloHc/?node-id=5162-1016",
      "kotlinPath": "aurum/src/main/kotlin/com/jar/app/aurum/component/icon/figma_connect/AurumIconVolumeOnFilled.figma.kt"
    },
    {
      "component": "AurumIcons.Wallet",
      "figmaNodeId": "5162:1081",
      "figmaUrl": "https://www.figma.com/design/YvIxqu2oTlM6UnkL0OloHc/?node-id=5162-1081",
      "kotlinPath": "aurum/src/main/kotlin/com/jar/app/aurum/component/icon/figma_connect/AurumIconWallet.figma.kt"
    },
    {
      "component": "AurumIcons.WalletFilled",
      "figmaNodeId": "5162:966",
      "figmaUrl": "https://www.figma.com/design/YvIxqu2oTlM6UnkL0OloHc/?node-id=5162-966",
      "kotlinPath": "aurum/src/main/kotlin/com/jar/app/aurum/component/icon/figma_connect/AurumIconWalletFilled.figma.kt"
    },
    {
      "component": "AurumIcons.Warning",
      "figmaNodeId": "5308:802",
      "figmaUrl": "https://www.figma.com/design/YvIxqu2oTlM6UnkL0OloHc/?node-id=5308-802",
      "kotlinPath": "aurum/src/main/kotlin/com/jar/app/aurum/component/icon/figma_connect/AurumIconWarning.figma.kt"
    },
    {
      "component": "AurumIcons.WarningFilled",
      "figmaNodeId": "5308:805",
      "figmaUrl": "https://www.figma.com/design/YvIxqu2oTlM6UnkL0OloHc/?node-id=5308-805",
      "kotlinPath": "aurum/src/main/kotlin/com/jar/app/aurum/component/icon/figma_connect/AurumIconWarningFilled.figma.kt"
    },
    {
      "component": "AurumIcons.WhatsApp",
      "figmaNodeId": "5917:1282",
      "figmaUrl": "https://www.figma.com/design/YvIxqu2oTlM6UnkL0OloHc/?node-id=5917-1282",
      "kotlinPath": "aurum/src/main/kotlin/com/jar/app/aurum/component/icon/figma_connect/AurumIconWhatsApp.figma.kt"
    },
    {
      "component": "AurumIcons.WhatsAppFilled",
      "figmaNodeId": "5917:1281",
      "figmaUrl": "https://www.figma.com/design/YvIxqu2oTlM6UnkL0OloHc/?node-id=5917-1281",
      "kotlinPath": "aurum/src/main/kotlin/com/jar/app/aurum/component/icon/figma_connect/AurumIconWhatsAppFilled.figma.kt"
    },
    {
      "component": "AurumIcons.Withdraw",
      "figmaNodeId": "5358:456",
      "figmaUrl": "https://www.figma.com/design/YvIxqu2oTlM6UnkL0OloHc/?node-id=5358-456",
      "kotlinPath": "aurum/src/main/kotlin/com/jar/app/aurum/component/icon/figma_connect/AurumIconWithdraw.figma.kt"
    },
    {
      "component": "AurumIcons.WithdrawFilled",
      "figmaNodeId": "5358:465",
      "figmaUrl": "https://www.figma.com/design/YvIxqu2oTlM6UnkL0OloHc/?node-id=5358-465",
      "kotlinPath": "aurum/src/main/kotlin/com/jar/app/aurum/component/icon/figma_connect/AurumIconWithdrawFilled.figma.kt"
    },
    {
      "component": "AurumStepper",
      "figmaNodeId": "4506:201",
      "figmaUrl": "https://www.figma.com/design/YvIxqu2oTlM6UnkL0OloHc/?node-id=4506-201",
      "kotlinPath": "aurum/src/main/kotlin/com/jar/app/aurum/component/input/AurumStepper.figma.kt"
    },
    {
      "component": "AurumGlobalHeader",
      "figmaNodeId": "5252:2274",
      "figmaUrl": "https://www.figma.com/design/YvIxqu2oTlM6UnkL0OloHc/?node-id=5252-2274",
      "kotlinPath": "aurum/src/main/kotlin/com/jar/app/aurum/component/navigation/AurumGlobalHeader.figma.kt"
    },
    {
      "component": "AurumNavBar",
      "figmaNodeId": "5575:14226",
      "figmaUrl": "https://www.figma.com/design/YvIxqu2oTlM6UnkL0OloHc/?node-id=5575-14226",
      "kotlinPath": "aurum/src/main/kotlin/com/jar/app/aurum/component/navigation/AurumNavBar.figma.kt"
    },
    {
      "component": "AurumPageHeader",
      "figmaNodeId": "4826:1058",
      "figmaUrl": "https://www.figma.com/design/YvIxqu2oTlM6UnkL0OloHc/?node-id=4826-1058",
      "kotlinPath": "aurum/src/main/kotlin/com/jar/app/aurum/component/navigation/AurumPageHeader.figma.kt"
    },
    {
      "component": "AurumSectionHeader",
      "figmaNodeId": "3702:162190",
      "figmaUrl": "https://www.figma.com/design/YvIxqu2oTlM6UnkL0OloHc/?node-id=3702-162190",
      "kotlinPath": "aurum/src/main/kotlin/com/jar/app/aurum/component/navigation/AurumSectionHeader.figma.kt"
    },
    {
      "component": "AurumTab",
      "figmaNodeId": "5430:3115",
      "figmaUrl": "https://www.figma.com/design/YvIxqu2oTlM6UnkL0OloHc/?node-id=5430-3115",
      "kotlinPath": "aurum/src/main/kotlin/com/jar/app/aurum/component/navigation/AurumTab.figma.kt"
    },
    {
      "component": "AurumTabRow",
      "figmaNodeId": "5531:795",
      "figmaUrl": "https://www.figma.com/design/YvIxqu2oTlM6UnkL0OloHc/?node-id=5531-795",
      "kotlinPath": "aurum/src/main/kotlin/com/jar/app/aurum/component/navigation/AurumTabRow.figma.kt"
    },
    {
      "component": "AurumCheckbox",
      "figmaNodeId": "5169:1314",
      "figmaUrl": "https://www.figma.com/design/YvIxqu2oTlM6UnkL0OloHc/?node-id=5169-1314",
      "kotlinPath": "aurum/src/main/kotlin/com/jar/app/aurum/component/selection/AurumCheckbox.figma.kt"
    },
    {
      "component": "AurumCheckboxGroup",
      "figmaNodeId": "5169:1796",
      "figmaUrl": "https://www.figma.com/design/YvIxqu2oTlM6UnkL0OloHc/?node-id=5169-1796",
      "kotlinPath": "aurum/src/main/kotlin/com/jar/app/aurum/component/selection/AurumCheckboxGroup.figma.kt"
    },
    {
      "component": "AurumRadioButton",
      "figmaNodeId": "5126:2507",
      "figmaUrl": "https://www.figma.com/design/YvIxqu2oTlM6UnkL0OloHc/?node-id=5126-2507",
      "kotlinPath": "aurum/src/main/kotlin/com/jar/app/aurum/component/selection/AurumRadioButton.figma.kt"
    },
    {
      "component": "AurumRadioGroup",
      "figmaNodeId": "5157:2034",
      "figmaUrl": "https://www.figma.com/design/YvIxqu2oTlM6UnkL0OloHc/?node-id=5157-2034",
      "kotlinPath": "aurum/src/main/kotlin/com/jar/app/aurum/component/selection/AurumRadioGroup.figma.kt"
    },
    {
      "component": "AurumSwitch",
      "figmaNodeId": "4018:557",
      "figmaUrl": "https://www.figma.com/design/YvIxqu2oTlM6UnkL0OloHc/?node-id=4018-557",
      "kotlinPath": "aurum/src/main/kotlin/com/jar/app/aurum/component/selection/AurumSwitch.figma.kt"
    },
    {
      "component": "AurumBottomSheet",
      "figmaNodeId": "6002:939",
      "figmaUrl": "https://www.figma.com/design/YvIxqu2oTlM6UnkL0OloHc/?node-id=6002-939",
      "kotlinPath": "aurum/src/main/kotlin/com/jar/app/aurum/component/sheet/AurumBottomSheet.figma.kt"
    },
    {
      "component": "AurumLabel",
      "figmaNodeId": "3774:137816",
      "figmaUrl": "https://www.figma.com/design/YvIxqu2oTlM6UnkL0OloHc/?node-id=3774-137816",
      "kotlinPath": "aurum/src/main/kotlin/com/jar/app/aurum/component/text/AurumLabel.figma.kt"
    }
  ],
  "changelog": {
    "raw": "# Aurum Changelog\n\nAll notable changes to the Aurum design system are documented here.\nFormat follows [Keep a Changelog](https://keepachangelog.com/).\n\n## [0.3.29] - 2026-07-30\n\n### Added\n- **`AurumIcons.Navigation.CaretBold{Up,Down,Left,Right}` (+ `Filled`).** Their masters have been sitting in the canonical icon sheet (`5130:35416`) without code counterparts, so the sheet↔catalog contract was one-sided. Single-weight in Figma, so both weights resolve to the same drawable — the same convention the existing Caret family uses. The heavier caret is what `CaretCircleRight` is built from, which is where consumers keep needing it.\n- **Catalog gallery now lists the whole Caret family.** `CaretUp/Down/Left/Right` shipped in code but were never added to `IconGallery`, so they were invisible in the catalog; listed now alongside the new bold set.\n\n### Fixed\n- **`AurumSectionHeaderAction.Link` now renders neutral-subtle, matching its Figma master (`5442:462`).** The link action was styled identically to the `text` action — `Title/XS-SemiBold` in `interactive.textPrimaryNormal` (brand purple) with a 20dp `iconPrimaryNormal` chevron — so \"View All / See More\" links shouted as loudly as the section title and were indistinguishable from a brand text-button. The sheet's `action link` layer specifies `Body/S-Medium` in `interactive.textNeutralSubtle` with a 12dp `interactive.iconNeutralSubtle` chevron; the component now follows it. `TextAction` is unchanged and remains the brand-emphasis option. **Consumer impact:** every existing `Link` action becomes grey and one step smaller — intended, but visible. aurum-ios mirrors this in 0.2.3.\n\n## [0.3.28] - 2026-07-21\n\n### Changed\n- **`AurumPhoneNumberInput` displays the number grouped `XXXXX XXXXX`.** A display-only `VisualTransformation` inserts a single space after the fifth digit (matching the Figma), while the stored value stays raw digits — public API unchanged (`value: String` is still the un-spaced number). Also widened the gap between the country-code divider and the number to 16dp (Figma `4904:2076`).\n\n## [0.3.27] - 2026-07-21\n\n### Fixed\n- **`AurumPhoneNumberInput` type, colour, and leading-slot order now match the Figma master (`4904:2439`).** The entered number + placeholder render at `Title/M-Bold` (20sp) instead of the inherited `bodyLMedium` (16sp); the `+91` country code is `Title/S-Bold` in `textDefaultSubtle` (was `bodyLRegular` in `textDefaultNormal`); and the leading slot is ordered **flag → `+91` → divider** (was flag → divider → `+91`), so the divider trails the country code and separates the prefix from the number. Consumers should render the India flag at 36×24.\n- **`AurumTextField` placeholder now matches the field's text size and renders in the correct disabled grey.** The placeholder hard-coded `bodyLMedium`, and because `AurumText` falls back to `textDefaultNormal` when given no explicit colour, it painted the placeholder near-black regardless of the M3 placeholder-colour config. It now inherits the field's `textStyle` (so e.g. the phone field's 20sp placeholder matches its value — no size jump on first keystroke) and is explicitly coloured `textDefaultDisabled`. Affects every field that shows a placeholder.\n\n## [0.3.26] - 2026-07-20\n\n### Removed\n- **`AurumIcons.Navigation.CaretCircleUp/Down/Left/Right` (+ `Filled`) — removed to restore the 1:1 sheet↔catalog contract.** Their master components were deleted from the Figma \"Component Icons\" sheet (verified via the components API and the sheet subtree — no replacement nodes exist), and the current homefeed designs use Chevron icons exclusively (458 chevron instances, zero carets in the FINAL frames). Ghost entries also crashed `make icons-import` (null REST response for deleted nodes) and failed every Code Connect publish with \"node not found\". Removes the manifest entries, 8 drawables, 8 catalog vals, and 8 `.figma.kt` mappings. **Consumer migration:** jar-android's `CaretCirclePill` (the only production usage) moves to a disc + `AurumIcons.Navigation.ChevronRight` composition in the companion jar-android PR. aurum-ios removes the same icons in the same sitting.\n\n## [0.3.25] - 2026-07-20\n\n### Fixed\n- **`AurumTextField` homes the caret at the end of a programmatically-set value.** The field used the `String`-based `BasicTextField`, which seeds the text selection at position 0, so any externally-provided value — a pre-filled phone number on the login screen, an autofill / number-hint suggestion — placed the caret *before* the first character, forcing users to move it to the end before editing. Rebuilt on a `TextFieldValue`-backed buffer that seeds and re-homes the caret to the end whenever the incoming value changes from outside; live typing keeps its own caret. `AurumPhoneNumberInput`, `AurumAmountInput`, and `AurumSearchField` inherit the fix; public API is unchanged (`value: String` / `onValueChange: (String) -> Unit`).\n\n## [0.3.24] - 2026-07-16\n\n### Changed\n- **Renamed the Silver palette `visual.indigo*` → `visual.silver*`** (and the backing primitive `Indigo*` → `Silver*`), matching the design-system rename in Figma (`_primitives` + `visual_colors` both use `silver` now). Values are unchanged — a pure rename. `visual.indigo*` shipped only in 0.3.23 with a single internal consumer, so this corrects the name before it spread. Use `Aurum.colors.visual.silver50..1000`.\n\n## [0.3.23] - 2026-07-16\n\n### Added\n- **`Aurum.colors.visual.indigo50..1000` — the Silver brand palette.** A new chromatic family, the cool blue-grey Silver analogue to how `visual.yellow*` is Gold (from the Figma \"Silver Indigo\" palette section). Silver surfaces (the Silver locker/tab, silver savings cards) previously had no brand palette and mis-borrowed Blue/Neutral/Purple. Backed by new `AurumPalette.Indigo50..1000` primitives + `IndigoA50..A200` alpha tiers, and by real `colors/indigo/*` variables added to the Figma `_primitives` + `visual_colors` collections so the token source stays faithful. Purely additive — no existing token changed.\n\n## [0.3.22] - 2026-07-15\n\n### Fixed\n- **`AurumGlobalHeader` renders a URL avatar full-bleed in the profile pill.** `profileContent` was placed at its intrinsic size, centered in the 44 dp pill, so a URL-loaded photo showed as a small inset with a wide ring of background around it. The slot now fills the pill's inner circle (inside the 1 dp border, clipped circular), so a full-bleed image reads as the avatar. The default `profileIcon` glyph path is unchanged (still a 20 dp icon). Callers pass a `fillMaxSize` image with `ContentScale.Crop` — no manual sizing or clipping.\n\n## [0.3.21] - 2026-07-08\n\n### Changed\n- **`AurumTextField` matches the Figma anatomy — no Material floating label.** The label was passed into M3 `OutlinedTextField`'s label slot, so it rested inside the box and floated up into a notch cut in the top border on focus, and the placeholder stayed hidden until focused. Per the component sheet the label is a *static* `Title/S-SemiBold` caption above the field (greyed when disabled) and the placeholder shows whenever the value is empty. Rebuilt on `BasicTextField` + `OutlinedTextFieldDefaults.DecorationBox`: continuous 1.5 dp border (`borderWidth.md`; `lg` on focused error/success), default/disabled border `interactive.borderNeutralHighlighted` (was one shade too faint), container `bgSurfaceLowContrast` (bound white, was transparent), readonly `bgSurfaceMidContrast` fill + `borderSurfaceMidContrast` border, value/placeholder `bodyLMedium`, support text `bodySMedium`. `AurumPhoneNumberInput`, `AurumAmountInput`, and `AurumSearchField` inherit the fix; public API unchanged.\n\n### Added\n- **`AurumTextField(isLoading = …)`** — trailing loading spinner per the Figma `loading` state; error / success states now auto-surface their trailing status icon when the caller supplies no `trailing`. `AurumPhoneNumberInput` delegates to the shared affordance.\n\n## [0.3.20] - 2026-07-08\n\n### Added\n- **`AurumBanner(windowInsets = …)`** — M3 app-bar convention: insets are padded *inside* the tone background, so a top-anchored band paints its colour under the status bar while content stays clear. Pass `WindowInsets.statusBars` for window-edge banners; defaults to none.\n\n### Changed\n- **`AurumBannerHost` pushes instead of overlaying.** Enter/exit now animates `expandVertically`/`shrinkVertically` (plus the existing slide + fade), so a host placed in the layout flow (first child of the root Column / a top slot the chrome is constrained below) smoothly pushes the content beneath it down and releases it — the structural-band behaviour used by the app-wide connectivity strip. Overlay placements keep working.\n- **`AurumChip` state colours match the Figma component set (4446-701) exactly.** `Selected` fills the 9% brand wash (`borderPrimaryMuted` — the spec's bound fill) instead of white, with `borderPrimaryDefault` border; the Neutral default border is now type-aware (`Other` → hairline `borderNeutralMuted`, `Action` → `borderNeutralHighlighted`); Neutral pressed fills `borderNeutralDefault` (Neutral50) per the spec binding.\n\n### Fixed\n- **`AurumChip` disabled chips no longer double-dim** — the extra 0.40 alpha layer is gone; the disabled tokens (`bgNeutralDisabled` / `textNeutralDisabled` / `borderNeutralMuted`) already encode the muted look and the Figma disabled variants are opacity 1.\n\n## [0.3.19] - 2026-07-06\n\n### Added\n- **`Modifier.aurumInnerShadow(color, blur, offsetX, offsetY, shape)`** — Figma `INNER_SHADOW` for Compose, which has no inner-shadow primitive. Clips to `shape` and draws the shape's *inverse* ring behind a `setShadowLayer` paint, so only the shadow bleeding inward is visible — the same construction Figma uses. Positive `offsetY` casts from the top edge, negative from the bottom. First consumer: the DS-swipe gold hero panel (`yellow800` @ 24%, blur 16, offsetY −4), Figma `10103:18130`.\n\n## [0.3.18] - 2026-07-06\n\n### Added\n- **`aurumShadow(alphaMask: Brush?)`** — Figma derives a drop shadow from the node's *rendered* alpha, so a surface whose fill fades to transparent needs its shadow to fade with it. Pass the fill brush and the shadow is masked through it (`saveLayer` + `BlendMode.DstIn`); `null` keeps the plain outline shadow. Built for fade-out cards (e.g. the transactions empty-state CTA card, Figma `8498:34146`).\n\n### Changed\n- **`AurumButton` primary press is dimensional, not tonal.** Pressed no longer swaps the radial fill for `bgPrimaryHighlighted` + 4 dp muted ring — the fill and top-lit rim stay constant, and on full-width primaries the cue is the purple/800 hard shadow dropping while the button sinks 2 dp onto it (ripple suppressed there; inline primaries keep the ripple as their only cue). Product call (2026-07-06): press feedback should read as 3D depth, never a colour shift — deviates from the Figma pressed variant, pending a design rebind.\n\n### Fixed\n- **`aurumShadow` no longer paints under the node itself** (Figma drop shadows are `showShadowBehindNode=false`): the blurred silhouette used to bleed a tint wash through translucent/gradient fills. The node's own area is now clipped out of the shadow draw; opaque surfaces render identically.\n\n## [0.3.17] - 2026-07-06\n\n### Changed\n- **`AurumButton` rebuilt as a custom composable — no Material 3.** The old `material3.Button` wrapper drew its border inside the `Surface`'s own shape-clip, shaving the top-lit rim's outer edge and leaving a visible seam (\"doubled\" upper edge) on the radial primary. Replaced with a `Row` + `clickable(ripple)` + Aurum-painted surface and a 48 dp touch target; public API is unchanged (zero call-site changes). Every state now matches the Figma component exactly — primary: default (radial purple600→400 + white 60→0% rim), pressed (purple800 fill + `borderPrimaryMuted` 4 dp ring), disabled (neutral 9% + `textPrimaryDisabled`), loading (solid purple500 + white 20→0% rim + spinner), progress (purple100 track + purple500 fill); secondary outline/pressed/disabled; tertiary grey/pressed-ring/disabled. This also unblocks bespoke press interactions (e.g. a 3D press) that M3 constrained.\n\n### Fixed\n- **`AurumLinkButton`** — pressed state now shifts the label to `textPrimarySubtle` (purple300) with no background, per the Figma link-button spec (was a static colour with a ripple).\n\n## [0.3.16] - 2026-07-03\n\n### Fixed\n- **`AurumChip`** — Black variant filled `bgStaticWhite*` (white-on-white text); now `bgStaticBlack*`. Every variant gains its spec 1 dp stroke (neutral `borderNeutralHighlighted`; pressed/black/disabled `borderNeutralMuted`; brand `borderPrimaryMuted`). Small-chip icons 14 dp.\n- **`AurumBadge`** — intense-emphasis content colour `text*Subtle` (tints) → `text*Inverse` (white on solid tone) across all six roles.\n- **`AurumToast`** — drop shadow added on every variant via `aurumShadow` (nearest tint `highRaised` @18% vs spec #000 @16% — no exact token, flagged); brand stroke follows the spec binding `bgPrimarySubtle`; label→close gap 4 dp.\n\n## [0.3.15] - 2026-07-03\n\n### Added\n- **Token resync to live Figma** — `feedback/*/subtle` rebound from white to real tints (green/red/orange 400, blue/purple 300, neutral 500; `text/neutral/intense` 600→900), `interactive/background/*/faded` 100→50 shades, `interactive/border/{information,primary}/disabled` → 9% alpha neutral. Typography atoms `3xl=40` / `4xl=48` / `lineHeight 3xl=48` / `ExtraBold=800` and the new **`Aurum.type.num3XL`** (Inter Bold 40/48). Export JSONs mirrored to live. The borderRadius re-index (xl 16→12) is deliberately HELD pending design confirmation.\n- **`AurumIcons.Media.PlayCircle`** (89th glyph) + knockout-aware icon importer: `<rect>/<circle>/<ellipse>` converted to path data and dark-base + white-overlay glyphs merged into single tintable even-odd paths (CaretCircle* restyle).\n- **Component spec fingerprints** — `make component-audit` diffs every component's live Figma master against committed baselines (`design-tokens/component-specs/`); weekly `component-drift.yml` CI files an issue on drift; `RECONCILIATION.md` tracks code↔spec status (full 2026-07-03 sweep recorded).\n\n### Fixed\n- **`AurumButton` primary matches the restyled Figma master** — elliptical radial fill purple600→400 (bottom-centre anchor), 1 dp top-lit white 60→0% rim, and a purple/800 hard shadow (y=2) **only when `isFullWidth`** (inline primaries are flat, per the Figma variants). Pressed is a real state: flat highlighted fill + 4 dp `borderPrimaryMuted` ring; tertiary's ring is now pressed-only.\n- **`AurumIconCaretCircleRight` Code Connect** re-pointed to the re-created master `7085:15336` — un-breaks the Code Connect publish that failed on every release tag.\n\n## [0.3.14] - 2026-07-02\n\n### Added\n- **`AurumSmoothCornerShape` + `Aurum.shape.smooth(radius, smoothing)`** — continuous-curvature (\"squircle\") rounded rectangle, the Compose analogue of Figma's `cornerSmoothing`. Backed by AndroidX `graphics-shapes` (`RoundedPolygon.rectangle` + `CornerRounding`): each corner renders as three cubic curves (circular centre + edge-blending flanks). `smoothing` maps Figma's 0..1 slider, default 0.6 (Figma's \"iOS\" preset); `0` degrades to the `Outline.Rounded` fast path. Path cached per size, so scroll-feed safe. New dependency: `androidx.graphics:graphics-shapes:1.0.1`.\n- **Figma plugin 0.7.0 — `cornerSmoothing` decode.** `analyzeShape` now reads the node's `cornerSmoothing`: uniform-radius nodes with smoothing > 0.05 emit `Aurum.shape.smooth(N.dp)` (with an explicit `smoothing = …f` argument when it deviates from the 0.6 preset); per-corner-radius nodes with smoothing surface a visible `// note:` drift marker instead of silently dropping it.\n\n### Fixed\n- **`AurumNavBar` CenterQr dome** — three drifts from Figma `5575:14061`: the dome's radial was a circular `(0.5, −1) × 2` approximation (now the plugin-decoded elliptical recipe: centre `(0.5, 0)`, radii `2.96 × 0.91`, rotated `−26°`); the QR glyph rendered ~22 dp of drawn content in a 27 dp box (icon paths cover 19.5/24 of the viewport — the box is now 33 dp so the glyph measures the design's 27 dp); and the selected-icon gradient reached full `pink/50` at the glyph bottom while the design's gradient handles extend 1.64× past it (the ramp now ends at the 61% `purple/500 → pink/50` blend, shared by selected tabs and the QR glyph).\n\n## [0.3.13] - 2026-07-01\n\n### Added\n- **`aurumRadialBrush` — elliptical / transform-aware overload** `aurumRadialBrush(vararg stops, centerFraction, radiusFractionX, radiusFractionY, rotationDegrees)`. The circular overload uses a single `radiusFraction = fraction · max(w, h)`, which collapses a Figma `GRADIENT_RADIAL` with unequal/rotated axes to a circle — so on a wide-short surface (e.g. a 308×58 card) the glow washes out **flat**. The new overload gives the horizontal and vertical extents independent radii (+ rotation) by stretching the shader via a `localMatrix`, so the glow fades across the height as designed. The circular overload is unchanged.\n\n### Fixed\n- **Figma plugin `radialGradientParams`** took the gradient centre as `T⁻¹(0, 0.5)` — an axis *endpoint* (e.g. `(0.5, −1)`, a full card-height above the surface) — instead of the true centre `T⁻¹(0.5, 0.5)`, and collapsed the ellipse to one radius. It now emits the true centre plus `radiusFractionX/Y` + `rotationDegrees` (principal axes via the 2×2 SVD of the conjugate half-axes), so the plugin's Compose recipe reproduces elliptical Figma radials faithfully instead of a flat circle.\n\n## [0.3.12] - 2026-07-01\n\n### Fixed\n- **`AurumOtpInput`** — fixes two regressions from the 0.3.11 masking approach. (1) The system's **selection/cursor teardrop handle** leaked over the cells: `cursorBrush = Transparent` hides only the cursor *line*, while the handle is drawn from `LocalTextSelectionColors.handleColor` (Aurum purple) — so a purple teardrop rendered on cell 1 after a re-tap. (2) The **keyboard did not reopen** after a back-press dismissed it — `requestFocus()` is a no-op on a still-focused field and `SoftwareKeyboardController.show()` can't restart a dismissed session. The field now suppresses selection handles entirely (transparent `LocalTextSelectionColors`; the active-cell underline is the sole caret cue, correct for a masked input), and the tap-catcher gates on `WindowInsets.isImeVisible`: keyboard up → just re-focus (no flicker); hidden (first tap / after back) → cycle focus (clear → re-pin caret to end → re-request) to fire a fresh focus-gain that reopens the IME without stranding the caret at offset 0. Device-verified on the catalog OTP demo: no teardrop, keyboard reopens after back, and input always appends. Internal-only; the public API is unchanged. Visually identical — Roborazzi baselines unaffected.\n\n## [0.3.11] - 2026-06-30\n\n### Fixed\n- **`AurumOtpInput`** — the 0.3.10 caret fix was insufficient (PFPD-99 reopened). Pinning the `TextFieldValue` selection to `TextRange(text.length)` only corrects the caret on `onValueChange`, but a bare tap on a filled cell reaches the hidden `BasicTextField`'s built-in tap-to-position gesture — which repositions the caret with no text change — so the next digit still overwrote the tapped cell. A transparent tap-catcher overlay now sits above the hidden field and only calls `requestFocus()`, so taps can never reach the field's positioning gesture: the caret stays pinned to the end and input always appends. Device-verified on the catalog OTP demo (tap cell 1 → type → digit appends at the end). Internal-only; the public API (`value: String` / `onValueChange: (String) -> Unit`) is unchanged. Visually identical — Roborazzi baselines unaffected. (Trade-off: long-press-to-paste on the cells is intercepted; OTP paste continues to work via the keyboard's SMS-autofill chip / auto-read.)\n\n## [0.3.10] - 2026-06-29\n\n### Fixed\n- **`AurumOtpInput`** — tapping the cell row no longer snaps the caret to the first cell (PFPD-99). The hidden field used the `BasicTextField(value: String, …)` overload, which carries no selection, so the `clickable` row's `requestFocus()` could land the caret at offset 0 and the next typed digit overwrote the first cell instead of appending. It now drives the field with a `TextFieldValue` whose selection is pinned to `TextRange(text.length)` on both external `value` changes (SMS autofill / resend reset) and `onValueChange`, so input always continues from the last entered digit. Internal-only — the public API (`value: String` / `onValueChange: (String) -> Unit`) is unchanged.\n\n## [0.3.9] - 2026-06-22\n\n### Fixed\n- **`AurumPhoneNumberInput`** — leading slot now matches the Figma master (file `YvIxqu2oTlM6UnkL0OloHc`, node `4904-2455`): the country flag was pinned to the rounded border (the M3 `leadingIcon` slot gives a full-bleed flag image no optical inset, so it visually clipped against the field edge), and the divider sat *after* the country code (`flag +91 │ number`) instead of between the flag and code. Now: a start inset keeps the flag clear of the border, and the order is `flag │ +91 number`. The divider is also dropped when no `flag` is supplied (so the code never leads with a stray rule). Visual-only; the public API is unchanged.\n\n## [0.3.8] - 2026-06-18\n\n### Fixed\n- **`AurumPhoneNumberInput`** — now renders the trailing **validation icon** and **loading spinner** from its Figma component (file `YvIxqu2oTlM6UnkL0OloHc`, node `4904-2455`), reaching parity with `AurumAmountInput` (which got this in 0.3.7 — the phone input was missed in that pass). `isSuccess` shows `AurumIcons.Status.SuccessFilled` (tinted `interactive.iconPositiveNormal`), `isError` shows `WarningFilled` (tinted `interactive.iconNegativeNormal`), and a new **`isLoading`** param renders an `AurumLoader` — matching the Figma `state` x `validationState` variants. Previously `isSuccess` / `isError` only recoloured the border (no icon) and there was no loading state at all. Additive, non-breaking. New `PreviewAurumPhoneNumberInputLoading`; Code Connect maps `state=loading -> isLoading`.\n\n## [0.3.7] - 2026-06-09\n\n### Added\n- **Responsive width-scaling in `AurumTheme`** (`AurumWidthScaling`) — every `.dp` / `.sp` under the theme now scales by `k = (smallestScreenWidthDp / 360).coerceIn(1.0, 1.15)`, so a layout authored at the 360dp Figma reference keeps its proportions on wider phones instead of looking \"airy\" (a 411dp phone → ×1.14; verified on-device — a raw-`dp` home-feed card grew **height ×1.14 with width unchanged**). Implemented as a `LocalDensity.density` override at the single `AurumTheme` choke point — **zero call-site churn, no `.sdp`/`.ssp`** — that preserves `fontScale`, so the user's accessibility text-scaling still composes on top. **Up-only clamp** (never shrinks below the reference → touch targets stay safe; caps growth so tablets/foldables hand off to `WindowSizeClass` rather than ballooning). Nested `AurumTheme` is **idempotent** via the new `LocalAurumBaseDensity` (re-scales the same base, never `k²`). New `widthScaling` param on `AurumTheme` (default `AurumWidthScaling.Default`; `Disabled` renders pixel-exact to Figma; `fixed()` pins a factor for previews). Catalog **Scaling** gallery demonstrates the spectrum on one device. **Additive API (optional param + new class), non-breaking** — renders identically at 360dp — but **default-on**, so every Aurum surface scales up on >360dp phones by design. Replaces the temptation to reintroduce `.sdp`/`.ssp`; see README → *Sizing*.\n\n### Changed\n- **`AurumTextField`** — additive `textStyle` param (defaults to `bodyLRegular`). Lets specialised inputs set the entered-value typography; existing callers are unaffected (byte-identical default).\n\n### Fixed\n- **`AurumAmountInput`** — aligned to the Figma component (file `YvIxqu2oTlM6UnkL0OloHc`, node `5080-261`) after a layer-by-layer audit. The entered amount now renders in **`numXL`** (Inter Bold 28) and the ₹ prefix in **`numL`** (Inter Bold 24) — previously the value fell back to `bodyLRegular` (Inter 16 Regular) and the ₹ used `displayLBold` (the **serif** Frank Ruhl Libre, wrong family). The gold-grams `suffixText` is now **`bodyMRegular`** (14, was `bodyLRegular` 16) and **inset** from the field's trailing edge (was flush). The **success / error** validation states now render the trailing status icon (`AurumIcons.Status.SuccessFilled` tinted `interactive.iconPositiveNormal` / `WarningFilled` tinted `interactive.iconNegativeNormal`), matching the Figma `validationState` variants. Verified against the Figma state×validation variants via Roborazzi.\n- **`AurumBottomSheet` carries the width-scale into the sheet window** — a `ModalBottomSheet` hosts its content in a new window that re-provides the platform `LocalDensity` from the system config, which dropped `AurumTheme`'s width-scale (the Aurum token locals still inherited; the platform density did not). The sheet now re-applies the enclosing scaled density to its content **and** drag handle, so sheet content matches the page behind it — verified on-device (a sheet tile's chevron measured **42 px unscaled → 48 px** after the fix, matching the page's k=1.14). Raw `material3.ModalBottomSheet` / `Dialog` used directly in feature code need the same one-liner — prefer `AurumBottomSheet`.\n- **`AurumBottomSheet` no longer forces consumers to opt in to `ExperimentalMaterial3Api`** — its `sheetState` default was `rememberModalBottomSheetState(...)`, and for a `@Composable` that default is evaluated at the **caller's** site, so every feature-code caller had to add `@OptIn(ExperimentalMaterial3Api::class)` — defeating the point of a material-free DS wrapper (it broke the jar-android `LightCriticalActionsBottomSheet` migration). the `sheetState` **parameter was removed** from the public signature — its `androidx.compose.material3.SheetState` type leaked the experimental opt-in to consumers of the published AAR (a binary consumer doesn't honour the wrapper's `@OptIn` for an *exposed experimental type*). The state is created internally now; callers drive the sheet by toggling whether it is composed, plus `onDismiss` (no caller passed `sheetState`). Programmatic state control can return later via an Aurum-owned wrapper. Source-compatible for every existing caller.\n\n## [0.3.6] - 2026-06-02\n\n### Added\n- **`AurumPageHeader.colorScheme`** — new `AurumPageHeaderColorScheme { OnLight; OnDark }` param (default `OnLight`). `OnDark` flips the title, subtitle, and **all icon tints** to the theme-invariant `surface.iconStaticWhiteNormal` / `surface.textStaticWhiteNormal` tones so a Page Header can sit over a dark hero backdrop (pair with `containerColor = Color.Transparent`). Mirrors `AurumGlobalHeaderColorScheme` 1:1. `contentColor` becomes an optional text override (`Color.Unspecified` default defers to the scheme); icon tints now follow the scheme instead of a hardcoded `interactive.iconNeutralNormal` (which `contentColor` never actually reached). **Additive, non-breaking — `OnLight` renders byte-identically to before.** New `PreviewOnDark`. Unblocks the jar-android Instant Save hero toolbar (back + title over a dark BE-image hero).\n\n## [0.3.5] - 2026-05-31\n\n### Added\n- **`AurumPill`** — a compact, label-first status / token element (quieter than `AurumChip`). Mirrors the Figma \"Pills\" set (file `YvIxqu2oTlM6UnkL0OloHc`, node `5891-802`): `type` = Rounded / Rectangular / WithTags, state = default / `selected` (Figma focus) / disabled, optional leading/trailing icons, and a `tag` ribbon for WithTags. Scratch (sibling to `AurumChip`), full `@AurumFigma` + Code Connect binding, catalog `PillsDemo`. Closes one of the three Figma-coverage gaps.\n- **`AurumProgressBar`** — a determinate linear progress bar (8dp pill track + primary indicator). Mirrors the Figma \"Progress Bar - Linear\" set (node `5934-846`): `progress` (0f..1f), optional `label` header (Figma `shownHeader`) and trailing `%` (Figma `shownProgress`). Scratch, in `feedback/`, `@AurumFigma` + Code Connect, catalog `ProgressDemo`. Closes the second Figma-coverage gap.\n- **`AurumSegmentedProgressBar`** — discrete N-segment progress. Mirrors the Figma \"Progress Bar - Segmented\" set (node `5889-2361`): `type` = Bars / Bubbles (numbered-checkpoint stepper), `intent` (6: Default + 5 feedback tones), `filled`/`total` counts, optional header + %. Scratch, in `feedback/`, `@AurumFigma` + Code Connect, catalog demo. **Closes the third and final Figma-coverage gap — every ✅ Ready-for-dev Figma component now has code.**\n- **12 feedback `inverse` tokens** — `feedback.{icon,text}.{primary,information,positive,negative,notice,neutral}.inverse`, all resolving to `Neutral0` (`#FFFFFF`). White icon/text content for feedback rendered on a tonal-**intense** (saturated) surface — the third intensity alongside `intense`/`subtle`, and the exact gap that forced the toast/snackbar white-on-tone workarounds. Added to `FeedbackColors` on the **icon + text axes only** (background + border keep 2 intensities, matching Figma). Surfaced by auditing live Figma variables against the committed token layer (plugin-API drift detection) — design had added them since the last export. Additive, non-breaking.\n- **Figma token export artifacts re-synced to live Figma** — `design-tokens/figma-export/*.json` brought back in line with the live variable set: the 12 `inverse` entries added to `theme.onLight`; colour primitive leaf-names de-prefixed (`colors/blue/blue_500` → `colors/blue/500` — a Figma-side cleanup, **values unchanged**); `typography` `fontFamily` keys lowercased (`Display`→`display`, `Primary`→`primary`) and the orphaned `lineHeight/4xs` dropped; `Boolean` primitive added. Zero residual drift, re-verified by replaying the plugin-API audit against the refreshed files. The cosmetic renames don't touch the generated Kotlin.\n- **`AurumBanner` + `AurumBannerHost`** — a persistent, top-anchored, full-bleed tonal status strip (offline / downtime / account warnings) and its caller-driven host. It is the **persistent counterpart of the transient `AurumToast`** — same 6-tone tonal language and per-tone status glyphs (`feedback.*` subtle fill over opaque `surface.bgPageBase` + matching intense content) — but structural rather than floating: square corners, full-bleed `fillMaxWidth`, a 1dp bottom hairline, no clip. Supports an optional inline text `action` (e.g. \"Retry\") and an optional trailing dismiss ✕ (`onDismiss` / `dismissible`); state banners are non-dismissible and persist until the condition resolves. `AurumBannerHost` animates a single banner in from the **top** (`slideInVertically { -it }`) with **no auto-dismiss timer** (vs. the toast host's queue + timer) — the caller owns show/dismiss. **No Figma node yet — proposal-grade, to reconcile when design produces the spec.** Catalog `BannerDemo` (all tones, with/without action, dismissible, host). Code Connect stub (`AurumBanner.figma.kt`, `url` pending design) + `classification.md` rows added per the add-component ritual.\n- **11 icons synced from the Figma \"Component Icons\" frame** (node `5130:35416`): `Navigation.Caret{Up,Down,Left,Right}` + `Navigation.CaretCircle{Up,Down,Left,Right}` (single-weight; distinct from the existing Chevron set), `Content.Star`, `Content.ChartBar`, and `Commerce.Bank` (each line + fill). The catalog is now 88 icons / 176 drawables. Imported via `tooling/icons/import_from_figma.py` (`ICON_MANIFEST` extended) + Code Connect bindings regenerated. Also refreshed 6 existing glyphs the design team refined (`action_qr_code`, `content_broadcast_filled`, `media_replay`, `user_nek`).\n\n### Removed\n- **`AurumSnackbar`** (internal `component/scaffold/`) — deleted. It paired `surface.bgSurfaceHighContrast` (`#DCDDE3`, a *light* surface) with `surface.textDefaultInverse` (`#FFFFFF`, white) and rendered white-on-light-grey (illegible), and it had no Figma counterpart. The design system's feedback primitive is the Figma-backed `AurumToast` (a light, tone-coloured strip — file `YvIxqu2oTlM6UnkL0OloHc`, node `6014:2621`), not a dark M3 snackbar.\n\n### Changed\n- **`AurumLoader`** — added optional `label` + `labelPosition` (right / bottom) to match the Figma Spinner's `shownLabel` variants, and added the previously-missing Code Connect binding + `@AurumFigma` (node `4530-2084`). It was wrongly tagged code-only; it's a Figma-backed component (the `size` / `color` Figma axes were already covered by its continuous `Dp` / `Color` params).\n- **Renamed `AurumTopAppBar` → `AurumPageHeader`** (and `AurumTopAppBarAction`/`AurumTopAppBarButton` → `AurumPageHeaderAction`/`AurumPageHeaderButton`; file `AurumPageHeader.kt`). The component's Figma name is **\"Page Header\"** (file `YvIxqu2oTlM6UnkL0OloHc`, set `4826:1058`), and \"Page Header\" is the industry convention for a content-level title-and-actions row (Atlassian, GitHub Primer, Polaris, Ant Design, Salesforce). The old Material-derived name wrongly implied it wraps `material3.TopAppBar` — which it explicitly does **not** (it's a scratch component). Clean rename, **no deprecation alias** (Aurum is pre-release / in active light-theme migration); the single jar-android consumer migrated in lockstep.\n- **`AurumPageHeader` primary button synced to Figma** (`4826:1058`, chip `5431:2985`) — the `snackbarHost` slot renders the canonical `AurumToast` (Neutral tone, Large) instead of the removed `AurumSnackbar`. The public `snackbarHostState: SnackbarHostState` API is **unchanged** (non-breaking); `snackbarHostState.showSnackbar(...)` now surfaces the legible, Figma-faithful toast. M3 `SnackbarData` carries no tone, so screen-level snackbars are Neutral — for tone-specific feedback (Error/Success/…), use `AurumToastHost` + `showToast(tone = …)` directly.\n- **`AurumToast` leading-icon override** — new optional `leadingIcon: ImageVector? = null` param (default → the tone's status glyph). Supply to swap the glyph — still tinted to the tone's content colour + sized by the toast — or `showLeadingIcon = false` to hide it. A controlled override (not a free `@Composable` slot) so the DS keeps tint/size consistent; lets consumers (and the `snackBar()` migration) keep a bespoke icon without losing the tonal default.\n- **`AurumTopAppBar` primary button synced to Figma** (`4826:1058`, chip `5431:2985`) — now 36dp tall with a 1dp `interactive.borderPrimaryMuted` ring, 12dp horizontal padding, and a `labelLMedium` (12/16 Medium) label (was 32dp, no border, 8dp, `titleXSSemiBold` 14/20). Every other Page Header slot (variant axes, title `titleSSemiBold`, subtitle, back chevron, 56dp/16dp layout, icons) already matched the design.\n\n### Fixed\n- **`AurumToast` now renders opaque** — composites each tone's subtle (low-alpha) fill (e.g. `feedback.bgNegativeSubtle` = `#D8320917`, 9% alpha) over `surface.bgPageBase` (opaque white) inside the component. Previously only the low-alpha tint was painted, so a toast floating over app content — rather than the white Figma page the design was drawn on — let the backdrop bleed through. It now reads as the intended solid pastel on any surface.\n- **`AurumToastHost` applies a consistent 16dp margin** — the default renderer now insets the toast by `space.s5` (16dp) on the sides **and** the bottom (was horizontal-only), so it floats with the design's 16dp gap on any screen. Callers supply only window insets (e.g. `navigationBarsPadding()`); no per-screen bottom offset needed.\n- **Error toast icon** — `leadingIconFor(Error)` now uses the filled `⊗` (`Navigation.CloseFilled`, the fill variant of `Icons/X`) instead of the plain `Navigation.Close` (✕), which duplicated the trailing dismiss ✕. Matches the Figma Error toast (node `6014:2621`); the other five tones were already correct.\n\n## [0.3.4] - 2026-05-21\n\n### Added\n- **`AurumButton.progress` param** — optional `Float?` (`0f..1f`) that renders the auto-advance progress state from the Figma button `state=progress` variant (file `YvIxqu2oTlM6UnkL0OloHc`, node `4692:1074`). When non-null the button paints a faded-primary track (`interactive.bgPrimaryFaded`) with a primary fill (`interactive.bgPrimaryDefault`) that grows to `progress`, swaps the M3 container to transparent, and dims the label/icon to `interactive.textOnPrimaryDisabled`. `null` (default) keeps the normal fill — non-breaking, additive. Drive `progress` from a countdown for CTAs that proceed on their own (e.g. onboarding auto-advance). New `PreviewProgressVariants`.\n\n### Fixed\n- **`AurumGlobalHeader` `OnDark` pill fidelity** — restored translucent radial fill + linear-gradient border + linear-gradient divider per the Figma `Global Header` component (file `CXq7IVmAMMc7qCKT82GrM9`, node `7174:11139`). The previous `OnDark` arm rendered every pill as `SolidColor(interactive.bgStaticWhiteFaded)` with a baked `Color.White.copy(alpha = 0.09f)` hairline and `Color.White.copy(alpha = 0.18f)` divider — flat and tokenless. Now matches the Aurum Compose Figma plugin emission verbatim: pill fill is `aurumRadialBrush(bgStaticWhiteFaded@α0.18 → bgStaticBlackFaded@α0.18, center=(1.55, -0.56), radius=1.47)`, border is `aurumLinearBrush(180°, borderNeutralMuted@α0.09 → borderSurfaceHighContrast → borderNeutralMuted@α0.09)`, divider is `aurumLinearBrush(90°, borderNeutralMuted@α0.04 → borderSurfaceHighContrast@α0.4 → borderNeutralMuted@α0.04)`. `HeaderPillColors.border` and `dividerTint` widened from `Color` to `Brush` (and the field renamed `divider`) to carry the gradients — internal type, no public API impact. `OnLight` arm visually unchanged (the existing solid border is wrapped in `SolidColor(…)`). Consumers that render the header with `colorScheme = OnDark` (e.g. the jar-android home feed) pick up the canonical translucent-glass treatment automatically.\n\n## [0.3.3] - 2026-05-19\n\n### Added\n- **`AurumGlobalHeader.colorScheme` param** — new `AurumGlobalHeaderColorScheme` sealed type (`OnLight`, `OnDark`). Default `OnLight` preserves the existing pill treatment; `OnDark` swaps every pill background to a solid translucent-white wash (`interactive.bgStaticWhiteFaded`), border to a faded white hairline, and icon + text tints to the `iconStaticWhiteNormal` / `textStaticWhiteNormal` / `textStaticWhiteSubtle` tones. Use `OnDark` when the header sits on a dark hero backdrop (e.g. the home-feed locker zone); pair with `containerColor = Color.Transparent` so the underlying backdrop reads through. New `PreviewOnDarkLivePrice` covers the dark path. Internal refactor: a private `HeaderPillColors` data class threads the resolved tone set into every sub-component (ProfilePill / SingleIconPill / RewardsAndNotificationsPill / LiveBuyPricePill / PillFrame), replacing the previous in-line `pillSheen()` brush + hardcoded `iconDefaultNormal` / `textDefaultNormal` reads. No call-site change required for existing consumers.\n\n### Changed\n- **Typography scale rebuilt as a 1:1 mirror of the Figma Typography page** (`YvIxqu2oTlM6UnkL0OloHc#5077:1488`). The old hand-curated scale (20 tokens) had multiple sizes (11sp, 18sp, 40-72sp) and weights (Inter Medium in Title family, SemiBold at 14sp Label) that don't exist in Figma's catalog. The new scale ships 44 composites across 5 Figma-aligned families: **Display** (Frank Ruhl Libre S/M/L/XL/XXL × Bold/Medium), **Title** (Inter XS/S/M/L/XL/XXL × Bold/SemiBold), **Body** (Inter XS/S/M/L/XL × Regular/Medium), **Label** (Inter S/M/L × Bold/Medium), **Num** (Inter Bold XS/S/M/L/XL/XXL). Naming follows `<family><Size><Weight>` (e.g. `numXL`, `bodyMMedium`, `titleSSemiBold`). All ~210 internal Aurum usages migrated to the new tokens; M3 `MaterialBridge.kt` remapped to the new scale.\n- **Breaking** — every removed legacy token has a clear replacement. Migration map:\n\n  | Removed | Replacement | Notes |\n  |---|---|---|\n  | `bodyLarge` / `bodyMedium` / `bodySmall` / `bodyXSmall` | `bodyLRegular` / `bodyMRegular` / `bodySRegular` / `bodyXSRegular` | Same value, Figma-aligned naming |\n  | `bodyB3` | `bodySRegular` | Was duplicate of `bodySmall` |\n  | `captionMedium` (11sp) | `bodySRegular` (12sp) | 11sp not in Figma scale; 1sp upsize |\n  | `titleT1` (Inter Medium 16/24) | `bodyLMedium` | Title family is Bold/SemiBold only in Figma; this was Body-shaped |\n  | `titleT2` (Inter Medium 14/20) | `bodyMMedium` | Same reasoning |\n  | `titleT1.copy(SemiBold)` | `titleSSemiBold` | Exact value preserved |\n  | `titleT2.copy(SemiBold)` | `titleXSSemiBold` | Exact value preserved |\n  | `titleT2.copy(Bold)` | `titleXSBold` | Exact value preserved |\n  | `labelL1` (SemiBold 14/20) | `titleXSSemiBold` | 14sp not in Label scale (Label tops at 12sp); SemiBold lives in Title |\n  | `labelL1.copy(Bold)` | `titleXSBold` | Exact value preserved |\n  | `labelL2` (SemiBold 12/16) | `labelLMedium` | SemiBold→Medium weight shift (no Inter SemiBold 12/16 in Figma) |\n  | `headingH6` (Inter Bold 14/20) | `titleXSBold` | Same value, Figma-aligned naming |\n  | `headingSmall` (display 18/22) | `displaySBold` | 18sp not in Figma; size 16sp + weight Bold |\n  | `headingMedium` (display 20/24) | `displayMBold` | Line height 24→28 + SemiBold→Bold |\n  | `headingLarge` (display 24/28) | `displayLBold` | Line height 28→32 + SemiBold→Bold |\n  | `headingXLarge` (display 32/36) | `displayXXLBold` | Line height 36→40 + SemiBold→Bold |\n  | `heading2XLarge` (display 40/44) | `displayXXLBold` | 40sp not in Figma; size 32sp |\n  | `displayXLarge` (72sp) / `displayLarge` (64sp) / `displayMedium` (56sp) / `displaySmall` (48sp) | `displayXXLBold` (32sp) | None in Figma; size capped at scale max 32sp |\n\n  **Roborazzi baselines will shift** wherever a visible-value change applies (line-height fixes on Display, SemiBold→Bold on Display family, captionMedium 11→12, labelL2 SemiBold→Medium, hand-tuned Display 40-72sp clamped to 32sp). The migration is mechanical 1:1 for >80% of call sites.\n\n- **Token drift fix — `interactive.borderNeutral*` realigned.** `borderNeutralDefault` Neutral300→Neutral50, `borderNeutralHighlighted` Neutral400→Neutral200, `borderNeutralDisabled` Neutral200→NeutralA50 (translucent wash). Matches Figma. Visible on every neutral-bordered Aurum control — borders ~5 shades lighter than before.\n- **Typography fix — `headingH6.lineHeight` 14sp → 20sp.** Matches Figma's `Title/XS-Bold` spec (verified via plugin API: `fontSize 14, lineHeight 20 PIXELS, Inter Bold`); fixes collapsed leading on wrap.\n- **`AurumTransactionListCard` realigned with Figma.** Corner radius `shape.lg` → `shape.xl` on both outer wash and inner card (8dp → 16dp; designers updated the spec). Status icons remapped: Error `Status.Warning` (exclamation) → `Navigation.CloseFilled` (X-in-circle, matches Figma `Icons/X` at 5311:823); Pending `Status.Pending` (clock) → `Status.Warning` (exclamation-in-circle, matches Figma `Icons/Warning` at 5308:802). All glyphs now match the canonical component instances verified via `figma.getNodeByIdAsync()`.\n\n## [0.3.2] - 2026-05-14\n\n### Changed\n- **`AurumBottomSheet` close button removed.** The `onClose: (() -> Unit)?` parameter is gone from both `AurumBottomSheet` and the private `StrictPageHeader`; the top-right X icon is no longer rendered. Figma `5564:43216` shows the canonical `bottom sheet` component (`6002:939`) with only the drag handle + title + bottom CTA — no close affordance. Dismissal is now exclusively via drag-handle / scrim / system-back. Source-incompatible for any caller that was passing `onClose`; the sole in-tree consumer (`TransactionV2FilterBottomSheet` in jar-android) never set it. KDoc updated; `Spacer`, `AurumIconButton`, `AurumIcon`, and `AurumIcons` imports dropped from the file.\n- **`AurumBadge` Painter overload now ships MCP-readiness KDoc.** The Painter-flavoured overload was missing all three required tags (`@AurumIntendedUse`, `@AurumDo`, `@AurumDont`); the published manifest would have surfaced a stub on hover. The full block is mirrored verbatim from the ImageVector overload so both shapes ship identical identity / axes / dos / don'ts.\n- **`AurumTabRow` preview annotation aligned.** The lone `@Preview(name = \"tablet-wide(640dp)\", widthDp = 640)` on `PreviewTabRowFourTabsTablet` is now `@AurumPreview` so the catalog preview sweep + screenshot pipeline pick it up alongside every other Aurum preview. The redundant `androidx.compose.ui.tooling.preview.Preview` import is dropped.\n- **`docs/components/classification.md` refresh.** Table was ~6 months stale at 30 rows; now lists every public composable (29 scratch / 13 wrap). Reclassified `AurumChip`, `AurumCheckbox`, and `AurumNavBar` from **Wrap** to **Scratch** (source confirms none of them imports `material3.*`); renamed `AurumRadio` → `AurumRadioButton` and `AurumBottomNavBar` → `AurumNavBar` to match actual file names; moved `AurumTab` from the Wrap half to the Scratch half. Added rows for `AurumLinkButton`, `AurumOtpInput`, `AurumAmountInput`, `AurumStepper`, `AurumSectionHeader`, `AurumRadioGroup`, `AurumCheckboxGroup`, `AurumGlobalHeader`, `AurumTransactionListCard`, `AurumLabel`.\n- **Icon slots inside Aurum surfaces now inherit the surface's content color via `LocalContentColor`.** `AurumIcon`'s default `tint` resolves to `LocalContentColor.current.takeOrElse { Aurum.colors.surface.iconDefaultNormal }`, so icons in an `AurumButton` leading/trailing slot (and any future Aurum surface that provides `LocalContentColor`) auto-tint to match the label — no more manual `tint = Aurum.colors.interactive.textOnPrimaryNormal` boilerplate at each call site. `AurumButton` now wraps its content `Row` in `CompositionLocalProvider(LocalContentColor provides labelColor)` so slotted icons follow the button's variant + enabled state. Callers passing an explicit `tint` are unaffected.\n- **`AurumPreviewSurface` defaults to no content padding.** Previously hardcoded a 16 dp (`Aurum.space.s5`) inset on every preview, which clipped full-bleed components (locker cards, top app bars, hero gradients) into looking like they had a white margin. New signature accepts `contentPadding: Dp = 0.dp`; component previews that want breathing room pass an explicit value (e.g. `AurumPreviewSurface(contentPadding = Aurum.space.s5) { … }`). Source-incompatible only for callers that were relying on the inset; trailing-lambda usage (`AurumPreviewSurface { … }`) compiles unchanged.\n- **`AurumTopAppBar` back icon now matches Figma source.** The leading back-button glyph defaults to `AurumIcons.Navigation.ChevronLeft` (Figma node `5426:1363`, exactly what the canonical Page Header component_set `4826:1058` renders) instead of the previously hardcoded `AurumIcons.Navigation.ArrowLeft`. Implementation had drifted from the Figma source; this realigns them. Visible on every existing call-site (catalog `NavigationDemo`, jar-android transaction-detail hero, etc.) — a one-glyph swap with no API change for callers that took the default.\n- **`AurumTopAppBar.backIcon` slot.** Added an optional `backIcon: ImageVector = AurumIcons.Navigation.ChevronLeft` parameter so callers can override the leading glyph (e.g. `AurumIcons.Navigation.Close` on modal-style surfaces) without losing the 32×40 dp wrapper or `interactive/icon/neutral/normal` tint. New `PreviewWithBackIconClose` covers the override path; `BackIconButton` made glyph-agnostic.\n- **`AurumTopAppBar` icon wrappers honour Figma's 32×40 dp bounds.** `BackIconButton` and `ActionIconButton` previously inflated their wrappers to a 48×48 dp Material minimum-touch-target box that centered the visible 32×40 dp icon inside, which (a) shifted each glyph 8 dp inward of where Figma places it (`Icon_wrapper` 4826:1086 is `w-[32px] h-[40px]`) and (b) cumulatively pushed the page title 16 dp right of its design position. Both wrappers now collapse to a single 32×40 dp clickable box, matching Figma exactly. Net effect: tighter leading and trailing slots flush with the 16 dp container padding, page title visually anchored at its Figma-spec 60 dp from the screen left edge.\n- **Compose BOM bumped `2026.01.00` → `2026.04.01`.** Re-resolves `compose-ui` from `1.10.1` to `1.11.0`, fixing a Layout Inspector crash that prevented live component-tree inspection of the catalog app. `material3` is pinned outside the BOM at `1.3.2` and is unaffected.\n\n### Added\n- **`AurumToast` + `AurumToastHost` — toast feedback family** (`component/feedback/`). Mapped to Figma `wrapper` (`6014:2621`). `AurumToast` is a scratch composable: rounded 8 dp container (`borderRadius.large`) with 1 dp `feedback/border/<tone>/subtle` border, `feedback/background/<tone>/subtle` wash (Neutral falls back to `surface/background/surface/lowcontrast` + `surface/border/surface/lowcontrast`), per-tone leading status glyph (`Selection.CheckFilled` for Neutral / Brand; matching `Status.<Tone>Filled` for Success / Warning / Info; `Navigation.Close` for Error per Figma's `Icons/X` reference at node `6107:432`), label rendered at `Body/M-Medium` (Inter 14 / 20, weight 500) tinted with `feedback/text/<tone>/intense`, and a trailing close `AurumIconButton` wired through `onDismiss`. Six tones (`Neutral / Brand / Success / Error / Warning / Info`) × two sizes (`Small` fixed 48 dp single-line ellipsis · `Large` vertical-padded multi-line wrap up to 3 lines) = 12 variants matching the Figma component set. `showLeadingIcon` parameter hides the leading glyph for text-only status. Wraps its label in `CompositionLocalProvider(LocalContentColor provides toneColor)` so any nested AurumIcon inherits the tone tint without per-call boilerplate. Ships Code Connect mapping (`AurumToast.figma.kt`) with `state` and `size` axes wired to `AurumToastTone` / `AurumToastSize` enums, MCP-readiness KDoc tags (`@AurumIntendedUse` + 3 × `@AurumDo` + 3 × `@AurumDont`), and 3 `@AurumPreview` previews (small all-tones · large all-tones · `showLeadingIcon = false`). `AurumToastHost` is the codebase-only orchestration glue (no Figma counterpart): a `Stable` `AurumToastHostState` with a `Mutex`-serialised single-toast slot plus a `suspend fun showToast(label, tone, size, duration): AurumToastResult` API that resumes when the strip is dismissed (timer / X tap / explicit `dismiss()`). `AurumToastDuration.{Short=4s, Long=10s, Indefinite}` drives the auto-dismiss timer; `rememberAurumToastHostState()` is the canonical entry point. `AurumToastHost` wraps `AnimatedVisibility` with a 220 ms slide-up + fade enter and 180 ms slide-down + fade exit, preserving `lastVisible` across the exit animation so the strip keeps rendering while it slides out. Default `toast` slot renders an `AurumToast` with `fillMaxWidth` + 16 dp horizontal padding; callers can override for custom width / placement. Catalog `ToastDemo` extended with a live host section: 6 trigger buttons (one per tone) + a \"Queue 3 in a row\" button proving the FIFO mutex queue.\n- **`AurumGlobalHeader` — persistent top bar for top-level destinations** (`component/navigation/`). Mapped to Figma `Global Header` (`5252:2274`). Sealed `AurumGlobalHeaderRightContent` with two variants: `Default` (optional Support pill + optional Rewards/Notifications pill) and `LivePrice` (live gold-buy-price pill on a dark surface + optional Rewards/Notifications pill). Each pill is 44 dp tall, 22 dp corner radius, 1 dp `interactive/border/neutral/muted` border, with a subtle `aurumRadialBrush` sheen overlay matching Figma's SVG-encoded radial fill. Profile pill accepts either an `ImageVector` glyph (default `AurumIcons.User.User`) or a caller-supplied `profileContent` slot — the slot pattern lets consumers render URL-loaded avatars (Glide / Coil) without dragging an image-loading dep into Aurum. Ships Code Connect mapping (`AurumGlobalHeader.figma.kt`), MCP-readiness KDoc tags (`@AurumIntendedUse` + 3 × `@AurumDo` + 3 × `@AurumDont`), and 6 `@AurumPreview` previews covering all variant combinations. Catalog `NavigationDemo` extended with three live examples.\n- **`AurumTab` + `AurumTabRow` — tab navigation family** (`component/navigation/`). Mapped to Figma `_Tabs` (`5430:3115`) and `GroupRoot` (`5531:795`). `AurumTab` is a scratch composable (Foundation `Box` + `Row` + `selectable`, `role = Role.Tab`) with an optional leading `ImageVector` icon at `Aurum.iconSize.xl` (24 dp) and a label rendered at `Title/XS-Bold` (14/20 sp, Bold 700) with `TextOverflow.Clip`. Selected uses `interactive/text/primary/normal` + `interactive/icon/primary/normal`; unselected uses `interactive/text/neutral/subtle` + `interactive/icon/neutral/subtle`. No disabled variant — Figma's `_Tabs` set has none; callers omit unavailable destinations. `AurumTabRow` uses a `SubcomposeLayout` probe pass to measure each tab's natural width, then auto-fits or scrolls: when `tabCount × max(widestNatural, 100.dp) ≤ viewport` it wraps `material3.PrimaryTabRow` and tabs flex to share the row equally (matching Figma's two/three-tab `flex-[1_0_0]` variants); otherwise it wraps `material3.PrimaryScrollableTabRow` and pins each tab to the computed width via `LocalAurumTabWidth` (matching Figma's four-tab fixed-`100px`+scroll variant and gracefully extending to 5 + tabs). Indicator is `borderWidth/lg` (2 dp) `interactive/border/primary/default`; bottom divider is `borderWidth/sm` (1 dp) `interactive/border/neutral/highlighted`. Both ship Code Connect mappings (`AurumTab.figma.kt`, `AurumTabRow.figma.kt`) and 10 `@AurumPreview` previews including a 640 dp tablet tile and a 5-tab scroll demo. Catalog `TabGallery` added under Navigation with two/three/four/with-icons sections.\n\n### Manifest\n- Manifest jumps from 28 → 33 components: `AurumToast`, `AurumToastHost`, `AurumGlobalHeader`, `AurumTab`, `AurumTabRow` (5 new). `AurumBottomSheet` was already in the manifest — this cycle ships its first Code Connect mapping plus the close-button removal. Code Connect mappings ~158 → 178: 5 new component mappings (`AurumToast`, `AurumGlobalHeader`, `AurumTab`, `AurumTabRow`, `AurumBottomSheet`) plus 18 new icon mappings (9 pairs: `ArrowDownLeft`, `ArrowUpRight`, `ChatBubble`, `Filter`, `Nek`, `Phone`, `Replay`, `Timer`, `WhatsApp` × line + filled). The 7 drift-fix mappings from PR #22 updated existing files, not new ones. Schema version unchanged (`\"2\"`); changes are additive.\n\n## [0.3.0] - 2026-05-04\n\n### Added\n- **`AurumCheckbox` + `AurumCheckboxGroup` — multi-select selection family** (`component/selection/`). `AurumCheckbox` is a tri-state control (`AurumCheckState.Unchecked / Checked / Indeterminate`) mapped to Figma `5169:1314`. Closed enum chosen over `Boolean?` to avoid `null`-as-indeterminate ambiguity. Mirrors `AurumRadioButton`'s API: `selected`, `onCheckStateChange`, `label`, `subtext`, `enabled`, `error`, `labelPosition` (End/Start). The 24 dp box is rendered via `Canvas` — checked state fills with `Aurum.colors.interactive.bgPrimaryDefault` and overlays a stroked checkmark; indeterminate fills the box and overlays a centred horizontal bar; error tints both outline and glyph with `feedback-negative`. `AurumCheckboxGroup<T>` mirrors `AurumRadioGroup<T>` but with `selected: ImmutableSet<T>` and `onSelectionChange: (T, Boolean) -> Unit`; uses `triStateToggleable` per row so `Indeterminate → Checked` advancement is a single tap. Both ship Code Connect mappings (`AurumCheckbox.figma.kt` at `5169:1314`, `AurumCheckboxGroup.figma.kt` at `5169:1796`) plus 8 + 5 `@AurumPreview` previews. Catalog `SelectionDemo` extended with single-checkbox and group examples.\n- **`AurumAmountInput`** — currency-prefixed numeric input mapped to Figma `5080:261` (`component/field/AurumAmountInput.kt`). Delegates to `AurumTextField` for state, validation, helper/error/success text, label plumbing — currency symbol (default `₹`) is rendered in the leading slot using `Aurum.type.headingLarge`; optional `suffixText` (e.g. \"0.0097 g\") sits in the trailing slot. `loading = true` swaps the trailing slot for an inline `AurumLoader(size = Aurum.iconSize.lg)` and forces read-only. **Caller is responsible for formatting both `value` and `suffixText`** (locale + currency conventions are app-level concerns) — flagged in KDoc. Numeric keyboard via `KeyboardOptions(keyboardType = KeyboardType.Number)`. 8 `@AurumPreview` previews + Code Connect.\n- **`AurumNavBar` + `AurumNavBarItem` — bottom navigation family** (`component/navigation/`). Mapped to the layout component_set at Figma `5575:14226`. `AurumNavBar` is a slot-based composable taking an `ImmutableList<AurumNavBarItem>` (label + line/fill icon pair) plus `selectedIndex`, `onSelect`, and a `layout: AurumNavBarLayout`. `AurumNavBarLayout` is a `sealed interface` exposing four data variants — `Standard3`, `Standard4`, `Standard5`, `CenterQr5(onQrClick)` — each carrying an `itemCount` enforced via `require()` at composition time. `CenterQr5` takes 4 items (the QR action is rendered by the layout, not surfaced as an item) and inserts the raised QR FAB between items 1 and 2 using `AurumIcons.Action.QrCode`. The per-cell renderer `AurumNavBarCell` is `private` — exposing it would only invite cells without a parent bar. 6 `@AurumPreview` previews (one per layout + selected-state variants) + Code Connect. Catalog `NavigationDemo` extended with all 4 layouts running interactive `selectedIndex` state.\n- **`AurumTransactionListCard` — opens the Cards family** (`component/card/`, new package). Mapped to Figma `5576:19749`. Status-tinted card (`AurumTransactionStatus.{Success, Error, Pending}`) composing `AurumSurface` + `AurumText` + `AurumIcon`. Outer wash uses `Aurum.colors.feedback.{positive, negative, notice}/subtle`; status badge icons map to the new `AurumIcons.Status.{Success, Warning, Pending}` glyphs landed in v0.2.1; amount and helper-text colours match the wash family. **Caller hands in pre-formatted strings** for `dateText` and `amount` — no locale or currency handling inside (consistent with `AurumAmountInput`). `helperText` and `leadingIcon` are optional. 7 `@AurumPreview` previews + Code Connect. Standalone `CardDemo` composable wired into the catalog showcase as a new \"Cards\" section between Navigation and Chips.\n\n### Changed\n- **`tooling/gallery/generate.py` — registered the `card` family** in `FAMILY_LABELS` so the gallery site renders the new `component/card/` family with a proper \"Cards\" heading rather than falling back to the raw directory name.\n- **`AurumLinkButton` Code Connect mapping** validated against Figma `4784:1286` (\"Component 1\") — the existing `AurumLinkButton.figma.kt` already targets the right node, no changes needed. The Figma component name is misleading (\"Component 1\") but the underlying `variant=link button` axis maps cleanly.\n\n### Manifest\n- Manifest jumps from 24 → 28 components: `AurumAmountInput`, `AurumCheckbox`, `AurumCheckboxGroup`, `AurumNavBar`, `AurumTransactionListCard` (5 new) — `AurumNavBarItem` is a public data class but not a composable, so it doesn't count. Code Connect mappings 150 → ~158. Schema version unchanged (`\"2\"`); changes are additive.\n\n### Known gaps\n- **`Icons/NEK`** (Figma `5566:781`) is referenced by Jar's nav bar item set but not yet imported into `AurumIcons`. Catalog NavBar previews use placeholder icons (`Home`, `Gift`, `Document`, etc.) so compile + render succeed. Action: design to confirm the canonical NEK glyph node, then add an `IconEntry` to `tooling/icons/import_from_figma.py:ICON_MANIFEST` and re-run `make icons-import`.\n- **`Icons/Check`** still resolves to a single-weight glyph (`5308:800`); `Icons/Check` at `5480:5047` remains an empty/orphaned component in Figma (see v0.2.1 ghost-component note in `add-an-icon.md`). No action.\n\n## [0.2.1] - 2026-05-04\n\n### Added\n- **11 new Figma-derived icons** imported via `tooling/icons/import_from_figma.py`. Sourced authoritatively from the Jar Light Design System file (`YvIxqu2oTlM6UnkL0OloHc`) by enumerating every `Icons/*` master component via the Figma REST `/v1/files/{key}/components` endpoint and diffing against `ICON_MANIFEST`. Each ships a 24×24 vector drawable + AurumIcons accessor (line + filled) + per-weight Code Connect mapping. Breakdown: `AurumIcons.Action.{Minus, MoreHorizontal}`, `AurumIcons.Content.Image`, `AurumIcons.Status.{Pending, Warning, Success, Loader}`, `AurumIcons.Commerce.Withdraw`. Single-weight icons (`Success`, `Loader`, `Selection.Check`) reuse the same Figma node id for both weights, producing identical line/fill XMLs while keeping the `<Name>` + `<Name>Filled` API contract intact.\n\n### Changed\n- **`AurumIcons.Action.Add` and `AurumIcons.Action.Overflow` now Figma-derived.** Previously hand-drawn `aurum_ic_action_add.xml` and `aurum_ic_action_overflow.xml` are replaced with imports from Figma's `Icons/Plus` (`5322:1592`/`5322:1593`) and `Icons/DotsThreeVertical` (`5431:2848`/`5431:2850`). Public Kotlin API names unchanged — call sites in `AurumButton`, `AurumIconButton`, `AurumTextField`, and `AurumTopAppBar` need no edits. Their `Filled` accessors (`AddFilled`, `OverflowFilled`) are now also available.\n- **`AurumIcons.Selection.Check` now Figma-derived.** Hand-drawn `aurum_ic_selection_check.xml` replaced with import from Figma's `Icons/Check` (`5308:800`). Used by `AurumSwitch` for the on-state tick. Initial discovery missed this node because the file's components index points at a stale duplicate (`5480:5047`) that's an empty/orphaned component; `5308:800` lives near the Warning glyphs and renders fine. **Aurum now has zero hand-drawn icons** — every icon flows from Figma through `make icons-import`.\n- **`Icons/X` (Close) fill node updated** from `5162:954` → `5311:823`. Design moved the X fill variant; the old node returns null from `/v1/images`. Visual unchanged.\n- **`tooling/icons/import_from_figma.py` cleanup.** Removed the special-case blocks at the end of `generate_aurum_icons_kt` that hand-wired `Action.Add`, `Action.Overflow`, and `Selection.Check` from legacy XMLs — all three are now regular `IconEntry` rows. Added `selection` to `CATEGORY_ORDER` + `CATEGORY_DOCSTRINGS`. Removed `aurum_ic_selection_check.xml` from the obsolete-detection exception set.\n- **`aurum-catalog/.../IconGallery.kt`** extended with the 11 new icons (Action, Content, Status, Commerce sections) plus a new Selection section showing `Check`.\n\n### Tooling\n- **Documented icon ghosts in `aurum/docs/workflows/add-an-icon.md`.** Five `Icons/*` names appear in the file's `/components` index but are deleted/orphaned components in Figma — opening their URLs prompts a \"Restore component\" dialog and `/v1/images` returns null. They are NOT placeholders awaiting drawings: `Icons/InstantSave` (`5343:1795/1796`), `Icons/DailySavings` (`5343:1779/1780`), `Icons/WeeklySavings` (`5343:1781/1782`), `Icons/MonthlySavings` (`5343:1783/1784`), older `Icons/Withdraw` on `5343:*` (superseded by the live pair at `5358:456`/`5358:465` which is imported as `Commerce.Withdraw`). The doc explicitly tells future contributors to skip them rather than chase a \"fix it in Figma\" thread.\n\n### Manifest\n- Manifest jumps from 60 → 68 icons. Code Connect mappings 130 → 150. Components count unchanged (24).\n- Schema version unchanged (`\"2\"`); changes are additive on the existing icon list.\n\n## [0.2.0] - 2026-05-04\n\n### Tooling\n- **MCP manifest schema v2 — enrichment fields for `aurum-mcp` v0.3.** Bumped `tooling/manifest/schema.json` `schemaVersion` enum from `[\"1\"]` to `[\"1\",\"2\"]` and added four optional, additive fields:\n  - `component.intendedUse: string` — when-to-reach-for prose authored in a new `@AurumIntendedUse` KDoc tag.\n  - `component.usage: { do: string[]; dont: string[] }` — guardrails authored in `@AurumDo` / `@AurumDont` KDoc tags (one bullet per tag instance).\n  - `component.relatedTokens: string[]` — qualified Aurum token names (`surface.bgPageBase`, `spacing.s12`, `typography.bodyMedium`) the component references in its source. Static-analyzed by `analyze_token_refs(source)` against `Aurum.{colors,space,type,radius,borderWidth,elevation,iconSize}.<leaf>` accessors.\n  - `icon.tags: string[]` — hand-curated synonyms (`Delete` → `[trash, remove, bin, garbage, discard]`) sourced from a new `aurum/icons/tags.toml` file. Powers the synonym-aware `aurum_search_icons` tool.\n  All four are absent from v1 manifests and ignored gracefully by older readers. The generator emits `schemaVersion: \"2\"` whenever any of them are populated, otherwise stays on `\"1\"`.\n- **`@AurumIntendedUse` / `@AurumDo` / `@AurumDont` KDoc tags authored on all 24 components.** Every component in the manifest now carries intended-use prose + Do/Don't guardrails. Counts: 24 × `intendedUse`, 70 total `do` entries, 70 total `dont` entries. The 6 priority components (Chip, Button, RadioButton, RadioGroup, TopAppBar, OtpInput) landed first; this extends coverage to AurumIconButton, AurumLinkButton, AurumTextField, AurumPhoneNumberInput, AurumSearchField, AurumSwitch, AurumBadge, AurumLoader, AurumSkeleton, AurumSectionHeader, AurumSurface, AurumScreen, AurumSnackbar, AurumStepper, AurumDivider, AurumIcon, AurumText, AurumLabel. Tags are stripped from the rendered KDoc body and re-emitted as structured manifest fields.\n- **Cross-repo dispatch wired up.** Committed `.github/workflows/notify-mcp.yml`, which fires a `repository_dispatch: aurum-content-changed` event at `Changejarapp/aurum-mcp` on every push to `main` and every release. Drops the manifest-sync latency in aurum-mcp from ≤24 h (cron) to ~1 min. Requires the `MCP_DISPATCH_PAT` org secret (a fine-grained PAT scoped to aurum-mcp with Actions: read+write).\n- **README — manifest pipeline section.** Documents how component changes propagate to `aurum-mcp` end-to-end: pages.yml → manifest URL → notify-mcp dispatch → sync-manifest auto-PR → human merge + release dispatch. Includes the `@AurumIntendedUse` / `@AurumDo` / `@AurumDont` authoring convention and the `aurum/icons/tags.toml` synonym format with quality-bar guidance.\n- **`aurum/icons/tags.toml` — curated synonyms for all 60 icons across 9 categories** (Action / Commerce / Content / Media / Navigation / Selection / Status / System / User). 222 tags total. Format is TOML keyed by category → icon name → tag list.\n- **Pages workflow now publishes the manifest.** `.github/workflows/pages.yml` invokes `generate.py --emit-manifest build/gallery/data/manifest.json --also-build-gallery --validate` on every deploy, exposing `https://changejarapp.github.io/aurum-android/data/manifest.json` (previously 404). Closes the cross-repo sync gap that left `aurum-mcp`'s drift-check soft-failing on every PR.\n- **MCP manifest pipeline.** Added `tooling/manifest/schema.json` defining a JSON Schema for an LLM-consumable Aurum manifest, and extended `tooling/gallery/generate.py` with `--emit-manifest <path>` and `--validate` flags. The same parsers that drive the static gallery now also emit a structured JSON describing every component (KDoc + signature + params + Figma deeplink + Code Connect path + gallery URL), every token (semantic colour / visual palette / spacing / radius / border-width / icon-size / elevation / typography), every icon (with paired line/fill Figma node IDs), every Code Connect mapping, and the full Keep-a-Changelog history. Single source of truth, two render targets — HTML for humans, JSON for agents. Consumed by the new `atri-jar/aurum-mcp` (and later `Changejarapp/aurum-mcp`) MCP server. Manifest carries a `platforms[]` field on each component for forward-compatible cross-platform support (`aurum-ios` plugs in as a sibling manifest source without restructuring).\n\n## [0.1.5] - 2026-04-28\n\n### Fixed\n- **All 114 icons re-rendered to match Figma.** The previous import pipeline used Figma MCP asset URLs that returned only the inner SVG path with `viewBox` set to the path's tight bounding box (e.g. `7.5 × 13.5` for ChevronRight). Combined with `width/height = 24dp`, this caused non-uniform stretch and stripped the surrounding 24×24 frame padding — the chevron rendered fat and squashed, every other non-square icon was distorted, and even square-bbox icons lost their intended 2-3 dp inset.\n- **Stroke-only icons no longer get a fill.** Phosphor regular-weight SVGs carry `fill=\"none\"` at the `<svg>` root, cascading to children. The previous import didn't honour the cascade and emitted both `fillColor` and `strokeColor` — so e.g. `Home` rendered as a solid black house instead of the intended outline.\n\n### Changed\n- **Icon import pipeline rewritten** to fetch via the Figma REST API (`/v1/images?…&format=svg`) using `$FIGMA_ACCESS_TOKEN`. REST exports include the 24×24 frame and proper SVG-level fill cascade, so the conversion is a clean 1:1 to Vector Drawable. The per-icon `COMPOUND_TRANSLATES` workaround (previously hand-coded for SpeakerSimpleX) is no longer needed and was removed. The stale `figma-icon-urls.json` URL manifest was deleted.\n\n### Added\n- **`/icons.html` page** on the gallery website — every icon's line + fill weights side by side, grouped by category, with live search and click-to-copy on `AurumIcons.<Category>.<Symbol>`. Reads `AurumIcons.kt` and inlines each Vector Drawable as `currentColor` SVG so icons follow the page theme. No longer need to install the catalog APK to scan the icon set.\n\n## [0.1.4] - 2026-04-28\n\n### Changed\n- **`AurumChip`** realigned with the Figma \"Action\" chip component (`YvIxqu2oTlM6UnkL0OloHc`, node `4446-701`). Adds `size` (`AurumChipSize.Large` / `Small`) and `leadingIcon` parameters; height tightened to 38 dp Large / 30 dp Small (from 40 dp); padding now asymmetric (12 dp text-side, 8 dp icon-side); inter-element gap reduced 8 → 4 dp; text style varies by size (`titleT2` / `bodySmall`). Existing call sites are unaffected — new parameters default to the prior behaviour. Previews regrouped into Large-trailing / Large-leading / Large-both / Large-text-only / Small / Disabled.\n- **Code Connect** for `AurumChip` picks up the new `Size` axis (`large` ↔ `Large`, `small` ↔ `Small`).\n\n## [0.1.3] - 2026-04-27\n\n### Added\n- **Compose perf guardrails.** Detekt + [`mrmans0n/compose-rules`](https://github.com/mrmans0n/compose-rules) wired in, with the perf/stability rules active (`UnstableCollections`, `MutableStateAutoboxing`, `MutableParams`, `MutableStateParam`, `LambdaParameterInRestartableEffect`, `Material2`). Compose Compiler Metrics enabled on `:aurum` and `:aurum-catalog` (`build/compose_compiler/`).\n- **Compose stability CI gate.** New `verifyComposeStability` Gradle task in `:aurum` fails the build when `aurum_release-classes.txt` reports more inferred-unstable classes than `composeStabilityThreshold` (currently `0`). Wired into `check.yml` after detekt.\n- **Compose metrics dashboard** deployed alongside the gallery at [changejarapp.github.io/aurum-android/metrics/](https://changejarapp.github.io/aurum-android/metrics/), rendered from `build/compose_compiler/` via [`PatilShreyas/compose-report-to-html`](https://github.com/PatilShreyas/compose-report-to-html). Per-PR `compose-metrics` artifact uploaded by `check.yml`.\n- **Aurum icon set** — 57 icons × 2 weights = 114 vector drawables imported from the Figma \"Component Icons\" frame, exposed under `AurumIcons.<Category>.<Name>` (and `<Name>Filled` for the fill variant). 8 categories: `Navigation`, `Action`, `Content`, `Media`, `Commerce`, `System`, `Status`, `User`. Ingested by the new `tooling/icons/import_from_figma.py` script (`make icons-import`); idempotent re-runs.\n- **`IconGallery`** screen in the catalog showing every icon × weight, grouped by category.\n- **114 Code Connect mappings** for the new icons under `aurum/src/main/kotlin/com/jar/app/aurum/component/icon/figma_connect/AurumIcon*.figma.kt`. Auto-published to Figma via the `figma-code-connect.yml` workflow.\n\n### Changed\n- **6 overlapping icons replaced** from the Figma source-of-truth: `Navigation.Back`→`ArrowLeft`, `Navigation.ChevronForward`→`ChevronRight`, `Media.Like`→`Content.Heart` (renames; 12 call-site migrations across `AurumTopAppBar`, `AurumChip`, `AurumSectionHeader`, `AurumLinkButton`, and the catalog gallery). `Navigation.Close`, `Action.Edit`, `Action.Search` kept their names — only their underlying XML content was replaced.\n- **5 components marked codebase-only**: `AurumSearchField`, `AurumIconButton`, `AurumDivider`, `AurumLoader`, `AurumSkeleton` — verified absent from the Figma library via MCP search. File-level marker added so future Code-Connect audits don't keep flagging them.\n- **`AurumIcons.kt` regenerated** from the import script. The 3 legacy entries that lack a Figma counterpart (`Action.Add`, `Action.Overflow`, `Selection.Check`) remain hand-authored under `res/drawable/` and are flagged in-file pending design escalation.\n- **`record.yml` now also dispatches `pages.yml`** after committing fresh baselines on `main`, so the gallery's snapshot embeds redeploy without a manual trigger.\n\n### Fixed\n- **`AurumOtpInput`**: keyed `LaunchedEffect` on the completion-boundary transition (`value.length == maxLength`) instead of `value` itself, so the coroutine no longer relaunches on every keystroke.\n- **`AurumSkeleton`**: moved the `shimmerProgress` state read out of the `drawWithCache` cache block and into `onDrawBehind`, so the cache is no longer invalidated on every animation frame. The gradient `colors` list is now `remember`-ed.\n- **`AurumText`**: `inlineContent` parameter typed as `ImmutableMap<…>` instead of `Map<…>`, restoring skippability (caught by the new compose-rules `UnstableCollections` rule).\n- **CI Java mismatch**: `compose-report-to-html` v1.5.0 JAR is built against Java 21; `check.yml` and `pages.yml` now install JDK 21 alongside JDK 17 and invoke the JAR via `$JAVA_HOME_21_X64/bin/java`.\n\n### Tooling\n- New Makefile targets: `make lint-compose`, `make compose-metrics`, `make compose-metrics-html`, `make icons-import`, `make icons-brand` (rename of the prior `make icons` for clarity vs the new icon-set sync).\n- New tooling scripts: `tooling/icons/import_from_figma.py` (Figma SVG → Vector Drawable + AurumIcons.kt + Code Connect codegen) and `tooling/gallery/render_metrics_index.py` (gallery `/metrics/` landing page).\n\n## [0.1.2] - 2026-04-23\n\n### Added\n- **Screenshot testing** via Roborazzi + ComposablePreviewScanner. 334 baseline\n  PNGs committed under `aurum/src/test/snapshots/` (Git LFS-tracked) covering\n  every `@Preview` and every tile of the `@AurumPreview` 6-device fan-out.\n  Any visual regression fails CI before merge. Tasks: `recordRoborazziDebug`\n  (refresh baselines), `verifyRoborazziDebug` (CI check), `compareRoborazziDebug`\n  (diff without failing).\n- **`.github/workflows/check.yml`** — PR + main-push workflow running library +\n  catalog build, lint, and snapshot verification. Diff PNGs uploaded as a\n  workflow artifact on any screenshot drift so design reviewers can eyeball\n  the exact delta.\n- **Git LFS** (`.gitattributes`) tracking `aurum/src/test/snapshots/**/*.png`\n  — keeps pack files small, surfaces binary diffs in PR UIs.\n\n## [0.1.1] - 2026-04-23\n\n### Changed\n- **Maven coordinate realigned** with Jar's library convention.\n  - Before: `com.jarapp:aurum:<ver>`\n  - After:  `com.jar.internal.library.aurum-android:core:<ver>`\n  - Kotlin import package inside the AAR stays `com.jar.app.aurum.*` — no source rename.\n  - This lets consumers resolve Aurum via the existing `Changejarapp/*` wildcard\n    Maven repo in `jar-android/settings.gradle.kts`, identical to how\n    `com.jar.internal.library.core-network:shared` and siblings are resolved.\n  - The previous `com.jarapp:aurum:0.1.0` artifact is stale and should not be\n    consumed — it's kept in GitHub Packages only to avoid the \"published once,\n    cannot re-publish the same coord\" rule.\n\n### Removed\n- `AurumElevation.toast` + `ElevationTintColors.toast` + `AurumLightElevation.toast` entry + `AurumLightColors.elevationTint.toast` value — Figma ships only a tint for `elevation/_toast` (no dedicated dims) and the fallback shape matched `lowRaised`, so the Kotlin surface added API surface without semantic value. Snackbars/toasts now use `Aurum.elevation.lowRaised` directly. The plugin mapping (`figma-plugin-aurum-sync`) marks `_toast` as an explicitly skipped elevation token and bumps to `0.1.1`.\n\n### Added\n- `AurumColors.visual` — new decorative palette subgroup exposing 77 chromatic tokens (blue/green/orange/pink/purple/red/yellow × shades 50…1000). Mirrors Figma's `visual_colors` collection 1:1 and sources values from `AurumPalette` primitives. Feature code uses `Aurum.colors.visual.<family><shade>` for palette-keyed decorative colours that have no semantic meaning. Raw `AurumPalette` stays `internal`.\n- `AurumPhoneNumberInput` — phone-number variant of `AurumTextField` with country-code prefix slot, optional flag composable, digit-only input filter, `KeyboardType.Phone`, and a default 10-digit max length. Mirrors the Figma \"Phone Number Input\" component set.\n- `AurumTextField.figma.kt` — Code Connect stub against Figma `4623:373` mapping `state`, `validationState`, `multi_line`, `label`, `showHelpText` to `AurumTextField` API props.\n- `AurumPhoneNumberInput.figma.kt` — Code Connect stub against Figma `4904:2455` mapping `state`, `validationState`, `hasValue`, `label`, `showHelpText`.\n- `AurumOtpValidationState.Timer` — fourth validation state for resend-countdown UX. Renders identically to `None` but provides a semantic channel matching the Figma `validationState=timer` variant.\n- `Modifier.aurumHardShadow(color, offsetY, shape)` — solid-colour offset drop shadow for skeuomorphic \"stacked card\" effects (matches Figma's `shadow(0, Ypx, 0, 0, color)` spec). Encapsulates the double-box idiom into a single modifier that expands layout by `offsetY` and paints the shape outline behind content.\n\n### Fixed\n- `AurumOtpInput` disabled digits now use `surface.textDefaultDisabled` (matching Figma `text/default/disabled`) instead of `textDefaultNormal` at 10% alpha.\n- `AurumTopAppBar` synced to Figma `4826:1057` Page Header: title uses SemiBold (was Medium); subtitle uses `labelL2` Medium 12/16 in `textDefaultNormal` (was `bodyB3` Normal in `textDefaultSubtle`); primary button uses SemiBold label and natural 36 dp height from 8 dp padding (was fixed 32 dp, Medium); back + action icons tint via `interactive.iconNeutralNormal` (was `surface.textDefaultNormal` — same hex, correct token). Docstring fix: icon wrapper is 32 × 40 dp (w × h), not 40 × 32.\n- `AurumBadge` synced to Figma `4240:10843`: both emphases now render at `Label/L-Medium` (12/16 Inter Medium) — previously had a 18 sp line-height and Intense emphasis rendered Normal weight. Emphasis-specific text styles collapsed to a single shared style.\n- `AurumSectionHeader` synced to Figma `3702:162168`: title, link label, and text-action label render SemiBold (`Title/S-SemiBold` / `Title/XS-SemiBold`); icon-action tint uses `interactive.iconNeutralNormal` (was `surface.iconDefaultNormal` — same hex, correct semantic).\n- `AurumSwitch` synced to Figma `4018:557`: thumb now uses `interactive.bgNeutralInverse` (was `surface.bgPageBase` — same hex, correct semantic); checked icon uses `interactive.iconPrimaryNormal` (was `bgPrimaryDefault`); disabled-checked icon uses `interactive.iconNeutralDisabled` (was `bgNeutralDisabled` — **real hex drift** fixed).\n- `AurumStepper` synced to Figma `3834:139631`: numeric value and ± symbols render Bold (`Num/XS`); Neutral and Brand state colours moved to the `interactive.*` token family; disabled-state bg/border/icon hexes corrected (`#6C849D17` / `#C3C7D1` were previously rendering as `#ECEEF3` / `#848A99`).\n- `AurumLabel` synced to Figma `3774:137816`: all variants render Medium weight (was SemiBold); `Strong` variant now uses `labelL2` size (was `labelL1`) and `feedback.textPrimaryIntense` colour (was `surface.textDefaultNormal`).\n- `AurumButton` synced to Figma `4692:1074`: primary-disabled text token changed to `textPrimaryDisabled` (was `textOnPrimaryDisabled`); secondary variant border uses `borderPrimaryDefault` when enabled and `borderNeutralMuted` when disabled (was `borderNeutralDefault` / `borderNeutralDisabled`).\n\n## [0.2.0] - 2026-04-16\n\n### Added\n- **Figma Code Connect** infrastructure: Gradle plugin, CLI, `*.figma.kt` pattern\n- `AurumIcons` namespace with 8 XML Vector Drawables from Figma exports\n- `AurumLinkButton` — new component from Figma Button page\n- `AurumBadge` — 6 colors × 2 emphases × 2 sizes from Figma\n- `AurumOtpInput` — digit-by-digit OTP from Figma spec\n- `AurumStepper` — numeric +/− from Figma spec\n- `AurumLabel` — styled text label from Figma spec\n- `AurumSectionHeader` — section divider from Figma spec\n- `AurumSwitch` — toggle from Figma spec\n- `version.properties` for semver tracking\n\n### Changed\n- **AurumButton** rebuilt from Figma spec: 3 variants (removed Ghost/Destructive), corrected heights (40/48/56dp), added `isFullWidth` + `isLoading`, 12dp corner radius\n- **AurumTypography** restructured to match Figma type scale: 14 scale composites (Display/Heading/Body/Caption) + 6 component-level styles\n- **AurumTextField** audited: added success state, readonly treatment, character counter, fixed error token layer\n- All Material Icons replaced with `AurumIcons.*` (XML Vector Drawables loaded via `ImageVector.vectorResource()`)\n- Button size enum renamed `Sm/Md/Lg` → `Small/Medium/Large`\n- Button style enum renamed `AurumButtonStyle` → `AurumButtonVariant`\n\n### Fixed\n- Secondary button was filled grey — now transparent bg + outline border per Figma\n- Typography composites were engineering assumptions — now 14 match actual Figma scale\n- Hand-drawn `ImageVector.Builder` paths replaced with proper XML drawables\n\n## [0.1.0] - 2026-04-16\n\n### Added\n- Initial Aurum module scaffold (`:core-designsystem` + `:core-designsystem-catalog`)\n- 196 semantic colour tokens from Figma export (6 sub-structs)\n- Spacing, radius, border-width, icon-size, elevation, motion, opacity tokens\n- `AurumTheme` composable with `MaterialBridge` (hybrid M3 architecture)\n- Foundation primitives: `AurumText`, `AurumIcon`, `AurumSurface`, `AurumDivider`\n- Interactive primitives: `AurumButton`, `AurumIconButton`, `AurumTextField`, `AurumSearchField`\n- Navigation: `AurumTopAppBar` (10 Figma variants)\n- Feedback: `AurumLoader`, `AurumSkeleton`\n- Preview infrastructure: `@AurumPreview`, `AurumPreviewSurface`\n- `Modifier.aurumShadow()` for elevation rendering\n- CLAUDE.md module guide + 30 documentation files\n- Catalog app with 6 foundation gallery screens\n",
    "entries": [
      {
        "version": "0.3.29",
        "date": "2026-07-30",
        "sections": {
          "Added": [
            "**`AurumIcons.Navigation.CaretBold{Up,Down,Left,Right}` (+ `Filled`).** Their masters have been sitting in the canonical icon sheet (`5130:35416`) without code counterparts, so the sheet↔catalog contract was one-sided. Single-weight in Figma, so both weights resolve to the same drawable — the same convention the existing Caret family uses. The heavier caret is what `CaretCircleRight` is built from, which is where consumers keep needing it.",
            "**Catalog gallery now lists the whole Caret family.** `CaretUp/Down/Left/Right` shipped in code but were never added to `IconGallery`, so they were invisible in the catalog; listed now alongside the new bold set."
          ],
          "Fixed": [
            "**`AurumSectionHeaderAction.Link` now renders neutral-subtle, matching its Figma master (`5442:462`).** The link action was styled identically to the `text` action — `Title/XS-SemiBold` in `interactive.textPrimaryNormal` (brand purple) with a 20dp `iconPrimaryNormal` chevron — so \"View All / See More\" links shouted as loudly as the section title and were indistinguishable from a brand text-button. The sheet's `action link` layer specifies `Body/S-Medium` in `interactive.textNeutralSubtle` with a 12dp `interactive.iconNeutralSubtle` chevron; the component now follows it. `TextAction` is unchanged and remains the brand-emphasis option. **Consumer impact:** every existing `Link` action becomes grey and one step smaller — intended, but visible. aurum-ios mirrors this in 0.2.3."
          ]
        }
      },
      {
        "version": "0.3.28",
        "date": "2026-07-21",
        "sections": {
          "Changed": [
            "**`AurumPhoneNumberInput` displays the number grouped `XXXXX XXXXX`.** A display-only `VisualTransformation` inserts a single space after the fifth digit (matching the Figma), while the stored value stays raw digits — public API unchanged (`value: String` is still the un-spaced number). Also widened the gap between the country-code divider and the number to 16dp (Figma `4904:2076`)."
          ]
        }
      },
      {
        "version": "0.3.27",
        "date": "2026-07-21",
        "sections": {
          "Fixed": [
            "**`AurumPhoneNumberInput` type, colour, and leading-slot order now match the Figma master (`4904:2439`).** The entered number + placeholder render at `Title/M-Bold` (20sp) instead of the inherited `bodyLMedium` (16sp); the `+91` country code is `Title/S-Bold` in `textDefaultSubtle` (was `bodyLRegular` in `textDefaultNormal`); and the leading slot is ordered **flag → `+91` → divider** (was flag → divider → `+91`), so the divider trails the country code and separates the prefix from the number. Consumers should render the India flag at 36×24.",
            "**`AurumTextField` placeholder now matches the field's text size and renders in the correct disabled grey.** The placeholder hard-coded `bodyLMedium`, and because `AurumText` falls back to `textDefaultNormal` when given no explicit colour, it painted the placeholder near-black regardless of the M3 placeholder-colour config. It now inherits the field's `textStyle` (so e.g. the phone field's 20sp placeholder matches its value — no size jump on first keystroke) and is explicitly coloured `textDefaultDisabled`. Affects every field that shows a placeholder."
          ]
        }
      },
      {
        "version": "0.3.26",
        "date": "2026-07-20",
        "sections": {
          "Removed": [
            "**`AurumIcons.Navigation.CaretCircleUp/Down/Left/Right` (+ `Filled`) — removed to restore the 1:1 sheet↔catalog contract.** Their master components were deleted from the Figma \"Component Icons\" sheet (verified via the components API and the sheet subtree — no replacement nodes exist), and the current homefeed designs use Chevron icons exclusively (458 chevron instances, zero carets in the FINAL frames). Ghost entries also crashed `make icons-import` (null REST response for deleted nodes) and failed every Code Connect publish with \"node not found\". Removes the manifest entries, 8 drawables, 8 catalog vals, and 8 `.figma.kt` mappings. **Consumer migration:** jar-android's `CaretCirclePill` (the only production usage) moves to a disc + `AurumIcons.Navigation.ChevronRight` composition in the companion jar-android PR. aurum-ios removes the same icons in the same sitting."
          ]
        }
      },
      {
        "version": "0.3.25",
        "date": "2026-07-20",
        "sections": {
          "Fixed": [
            "**`AurumTextField` homes the caret at the end of a programmatically-set value.** The field used the `String`-based `BasicTextField`, which seeds the text selection at position 0, so any externally-provided value — a pre-filled phone number on the login screen, an autofill / number-hint suggestion — placed the caret *before* the first character, forcing users to move it to the end before editing. Rebuilt on a `TextFieldValue`-backed buffer that seeds and re-homes the caret to the end whenever the incoming value changes from outside; live typing keeps its own caret. `AurumPhoneNumberInput`, `AurumAmountInput`, and `AurumSearchField` inherit the fix; public API is unchanged (`value: String` / `onValueChange: (String) -> Unit`)."
          ]
        }
      },
      {
        "version": "0.3.24",
        "date": "2026-07-16",
        "sections": {
          "Changed": [
            "**Renamed the Silver palette `visual.indigo*` → `visual.silver*`** (and the backing primitive `Indigo*` → `Silver*`), matching the design-system rename in Figma (`_primitives` + `visual_colors` both use `silver` now). Values are unchanged — a pure rename. `visual.indigo*` shipped only in 0.3.23 with a single internal consumer, so this corrects the name before it spread. Use `Aurum.colors.visual.silver50..1000`."
          ]
        }
      },
      {
        "version": "0.3.23",
        "date": "2026-07-16",
        "sections": {
          "Added": [
            "**`Aurum.colors.visual.indigo50..1000` — the Silver brand palette.** A new chromatic family, the cool blue-grey Silver analogue to how `visual.yellow*` is Gold (from the Figma \"Silver Indigo\" palette section). Silver surfaces (the Silver locker/tab, silver savings cards) previously had no brand palette and mis-borrowed Blue/Neutral/Purple. Backed by new `AurumPalette.Indigo50..1000` primitives + `IndigoA50..A200` alpha tiers, and by real `colors/indigo/*` variables added to the Figma `_primitives` + `visual_colors` collections so the token source stays faithful. Purely additive — no existing token changed."
          ]
        }
      },
      {
        "version": "0.3.22",
        "date": "2026-07-15",
        "sections": {
          "Fixed": [
            "**`AurumGlobalHeader` renders a URL avatar full-bleed in the profile pill.** `profileContent` was placed at its intrinsic size, centered in the 44 dp pill, so a URL-loaded photo showed as a small inset with a wide ring of background around it. The slot now fills the pill's inner circle (inside the 1 dp border, clipped circular), so a full-bleed image reads as the avatar. The default `profileIcon` glyph path is unchanged (still a 20 dp icon). Callers pass a `fillMaxSize` image with `ContentScale.Crop` — no manual sizing or clipping."
          ]
        }
      },
      {
        "version": "0.3.21",
        "date": "2026-07-08",
        "sections": {
          "Changed": [
            "**`AurumTextField` matches the Figma anatomy — no Material floating label.** The label was passed into M3 `OutlinedTextField`'s label slot, so it rested inside the box and floated up into a notch cut in the top border on focus, and the placeholder stayed hidden until focused. Per the component sheet the label is a *static* `Title/S-SemiBold` caption above the field (greyed when disabled) and the placeholder shows whenever the value is empty. Rebuilt on `BasicTextField` + `OutlinedTextFieldDefaults.DecorationBox`: continuous 1.5 dp border (`borderWidth.md`; `lg` on focused error/success), default/disabled border `interactive.borderNeutralHighlighted` (was one shade too faint), container `bgSurfaceLowContrast` (bound white, was transparent), readonly `bgSurfaceMidContrast` fill + `borderSurfaceMidContrast` border, value/placeholder `bodyLMedium`, support text `bodySMedium`. `AurumPhoneNumberInput`, `AurumAmountInput`, and `AurumSearchField` inherit the fix; public API unchanged."
          ],
          "Added": [
            "**`AurumTextField(isLoading = …)`** — trailing loading spinner per the Figma `loading` state; error / success states now auto-surface their trailing status icon when the caller supplies no `trailing`. `AurumPhoneNumberInput` delegates to the shared affordance."
          ]
        }
      },
      {
        "version": "0.3.20",
        "date": "2026-07-08",
        "sections": {
          "Added": [
            "**`AurumBanner(windowInsets = …)`** — M3 app-bar convention: insets are padded *inside* the tone background, so a top-anchored band paints its colour under the status bar while content stays clear. Pass `WindowInsets.statusBars` for window-edge banners; defaults to none."
          ],
          "Changed": [
            "**`AurumBannerHost` pushes instead of overlaying.** Enter/exit now animates `expandVertically`/`shrinkVertically` (plus the existing slide + fade), so a host placed in the layout flow (first child of the root Column / a top slot the chrome is constrained below) smoothly pushes the content beneath it down and releases it — the structural-band behaviour used by the app-wide connectivity strip. Overlay placements keep working.",
            "**`AurumChip` state colours match the Figma component set (4446-701) exactly.** `Selected` fills the 9% brand wash (`borderPrimaryMuted` — the spec's bound fill) instead of white, with `borderPrimaryDefault` border; the Neutral default border is now type-aware (`Other` → hairline `borderNeutralMuted`, `Action` → `borderNeutralHighlighted`); Neutral pressed fills `borderNeutralDefault` (Neutral50) per the spec binding."
          ],
          "Fixed": [
            "**`AurumChip` disabled chips no longer double-dim** — the extra 0.40 alpha layer is gone; the disabled tokens (`bgNeutralDisabled` / `textNeutralDisabled` / `borderNeutralMuted`) already encode the muted look and the Figma disabled variants are opacity 1."
          ]
        }
      },
      {
        "version": "0.3.19",
        "date": "2026-07-06",
        "sections": {
          "Added": [
            "**`Modifier.aurumInnerShadow(color, blur, offsetX, offsetY, shape)`** — Figma `INNER_SHADOW` for Compose, which has no inner-shadow primitive. Clips to `shape` and draws the shape's *inverse* ring behind a `setShadowLayer` paint, so only the shadow bleeding inward is visible — the same construction Figma uses. Positive `offsetY` casts from the top edge, negative from the bottom. First consumer: the DS-swipe gold hero panel (`yellow800` @ 24%, blur 16, offsetY −4), Figma `10103:18130`."
          ]
        }
      },
      {
        "version": "0.3.18",
        "date": "2026-07-06",
        "sections": {
          "Added": [
            "**`aurumShadow(alphaMask: Brush?)`** — Figma derives a drop shadow from the node's *rendered* alpha, so a surface whose fill fades to transparent needs its shadow to fade with it. Pass the fill brush and the shadow is masked through it (`saveLayer` + `BlendMode.DstIn`); `null` keeps the plain outline shadow. Built for fade-out cards (e.g. the transactions empty-state CTA card, Figma `8498:34146`)."
          ],
          "Changed": [
            "**`AurumButton` primary press is dimensional, not tonal.** Pressed no longer swaps the radial fill for `bgPrimaryHighlighted` + 4 dp muted ring — the fill and top-lit rim stay constant, and on full-width primaries the cue is the purple/800 hard shadow dropping while the button sinks 2 dp onto it (ripple suppressed there; inline primaries keep the ripple as their only cue). Product call (2026-07-06): press feedback should read as 3D depth, never a colour shift — deviates from the Figma pressed variant, pending a design rebind."
          ],
          "Fixed": [
            "**`aurumShadow` no longer paints under the node itself** (Figma drop shadows are `showShadowBehindNode=false`): the blurred silhouette used to bleed a tint wash through translucent/gradient fills. The node's own area is now clipped out of the shadow draw; opaque surfaces render identically."
          ]
        }
      },
      {
        "version": "0.3.17",
        "date": "2026-07-06",
        "sections": {
          "Changed": [
            "**`AurumButton` rebuilt as a custom composable — no Material 3.** The old `material3.Button` wrapper drew its border inside the `Surface`'s own shape-clip, shaving the top-lit rim's outer edge and leaving a visible seam (\"doubled\" upper edge) on the radial primary. Replaced with a `Row` + `clickable(ripple)` + Aurum-painted surface and a 48 dp touch target; public API is unchanged (zero call-site changes). Every state now matches the Figma component exactly — primary: default (radial purple600→400 + white 60→0% rim), pressed (purple800 fill + `borderPrimaryMuted` 4 dp ring), disabled (neutral 9% + `textPrimaryDisabled`), loading (solid purple500 + white 20→0% rim + spinner), progress (purple100 track + purple500 fill); secondary outline/pressed/disabled; tertiary grey/pressed-ring/disabled. This also unblocks bespoke press interactions (e.g. a 3D press) that M3 constrained."
          ],
          "Fixed": [
            "**`AurumLinkButton`** — pressed state now shifts the label to `textPrimarySubtle` (purple300) with no background, per the Figma link-button spec (was a static colour with a ripple)."
          ]
        }
      },
      {
        "version": "0.3.16",
        "date": "2026-07-03",
        "sections": {
          "Fixed": [
            "**`AurumChip`** — Black variant filled `bgStaticWhite*` (white-on-white text); now `bgStaticBlack*`. Every variant gains its spec 1 dp stroke (neutral `borderNeutralHighlighted`; pressed/black/disabled `borderNeutralMuted`; brand `borderPrimaryMuted`). Small-chip icons 14 dp.",
            "**`AurumBadge`** — intense-emphasis content colour `text*Subtle` (tints) → `text*Inverse` (white on solid tone) across all six roles.",
            "**`AurumToast`** — drop shadow added on every variant via `aurumShadow` (nearest tint `highRaised` @18% vs spec #000 @16% — no exact token, flagged); brand stroke follows the spec binding `bgPrimarySubtle`; label→close gap 4 dp."
          ]
        }
      },
      {
        "version": "0.3.15",
        "date": "2026-07-03",
        "sections": {
          "Added": [
            "**Token resync to live Figma** — `feedback/*/subtle` rebound from white to real tints (green/red/orange 400, blue/purple 300, neutral 500; `text/neutral/intense` 600→900), `interactive/background/*/faded` 100→50 shades, `interactive/border/{information,primary}/disabled` → 9% alpha neutral. Typography atoms `3xl=40` / `4xl=48` / `lineHeight 3xl=48` / `ExtraBold=800` and the new **`Aurum.type.num3XL`** (Inter Bold 40/48). Export JSONs mirrored to live. The borderRadius re-index (xl 16→12) is deliberately HELD pending design confirmation.",
            "**`AurumIcons.Media.PlayCircle`** (89th glyph) + knockout-aware icon importer: `<rect>/<circle>/<ellipse>` converted to path data and dark-base + white-overlay glyphs merged into single tintable even-odd paths (CaretCircle* restyle).",
            "**Component spec fingerprints** — `make component-audit` diffs every component's live Figma master against committed baselines (`design-tokens/component-specs/`); weekly `component-drift.yml` CI files an issue on drift; `RECONCILIATION.md` tracks code↔spec status (full 2026-07-03 sweep recorded)."
          ],
          "Fixed": [
            "**`AurumButton` primary matches the restyled Figma master** — elliptical radial fill purple600→400 (bottom-centre anchor), 1 dp top-lit white 60→0% rim, and a purple/800 hard shadow (y=2) **only when `isFullWidth`** (inline primaries are flat, per the Figma variants). Pressed is a real state: flat highlighted fill + 4 dp `borderPrimaryMuted` ring; tertiary's ring is now pressed-only.",
            "**`AurumIconCaretCircleRight` Code Connect** re-pointed to the re-created master `7085:15336` — un-breaks the Code Connect publish that failed on every release tag."
          ]
        }
      },
      {
        "version": "0.3.14",
        "date": "2026-07-02",
        "sections": {
          "Added": [
            "**`AurumSmoothCornerShape` + `Aurum.shape.smooth(radius, smoothing)`** — continuous-curvature (\"squircle\") rounded rectangle, the Compose analogue of Figma's `cornerSmoothing`. Backed by AndroidX `graphics-shapes` (`RoundedPolygon.rectangle` + `CornerRounding`): each corner renders as three cubic curves (circular centre + edge-blending flanks). `smoothing` maps Figma's 0..1 slider, default 0.6 (Figma's \"iOS\" preset); `0` degrades to the `Outline.Rounded` fast path. Path cached per size, so scroll-feed safe. New dependency: `androidx.graphics:graphics-shapes:1.0.1`.",
            "**Figma plugin 0.7.0 — `cornerSmoothing` decode.** `analyzeShape` now reads the node's `cornerSmoothing`: uniform-radius nodes with smoothing > 0.05 emit `Aurum.shape.smooth(N.dp)` (with an explicit `smoothing = …f` argument when it deviates from the 0.6 preset); per-corner-radius nodes with smoothing surface a visible `// note:` drift marker instead of silently dropping it."
          ],
          "Fixed": [
            "**`AurumNavBar` CenterQr dome** — three drifts from Figma `5575:14061`: the dome's radial was a circular `(0.5, −1) × 2` approximation (now the plugin-decoded elliptical recipe: centre `(0.5, 0)`, radii `2.96 × 0.91`, rotated `−26°`); the QR glyph rendered ~22 dp of drawn content in a 27 dp box (icon paths cover 19.5/24 of the viewport — the box is now 33 dp so the glyph measures the design's 27 dp); and the selected-icon gradient reached full `pink/50` at the glyph bottom while the design's gradient handles extend 1.64× past it (the ramp now ends at the 61% `purple/500 → pink/50` blend, shared by selected tabs and the QR glyph)."
          ]
        }
      },
      {
        "version": "0.3.13",
        "date": "2026-07-01",
        "sections": {
          "Added": [
            "**`aurumRadialBrush` — elliptical / transform-aware overload** `aurumRadialBrush(vararg stops, centerFraction, radiusFractionX, radiusFractionY, rotationDegrees)`. The circular overload uses a single `radiusFraction = fraction · max(w, h)`, which collapses a Figma `GRADIENT_RADIAL` with unequal/rotated axes to a circle — so on a wide-short surface (e.g. a 308×58 card) the glow washes out **flat**. The new overload gives the horizontal and vertical extents independent radii (+ rotation) by stretching the shader via a `localMatrix`, so the glow fades across the height as designed. The circular overload is unchanged."
          ],
          "Fixed": [
            "**Figma plugin `radialGradientParams`** took the gradient centre as `T⁻¹(0, 0.5)` — an axis *endpoint* (e.g. `(0.5, −1)`, a full card-height above the surface) — instead of the true centre `T⁻¹(0.5, 0.5)`, and collapsed the ellipse to one radius. It now emits the true centre plus `radiusFractionX/Y` + `rotationDegrees` (principal axes via the 2×2 SVD of the conjugate half-axes), so the plugin's Compose recipe reproduces elliptical Figma radials faithfully instead of a flat circle."
          ]
        }
      },
      {
        "version": "0.3.12",
        "date": "2026-07-01",
        "sections": {
          "Fixed": [
            "**`AurumOtpInput`** — fixes two regressions from the 0.3.11 masking approach. (1) The system's **selection/cursor teardrop handle** leaked over the cells: `cursorBrush = Transparent` hides only the cursor *line*, while the handle is drawn from `LocalTextSelectionColors.handleColor` (Aurum purple) — so a purple teardrop rendered on cell 1 after a re-tap. (2) The **keyboard did not reopen** after a back-press dismissed it — `requestFocus()` is a no-op on a still-focused field and `SoftwareKeyboardController.show()` can't restart a dismissed session. The field now suppresses selection handles entirely (transparent `LocalTextSelectionColors`; the active-cell underline is the sole caret cue, correct for a masked input), and the tap-catcher gates on `WindowInsets.isImeVisible`: keyboard up → just re-focus (no flicker); hidden (first tap / after back) → cycle focus (clear → re-pin caret to end → re-request) to fire a fresh focus-gain that reopens the IME without stranding the caret at offset 0. Device-verified on the catalog OTP demo: no teardrop, keyboard reopens after back, and input always appends. Internal-only; the public API is unchanged. Visually identical — Roborazzi baselines unaffected."
          ]
        }
      },
      {
        "version": "0.3.11",
        "date": "2026-06-30",
        "sections": {
          "Fixed": [
            "**`AurumOtpInput`** — the 0.3.10 caret fix was insufficient (PFPD-99 reopened). Pinning the `TextFieldValue` selection to `TextRange(text.length)` only corrects the caret on `onValueChange`, but a bare tap on a filled cell reaches the hidden `BasicTextField`'s built-in tap-to-position gesture — which repositions the caret with no text change — so the next digit still overwrote the tapped cell. A transparent tap-catcher overlay now sits above the hidden field and only calls `requestFocus()`, so taps can never reach the field's positioning gesture: the caret stays pinned to the end and input always appends. Device-verified on the catalog OTP demo (tap cell 1 → type → digit appends at the end). Internal-only; the public API (`value: String` / `onValueChange: (String) -> Unit`) is unchanged. Visually identical — Roborazzi baselines unaffected. (Trade-off: long-press-to-paste on the cells is intercepted; OTP paste continues to work via the keyboard's SMS-autofill chip / auto-read.)"
          ]
        }
      },
      {
        "version": "0.3.10",
        "date": "2026-06-29",
        "sections": {
          "Fixed": [
            "**`AurumOtpInput`** — tapping the cell row no longer snaps the caret to the first cell (PFPD-99). The hidden field used the `BasicTextField(value: String, …)` overload, which carries no selection, so the `clickable` row's `requestFocus()` could land the caret at offset 0 and the next typed digit overwrote the first cell instead of appending. It now drives the field with a `TextFieldValue` whose selection is pinned to `TextRange(text.length)` on both external `value` changes (SMS autofill / resend reset) and `onValueChange`, so input always continues from the last entered digit. Internal-only — the public API (`value: String` / `onValueChange: (String) -> Unit`) is unchanged."
          ]
        }
      },
      {
        "version": "0.3.9",
        "date": "2026-06-22",
        "sections": {
          "Fixed": [
            "**`AurumPhoneNumberInput`** — leading slot now matches the Figma master (file `YvIxqu2oTlM6UnkL0OloHc`, node `4904-2455`): the country flag was pinned to the rounded border (the M3 `leadingIcon` slot gives a full-bleed flag image no optical inset, so it visually clipped against the field edge), and the divider sat *after* the country code (`flag +91 │ number`) instead of between the flag and code. Now: a start inset keeps the flag clear of the border, and the order is `flag │ +91 number`. The divider is also dropped when no `flag` is supplied (so the code never leads with a stray rule). Visual-only; the public API is unchanged."
          ]
        }
      },
      {
        "version": "0.3.8",
        "date": "2026-06-18",
        "sections": {
          "Fixed": [
            "**`AurumPhoneNumberInput`** — now renders the trailing **validation icon** and **loading spinner** from its Figma component (file `YvIxqu2oTlM6UnkL0OloHc`, node `4904-2455`), reaching parity with `AurumAmountInput` (which got this in 0.3.7 — the phone input was missed in that pass). `isSuccess` shows `AurumIcons.Status.SuccessFilled` (tinted `interactive.iconPositiveNormal`), `isError` shows `WarningFilled` (tinted `interactive.iconNegativeNormal`), and a new **`isLoading`** param renders an `AurumLoader` — matching the Figma `state` x `validationState` variants. Previously `isSuccess` / `isError` only recoloured the border (no icon) and there was no loading state at all. Additive, non-breaking. New `PreviewAurumPhoneNumberInputLoading`; Code Connect maps `state=loading -> isLoading`."
          ]
        }
      },
      {
        "version": "0.3.7",
        "date": "2026-06-09",
        "sections": {
          "Added": [
            "**Responsive width-scaling in `AurumTheme`** (`AurumWidthScaling`) — every `.dp` / `.sp` under the theme now scales by `k = (smallestScreenWidthDp / 360).coerceIn(1.0, 1.15)`, so a layout authored at the 360dp Figma reference keeps its proportions on wider phones instead of looking \"airy\" (a 411dp phone → ×1.14; verified on-device — a raw-`dp` home-feed card grew **height ×1.14 with width unchanged**). Implemented as a `LocalDensity.density` override at the single `AurumTheme` choke point — **zero call-site churn, no `.sdp`/`.ssp`** — that preserves `fontScale`, so the user's accessibility text-scaling still composes on top. **Up-only clamp** (never shrinks below the reference → touch targets stay safe; caps growth so tablets/foldables hand off to `WindowSizeClass` rather than ballooning). Nested `AurumTheme` is **idempotent** via the new `LocalAurumBaseDensity` (re-scales the same base, never `k²`). New `widthScaling` param on `AurumTheme` (default `AurumWidthScaling.Default`; `Disabled` renders pixel-exact to Figma; `fixed()` pins a factor for previews). Catalog **Scaling** gallery demonstrates the spectrum on one device. **Additive API (optional param + new class), non-breaking** — renders identically at 360dp — but **default-on**, so every Aurum surface scales up on >360dp phones by design. Replaces the temptation to reintroduce `.sdp`/`.ssp`; see README → *Sizing*."
          ],
          "Changed": [
            "**`AurumTextField`** — additive `textStyle` param (defaults to `bodyLRegular`). Lets specialised inputs set the entered-value typography; existing callers are unaffected (byte-identical default)."
          ],
          "Fixed": [
            "**`AurumAmountInput`** — aligned to the Figma component (file `YvIxqu2oTlM6UnkL0OloHc`, node `5080-261`) after a layer-by-layer audit. The entered amount now renders in **`numXL`** (Inter Bold 28) and the ₹ prefix in **`numL`** (Inter Bold 24) — previously the value fell back to `bodyLRegular` (Inter 16 Regular) and the ₹ used `displayLBold` (the **serif** Frank Ruhl Libre, wrong family). The gold-grams `suffixText` is now **`bodyMRegular`** (14, was `bodyLRegular` 16) and **inset** from the field's trailing edge (was flush). The **success / error** validation states now render the trailing status icon (`AurumIcons.Status.SuccessFilled` tinted `interactive.iconPositiveNormal` / `WarningFilled` tinted `interactive.iconNegativeNormal`), matching the Figma `validationState` variants. Verified against the Figma state×validation variants via Roborazzi.",
            "**`AurumBottomSheet` carries the width-scale into the sheet window** — a `ModalBottomSheet` hosts its content in a new window that re-provides the platform `LocalDensity` from the system config, which dropped `AurumTheme`'s width-scale (the Aurum token locals still inherited; the platform density did not). The sheet now re-applies the enclosing scaled density to its content **and** drag handle, so sheet content matches the page behind it — verified on-device (a sheet tile's chevron measured **42 px unscaled → 48 px** after the fix, matching the page's k=1.14). Raw `material3.ModalBottomSheet` / `Dialog` used directly in feature code need the same one-liner — prefer `AurumBottomSheet`.",
            "**`AurumBottomSheet` no longer forces consumers to opt in to `ExperimentalMaterial3Api`** — its `sheetState` default was `rememberModalBottomSheetState(...)`, and for a `@Composable` that default is evaluated at the **caller's** site, so every feature-code caller had to add `@OptIn(ExperimentalMaterial3Api::class)` — defeating the point of a material-free DS wrapper (it broke the jar-android `LightCriticalActionsBottomSheet` migration). the `sheetState` **parameter was removed** from the public signature — its `androidx.compose.material3.SheetState` type leaked the experimental opt-in to consumers of the published AAR (a binary consumer doesn't honour the wrapper's `@OptIn` for an *exposed experimental type*). The state is created internally now; callers drive the sheet by toggling whether it is composed, plus `onDismiss` (no caller passed `sheetState`). Programmatic state control can return later via an Aurum-owned wrapper. Source-compatible for every existing caller."
          ]
        }
      },
      {
        "version": "0.3.6",
        "date": "2026-06-02",
        "sections": {
          "Added": [
            "**`AurumPageHeader.colorScheme`** — new `AurumPageHeaderColorScheme { OnLight; OnDark }` param (default `OnLight`). `OnDark` flips the title, subtitle, and **all icon tints** to the theme-invariant `surface.iconStaticWhiteNormal` / `surface.textStaticWhiteNormal` tones so a Page Header can sit over a dark hero backdrop (pair with `containerColor = Color.Transparent`). Mirrors `AurumGlobalHeaderColorScheme` 1:1. `contentColor` becomes an optional text override (`Color.Unspecified` default defers to the scheme); icon tints now follow the scheme instead of a hardcoded `interactive.iconNeutralNormal` (which `contentColor` never actually reached). **Additive, non-breaking — `OnLight` renders byte-identically to before.** New `PreviewOnDark`. Unblocks the jar-android Instant Save hero toolbar (back + title over a dark BE-image hero)."
          ]
        }
      },
      {
        "version": "0.3.5",
        "date": "2026-05-31",
        "sections": {
          "Added": [
            "**`AurumPill`** — a compact, label-first status / token element (quieter than `AurumChip`). Mirrors the Figma \"Pills\" set (file `YvIxqu2oTlM6UnkL0OloHc`, node `5891-802`): `type` = Rounded / Rectangular / WithTags, state = default / `selected` (Figma focus) / disabled, optional leading/trailing icons, and a `tag` ribbon for WithTags. Scratch (sibling to `AurumChip`), full `@AurumFigma` + Code Connect binding, catalog `PillsDemo`. Closes one of the three Figma-coverage gaps.",
            "**`AurumProgressBar`** — a determinate linear progress bar (8dp pill track + primary indicator). Mirrors the Figma \"Progress Bar - Linear\" set (node `5934-846`): `progress` (0f..1f), optional `label` header (Figma `shownHeader`) and trailing `%` (Figma `shownProgress`). Scratch, in `feedback/`, `@AurumFigma` + Code Connect, catalog `ProgressDemo`. Closes the second Figma-coverage gap.",
            "**`AurumSegmentedProgressBar`** — discrete N-segment progress. Mirrors the Figma \"Progress Bar - Segmented\" set (node `5889-2361`): `type` = Bars / Bubbles (numbered-checkpoint stepper), `intent` (6: Default + 5 feedback tones), `filled`/`total` counts, optional header + %. Scratch, in `feedback/`, `@AurumFigma` + Code Connect, catalog demo. **Closes the third and final Figma-coverage gap — every ✅ Ready-for-dev Figma component now has code.**",
            "**12 feedback `inverse` tokens** — `feedback.{icon,text}.{primary,information,positive,negative,notice,neutral}.inverse`, all resolving to `Neutral0` (`#FFFFFF`). White icon/text content for feedback rendered on a tonal-**intense** (saturated) surface — the third intensity alongside `intense`/`subtle`, and the exact gap that forced the toast/snackbar white-on-tone workarounds. Added to `FeedbackColors` on the **icon + text axes only** (background + border keep 2 intensities, matching Figma). Surfaced by auditing live Figma variables against the committed token layer (plugin-API drift detection) — design had added them since the last export. Additive, non-breaking.",
            "**Figma token export artifacts re-synced to live Figma** — `design-tokens/figma-export/*.json` brought back in line with the live variable set: the 12 `inverse` entries added to `theme.onLight`; colour primitive leaf-names de-prefixed (`colors/blue/blue_500` → `colors/blue/500` — a Figma-side cleanup, **values unchanged**); `typography` `fontFamily` keys lowercased (`Display`→`display`, `Primary`→`primary`) and the orphaned `lineHeight/4xs` dropped; `Boolean` primitive added. Zero residual drift, re-verified by replaying the plugin-API audit against the refreshed files. The cosmetic renames don't touch the generated Kotlin.",
            "**`AurumBanner` + `AurumBannerHost`** — a persistent, top-anchored, full-bleed tonal status strip (offline / downtime / account warnings) and its caller-driven host. It is the **persistent counterpart of the transient `AurumToast`** — same 6-tone tonal language and per-tone status glyphs (`feedback.*` subtle fill over opaque `surface.bgPageBase` + matching intense content) — but structural rather than floating: square corners, full-bleed `fillMaxWidth`, a 1dp bottom hairline, no clip. Supports an optional inline text `action` (e.g. \"Retry\") and an optional trailing dismiss ✕ (`onDismiss` / `dismissible`); state banners are non-dismissible and persist until the condition resolves. `AurumBannerHost` animates a single banner in from the **top** (`slideInVertically { -it }`) with **no auto-dismiss timer** (vs. the toast host's queue + timer) — the caller owns show/dismiss. **No Figma node yet — proposal-grade, to reconcile when design produces the spec.** Catalog `BannerDemo` (all tones, with/without action, dismissible, host). Code Connect stub (`AurumBanner.figma.kt`, `url` pending design) + `classification.md` rows added per the add-component ritual.",
            "**11 icons synced from the Figma \"Component Icons\" frame** (node `5130:35416`): `Navigation.Caret{Up,Down,Left,Right}` + `Navigation.CaretCircle{Up,Down,Left,Right}` (single-weight; distinct from the existing Chevron set), `Content.Star`, `Content.ChartBar`, and `Commerce.Bank` (each line + fill). The catalog is now 88 icons / 176 drawables. Imported via `tooling/icons/import_from_figma.py` (`ICON_MANIFEST` extended) + Code Connect bindings regenerated. Also refreshed 6 existing glyphs the design team refined (`action_qr_code`, `content_broadcast_filled`, `media_replay`, `user_nek`)."
          ],
          "Removed": [
            "**`AurumSnackbar`** (internal `component/scaffold/`) — deleted. It paired `surface.bgSurfaceHighContrast` (`#DCDDE3`, a *light* surface) with `surface.textDefaultInverse` (`#FFFFFF`, white) and rendered white-on-light-grey (illegible), and it had no Figma counterpart. The design system's feedback primitive is the Figma-backed `AurumToast` (a light, tone-coloured strip — file `YvIxqu2oTlM6UnkL0OloHc`, node `6014:2621`), not a dark M3 snackbar."
          ],
          "Changed": [
            "**`AurumLoader`** — added optional `label` + `labelPosition` (right / bottom) to match the Figma Spinner's `shownLabel` variants, and added the previously-missing Code Connect binding + `@AurumFigma` (node `4530-2084`). It was wrongly tagged code-only; it's a Figma-backed component (the `size` / `color` Figma axes were already covered by its continuous `Dp` / `Color` params).",
            "**Renamed `AurumTopAppBar` → `AurumPageHeader`** (and `AurumTopAppBarAction`/`AurumTopAppBarButton` → `AurumPageHeaderAction`/`AurumPageHeaderButton`; file `AurumPageHeader.kt`). The component's Figma name is **\"Page Header\"** (file `YvIxqu2oTlM6UnkL0OloHc`, set `4826:1058`), and \"Page Header\" is the industry convention for a content-level title-and-actions row (Atlassian, GitHub Primer, Polaris, Ant Design, Salesforce). The old Material-derived name wrongly implied it wraps `material3.TopAppBar` — which it explicitly does **not** (it's a scratch component). Clean rename, **no deprecation alias** (Aurum is pre-release / in active light-theme migration); the single jar-android consumer migrated in lockstep.",
            "**`AurumPageHeader` primary button synced to Figma** (`4826:1058`, chip `5431:2985`) — the `snackbarHost` slot renders the canonical `AurumToast` (Neutral tone, Large) instead of the removed `AurumSnackbar`. The public `snackbarHostState: SnackbarHostState` API is **unchanged** (non-breaking); `snackbarHostState.showSnackbar(...)` now surfaces the legible, Figma-faithful toast. M3 `SnackbarData` carries no tone, so screen-level snackbars are Neutral — for tone-specific feedback (Error/Success/…), use `AurumToastHost` + `showToast(tone = …)` directly.",
            "**`AurumToast` leading-icon override** — new optional `leadingIcon: ImageVector? = null` param (default → the tone's status glyph). Supply to swap the glyph — still tinted to the tone's content colour + sized by the toast — or `showLeadingIcon = false` to hide it. A controlled override (not a free `@Composable` slot) so the DS keeps tint/size consistent; lets consumers (and the `snackBar()` migration) keep a bespoke icon without losing the tonal default.",
            "**`AurumTopAppBar` primary button synced to Figma** (`4826:1058`, chip `5431:2985`) — now 36dp tall with a 1dp `interactive.borderPrimaryMuted` ring, 12dp horizontal padding, and a `labelLMedium` (12/16 Medium) label (was 32dp, no border, 8dp, `titleXSSemiBold` 14/20). Every other Page Header slot (variant axes, title `titleSSemiBold`, subtitle, back chevron, 56dp/16dp layout, icons) already matched the design."
          ],
          "Fixed": [
            "**`AurumToast` now renders opaque** — composites each tone's subtle (low-alpha) fill (e.g. `feedback.bgNegativeSubtle` = `#D8320917`, 9% alpha) over `surface.bgPageBase` (opaque white) inside the component. Previously only the low-alpha tint was painted, so a toast floating over app content — rather than the white Figma page the design was drawn on — let the backdrop bleed through. It now reads as the intended solid pastel on any surface.",
            "**`AurumToastHost` applies a consistent 16dp margin** — the default renderer now insets the toast by `space.s5` (16dp) on the sides **and** the bottom (was horizontal-only), so it floats with the design's 16dp gap on any screen. Callers supply only window insets (e.g. `navigationBarsPadding()`); no per-screen bottom offset needed.",
            "**Error toast icon** — `leadingIconFor(Error)` now uses the filled `⊗` (`Navigation.CloseFilled`, the fill variant of `Icons/X`) instead of the plain `Navigation.Close` (✕), which duplicated the trailing dismiss ✕. Matches the Figma Error toast (node `6014:2621`); the other five tones were already correct."
          ]
        }
      },
      {
        "version": "0.3.4",
        "date": "2026-05-21",
        "sections": {
          "Added": [
            "**`AurumButton.progress` param** — optional `Float?` (`0f..1f`) that renders the auto-advance progress state from the Figma button `state=progress` variant (file `YvIxqu2oTlM6UnkL0OloHc`, node `4692:1074`). When non-null the button paints a faded-primary track (`interactive.bgPrimaryFaded`) with a primary fill (`interactive.bgPrimaryDefault`) that grows to `progress`, swaps the M3 container to transparent, and dims the label/icon to `interactive.textOnPrimaryDisabled`. `null` (default) keeps the normal fill — non-breaking, additive. Drive `progress` from a countdown for CTAs that proceed on their own (e.g. onboarding auto-advance). New `PreviewProgressVariants`."
          ],
          "Fixed": [
            "**`AurumGlobalHeader` `OnDark` pill fidelity** — restored translucent radial fill + linear-gradient border + linear-gradient divider per the Figma `Global Header` component (file `CXq7IVmAMMc7qCKT82GrM9`, node `7174:11139`). The previous `OnDark` arm rendered every pill as `SolidColor(interactive.bgStaticWhiteFaded)` with a baked `Color.White.copy(alpha = 0.09f)` hairline and `Color.White.copy(alpha = 0.18f)` divider — flat and tokenless. Now matches the Aurum Compose Figma plugin emission verbatim: pill fill is `aurumRadialBrush(bgStaticWhiteFaded@α0.18 → bgStaticBlackFaded@α0.18, center=(1.55, -0.56), radius=1.47)`, border is `aurumLinearBrush(180°, borderNeutralMuted@α0.09 → borderSurfaceHighContrast → borderNeutralMuted@α0.09)`, divider is `aurumLinearBrush(90°, borderNeutralMuted@α0.04 → borderSurfaceHighContrast@α0.4 → borderNeutralMuted@α0.04)`. `HeaderPillColors.border` and `dividerTint` widened from `Color` to `Brush` (and the field renamed `divider`) to carry the gradients — internal type, no public API impact. `OnLight` arm visually unchanged (the existing solid border is wrapped in `SolidColor(…)`). Consumers that render the header with `colorScheme = OnDark` (e.g. the jar-android home feed) pick up the canonical translucent-glass treatment automatically."
          ]
        }
      },
      {
        "version": "0.3.3",
        "date": "2026-05-19",
        "sections": {
          "Added": [
            "**`AurumGlobalHeader.colorScheme` param** — new `AurumGlobalHeaderColorScheme` sealed type (`OnLight`, `OnDark`). Default `OnLight` preserves the existing pill treatment; `OnDark` swaps every pill background to a solid translucent-white wash (`interactive.bgStaticWhiteFaded`), border to a faded white hairline, and icon + text tints to the `iconStaticWhiteNormal` / `textStaticWhiteNormal` / `textStaticWhiteSubtle` tones. Use `OnDark` when the header sits on a dark hero backdrop (e.g. the home-feed locker zone); pair with `containerColor = Color.Transparent` so the underlying backdrop reads through. New `PreviewOnDarkLivePrice` covers the dark path. Internal refactor: a private `HeaderPillColors` data class threads the resolved tone set into every sub-component (ProfilePill / SingleIconPill / RewardsAndNotificationsPill / LiveBuyPricePill / PillFrame), replacing the previous in-line `pillSheen()` brush + hardcoded `iconDefaultNormal` / `textDefaultNormal` reads. No call-site change required for existing consumers."
          ],
          "Changed": [
            "**Typography scale rebuilt as a 1:1 mirror of the Figma Typography page** (`YvIxqu2oTlM6UnkL0OloHc#5077:1488`). The old hand-curated scale (20 tokens) had multiple sizes (11sp, 18sp, 40-72sp) and weights (Inter Medium in Title family, SemiBold at 14sp Label) that don't exist in Figma's catalog. The new scale ships 44 composites across 5 Figma-aligned families: **Display** (Frank Ruhl Libre S/M/L/XL/XXL × Bold/Medium), **Title** (Inter XS/S/M/L/XL/XXL × Bold/SemiBold), **Body** (Inter XS/S/M/L/XL × Regular/Medium), **Label** (Inter S/M/L × Bold/Medium), **Num** (Inter Bold XS/S/M/L/XL/XXL). Naming follows `<family><Size><Weight>` (e.g. `numXL`, `bodyMMedium`, `titleSSemiBold`). All ~210 internal Aurum usages migrated to the new tokens; M3 `MaterialBridge.kt` remapped to the new scale.",
            "**Breaking** — every removed legacy token has a clear replacement. Migration map:",
            "**Token drift fix — `interactive.borderNeutral*` realigned.** `borderNeutralDefault` Neutral300→Neutral50, `borderNeutralHighlighted` Neutral400→Neutral200, `borderNeutralDisabled` Neutral200→NeutralA50 (translucent wash). Matches Figma. Visible on every neutral-bordered Aurum control — borders ~5 shades lighter than before.",
            "**Typography fix — `headingH6.lineHeight` 14sp → 20sp.** Matches Figma's `Title/XS-Bold` spec (verified via plugin API: `fontSize 14, lineHeight 20 PIXELS, Inter Bold`); fixes collapsed leading on wrap.",
            "**`AurumTransactionListCard` realigned with Figma.** Corner radius `shape.lg` → `shape.xl` on both outer wash and inner card (8dp → 16dp; designers updated the spec). Status icons remapped: Error `Status.Warning` (exclamation) → `Navigation.CloseFilled` (X-in-circle, matches Figma `Icons/X` at 5311:823); Pending `Status.Pending` (clock) → `Status.Warning` (exclamation-in-circle, matches Figma `Icons/Warning` at 5308:802). All glyphs now match the canonical component instances verified via `figma.getNodeByIdAsync()`."
          ]
        }
      },
      {
        "version": "0.3.2",
        "date": "2026-05-14",
        "sections": {
          "Changed": [
            "**`AurumBottomSheet` close button removed.** The `onClose: (() -> Unit)?` parameter is gone from both `AurumBottomSheet` and the private `StrictPageHeader`; the top-right X icon is no longer rendered. Figma `5564:43216` shows the canonical `bottom sheet` component (`6002:939`) with only the drag handle + title + bottom CTA — no close affordance. Dismissal is now exclusively via drag-handle / scrim / system-back. Source-incompatible for any caller that was passing `onClose`; the sole in-tree consumer (`TransactionV2FilterBottomSheet` in jar-android) never set it. KDoc updated; `Spacer`, `AurumIconButton`, `AurumIcon`, and `AurumIcons` imports dropped from the file.",
            "**`AurumBadge` Painter overload now ships MCP-readiness KDoc.** The Painter-flavoured overload was missing all three required tags (`@AurumIntendedUse`, `@AurumDo`, `@AurumDont`); the published manifest would have surfaced a stub on hover. The full block is mirrored verbatim from the ImageVector overload so both shapes ship identical identity / axes / dos / don'ts.",
            "**`AurumTabRow` preview annotation aligned.** The lone `@Preview(name = \"tablet-wide(640dp)\", widthDp = 640)` on `PreviewTabRowFourTabsTablet` is now `@AurumPreview` so the catalog preview sweep + screenshot pipeline pick it up alongside every other Aurum preview. The redundant `androidx.compose.ui.tooling.preview.Preview` import is dropped.",
            "**`docs/components/classification.md` refresh.** Table was ~6 months stale at 30 rows; now lists every public composable (29 scratch / 13 wrap). Reclassified `AurumChip`, `AurumCheckbox`, and `AurumNavBar` from **Wrap** to **Scratch** (source confirms none of them imports `material3.*`); renamed `AurumRadio` → `AurumRadioButton` and `AurumBottomNavBar` → `AurumNavBar` to match actual file names; moved `AurumTab` from the Wrap half to the Scratch half. Added rows for `AurumLinkButton`, `AurumOtpInput`, `AurumAmountInput`, `AurumStepper`, `AurumSectionHeader`, `AurumRadioGroup`, `AurumCheckboxGroup`, `AurumGlobalHeader`, `AurumTransactionListCard`, `AurumLabel`.",
            "**Icon slots inside Aurum surfaces now inherit the surface's content color via `LocalContentColor`.** `AurumIcon`'s default `tint` resolves to `LocalContentColor.current.takeOrElse { Aurum.colors.surface.iconDefaultNormal }`, so icons in an `AurumButton` leading/trailing slot (and any future Aurum surface that provides `LocalContentColor`) auto-tint to match the label — no more manual `tint = Aurum.colors.interactive.textOnPrimaryNormal` boilerplate at each call site. `AurumButton` now wraps its content `Row` in `CompositionLocalProvider(LocalContentColor provides labelColor)` so slotted icons follow the button's variant + enabled state. Callers passing an explicit `tint` are unaffected.",
            "**`AurumPreviewSurface` defaults to no content padding.** Previously hardcoded a 16 dp (`Aurum.space.s5`) inset on every preview, which clipped full-bleed components (locker cards, top app bars, hero gradients) into looking like they had a white margin. New signature accepts `contentPadding: Dp = 0.dp`; component previews that want breathing room pass an explicit value (e.g. `AurumPreviewSurface(contentPadding = Aurum.space.s5) { … }`). Source-incompatible only for callers that were relying on the inset; trailing-lambda usage (`AurumPreviewSurface { … }`) compiles unchanged.",
            "**`AurumTopAppBar` back icon now matches Figma source.** The leading back-button glyph defaults to `AurumIcons.Navigation.ChevronLeft` (Figma node `5426:1363`, exactly what the canonical Page Header component_set `4826:1058` renders) instead of the previously hardcoded `AurumIcons.Navigation.ArrowLeft`. Implementation had drifted from the Figma source; this realigns them. Visible on every existing call-site (catalog `NavigationDemo`, jar-android transaction-detail hero, etc.) — a one-glyph swap with no API change for callers that took the default.",
            "**`AurumTopAppBar.backIcon` slot.** Added an optional `backIcon: ImageVector = AurumIcons.Navigation.ChevronLeft` parameter so callers can override the leading glyph (e.g. `AurumIcons.Navigation.Close` on modal-style surfaces) without losing the 32×40 dp wrapper or `interactive/icon/neutral/normal` tint. New `PreviewWithBackIconClose` covers the override path; `BackIconButton` made glyph-agnostic.",
            "**`AurumTopAppBar` icon wrappers honour Figma's 32×40 dp bounds.** `BackIconButton` and `ActionIconButton` previously inflated their wrappers to a 48×48 dp Material minimum-touch-target box that centered the visible 32×40 dp icon inside, which (a) shifted each glyph 8 dp inward of where Figma places it (`Icon_wrapper` 4826:1086 is `w-[32px] h-[40px]`) and (b) cumulatively pushed the page title 16 dp right of its design position. Both wrappers now collapse to a single 32×40 dp clickable box, matching Figma exactly. Net effect: tighter leading and trailing slots flush with the 16 dp container padding, page title visually anchored at its Figma-spec 60 dp from the screen left edge.",
            "**Compose BOM bumped `2026.01.00` → `2026.04.01`.** Re-resolves `compose-ui` from `1.10.1` to `1.11.0`, fixing a Layout Inspector crash that prevented live component-tree inspection of the catalog app. `material3` is pinned outside the BOM at `1.3.2` and is unaffected."
          ],
          "Added": [
            "**`AurumToast` + `AurumToastHost` — toast feedback family** (`component/feedback/`). Mapped to Figma `wrapper` (`6014:2621`). `AurumToast` is a scratch composable: rounded 8 dp container (`borderRadius.large`) with 1 dp `feedback/border/<tone>/subtle` border, `feedback/background/<tone>/subtle` wash (Neutral falls back to `surface/background/surface/lowcontrast` + `surface/border/surface/lowcontrast`), per-tone leading status glyph (`Selection.CheckFilled` for Neutral / Brand; matching `Status.<Tone>Filled` for Success / Warning / Info; `Navigation.Close` for Error per Figma's `Icons/X` reference at node `6107:432`), label rendered at `Body/M-Medium` (Inter 14 / 20, weight 500) tinted with `feedback/text/<tone>/intense`, and a trailing close `AurumIconButton` wired through `onDismiss`. Six tones (`Neutral / Brand / Success / Error / Warning / Info`) × two sizes (`Small` fixed 48 dp single-line ellipsis · `Large` vertical-padded multi-line wrap up to 3 lines) = 12 variants matching the Figma component set. `showLeadingIcon` parameter hides the leading glyph for text-only status. Wraps its label in `CompositionLocalProvider(LocalContentColor provides toneColor)` so any nested AurumIcon inherits the tone tint without per-call boilerplate. Ships Code Connect mapping (`AurumToast.figma.kt`) with `state` and `size` axes wired to `AurumToastTone` / `AurumToastSize` enums, MCP-readiness KDoc tags (`@AurumIntendedUse` + 3 × `@AurumDo` + 3 × `@AurumDont`), and 3 `@AurumPreview` previews (small all-tones · large all-tones · `showLeadingIcon = false`). `AurumToastHost` is the codebase-only orchestration glue (no Figma counterpart): a `Stable` `AurumToastHostState` with a `Mutex`-serialised single-toast slot plus a `suspend fun showToast(label, tone, size, duration): AurumToastResult` API that resumes when the strip is dismissed (timer / X tap / explicit `dismiss()`). `AurumToastDuration.{Short=4s, Long=10s, Indefinite}` drives the auto-dismiss timer; `rememberAurumToastHostState()` is the canonical entry point. `AurumToastHost` wraps `AnimatedVisibility` with a 220 ms slide-up + fade enter and 180 ms slide-down + fade exit, preserving `lastVisible` across the exit animation so the strip keeps rendering while it slides out. Default `toast` slot renders an `AurumToast` with `fillMaxWidth` + 16 dp horizontal padding; callers can override for custom width / placement. Catalog `ToastDemo` extended with a live host section: 6 trigger buttons (one per tone) + a \"Queue 3 in a row\" button proving the FIFO mutex queue.",
            "**`AurumGlobalHeader` — persistent top bar for top-level destinations** (`component/navigation/`). Mapped to Figma `Global Header` (`5252:2274`). Sealed `AurumGlobalHeaderRightContent` with two variants: `Default` (optional Support pill + optional Rewards/Notifications pill) and `LivePrice` (live gold-buy-price pill on a dark surface + optional Rewards/Notifications pill). Each pill is 44 dp tall, 22 dp corner radius, 1 dp `interactive/border/neutral/muted` border, with a subtle `aurumRadialBrush` sheen overlay matching Figma's SVG-encoded radial fill. Profile pill accepts either an `ImageVector` glyph (default `AurumIcons.User.User`) or a caller-supplied `profileContent` slot — the slot pattern lets consumers render URL-loaded avatars (Glide / Coil) without dragging an image-loading dep into Aurum. Ships Code Connect mapping (`AurumGlobalHeader.figma.kt`), MCP-readiness KDoc tags (`@AurumIntendedUse` + 3 × `@AurumDo` + 3 × `@AurumDont`), and 6 `@AurumPreview` previews covering all variant combinations. Catalog `NavigationDemo` extended with three live examples.",
            "**`AurumTab` + `AurumTabRow` — tab navigation family** (`component/navigation/`). Mapped to Figma `_Tabs` (`5430:3115`) and `GroupRoot` (`5531:795`). `AurumTab` is a scratch composable (Foundation `Box` + `Row` + `selectable`, `role = Role.Tab`) with an optional leading `ImageVector` icon at `Aurum.iconSize.xl` (24 dp) and a label rendered at `Title/XS-Bold` (14/20 sp, Bold 700) with `TextOverflow.Clip`. Selected uses `interactive/text/primary/normal` + `interactive/icon/primary/normal`; unselected uses `interactive/text/neutral/subtle` + `interactive/icon/neutral/subtle`. No disabled variant — Figma's `_Tabs` set has none; callers omit unavailable destinations. `AurumTabRow` uses a `SubcomposeLayout` probe pass to measure each tab's natural width, then auto-fits or scrolls: when `tabCount × max(widestNatural, 100.dp) ≤ viewport` it wraps `material3.PrimaryTabRow` and tabs flex to share the row equally (matching Figma's two/three-tab `flex-[1_0_0]` variants); otherwise it wraps `material3.PrimaryScrollableTabRow` and pins each tab to the computed width via `LocalAurumTabWidth` (matching Figma's four-tab fixed-`100px`+scroll variant and gracefully extending to 5 + tabs). Indicator is `borderWidth/lg` (2 dp) `interactive/border/primary/default`; bottom divider is `borderWidth/sm` (1 dp) `interactive/border/neutral/highlighted`. Both ship Code Connect mappings (`AurumTab.figma.kt`, `AurumTabRow.figma.kt`) and 10 `@AurumPreview` previews including a 640 dp tablet tile and a 5-tab scroll demo. Catalog `TabGallery` added under Navigation with two/three/four/with-icons sections."
          ],
          "Manifest": [
            "Manifest jumps from 28 → 33 components: `AurumToast`, `AurumToastHost`, `AurumGlobalHeader`, `AurumTab`, `AurumTabRow` (5 new). `AurumBottomSheet` was already in the manifest — this cycle ships its first Code Connect mapping plus the close-button removal. Code Connect mappings ~158 → 178: 5 new component mappings (`AurumToast`, `AurumGlobalHeader`, `AurumTab`, `AurumTabRow`, `AurumBottomSheet`) plus 18 new icon mappings (9 pairs: `ArrowDownLeft`, `ArrowUpRight`, `ChatBubble`, `Filter`, `Nek`, `Phone`, `Replay`, `Timer`, `WhatsApp` × line + filled). The 7 drift-fix mappings from PR #22 updated existing files, not new ones. Schema version unchanged (`\"2\"`); changes are additive."
          ]
        }
      },
      {
        "version": "0.3.0",
        "date": "2026-05-04",
        "sections": {
          "Added": [
            "**`AurumCheckbox` + `AurumCheckboxGroup` — multi-select selection family** (`component/selection/`). `AurumCheckbox` is a tri-state control (`AurumCheckState.Unchecked / Checked / Indeterminate`) mapped to Figma `5169:1314`. Closed enum chosen over `Boolean?` to avoid `null`-as-indeterminate ambiguity. Mirrors `AurumRadioButton`'s API: `selected`, `onCheckStateChange`, `label`, `subtext`, `enabled`, `error`, `labelPosition` (End/Start). The 24 dp box is rendered via `Canvas` — checked state fills with `Aurum.colors.interactive.bgPrimaryDefault` and overlays a stroked checkmark; indeterminate fills the box and overlays a centred horizontal bar; error tints both outline and glyph with `feedback-negative`. `AurumCheckboxGroup<T>` mirrors `AurumRadioGroup<T>` but with `selected: ImmutableSet<T>` and `onSelectionChange: (T, Boolean) -> Unit`; uses `triStateToggleable` per row so `Indeterminate → Checked` advancement is a single tap. Both ship Code Connect mappings (`AurumCheckbox.figma.kt` at `5169:1314`, `AurumCheckboxGroup.figma.kt` at `5169:1796`) plus 8 + 5 `@AurumPreview` previews. Catalog `SelectionDemo` extended with single-checkbox and group examples.",
            "**`AurumAmountInput`** — currency-prefixed numeric input mapped to Figma `5080:261` (`component/field/AurumAmountInput.kt`). Delegates to `AurumTextField` for state, validation, helper/error/success text, label plumbing — currency symbol (default `₹`) is rendered in the leading slot using `Aurum.type.headingLarge`; optional `suffixText` (e.g. \"0.0097 g\") sits in the trailing slot. `loading = true` swaps the trailing slot for an inline `AurumLoader(size = Aurum.iconSize.lg)` and forces read-only. **Caller is responsible for formatting both `value` and `suffixText`** (locale + currency conventions are app-level concerns) — flagged in KDoc. Numeric keyboard via `KeyboardOptions(keyboardType = KeyboardType.Number)`. 8 `@AurumPreview` previews + Code Connect.",
            "**`AurumNavBar` + `AurumNavBarItem` — bottom navigation family** (`component/navigation/`). Mapped to the layout component_set at Figma `5575:14226`. `AurumNavBar` is a slot-based composable taking an `ImmutableList<AurumNavBarItem>` (label + line/fill icon pair) plus `selectedIndex`, `onSelect`, and a `layout: AurumNavBarLayout`. `AurumNavBarLayout` is a `sealed interface` exposing four data variants — `Standard3`, `Standard4`, `Standard5`, `CenterQr5(onQrClick)` — each carrying an `itemCount` enforced via `require()` at composition time. `CenterQr5` takes 4 items (the QR action is rendered by the layout, not surfaced as an item) and inserts the raised QR FAB between items 1 and 2 using `AurumIcons.Action.QrCode`. The per-cell renderer `AurumNavBarCell` is `private` — exposing it would only invite cells without a parent bar. 6 `@AurumPreview` previews (one per layout + selected-state variants) + Code Connect. Catalog `NavigationDemo` extended with all 4 layouts running interactive `selectedIndex` state.",
            "**`AurumTransactionListCard` — opens the Cards family** (`component/card/`, new package). Mapped to Figma `5576:19749`. Status-tinted card (`AurumTransactionStatus.{Success, Error, Pending}`) composing `AurumSurface` + `AurumText` + `AurumIcon`. Outer wash uses `Aurum.colors.feedback.{positive, negative, notice}/subtle`; status badge icons map to the new `AurumIcons.Status.{Success, Warning, Pending}` glyphs landed in v0.2.1; amount and helper-text colours match the wash family. **Caller hands in pre-formatted strings** for `dateText` and `amount` — no locale or currency handling inside (consistent with `AurumAmountInput`). `helperText` and `leadingIcon` are optional. 7 `@AurumPreview` previews + Code Connect. Standalone `CardDemo` composable wired into the catalog showcase as a new \"Cards\" section between Navigation and Chips."
          ],
          "Changed": [
            "**`tooling/gallery/generate.py` — registered the `card` family** in `FAMILY_LABELS` so the gallery site renders the new `component/card/` family with a proper \"Cards\" heading rather than falling back to the raw directory name.",
            "**`AurumLinkButton` Code Connect mapping** validated against Figma `4784:1286` (\"Component 1\") — the existing `AurumLinkButton.figma.kt` already targets the right node, no changes needed. The Figma component name is misleading (\"Component 1\") but the underlying `variant=link button` axis maps cleanly."
          ],
          "Manifest": [
            "Manifest jumps from 24 → 28 components: `AurumAmountInput`, `AurumCheckbox`, `AurumCheckboxGroup`, `AurumNavBar`, `AurumTransactionListCard` (5 new) — `AurumNavBarItem` is a public data class but not a composable, so it doesn't count. Code Connect mappings 150 → ~158. Schema version unchanged (`\"2\"`); changes are additive.",
            "**`Icons/NEK`** (Figma `5566:781`) is referenced by Jar's nav bar item set but not yet imported into `AurumIcons`. Catalog NavBar previews use placeholder icons (`Home`, `Gift`, `Document`, etc.) so compile + render succeed. Action: design to confirm the canonical NEK glyph node, then add an `IconEntry` to `tooling/icons/import_from_figma.py:ICON_MANIFEST` and re-run `make icons-import`.",
            "**`Icons/Check`** still resolves to a single-weight glyph (`5308:800`); `Icons/Check` at `5480:5047` remains an empty/orphaned component in Figma (see v0.2.1 ghost-component note in `add-an-icon.md`). No action."
          ]
        }
      },
      {
        "version": "0.2.1",
        "date": "2026-05-04",
        "sections": {
          "Added": [
            "**11 new Figma-derived icons** imported via `tooling/icons/import_from_figma.py`. Sourced authoritatively from the Jar Light Design System file (`YvIxqu2oTlM6UnkL0OloHc`) by enumerating every `Icons/*` master component via the Figma REST `/v1/files/{key}/components` endpoint and diffing against `ICON_MANIFEST`. Each ships a 24×24 vector drawable + AurumIcons accessor (line + filled) + per-weight Code Connect mapping. Breakdown: `AurumIcons.Action.{Minus, MoreHorizontal}`, `AurumIcons.Content.Image`, `AurumIcons.Status.{Pending, Warning, Success, Loader}`, `AurumIcons.Commerce.Withdraw`. Single-weight icons (`Success`, `Loader`, `Selection.Check`) reuse the same Figma node id for both weights, producing identical line/fill XMLs while keeping the `<Name>` + `<Name>Filled` API contract intact."
          ],
          "Changed": [
            "**`AurumIcons.Action.Add` and `AurumIcons.Action.Overflow` now Figma-derived.** Previously hand-drawn `aurum_ic_action_add.xml` and `aurum_ic_action_overflow.xml` are replaced with imports from Figma's `Icons/Plus` (`5322:1592`/`5322:1593`) and `Icons/DotsThreeVertical` (`5431:2848`/`5431:2850`). Public Kotlin API names unchanged — call sites in `AurumButton`, `AurumIconButton`, `AurumTextField`, and `AurumTopAppBar` need no edits. Their `Filled` accessors (`AddFilled`, `OverflowFilled`) are now also available.",
            "**`AurumIcons.Selection.Check` now Figma-derived.** Hand-drawn `aurum_ic_selection_check.xml` replaced with import from Figma's `Icons/Check` (`5308:800`). Used by `AurumSwitch` for the on-state tick. Initial discovery missed this node because the file's components index points at a stale duplicate (`5480:5047`) that's an empty/orphaned component; `5308:800` lives near the Warning glyphs and renders fine. **Aurum now has zero hand-drawn icons** — every icon flows from Figma through `make icons-import`.",
            "**`Icons/X` (Close) fill node updated** from `5162:954` → `5311:823`. Design moved the X fill variant; the old node returns null from `/v1/images`. Visual unchanged.",
            "**`tooling/icons/import_from_figma.py` cleanup.** Removed the special-case blocks at the end of `generate_aurum_icons_kt` that hand-wired `Action.Add`, `Action.Overflow`, and `Selection.Check` from legacy XMLs — all three are now regular `IconEntry` rows. Added `selection` to `CATEGORY_ORDER` + `CATEGORY_DOCSTRINGS`. Removed `aurum_ic_selection_check.xml` from the obsolete-detection exception set.",
            "**`aurum-catalog/.../IconGallery.kt`** extended with the 11 new icons (Action, Content, Status, Commerce sections) plus a new Selection section showing `Check`."
          ],
          "Tooling": [
            "**Documented icon ghosts in `aurum/docs/workflows/add-an-icon.md`.** Five `Icons/*` names appear in the file's `/components` index but are deleted/orphaned components in Figma — opening their URLs prompts a \"Restore component\" dialog and `/v1/images` returns null. They are NOT placeholders awaiting drawings: `Icons/InstantSave` (`5343:1795/1796`), `Icons/DailySavings` (`5343:1779/1780`), `Icons/WeeklySavings` (`5343:1781/1782`), `Icons/MonthlySavings` (`5343:1783/1784`), older `Icons/Withdraw` on `5343:*` (superseded by the live pair at `5358:456`/`5358:465` which is imported as `Commerce.Withdraw`). The doc explicitly tells future contributors to skip them rather than chase a \"fix it in Figma\" thread."
          ],
          "Manifest": [
            "Manifest jumps from 60 → 68 icons. Code Connect mappings 130 → 150. Components count unchanged (24).",
            "Schema version unchanged (`\"2\"`); changes are additive on the existing icon list."
          ]
        }
      },
      {
        "version": "0.2.0",
        "date": "2026-05-04",
        "sections": {
          "Tooling": [
            "**MCP manifest schema v2 — enrichment fields for `aurum-mcp` v0.3.** Bumped `tooling/manifest/schema.json` `schemaVersion` enum from `[\"1\"]` to `[\"1\",\"2\"]` and added four optional, additive fields:\n- `component.intendedUse: string` — when-to-reach-for prose authored in a new `@AurumIntendedUse` KDoc tag.\n- `component.usage: { do: string[]; dont: string[] }` — guardrails authored in `@AurumDo` / `@AurumDont` KDoc tags (one bullet per tag instance).\n- `component.relatedTokens: string[]` — qualified Aurum token names (`surface.bgPageBase`, `spacing.s12`, `typography.bodyMedium`) the component references in its source. Static-analyzed by `analyze_token_refs(source)` against `Aurum.{colors,space,type,radius,borderWidth,elevation,iconSize}.<leaf>` accessors.\n- `icon.tags: string[]` — hand-curated synonyms (`Delete` → `[trash, remove, bin, garbage, discard]`) sourced from a new `aurum/icons/tags.toml` file. Powers the synonym-aware `aurum_search_icons` tool.\nAll four are absent from v1 manifests and ignored gracefully by older readers. The generator emits `schemaVersion: \"2\"` whenever any of them are populated, otherwise stays on `\"1\"`.",
            "**`@AurumIntendedUse` / `@AurumDo` / `@AurumDont` KDoc tags authored on all 24 components.** Every component in the manifest now carries intended-use prose + Do/Don't guardrails. Counts: 24 × `intendedUse`, 70 total `do` entries, 70 total `dont` entries. The 6 priority components (Chip, Button, RadioButton, RadioGroup, TopAppBar, OtpInput) landed first; this extends coverage to AurumIconButton, AurumLinkButton, AurumTextField, AurumPhoneNumberInput, AurumSearchField, AurumSwitch, AurumBadge, AurumLoader, AurumSkeleton, AurumSectionHeader, AurumSurface, AurumScreen, AurumSnackbar, AurumStepper, AurumDivider, AurumIcon, AurumText, AurumLabel. Tags are stripped from the rendered KDoc body and re-emitted as structured manifest fields.",
            "**Cross-repo dispatch wired up.** Committed `.github/workflows/notify-mcp.yml`, which fires a `repository_dispatch: aurum-content-changed` event at `Changejarapp/aurum-mcp` on every push to `main` and every release. Drops the manifest-sync latency in aurum-mcp from ≤24 h (cron) to ~1 min. Requires the `MCP_DISPATCH_PAT` org secret (a fine-grained PAT scoped to aurum-mcp with Actions: read+write).",
            "**README — manifest pipeline section.** Documents how component changes propagate to `aurum-mcp` end-to-end: pages.yml → manifest URL → notify-mcp dispatch → sync-manifest auto-PR → human merge + release dispatch. Includes the `@AurumIntendedUse` / `@AurumDo` / `@AurumDont` authoring convention and the `aurum/icons/tags.toml` synonym format with quality-bar guidance.",
            "**`aurum/icons/tags.toml` — curated synonyms for all 60 icons across 9 categories** (Action / Commerce / Content / Media / Navigation / Selection / Status / System / User). 222 tags total. Format is TOML keyed by category → icon name → tag list.",
            "**Pages workflow now publishes the manifest.** `.github/workflows/pages.yml` invokes `generate.py --emit-manifest build/gallery/data/manifest.json --also-build-gallery --validate` on every deploy, exposing `https://changejarapp.github.io/aurum-android/data/manifest.json` (previously 404). Closes the cross-repo sync gap that left `aurum-mcp`'s drift-check soft-failing on every PR.",
            "**MCP manifest pipeline.** Added `tooling/manifest/schema.json` defining a JSON Schema for an LLM-consumable Aurum manifest, and extended `tooling/gallery/generate.py` with `--emit-manifest <path>` and `--validate` flags. The same parsers that drive the static gallery now also emit a structured JSON describing every component (KDoc + signature + params + Figma deeplink + Code Connect path + gallery URL), every token (semantic colour / visual palette / spacing / radius / border-width / icon-size / elevation / typography), every icon (with paired line/fill Figma node IDs), every Code Connect mapping, and the full Keep-a-Changelog history. Single source of truth, two render targets — HTML for humans, JSON for agents. Consumed by the new `atri-jar/aurum-mcp` (and later `Changejarapp/aurum-mcp`) MCP server. Manifest carries a `platforms[]` field on each component for forward-compatible cross-platform support (`aurum-ios` plugs in as a sibling manifest source without restructuring)."
          ]
        }
      },
      {
        "version": "0.1.5",
        "date": "2026-04-28",
        "sections": {
          "Fixed": [
            "**All 114 icons re-rendered to match Figma.** The previous import pipeline used Figma MCP asset URLs that returned only the inner SVG path with `viewBox` set to the path's tight bounding box (e.g. `7.5 × 13.5` for ChevronRight). Combined with `width/height = 24dp`, this caused non-uniform stretch and stripped the surrounding 24×24 frame padding — the chevron rendered fat and squashed, every other non-square icon was distorted, and even square-bbox icons lost their intended 2-3 dp inset.",
            "**Stroke-only icons no longer get a fill.** Phosphor regular-weight SVGs carry `fill=\"none\"` at the `<svg>` root, cascading to children. The previous import didn't honour the cascade and emitted both `fillColor` and `strokeColor` — so e.g. `Home` rendered as a solid black house instead of the intended outline."
          ],
          "Changed": [
            "**Icon import pipeline rewritten** to fetch via the Figma REST API (`/v1/images?…&format=svg`) using `$FIGMA_ACCESS_TOKEN`. REST exports include the 24×24 frame and proper SVG-level fill cascade, so the conversion is a clean 1:1 to Vector Drawable. The per-icon `COMPOUND_TRANSLATES` workaround (previously hand-coded for SpeakerSimpleX) is no longer needed and was removed. The stale `figma-icon-urls.json` URL manifest was deleted."
          ],
          "Added": [
            "**`/icons.html` page** on the gallery website — every icon's line + fill weights side by side, grouped by category, with live search and click-to-copy on `AurumIcons.<Category>.<Symbol>`. Reads `AurumIcons.kt` and inlines each Vector Drawable as `currentColor` SVG so icons follow the page theme. No longer need to install the catalog APK to scan the icon set."
          ]
        }
      },
      {
        "version": "0.1.4",
        "date": "2026-04-28",
        "sections": {
          "Changed": [
            "**`AurumChip`** realigned with the Figma \"Action\" chip component (`YvIxqu2oTlM6UnkL0OloHc`, node `4446-701`). Adds `size` (`AurumChipSize.Large` / `Small`) and `leadingIcon` parameters; height tightened to 38 dp Large / 30 dp Small (from 40 dp); padding now asymmetric (12 dp text-side, 8 dp icon-side); inter-element gap reduced 8 → 4 dp; text style varies by size (`titleT2` / `bodySmall`). Existing call sites are unaffected — new parameters default to the prior behaviour. Previews regrouped into Large-trailing / Large-leading / Large-both / Large-text-only / Small / Disabled.",
            "**Code Connect** for `AurumChip` picks up the new `Size` axis (`large` ↔ `Large`, `small` ↔ `Small`)."
          ]
        }
      },
      {
        "version": "0.1.3",
        "date": "2026-04-27",
        "sections": {
          "Added": [
            "**Compose perf guardrails.** Detekt + [`mrmans0n/compose-rules`](https://github.com/mrmans0n/compose-rules) wired in, with the perf/stability rules active (`UnstableCollections`, `MutableStateAutoboxing`, `MutableParams`, `MutableStateParam`, `LambdaParameterInRestartableEffect`, `Material2`). Compose Compiler Metrics enabled on `:aurum` and `:aurum-catalog` (`build/compose_compiler/`).",
            "**Compose stability CI gate.** New `verifyComposeStability` Gradle task in `:aurum` fails the build when `aurum_release-classes.txt` reports more inferred-unstable classes than `composeStabilityThreshold` (currently `0`). Wired into `check.yml` after detekt.",
            "**Compose metrics dashboard** deployed alongside the gallery at [changejarapp.github.io/aurum-android/metrics/](https://changejarapp.github.io/aurum-android/metrics/), rendered from `build/compose_compiler/` via [`PatilShreyas/compose-report-to-html`](https://github.com/PatilShreyas/compose-report-to-html). Per-PR `compose-metrics` artifact uploaded by `check.yml`.",
            "**Aurum icon set** — 57 icons × 2 weights = 114 vector drawables imported from the Figma \"Component Icons\" frame, exposed under `AurumIcons.<Category>.<Name>` (and `<Name>Filled` for the fill variant). 8 categories: `Navigation`, `Action`, `Content`, `Media`, `Commerce`, `System`, `Status`, `User`. Ingested by the new `tooling/icons/import_from_figma.py` script (`make icons-import`); idempotent re-runs.",
            "**`IconGallery`** screen in the catalog showing every icon × weight, grouped by category.",
            "**114 Code Connect mappings** for the new icons under `aurum/src/main/kotlin/com/jar/app/aurum/component/icon/figma_connect/AurumIcon*.figma.kt`. Auto-published to Figma via the `figma-code-connect.yml` workflow."
          ],
          "Changed": [
            "**6 overlapping icons replaced** from the Figma source-of-truth: `Navigation.Back`→`ArrowLeft`, `Navigation.ChevronForward`→`ChevronRight`, `Media.Like`→`Content.Heart` (renames; 12 call-site migrations across `AurumTopAppBar`, `AurumChip`, `AurumSectionHeader`, `AurumLinkButton`, and the catalog gallery). `Navigation.Close`, `Action.Edit`, `Action.Search` kept their names — only their underlying XML content was replaced.",
            "**5 components marked codebase-only**: `AurumSearchField`, `AurumIconButton`, `AurumDivider`, `AurumLoader`, `AurumSkeleton` — verified absent from the Figma library via MCP search. File-level marker added so future Code-Connect audits don't keep flagging them.",
            "**`AurumIcons.kt` regenerated** from the import script. The 3 legacy entries that lack a Figma counterpart (`Action.Add`, `Action.Overflow`, `Selection.Check`) remain hand-authored under `res/drawable/` and are flagged in-file pending design escalation.",
            "**`record.yml` now also dispatches `pages.yml`** after committing fresh baselines on `main`, so the gallery's snapshot embeds redeploy without a manual trigger."
          ],
          "Fixed": [
            "**`AurumOtpInput`**: keyed `LaunchedEffect` on the completion-boundary transition (`value.length == maxLength`) instead of `value` itself, so the coroutine no longer relaunches on every keystroke.",
            "**`AurumSkeleton`**: moved the `shimmerProgress` state read out of the `drawWithCache` cache block and into `onDrawBehind`, so the cache is no longer invalidated on every animation frame. The gradient `colors` list is now `remember`-ed.",
            "**`AurumText`**: `inlineContent` parameter typed as `ImmutableMap<…>` instead of `Map<…>`, restoring skippability (caught by the new compose-rules `UnstableCollections` rule).",
            "**CI Java mismatch**: `compose-report-to-html` v1.5.0 JAR is built against Java 21; `check.yml` and `pages.yml` now install JDK 21 alongside JDK 17 and invoke the JAR via `$JAVA_HOME_21_X64/bin/java`."
          ],
          "Tooling": [
            "New Makefile targets: `make lint-compose`, `make compose-metrics`, `make compose-metrics-html`, `make icons-import`, `make icons-brand` (rename of the prior `make icons` for clarity vs the new icon-set sync).",
            "New tooling scripts: `tooling/icons/import_from_figma.py` (Figma SVG → Vector Drawable + AurumIcons.kt + Code Connect codegen) and `tooling/gallery/render_metrics_index.py` (gallery `/metrics/` landing page)."
          ]
        }
      },
      {
        "version": "0.1.2",
        "date": "2026-04-23",
        "sections": {
          "Added": [
            "**Screenshot testing** via Roborazzi + ComposablePreviewScanner. 334 baseline\nPNGs committed under `aurum/src/test/snapshots/` (Git LFS-tracked) covering\nevery `@Preview` and every tile of the `@AurumPreview` 6-device fan-out.\nAny visual regression fails CI before merge. Tasks: `recordRoborazziDebug`\n(refresh baselines), `verifyRoborazziDebug` (CI check), `compareRoborazziDebug`\n(diff without failing).",
            "**`.github/workflows/check.yml`** — PR + main-push workflow running library +\ncatalog build, lint, and snapshot verification. Diff PNGs uploaded as a\nworkflow artifact on any screenshot drift so design reviewers can eyeball\nthe exact delta.",
            "**Git LFS** (`.gitattributes`) tracking `aurum/src/test/snapshots/**/*.png`\n— keeps pack files small, surfaces binary diffs in PR UIs."
          ]
        }
      },
      {
        "version": "0.1.1",
        "date": "2026-04-23",
        "sections": {
          "Changed": [
            "**Maven coordinate realigned** with Jar's library convention.\n- Before: `com.jarapp:aurum:<ver>`\n- After:  `com.jar.internal.library.aurum-android:core:<ver>`\n- Kotlin import package inside the AAR stays `com.jar.app.aurum.*` — no source rename.\n- This lets consumers resolve Aurum via the existing `Changejarapp/*` wildcard\n  Maven repo in `jar-android/settings.gradle.kts`, identical to how\n  `com.jar.internal.library.core-network:shared` and siblings are resolved.\n- The previous `com.jarapp:aurum:0.1.0` artifact is stale and should not be\n  consumed — it's kept in GitHub Packages only to avoid the \"published once,\n  cannot re-publish the same coord\" rule."
          ],
          "Removed": [
            "`AurumElevation.toast` + `ElevationTintColors.toast` + `AurumLightElevation.toast` entry + `AurumLightColors.elevationTint.toast` value — Figma ships only a tint for `elevation/_toast` (no dedicated dims) and the fallback shape matched `lowRaised`, so the Kotlin surface added API surface without semantic value. Snackbars/toasts now use `Aurum.elevation.lowRaised` directly. The plugin mapping (`figma-plugin-aurum-sync`) marks `_toast` as an explicitly skipped elevation token and bumps to `0.1.1`."
          ],
          "Added": [
            "`AurumColors.visual` — new decorative palette subgroup exposing 77 chromatic tokens (blue/green/orange/pink/purple/red/yellow × shades 50…1000). Mirrors Figma's `visual_colors` collection 1:1 and sources values from `AurumPalette` primitives. Feature code uses `Aurum.colors.visual.<family><shade>` for palette-keyed decorative colours that have no semantic meaning. Raw `AurumPalette` stays `internal`.",
            "`AurumPhoneNumberInput` — phone-number variant of `AurumTextField` with country-code prefix slot, optional flag composable, digit-only input filter, `KeyboardType.Phone`, and a default 10-digit max length. Mirrors the Figma \"Phone Number Input\" component set.",
            "`AurumTextField.figma.kt` — Code Connect stub against Figma `4623:373` mapping `state`, `validationState`, `multi_line`, `label`, `showHelpText` to `AurumTextField` API props.",
            "`AurumPhoneNumberInput.figma.kt` — Code Connect stub against Figma `4904:2455` mapping `state`, `validationState`, `hasValue`, `label`, `showHelpText`.",
            "`AurumOtpValidationState.Timer` — fourth validation state for resend-countdown UX. Renders identically to `None` but provides a semantic channel matching the Figma `validationState=timer` variant.",
            "`Modifier.aurumHardShadow(color, offsetY, shape)` — solid-colour offset drop shadow for skeuomorphic \"stacked card\" effects (matches Figma's `shadow(0, Ypx, 0, 0, color)` spec). Encapsulates the double-box idiom into a single modifier that expands layout by `offsetY` and paints the shape outline behind content."
          ],
          "Fixed": [
            "`AurumOtpInput` disabled digits now use `surface.textDefaultDisabled` (matching Figma `text/default/disabled`) instead of `textDefaultNormal` at 10% alpha.",
            "`AurumTopAppBar` synced to Figma `4826:1057` Page Header: title uses SemiBold (was Medium); subtitle uses `labelL2` Medium 12/16 in `textDefaultNormal` (was `bodyB3` Normal in `textDefaultSubtle`); primary button uses SemiBold label and natural 36 dp height from 8 dp padding (was fixed 32 dp, Medium); back + action icons tint via `interactive.iconNeutralNormal` (was `surface.textDefaultNormal` — same hex, correct token). Docstring fix: icon wrapper is 32 × 40 dp (w × h), not 40 × 32.",
            "`AurumBadge` synced to Figma `4240:10843`: both emphases now render at `Label/L-Medium` (12/16 Inter Medium) — previously had a 18 sp line-height and Intense emphasis rendered Normal weight. Emphasis-specific text styles collapsed to a single shared style.",
            "`AurumSectionHeader` synced to Figma `3702:162168`: title, link label, and text-action label render SemiBold (`Title/S-SemiBold` / `Title/XS-SemiBold`); icon-action tint uses `interactive.iconNeutralNormal` (was `surface.iconDefaultNormal` — same hex, correct semantic).",
            "`AurumSwitch` synced to Figma `4018:557`: thumb now uses `interactive.bgNeutralInverse` (was `surface.bgPageBase` — same hex, correct semantic); checked icon uses `interactive.iconPrimaryNormal` (was `bgPrimaryDefault`); disabled-checked icon uses `interactive.iconNeutralDisabled` (was `bgNeutralDisabled` — **real hex drift** fixed).",
            "`AurumStepper` synced to Figma `3834:139631`: numeric value and ± symbols render Bold (`Num/XS`); Neutral and Brand state colours moved to the `interactive.*` token family; disabled-state bg/border/icon hexes corrected (`#6C849D17` / `#C3C7D1` were previously rendering as `#ECEEF3` / `#848A99`).",
            "`AurumLabel` synced to Figma `3774:137816`: all variants render Medium weight (was SemiBold); `Strong` variant now uses `labelL2` size (was `labelL1`) and `feedback.textPrimaryIntense` colour (was `surface.textDefaultNormal`).",
            "`AurumButton` synced to Figma `4692:1074`: primary-disabled text token changed to `textPrimaryDisabled` (was `textOnPrimaryDisabled`); secondary variant border uses `borderPrimaryDefault` when enabled and `borderNeutralMuted` when disabled (was `borderNeutralDefault` / `borderNeutralDisabled`)."
          ]
        }
      },
      {
        "version": "0.2.0",
        "date": "2026-04-16",
        "sections": {
          "Added": [
            "**Figma Code Connect** infrastructure: Gradle plugin, CLI, `*.figma.kt` pattern",
            "`AurumIcons` namespace with 8 XML Vector Drawables from Figma exports",
            "`AurumLinkButton` — new component from Figma Button page",
            "`AurumBadge` — 6 colors × 2 emphases × 2 sizes from Figma",
            "`AurumOtpInput` — digit-by-digit OTP from Figma spec",
            "`AurumStepper` — numeric +/− from Figma spec",
            "`AurumLabel` — styled text label from Figma spec",
            "`AurumSectionHeader` — section divider from Figma spec",
            "`AurumSwitch` — toggle from Figma spec",
            "`version.properties` for semver tracking"
          ],
          "Changed": [
            "**AurumButton** rebuilt from Figma spec: 3 variants (removed Ghost/Destructive), corrected heights (40/48/56dp), added `isFullWidth` + `isLoading`, 12dp corner radius",
            "**AurumTypography** restructured to match Figma type scale: 14 scale composites (Display/Heading/Body/Caption) + 6 component-level styles",
            "**AurumTextField** audited: added success state, readonly treatment, character counter, fixed error token layer",
            "All Material Icons replaced with `AurumIcons.*` (XML Vector Drawables loaded via `ImageVector.vectorResource()`)",
            "Button size enum renamed `Sm/Md/Lg` → `Small/Medium/Large`",
            "Button style enum renamed `AurumButtonStyle` → `AurumButtonVariant`"
          ],
          "Fixed": [
            "Secondary button was filled grey — now transparent bg + outline border per Figma",
            "Typography composites were engineering assumptions — now 14 match actual Figma scale",
            "Hand-drawn `ImageVector.Builder` paths replaced with proper XML drawables"
          ]
        }
      },
      {
        "version": "0.1.0",
        "date": "2026-04-16",
        "sections": {
          "Added": [
            "Initial Aurum module scaffold (`:core-designsystem` + `:core-designsystem-catalog`)",
            "196 semantic colour tokens from Figma export (6 sub-structs)",
            "Spacing, radius, border-width, icon-size, elevation, motion, opacity tokens",
            "`AurumTheme` composable with `MaterialBridge` (hybrid M3 architecture)",
            "Foundation primitives: `AurumText`, `AurumIcon`, `AurumSurface`, `AurumDivider`",
            "Interactive primitives: `AurumButton`, `AurumIconButton`, `AurumTextField`, `AurumSearchField`",
            "Navigation: `AurumTopAppBar` (10 Figma variants)",
            "Feedback: `AurumLoader`, `AurumSkeleton`",
            "Preview infrastructure: `@AurumPreview`, `AurumPreviewSurface`",
            "`Modifier.aurumShadow()` for elevation rendering",
            "CLAUDE.md module guide + 30 documentation files",
            "Catalog app with 6 foundation gallery screens"
          ]
        }
      }
    ]
  }
}
