@hjmds/design-contracts 1.40.0 → 1.41.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (76) hide show
  1. package/dist/agreement.d.ts +2 -2
  2. package/dist/base-recipes.d.ts +11 -3
  3. package/dist/base-recipes.d.ts.map +1 -1
  4. package/dist/base-recipes.js +9 -4
  5. package/dist/base-recipes.js.map +1 -1
  6. package/dist/behaviors.d.ts +4 -4
  7. package/dist/card.d.ts +1 -1
  8. package/dist/card.js +1 -1
  9. package/dist/card.js.map +1 -1
  10. package/dist/catalog.d.ts +107 -85
  11. package/dist/catalog.d.ts.map +1 -1
  12. package/dist/choice-row.d.ts +26 -0
  13. package/dist/choice-row.d.ts.map +1 -0
  14. package/dist/choice-row.js +24 -0
  15. package/dist/choice-row.js.map +1 -0
  16. package/dist/colors.d.ts +2 -0
  17. package/dist/colors.d.ts.map +1 -1
  18. package/dist/colors.js +3 -1
  19. package/dist/colors.js.map +1 -1
  20. package/dist/command-palette.d.ts +2 -2
  21. package/dist/component-contracts.d.ts +2 -2
  22. package/dist/component-contracts.js +2 -2
  23. package/dist/component-contracts.js.map +1 -1
  24. package/dist/component-recipes.d.ts +76 -64
  25. package/dist/component-recipes.d.ts.map +1 -1
  26. package/dist/component-recipes.js +18 -16
  27. package/dist/component-recipes.js.map +1 -1
  28. package/dist/data-table.d.ts +1 -1
  29. package/dist/icon-button-recipe.d.ts +2 -2
  30. package/dist/icon-button-recipe.js +3 -3
  31. package/dist/icon-button-recipe.js.map +1 -1
  32. package/dist/menubar.d.ts +2 -2
  33. package/dist/palette-contrast.d.ts.map +1 -1
  34. package/dist/palette-contrast.js +2 -0
  35. package/dist/palette-contrast.js.map +1 -1
  36. package/dist/semantic-colors.d.ts +18 -1
  37. package/dist/semantic-colors.d.ts.map +1 -1
  38. package/dist/semantic-colors.js +7 -1
  39. package/dist/semantic-colors.js.map +1 -1
  40. package/dist/sidebar.d.ts +2 -2
  41. package/dist/time-picker.d.ts +16 -4
  42. package/dist/time-picker.d.ts.map +1 -1
  43. package/dist/time-picker.js +26 -5
  44. package/dist/time-picker.js.map +1 -1
  45. package/dist/toggle-group.d.ts +3 -3
  46. package/dist/toggle-group.js +3 -3
  47. package/dist/toggle-group.js.map +1 -1
  48. package/dist/transfer-list.d.ts +2 -2
  49. package/dist/tree.d.ts +2 -2
  50. package/dist/version.d.ts +1 -1
  51. package/dist/version.js +1 -1
  52. package/dist/version.js.map +1 -1
  53. package/docs/ant-design-coverage.md +6 -1
  54. package/docs/brand-boundary.md +1 -0
  55. package/docs/generated/component-maturity.md +1 -1
  56. package/docs/generated/renderer-evidence.json +3 -3
  57. package/docs/generated/renderer-evidence.md +1 -1
  58. package/docs/generated/showcase-manifest.json +1 -1
  59. package/docs/theme-palette.md +60 -0
  60. package/docs/time-picker.md +21 -0
  61. package/docs/usage/FINDING.md +71 -0
  62. package/docs/usage/README.md +5 -3
  63. package/docs/usage/SELECTION.md +8 -2
  64. package/docs/usage/components/bottom-navigation.md +5 -0
  65. package/docs/usage/components/card.md +2 -2
  66. package/docs/usage/components/chip.md +1 -1
  67. package/docs/usage/components/choice-row.md +77 -0
  68. package/docs/usage/components/keyboard-avoidance-context.md +3 -3
  69. package/docs/usage/components/segmented-control.md +1 -1
  70. package/docs/usage/components/surface.md +7 -1
  71. package/docs/usage/components/tabs.md +5 -0
  72. package/docs/usage/components/time-picker.md +20 -2
  73. package/docs/usage/components/toggle-group.md +5 -0
  74. package/docs/usage/compositions/save-feedback.md +43 -21
  75. package/docs/usage/tokens/color.md +17 -3
  76. package/package.json +7 -1
@@ -1 +1 @@
1
- {"version":3,"file":"component-recipes.js","sourceRoot":"","sources":["../src/component-recipes.ts"],"names":[],"mappings":"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","sourcesContent":["import { solidAccentColor, type ColorReference } from \"./color-references.js\";\nimport {\n collectionItemContract,\n fieldFrameContract,\n floatingSurfaceContract,\n focusIndicatorContract,\n formSupportContract,\n} from \"./component-contracts.js\";\nimport {\n backdrop,\n breakpoint,\n control,\n glyph,\n layer,\n largeTextThreshold,\n layout,\n fontWeight,\n motion,\n motionPreset,\n opacity,\n radius,\n spacing,\n stroke,\n typography,\n type FontWeightValue,\n type GlyphSize,\n type TextVariant,\n} from \"./foundations.js\";\nimport { buttonRecipe } from \"./base-recipes.js\";\nimport { semanticColors } from \"./semantic-colors.js\";\nimport { tooltipDescriptorDefaults } from \"./tooltip.js\";\nimport { bottomNavigationRecipeDefaults } from \"./bottom-navigation-defaults.js\";\n\nexport {\n iconButtonEdges,\n iconButtonRecipe,\n resolveIconButtonEdgeOverhang,\n resolveIconButtonPresentation,\n type IconButtonEdge,\n type IconButtonShape,\n type IconButtonSize,\n type IconButtonTone,\n type ResolvedIconButtonPresentation,\n} from \"./icon-button-recipe.js\";\nexport {\n counterBadgeDefaults,\n counterBadgeRecipe,\n formatCounterBadgeCount,\n type CounterBadgeSize,\n type CounterBadgeTone,\n type CounterBadgeVariant,\n} from \"./counter-badge-recipe.js\";\nexport {\n progressRecipe,\n resolveProgressSegments,\n type ProgressShape,\n type ProgressSize,\n type ProgressTone,\n} from \"./progress-recipe.js\";\nexport type {\n BottomNavigationDensity,\n BottomNavigationDistribution,\n BottomNavigationPresentation,\n} from \"./bottom-navigation-defaults.js\";\n\nexport type TextTone =\n | \"primary\"\n | \"body\"\n | \"muted\"\n | \"subtle\"\n | \"weak\"\n | \"brand\"\n | \"danger\"\n | \"inverse\";\nexport type TextEmphasis = \"regular\" | \"medium\" | \"strong\";\n\nexport const textRecipe = {\n slots: [\"root\"] as const,\n defaults: { variant: \"body\", tone: \"primary\", emphasis: \"regular\" },\n tones: {\n primary: semanticColors.content.primary,\n body: semanticColors.content.body,\n muted: semanticColors.content.secondary,\n subtle: semanticColors.content.tertiary,\n weak: semanticColors.content.decorative,\n brand: semanticColors.content.brand,\n danger: semanticColors.content.danger,\n inverse: semanticColors.content.inverse,\n },\n // 2026-10-17 user decisions: the strongest inline emphasis matches the title weight. strong=700 made unread\n // notification titles and labels heavier than every title after titles moved to 600 (\"왜 폰트가 진해\"), so\n // strong became 600; the second round (\"굵기 좀더 줄여\") moved titles 600→500 and display headings 700→600,\n // so strong follows the title role (500) and equals `medium`. Semibold 600 is the key-number/selected step.\n emphasis: {\n regular: fontWeight.regular,\n medium: fontWeight.medium,\n strong: typography.title.fontWeight,\n },\n /**\n * Variants whose omitted `emphasis` renders the variant's typography weight even without a design profile.\n * Label's 500 equals the `medium` emphasis step, but the shared `regular` default drew form labels at\n * body weight (2026-10-17 user decision: label 500 on Web and Native). Other variants keep `regular`.\n */\n variantWeight: [\"label\"],\n} as const satisfies {\n slots: readonly [\"root\"];\n defaults: {\n variant: TextVariant;\n tone: TextTone;\n emphasis: TextEmphasis;\n };\n tones: Record<TextTone, ColorReference>;\n emphasis: Record<TextEmphasis, FontWeightValue>;\n variantWeight: readonly TextVariant[];\n};\n\n/**\n * Weight Text renders when the caller omits `emphasis`; `undefined` means `textRecipe.defaults.emphasis` applies.\n * Inside a design profile every variant follows the profile's typography weight; outside one only\n * `textRecipe.variantWeight` variants do. An explicit `emphasis` always wins and never reaches this resolver.\n */\nexport function resolveTextDefaultWeight(\n variant: TextVariant,\n typographyTokens: Readonly<Record<TextVariant, Readonly<{ fontWeight: FontWeightValue }>>>,\n designProfileActive: boolean,\n): FontWeightValue | undefined {\n return designProfileActive || (textRecipe.variantWeight as readonly TextVariant[]).includes(variant)\n ? typographyTokens[variant].fontWeight\n : undefined;\n}\n\nexport type IconTone =\n | \"primary\"\n | \"secondary\"\n | \"decorative\"\n | \"brand\"\n | \"info\"\n | \"success\"\n | \"warning\"\n | \"danger\"\n | \"inverse\";\nexport type IconWeight = \"regular\" | \"strong\";\n\nexport const iconRecipe = {\n slots: [\"root\"] as const,\n defaults: {\n size: \"md\",\n tone: \"secondary\",\n weight: \"regular\",\n decorative: true,\n },\n sizes: glyph,\n tones: {\n primary: semanticColors.content.primary,\n secondary: semanticColors.content.secondary,\n decorative: semanticColors.content.decorative,\n brand: semanticColors.content.brand,\n info: semanticColors.feedback.info.foreground,\n success: semanticColors.feedback.success.foreground,\n warning: semanticColors.feedback.warning.foreground,\n danger: semanticColors.content.danger,\n inverse: semanticColors.content.inverse,\n },\n weights: { regular: 2, strong: 2.5 },\n stroke: {\n lineCap: \"round\",\n lineJoin: \"round\",\n scaling: \"proportional\",\n },\n} as const satisfies {\n slots: readonly [\"root\"];\n defaults: {\n size: GlyphSize;\n tone: IconTone;\n weight: IconWeight;\n decorative: boolean;\n };\n sizes: Record<GlyphSize, number>;\n tones: Record<IconTone, ColorReference>;\n weights: Record<IconWeight, number>;\n stroke: {\n lineCap: \"round\";\n lineJoin: \"round\";\n scaling: \"proportional\";\n };\n};\n\nexport type StackAxis = \"block\" | \"inline\";\nexport type StackGap = keyof typeof spacing;\nexport type StackAlign = \"start\" | \"center\" | \"end\" | \"stretch\";\nexport type StackJustify = \"start\" | \"center\" | \"end\" | \"between\";\n\nexport const stackRecipe = {\n slots: [\"root\"] as const,\n defaults: { axis: \"block\", gap: \"md\", align: \"stretch\", justify: \"start\", wrap: false },\n axes: { block: \"column\", inline: \"row\" },\n gaps: spacing,\n align: [\"start\", \"center\", \"end\", \"stretch\"] as const,\n justify: [\"start\", \"center\", \"end\", \"between\"] as const,\n} as const satisfies {\n slots: readonly [\"root\"];\n defaults: {\n axis: StackAxis;\n gap: StackGap;\n align: StackAlign;\n justify: StackJustify;\n wrap: boolean;\n };\n axes: Record<StackAxis, \"column\" | \"row\">;\n gaps: Record<StackGap, number>;\n align: readonly StackAlign[];\n justify: readonly StackJustify[];\n};\n\nexport type LinkTone = \"brand\" | \"neutral\";\nexport type LinkVariant = \"inline\" | \"standalone\";\n\nexport const linkRecipe = {\n slots: [\"root\", \"leading\", \"label\", \"trailing\"] as const,\n defaults: { tone: \"brand\", variant: \"inline\" },\n tones: {\n brand: semanticColors.content.brand,\n neutral: semanticColors.content.body,\n },\n variants: {\n inline: {\n textVariant: \"body\",\n fontWeight: fontWeight.medium,\n underline: \"always\",\n minHeight: null,\n minWidth: null,\n },\n /** 그 자체가 동작이므로 두 축 모두 최소 터치 타깃. 높이만 잡으면 짧은 라벨이 좁아진다. */\n standalone: {\n textVariant: \"body\",\n fontWeight: fontWeight.medium,\n underline: \"hover\",\n minHeight: control.minTouchTarget,\n minWidth: control.minTouchTarget,\n },\n },\n gap: spacing.xxs,\n icon: { glyph: \"xs\", inheritsTone: true },\n states: {\n pressedOpacity: opacity.pressed,\n focus: focusIndicatorContract,\n },\n} as const satisfies {\n slots: readonly [\"root\", \"leading\", \"label\", \"trailing\"];\n defaults: { tone: LinkTone; variant: LinkVariant };\n tones: Record<LinkTone, ColorReference>;\n variants: Record<\n LinkVariant,\n {\n textVariant: TextVariant;\n fontWeight: FontWeightValue;\n underline: \"always\" | \"hover\";\n minHeight: number | null;\n minWidth: number | null;\n }\n >;\n gap: number;\n icon: { glyph: GlyphSize; inheritsTone: true };\n states: {\n pressedOpacity: number;\n focus: typeof focusIndicatorContract;\n };\n};\n\nexport const selectionGroupRecipe = {\n slots: [\"root\", \"label\", \"requiredIndicator\", \"description\", \"items\", \"itemLabel\", \"itemAction\", \"error\"] as const,\n defaults: { orientation: \"vertical\", presentation: \"card\" },\n orientations: {\n vertical: {\n direction: \"column\",\n // `grouped` rows sit flush inside one shared card, so the group owns\n // the only outer radius and the rows share edges instead of floating\n // apart with their own gap — the same shape as `selectionControlRecipe`'s\n // `grouped` presentation, which this gap pairs with.\n gap: { plain: spacing.xxs, card: spacing.xs, grouped: 0, chips: spacing.xs },\n },\n horizontal: {\n direction: \"row\",\n gap: { plain: spacing.sm, card: spacing.md, grouped: 0, chips: spacing.xs },\n },\n },\n label: formSupportContract.label,\n requiredIndicator: { color: semanticColors.content.danger },\n description: formSupportContract.hint,\n error: formSupportContract.error,\n supportGap: formSupportContract.gap,\n states: { disabledOpacity: opacity.disabled },\n} as const;\n\nexport type SelectionGroupOrientation = keyof typeof selectionGroupRecipe.orientations;\nexport type SelectionGroupPresentation = keyof typeof selectionGroupRecipe.orientations.vertical.gap;\n\nexport type BadgeTone =\n | \"neutral\"\n /**\n * One step stronger than `neutral`: solid ink plate instead of a muted\n * label + sunken plate. A product author needed this for a result screen\n * where win/loss is the fact itself, not a side note, and `neutral` plus\n * its `outline` variant read as nearly the same grey — the one place the\n * distinction had to be unmistakable at a glance. Use it where a badge must\n * outrank `neutral` without borrowing an accent or the brand tint (both of\n * which already carry other meanings — see the `brand` tone below).\n */\n | \"strong\"\n | \"brand\"\n | \"info\"\n | \"success\"\n | \"warning\"\n | \"attention\"\n | \"danger\";\nexport type BadgeSize = \"small\" | \"medium\";\nexport type BadgeVariant = \"filled\" | \"outline\";\n\nexport type BadgeAdornmentContext = Readonly<{ color: string; size: number }>;\n\nexport const badgeRecipe = {\n slots: [\"root\", \"icon\", \"label\", \"trailing\"] as const,\n defaults: { tone: \"neutral\", size: \"medium\", variant: \"filled\" },\n variants: {\n filled: {\n usesToneBackground: true,\n borderFallback: null,\n },\n outline: {\n usesToneBackground: false,\n borderFallback: semanticColors.border.default,\n },\n },\n // 2026-10-18: match the Today Baseball status plate reference: solid fill,\n // white copy and compact rounded corners. Outline retains its tone-colored copy.\n tones: {\n neutral: { content: semanticColors.content.statusInverse, outlineContent: semanticColors.content.secondary, background: semanticColors.surface.statusNeutral, border: null },\n strong: { content: semanticColors.content.statusInverse, outlineContent: semanticColors.content.primary, background: semanticColors.surface.statusStrong, border: null },\n brand: { content: semanticColors.content.inverse, outlineContent: semanticColors.content.brand, background: semanticColors.action.brand.background, border: null },\n info: { content: semanticColors.content.statusInverse, outlineContent: semanticColors.feedback.info.foreground, background: solidAccentColor(\"info\"), border: semanticColors.feedback.info.border },\n success: { content: semanticColors.content.statusInverse, outlineContent: semanticColors.feedback.success.foreground, background: solidAccentColor(\"success\"), border: semanticColors.feedback.success.border },\n warning: { content: semanticColors.content.statusInverse, outlineContent: semanticColors.feedback.warning.foreground, background: solidAccentColor(\"warning\"), border: semanticColors.feedback.warning.border },\n attention: { content: semanticColors.content.statusInverse, outlineContent: semanticColors.feedback.attention.foreground, background: solidAccentColor(\"attention\"), border: semanticColors.feedback.attention.border },\n danger: { content: semanticColors.action.danger.content, outlineContent: semanticColors.content.danger, background: semanticColors.action.danger.background, border: semanticColors.feedback.danger.border },\n },\n sizes: {\n small: {\n minHeight: 20,\n paddingHorizontal: spacing.xs,\n gap: spacing.xxs,\n iconSize: glyph.xs,\n textVariant: \"caption\",\n },\n medium: {\n minHeight: 24,\n paddingHorizontal: spacing.xs,\n gap: spacing.xxs,\n iconSize: glyph.xs,\n textVariant: \"caption\",\n },\n },\n radius: \"sm\",\n borderWidth: stroke.default,\n fontWeight: fontWeight.bold,\n} as const;\n\nexport type SearchFieldSize = \"medium\" | \"large\";\n\n/** Search is a field specialization with stable affordance and clear targets. */\nexport const searchFieldRecipe = {\n slots: [\"root\", \"leading\", \"input\", \"trailing\", \"clear\", \"spinner\"] as const,\n defaults: { size: \"medium\", shape: \"medium\" },\n sizes: {\n medium: {\n minHeight: control.minTouchTarget,\n paddingHorizontal: spacing.sm,\n gap: spacing.xs,\n glyph: \"sm\",\n clearDiameter: 36,\n clearHitSlop: 4,\n textVariant: \"body\",\n },\n large: {\n minHeight: control.buttonHeight.large,\n paddingHorizontal: spacing.md,\n gap: spacing.sm,\n glyph: \"sm\",\n clearDiameter: control.minTouchTarget,\n clearHitSlop: 0,\n textVariant: \"bodyLarge\",\n },\n },\n colors: {\n background: semanticColors.canvas,\n content: semanticColors.content.primary,\n placeholder: semanticColors.content.secondary,\n leading: semanticColors.content.decorative,\n clear: semanticColors.content.secondary,\n border: semanticColors.border.control,\n focus: focusIndicatorContract.color,\n invalid: semanticColors.border.danger,\n },\n /**\n * 모양은 **축이다** — 값 하나로 못 박지 않는다.\n *\n * 원래 여기는 `radius: \"full\"` 하나였다. 그런데 `fieldRecipe`는 같은 결정을\n * `shapes: { medium, large, full }` 축으로 열어 두고 있었고, 그래서 **한 앱 안에서\n * 평범한 입력과 찾기 입력이 서로 다른 모양이 되는 것을 계약이 막지 못했다.** 실제로\n * 갈라졌다 — app-rn은 `\"md\"`로 그리고 있었는데 이 계약은 `\"full\"`이라고 말하고\n * 있었고, 어느 쪽이 옳은지 양쪽 문서 어디에도 없었다.\n *\n * 찾기 입력이 알약이어야 하는지는 **제품이 정할 일**이고(iOS 관례는 알약, 이 앱은\n * 사각), 계약이 할 일은 그 선택지를 `fieldRecipe`와 **같은 이름으로** 주는 것이다.\n * 그러면 두 입력의 모양을 나란히 맞추는 것과 일부러 다르게 하는 것이 둘 다 표현된다.\n */\n shapes: { medium: \"md\", large: \"lg\", full: \"full\" },\n borderWidth: stroke.default,\n focusRingWidth: focusIndicatorContract.width,\n focusRingOffset: focusIndicatorContract.offset,\n states: {\n disabledOpacity: opacity.disabled,\n pressedOpacity: opacity.pressed,\n },\n} as const satisfies {\n slots: readonly [\"root\", \"leading\", \"input\", \"trailing\", \"clear\", \"spinner\"];\n defaults: { size: SearchFieldSize; shape: \"medium\" | \"large\" | \"full\" };\n sizes: Record<\n SearchFieldSize,\n {\n minHeight: number;\n paddingHorizontal: number;\n gap: number;\n glyph: GlyphSize;\n clearDiameter: number;\n clearHitSlop: number;\n textVariant: TextVariant;\n }\n >;\n colors: Record<\n \"background\" | \"content\" | \"placeholder\" | \"leading\" | \"clear\" | \"border\" | \"focus\" | \"invalid\",\n ColorReference\n >;\n shapes: Record<\"medium\" | \"large\" | \"full\", keyof typeof radius>;\n borderWidth: number;\n focusRingWidth: number;\n focusRingOffset: number;\n states: { disabledOpacity: number; pressedOpacity: number };\n};\n\nexport type ChipSize = keyof typeof control.chipHeight;\n\nexport const chipRecipe = {\n slots: [\"root\", \"leading\", \"indicator\", \"label\", \"trailing\"] as const,\n defaults: { size: \"small\", selected: false },\n /**\n * `height` is the minimum visible height; a label taller than it grows the chip (Web `min-block-size`,\n * Native `minHeight` from 1.13.1). Native used it as a fixed height and clipped labels at large text\n * (utilverse 1.13.0 adoption, 2026-10-06), unlike Web and Button.\n */\n sizes: {\n small: {\n height: control.chipHeight.small,\n hitSlop: 4,\n paddingHorizontal: spacing.sm,\n gap: spacing.xxs,\n textVariant: \"body\",\n },\n medium: {\n height: control.chipHeight.medium,\n hitSlop: 0,\n paddingHorizontal: spacing.md,\n gap: spacing.xs,\n textVariant: \"body\",\n },\n },\n states: {\n idle: {\n background: semanticColors.canvas,\n content: semanticColors.content.secondary,\n // A resting chip wears the shared hairline, not a text-strength\n // outline. Drawing it in `content.secondary` made an unselected chip\n // read heavier than the selected one beside it, inverting the one\n // signal that matters in a filter row.\n border: semanticColors.border.default,\n },\n selected: {\n background: semanticColors.canvas,\n content: semanticColors.content.brand,\n border: semanticColors.border.focus,\n },\n pressedOpacity: opacity.pressed,\n disabledOpacity: opacity.disabled,\n },\n radius: \"full\",\n borderWidth: stroke.default,\n // Selected keeps one step above idle (500 → 600) so the state still carries a weight cue on the lighter scale.\n label: { fontWeight: fontWeight.medium, selectedFontWeight: fontWeight.semibold },\n selectionIndicator: {\n color: semanticColors.content.brand,\n glyph: \"xs\",\n },\n focus: focusIndicatorContract,\n} as const;\n\nexport const dividerRecipe = {\n slots: [\"root\", \"label\"] as const,\n defaults: { orientation: \"horizontal\", inset: \"none\" },\n color: semanticColors.border.default,\n thickness: stroke.subtle,\n insets: {\n none: 0,\n start: spacing.md,\n both: spacing.md,\n },\n} as const;\n\n/**\n * How far a ListRow surface (pressed, hover, selected, focus ring) reaches past the row text on each inline side.\n * 2026-10-17 user decision: the row text sits on its container's content edge (the 16 screen gutter on a default\n * screen) and only the surface bleeds outward by this amount. Rows used to put it inside as padding, so row text\n * started at 16 + 8 = 24 while section titles and result headers started at 16. Containers that clip (grouped List,\n * VirtualList) keep exactly this much inline room so the bleed is never cut.\n */\nconst listRowSurfaceBleed = spacing.xs;\n/** ListRow leading frame and the gap before its text column; the indented separator reuses both. */\nconst listRowLeadingSize = 40;\nconst listRowGap = spacing.sm;\n\nexport const listRecipe = {\n slots: [\"root\", \"item\", \"separator\"] as const,\n defaults: { separator: \"indented\" },\n /**\n * Separators are measured from the list's content edge, where the row text sits, and each one belongs to the row\n * above it (iOS cell separator). \"full\" spans the row surface (content edge ± bleed). \"indented\" follows that row's\n * text column: it starts at the text — `leadingInsetStart` (leading 40 + gap 12) when the row has a leading\n * element, `insetStart` 0 when it has none — and ends on the row's trailing content edge (0).\n * 2026-10-17 user report: a fixed 52 start cut the line off midway under rows without leading (text at 16, line\n * from 68), and the −8 end ran past the trailing content.\n */\n separators: {\n none: null,\n // Controls and router-owned rows already contain their own padding; their separators stay on the content edge.\n content: { insetStart: 0, leadingInsetStart: 0, insetEnd: 0 },\n full: { insetStart: -listRowSurfaceBleed, leadingInsetStart: -listRowSurfaceBleed, insetEnd: -listRowSurfaceBleed },\n indented: { insetStart: 0, leadingInsetStart: listRowLeadingSize + listRowGap, insetEnd: 0 },\n },\n // A grouped list paints its own rounded surface and clips to it, so it leaves the row bleed as inline padding:\n // rows keep their full surface inside the radius and the text stays 8 inside the group edge as before.\n grouped: { paddingInline: listRowSurfaceBleed },\n background: null,\n} as const;\n\nexport type ListRowDensity = \"compact\" | \"comfortable\" | \"relaxed\" | \"spacious\";\n/** Frame geometry the ListRow paints around its leading slot. */\nexport type ListRowLeadingShape = \"square\" | \"circle\";\n\nexport const listRowRecipe = {\n slots: [\"root\", \"leading\", \"content\", \"title\", \"description\", \"trailing\"] as const,\n defaults: { density: \"comfortable\", selected: false, tone: \"default\" },\n // Destructive destinations keep semantic emphasis without renderer-specific title styles.\n tones: { default: { titleColor: semanticColors.content.body }, danger: { titleColor: semanticColors.content.danger } },\n density: {\n compact: {\n oneLineMinHeight: control.minTouchTarget,\n twoLineMinHeight: 60,\n paddingHorizontal: listRowSurfaceBleed,\n paddingVertical: spacing.xxs,\n },\n comfortable: {\n oneLineMinHeight: layout.rowHeight.singleLine,\n twoLineMinHeight: layout.rowHeight.twoLine,\n paddingHorizontal: listRowSurfaceBleed,\n paddingVertical: spacing.xs,\n },\n /*\n 토스 TDS의 ListRow는 세로 여백을 네 단계로 둔다. HJM이 두 단계만 갖고 있던 동안\n 제품은 그 사이 값을 제품 CSS로 만들었다(설정 목록은 넓게, 검색 결과는 좁게).\n 숫자는 이미 있는 spacing 스케일(sm/md)을 그대로 쓰고 새 값을 만들지 않는다.\n 최소 높이는 여백에 맞춰 함께 올라간다 — 여백만 키우면 한 줄 행이 위아래로 치우친다.\n */\n relaxed: {\n oneLineMinHeight: layout.rowHeight.singleLine + spacing.xs,\n twoLineMinHeight: layout.rowHeight.twoLine + spacing.xs,\n paddingHorizontal: listRowSurfaceBleed,\n paddingVertical: spacing.sm,\n },\n spacious: {\n oneLineMinHeight: layout.rowHeight.singleLine + spacing.md,\n twoLineMinHeight: layout.rowHeight.twoLine + spacing.md,\n paddingHorizontal: listRowSurfaceBleed,\n paddingVertical: spacing.md,\n },\n },\n // Loading uses the same row/line boxes as content; only the copy width is illustrative.\n loading: { titleWidthPercent: 60, descriptionWidthPercent: 40, trailingWidth: spacing.xxl },\n /**\n * Inline placement (2026-10-17 user decision, see `listRowSurfaceBleed`): the content box sits on the container's\n * content edge and the surface bleeds outward by `paddingHorizontal` — renderers draw the row with that padding and\n * the same negative inline margin, so pressed/selected fills keep 8 of room beyond the text.\n */\n surfaceBleed: listRowSurfaceBleed,\n gap: listRowGap,\n leadingSize: listRowLeadingSize,\n /**\n * Frame geometry for the leading slot. The size was already declared here but\n * no renderer bound it, so every consumer re-derived the avatar box (radius,\n * clipping, centering) in product styles.\n */\n leadingShapes: { square: null, circle: \"full\" },\n title: { color: semanticColors.content.body, textVariant: \"bodyLarge\", fontWeight: typography.title.fontWeight },\n description: { color: semanticColors.content.secondary, textVariant: \"body\" },\n trailing: {\n textColor: semanticColors.content.secondary,\n iconColor: semanticColors.content.decorative,\n glyph: \"sm\",\n textVariant: \"caption\",\n },\n states: {\n pressedBackground: semanticColors.canvas,\n selectedBackground: semanticColors.canvas,\n disabledOpacity: opacity.disabled,\n },\n} as const satisfies {\n slots: readonly string[];\n defaults: { density: ListRowDensity; selected: boolean; tone: \"default\" | \"danger\" };\n tones: Record<\"default\" | \"danger\", { titleColor: ColorReference }>;\n density: Record<ListRowDensity, {\n oneLineMinHeight: number;\n twoLineMinHeight: number;\n paddingHorizontal: number;\n paddingVertical: number;\n }>;\n loading: { titleWidthPercent: number; descriptionWidthPercent: number; trailingWidth: number };\n surfaceBleed: number;\n gap: number;\n leadingSize: number;\n leadingShapes: Record<ListRowLeadingShape, keyof typeof radius | null>;\n title: unknown;\n description: unknown;\n trailing: unknown;\n states: unknown;\n};\n\nexport type AccordionDensity = \"compact\" | \"comfortable\";\n\nexport const accordionRecipe = {\n slots: [\"root\", \"item\", \"header\", \"trigger\", \"title\", \"indicator\", \"panel\", \"divider\"] as const,\n defaults: { density: \"comfortable\", allowsMultipleExpanded: false },\n density: {\n compact: { triggerMinHeight: control.minTouchTarget, paddingVertical: spacing.xs },\n comfortable: { triggerMinHeight: layout.rowHeight.singleLine, paddingVertical: spacing.sm },\n },\n paddingHorizontal: spacing.xs,\n gap: spacing.sm,\n title: { color: semanticColors.content.body, textVariant: \"bodyLarge\", fontWeight: typography.title.fontWeight },\n indicator: { color: semanticColors.content.secondary, glyph: \"sm\" },\n panel: {\n color: semanticColors.content.body,\n textVariant: \"body\",\n paddingBottom: spacing.md,\n paddingInlineStart: spacing.xs,\n },\n divider: semanticColors.border.default,\n states: {\n pressedBackground: semanticColors.canvas,\n focus: focusIndicatorContract,\n disabledOpacity: opacity.disabled,\n },\n transition: motionPreset.enter,\n} as const;\n\nexport type MenuItemTone = \"neutral\" | \"danger\";\n\nexport const menuRecipe = {\n slots: [\n \"trigger\",\n \"content\",\n \"viewport\",\n \"section\",\n \"sectionLabel\",\n \"item\",\n \"leading\",\n \"copy\",\n \"label\",\n \"description\",\n \"trailing\",\n \"shortcut\",\n \"indicator\",\n \"dangerIndicator\",\n \"separator\",\n ] as const,\n defaults: { density: \"comfortable\", itemTone: \"neutral\" },\n // 2026-10-20: one menu contract, three intentional placements. Item count never changes the presentation.\n presentations: {\n grouped: { maxWidth: 288, padding: spacing.sm, gap: spacing.xs, rowHeight: 52 },\n anchored: { maxWidth: 280, padding: spacing.xs, gap: spacing.xs, rowHeight: 48 },\n bottom: { maxWidth: 420, padding: 0, gap: spacing.xs, rowHeight: 56 },\n },\n surface: floatingSurfaceContract,\n density: {\n compact: { ...collectionItemContract, minHeight: control.minTouchTarget },\n comfortable: { ...collectionItemContract, minHeight: layout.rowHeight.singleLine },\n },\n tones: {\n neutral: collectionItemContract.label.color,\n danger: collectionItemContract.danger,\n },\n sectionLabel: {\n color: semanticColors.content.secondary,\n textVariant: \"label\",\n paddingHorizontal: spacing.sm,\n paddingVertical: spacing.xs,\n },\n leading: { color: semanticColors.content.secondary, glyph: \"sm\" },\n shortcut: { color: semanticColors.content.secondary, textVariant: \"caption\" },\n indicator: { color: collectionItemContract.selectedIndicator, glyph: \"sm\" },\n separator: semanticColors.border.default,\n dangerIndicator: {\n color: collectionItemContract.danger,\n glyph: \"sm\",\n mark: \"alert\",\n },\n minWidth: 220,\n maxWidth: 320,\n maxHeight: 360,\n sideOffset: spacing.xs,\n collisionPadding: spacing.xs,\n states: { disabledOpacity: opacity.disabled },\n transition: { enter: motionPreset.enter, exit: motionPreset.exit },\n} as const satisfies {\n slots: readonly string[];\n defaults: { density: \"compact\" | \"comfortable\"; itemTone: MenuItemTone };\n presentations: Record<\"grouped\" | \"anchored\" | \"bottom\", { maxWidth: number; padding: number; gap: number; rowHeight: number }>;\n surface: typeof floatingSurfaceContract;\n density: Record<\n \"compact\" | \"comfortable\",\n Omit<typeof collectionItemContract, \"minHeight\"> & { minHeight: number }\n >;\n tones: Record<MenuItemTone, ColorReference>;\n sectionLabel: {\n color: ColorReference;\n textVariant: TextVariant;\n paddingHorizontal: number;\n paddingVertical: number;\n };\n leading: { color: ColorReference; glyph: GlyphSize };\n shortcut: { color: ColorReference; textVariant: TextVariant };\n indicator: { color: ColorReference; glyph: GlyphSize };\n separator: ColorReference;\n dangerIndicator: {\n color: ColorReference;\n glyph: GlyphSize;\n mark: \"alert\";\n };\n minWidth: number;\n maxWidth: number;\n maxHeight: number;\n sideOffset: number;\n collisionPadding: number;\n states: { disabledOpacity: number };\n transition: { enter: typeof motionPreset.enter; exit: typeof motionPreset.exit };\n};\n\nexport type MenuDensity = keyof typeof menuRecipe.density;\nexport type MenuPresentation = keyof typeof menuRecipe.presentations;\n\nexport type SelectSize = \"medium\" | \"large\";\nexport type SelectDensity = \"compact\" | \"comfortable\";\n\n/**\n * Select is visually one field plus one collection, even though Web renders\n * the collection in a popover and Native renders it in a modal sheet.\n */\nexport const selectRecipe = {\n slots: [\n \"root\",\n \"label\",\n \"trigger\",\n \"leading\",\n \"value\",\n \"placeholder\",\n \"busyIndicator\",\n \"indicator\",\n \"description\",\n \"error\",\n \"popover\",\n \"viewport\",\n \"section\",\n \"sectionLabel\",\n \"option\",\n \"optionLeading\",\n \"optionCopy\",\n \"optionLabel\",\n \"optionDescription\",\n \"selectionIndicator\",\n \"stateMessage\",\n ] as const,\n defaults: { size: \"medium\", density: \"comfortable\" },\n adaptive: { web: \"popover\", native: \"sheet\" },\n frame: fieldFrameContract,\n sizes: {\n medium: {\n minHeight: fieldFrameContract.minHeight,\n paddingHorizontal: fieldFrameContract.paddingHorizontal,\n textVariant: \"body\",\n glyph: \"sm\",\n },\n large: {\n minHeight: control.buttonHeight.large,\n paddingHorizontal: spacing.lg,\n textVariant: \"bodyLarge\",\n glyph: \"md\",\n },\n },\n support: formSupportContract,\n value: {\n color: semanticColors.content.body,\n placeholderColor: semanticColors.content.secondary,\n gap: spacing.sm,\n },\n leading: { color: semanticColors.content.secondary },\n indicator: { color: semanticColors.content.secondary },\n busyIndicator: { color: semanticColors.content.brand, glyph: \"sm\" },\n popover: {\n ...floatingSurfaceContract,\n minWidth: 220,\n maxWidth: 420,\n maxHeight: 360,\n sideOffset: spacing.xs,\n collisionPadding: spacing.xs,\n },\n density: {\n compact: { ...collectionItemContract, selectedBackground: semanticColors.canvas, highlightedBackground: semanticColors.canvas, minHeight: control.minTouchTarget },\n comfortable: { ...collectionItemContract, selectedBackground: semanticColors.canvas, highlightedBackground: semanticColors.canvas, minHeight: layout.rowHeight.singleLine },\n },\n sectionLabel: {\n color: semanticColors.content.secondary,\n textVariant: \"label\",\n paddingHorizontal: spacing.sm,\n paddingVertical: spacing.xs,\n },\n optionLeading: { color: semanticColors.content.secondary, glyph: \"sm\" },\n optionLabel: { fontWeight: fontWeight.medium, selectedFontWeight: fontWeight.semibold },\n selectionIndicator: { color: semanticColors.border.focus, glyph: \"sm\" },\n stateMessage: {\n color: semanticColors.content.secondary,\n textVariant: \"body\",\n minHeight: control.minTouchTarget,\n paddingHorizontal: spacing.sm,\n paddingVertical: spacing.sm,\n },\n states: {\n hoverBackground: semanticColors.canvas,\n pressedBackground: semanticColors.canvas,\n focus: focusIndicatorContract,\n invalidBorder: semanticColors.border.danger,\n disabledOpacity: opacity.disabled,\n },\n transition: {\n web: { enter: motionPreset.micro, exit: motionPreset.exit },\n native: { enter: motionPreset.enter, exit: motionPreset.exit },\n },\n} as const satisfies {\n slots: readonly string[];\n defaults: { size: SelectSize; density: SelectDensity };\n adaptive: { web: \"popover\"; native: \"sheet\" };\n frame: typeof fieldFrameContract;\n sizes: Record<\n SelectSize,\n {\n minHeight: number;\n paddingHorizontal: number;\n textVariant: TextVariant;\n glyph: GlyphSize;\n }\n >;\n support: typeof formSupportContract;\n value: { color: ColorReference; placeholderColor: ColorReference; gap: number };\n leading: { color: ColorReference };\n indicator: { color: ColorReference };\n busyIndicator: { color: ColorReference; glyph: GlyphSize };\n popover: typeof floatingSurfaceContract & {\n minWidth: number;\n maxWidth: number;\n maxHeight: number;\n sideOffset: number;\n collisionPadding: number;\n };\n density: Record<\n SelectDensity,\n Omit<typeof collectionItemContract, \"minHeight\" | \"selectedBackground\" | \"highlightedBackground\"> & { minHeight: number; selectedBackground: ColorReference; highlightedBackground: ColorReference }\n >;\n sectionLabel: {\n color: ColorReference;\n textVariant: TextVariant;\n paddingHorizontal: number;\n paddingVertical: number;\n };\n optionLeading: { color: ColorReference; glyph: GlyphSize };\n optionLabel: { fontWeight: FontWeightValue; selectedFontWeight: FontWeightValue };\n selectionIndicator: { color: ColorReference; glyph: GlyphSize };\n stateMessage: {\n color: ColorReference;\n textVariant: TextVariant;\n minHeight: number;\n paddingHorizontal: number;\n paddingVertical: number;\n };\n states: {\n hoverBackground: ColorReference;\n pressedBackground: ColorReference;\n focus: typeof focusIndicatorContract;\n invalidBorder: ColorReference;\n disabledOpacity: number;\n };\n transition: {\n web: { enter: typeof motionPreset.micro; exit: typeof motionPreset.exit };\n native: { enter: typeof motionPreset.enter; exit: typeof motionPreset.exit };\n };\n};\n\n/** Editable input anatomy layered on the exact same collection grammar. */\nexport const comboboxRecipe = {\n slots: [\n \"root\",\n \"label\",\n \"field\",\n \"leading\",\n \"input\",\n \"indicator\",\n \"clear\",\n \"loadingIndicator\",\n \"description\",\n \"error\",\n \"popover\",\n \"viewport\",\n \"section\",\n \"sectionLabel\",\n \"option\",\n \"optionLeading\",\n \"optionCopy\",\n \"optionLabel\",\n \"optionDescription\",\n \"selectionIndicator\",\n \"stateMessage\",\n ] as const,\n defaults: selectRecipe.defaults,\n adaptive: selectRecipe.adaptive,\n frame: selectRecipe.frame,\n sizes: selectRecipe.sizes,\n support: selectRecipe.support,\n input: selectRecipe.value,\n leading: selectRecipe.leading,\n indicator: selectRecipe.indicator,\n clear: {\n diameter: control.buttonHeight.small,\n hitSlop: control.buttonHitSlop.small,\n glyph: \"xs\",\n color: semanticColors.content.secondary,\n },\n loadingIndicator: { color: semanticColors.content.brand, glyph: \"sm\" },\n popover: selectRecipe.popover,\n density: selectRecipe.density,\n sectionLabel: selectRecipe.sectionLabel,\n optionLeading: selectRecipe.optionLeading,\n optionLabel: selectRecipe.optionLabel,\n selectionIndicator: selectRecipe.selectionIndicator,\n stateMessage: selectRecipe.stateMessage,\n states: selectRecipe.states,\n transition: selectRecipe.transition,\n} as const satisfies {\n slots: readonly string[];\n defaults: typeof selectRecipe.defaults;\n adaptive: typeof selectRecipe.adaptive;\n frame: typeof selectRecipe.frame;\n sizes: typeof selectRecipe.sizes;\n support: typeof selectRecipe.support;\n input: typeof selectRecipe.value;\n leading: typeof selectRecipe.leading;\n indicator: typeof selectRecipe.indicator;\n clear: { diameter: number; hitSlop: number; glyph: GlyphSize; color: ColorReference };\n loadingIndicator: { color: ColorReference; glyph: GlyphSize };\n popover: typeof selectRecipe.popover;\n density: typeof selectRecipe.density;\n sectionLabel: typeof selectRecipe.sectionLabel;\n optionLeading: typeof selectRecipe.optionLeading;\n optionLabel: typeof selectRecipe.optionLabel;\n selectionIndicator: typeof selectRecipe.selectionIndicator;\n stateMessage: typeof selectRecipe.stateMessage;\n states: typeof selectRecipe.states;\n transition: typeof selectRecipe.transition;\n};\n\n/** Block-side inset of the connected track: `container.padding` + `container.borderWidth`. */\nconst segmentedTrackInset = spacing.xxs + stroke.subtle;\n\nexport const segmentedControlRecipe = {\n // Text navigation reuses radio selection, without cloning a product-only tab engine.\n text: { gap: spacing.md, indicatorWidth: 16, indicatorHeight: 2, indicatorRadius: radius.full,\n minHeight: control.minTouchTarget, labelGap: spacing.xxs, regular: {idle:\"400\",selected:\"600\"}, strong:{idle:\"500\",selected:\"700\"} },\n slots: [\"root\", \"item\", \"label\", \"indicator\"] as const,\n defaults: { size: \"medium\" },\n // Category filters share the single-selection engine, with a compact surface inside a 44 target.\n // See usage/components/segmented-control.md; no separate filter-selection state is introduced.\n // Match Chip's visible size step in mixed filter rails; the inset keeps a separate 44pt touch box.\n // The old 8pt inset drew 28pt pills next to a 36pt small action chip (Utilverse, 2026-10-20).\n // Spint review (2026-10-20): restore the original inset and use a smaller category label instead.\n // Strong selection uses the product primary/onPrimary contrast pair (Diairy/Spint review, 2026-10-21).\n selectedBrand: { background: semanticColors.action.brand.background, content: semanticColors.action.brand.content },\n pills: { textVariant: \"label\", paddingHorizontal: { small: spacing.sm, medium: spacing.md }, gap: spacing.xs, radius: radius.full, inset: spacing.xxs, minHeight: control.minTouchTarget,\n // Utilverse's pastel scene swallowed the sunken fill without an outline (2026-10-20).\n // Use the resting control border on the inset surface so touch geometry stays unchanged.\n background: semanticColors.surface.raised, border: semanticColors.border.control, borderWidth: stroke.subtle,\n selectedBackground: semanticColors.content.body, selectedContent: semanticColors.canvas,\n /**\n * Pills are content-width, so large text keeps the row: it wraps inside a block and stays one line\n * inside a horizontal scroller (SearchScreen `filtersOverflow=\"scroll\"`, a product rail). `adaptive`\n * stacking is for the equal-width connected track only. Stacking pills too turned a seven-theme\n * filter rail into a ~440pt column at accessibility-large (utilverse 1.13.0 adoption, 2026-10-06),\n * and the product swapped in a Select to escape it. Rejected: a pills-only scroll prop, because\n * the host already owns the rail and a second scroller inside it would nest horizontal scrolling.\n */\n largeTextLayout: \"wrap\" as const },\n adaptive: {\n // Equal-width rows stop being comparable when every short label wraps one\n // Hangul syllable per line. Native renderers stack the options before that\n // point so each choice remains a readable phrase and a 44pt target.\n // Applies to presentation=\"connected\" only; pills follow `pills.largeTextLayout`.\n largeTextLayout: \"stacked\" as const,\n stackAtFontScale: largeTextThreshold,\n },\n // Track and selected segment share the canvas; the blue ring identifies the chosen option.\n container: {\n background: semanticColors.canvas,\n border: semanticColors.border.default,\n borderWidth: stroke.subtle,\n radius: \"lg\",\n padding: spacing.xxs,\n gap: spacing.xxs,\n },\n /**\n * `height` is the connected control's outer height (track border + padding included) and matches the Button /\n * IconButton / Chip height of the same size step, so a segmented control and a chip in one row line up.\n * `minHeight` is the option inside the track (height − 2 × (`container.padding` + `container.borderWidth`)) and `hitSlop` extends each\n * option vertically to the 44 touch target. Before 2026-10-17 `minHeight` was the option itself, so the track\n * drew 46/54 next to 36/44 chips and buttons (DiscoveryGallery sort row, user request \"높이 맞춰\").\n */\n sizes: {\n small: {\n height: control.buttonHeight.small,\n minHeight: control.buttonHeight.small - 2 * segmentedTrackInset,\n hitSlop: (control.minTouchTarget - (control.buttonHeight.small - 2 * segmentedTrackInset)) / 2,\n paddingHorizontal: spacing.sm,\n textVariant: \"label\",\n },\n medium: {\n height: control.buttonHeight.medium,\n minHeight: control.buttonHeight.medium - 2 * segmentedTrackInset,\n hitSlop: (control.minTouchTarget - (control.buttonHeight.medium - 2 * segmentedTrackInset)) / 2,\n paddingHorizontal: spacing.md,\n textVariant: \"body\",\n },\n },\n item: {\n radius: \"md\",\n gap: spacing.xxs,\n idleContent: semanticColors.content.secondary,\n fontWeight: fontWeight.medium,\n selectedBackground: semanticColors.canvas,\n selectedContent: semanticColors.content.brand,\n /**\n * The ring stays the selection signal so the control keeps a non-text\n * contrast of at least 3:1; a fill-only thumb cannot reach that against a\n * neutral track.\n */\n selectedBorder: semanticColors.border.focus,\n selectedBorderWidth: stroke.strong,\n selectedFontWeight: fontWeight.semibold,\n focusRing: semanticColors.border.focus,\n pressedOpacity: opacity.pressed,\n disabledOpacity: opacity.disabled,\n },\n} as const;\n\nexport const switchRecipe = {\n // Settings rows are controls, not prominent reading content. Spint's native row\n // used bodyLarge while Web inherited its parent; one role prevents that drift.\n rowLabelTextVariant: \"body\",\n slots: [\"root\", \"track\", \"thumb\", \"label\", \"description\"] as const,\n defaults: { size: \"medium\" },\n // One default on both renderers: label/description first, track at the trailing edge\n // (2026-10-17 web/native comparison: Web defaulted to an inline track-first switch, so the\n // same settings toggle rendered mirrored). Compact toolbars can still pass `inline`.\n presentationDefaults: { web: \"row\", native: \"row\" },\n // Descriptions beside a fixed track become a narrow column at larger text sizes.\n // Reuse the provider's large-text boundary so Web CSS and Native reflow together.\n stackedTextScale: largeTextThreshold,\n sizes: {\n small: { width: 44, height: 26, thumb: 22, inset: 2 },\n medium: { width: 52, height: 32, thumb: 28, inset: 2 },\n },\n colors: {\n // The off state is two unsaturated planes — a `surfaceAlt` track holding a `bg`\n // thumb — so on a dark palette both collapse into the card behind them: measured\n // 1.10:1 track-to-surface and 1.20:1 thumb-to-track on the canonical dark theme,\n // where the thumb is actually *darker* than its own track. The `*OffBorder`\n // hairlines are what keep the shape readable, so they are part of the contract\n // rather than a renderer flourish. A consumer settings screen shipped with the web\n // renderer ignoring them and the control was invisible (2026-09-14); the web\n // stylesheet now paints them and `action-contrast.browser.test.tsx` holds the line.\n trackOff: semanticColors.surface.sunken,\n trackOffBorder: semanticColors.content.secondary,\n // A lit track is a filled brand plate, same role as a checked checkbox\n // (`selectionControlRecipe.states.checkedBackground`). Was `content.brand`, a\n // content role; both renderers painted `primary` anyway, so this is a no-op.\n trackOn: semanticColors.action.brand.background,\n trackOnBorder: semanticColors.border.focus,\n thumbOff: semanticColors.canvas,\n thumbOffBorder: semanticColors.content.secondary,\n thumbOn: semanticColors.canvas,\n // A disabled switch still has to report what it is set to, so disabled\n // state changes hue instead of fading uniformly with `states.disabledOpacity`\n // — a product author found that a flat opacity made \"on\" and \"off\" nearly\n // identical, turning a saved setting unreadable while its backing request\n // was in flight. The on track keeps a recognisable (if muted) brand wash,\n // the off track and both thumbs drop to neutral tones, and every part\n // keeps a hairline border so the shape stays legible at reduced contrast.\n trackOffDisabled: semanticColors.border.default,\n trackOffBorderDisabled: semanticColors.border.default,\n trackOnDisabled: { ...semanticColors.action.brand.background, alpha: 0.38 },\n trackOnBorderDisabled: { ...semanticColors.action.brand.background, alpha: 0.38 },\n thumbDisabled: semanticColors.canvas,\n thumbDisabledBorder: semanticColors.content.decorative,\n },\n states: {\n disabledOpacity: opacity.disabled,\n pressedOpacity: opacity.pressed,\n },\n rowMinHeight: control.minTouchTarget,\n // A described switch is a two-line row: the copy (body 20 + gap 4 + caption 16 = 40) with the\n // comfortable list-row vertical padding (8) on both sides. The padding is drawn by the row itself\n // so it survives larger text, and the minimum keeps neighbouring rows equal (a product author found\n // content-only height gave them different heights). It used to borrow ListRow's 68, which is sized\n // for a bodyLarge title + body description; on the smaller switch copy that left 14 above and below,\n // and stacked rows read as widely spaced (2026-10-17 user report, notification settings: 84 pitch\n // for 40 of copy, together with a Stack gap the rows must not have).\n rowPaddingVertical: listRowRecipe.density.comfortable.paddingVertical,\n rowTwoLineMinHeight:\n typography.body.lineHeight + spacing.xxs + typography.caption.lineHeight\n + 2 * listRowRecipe.density.comfortable.paddingVertical,\n} as const;\n\nexport type SelectionControlKind = \"checkbox\" | \"radio\";\n\nexport const selectionControlRecipe = {\n slots: [\n \"root\",\n \"control\",\n \"indicator\",\n \"leading\",\n \"content\",\n \"label\",\n \"description\",\n ] as const,\n defaults: { kind: \"checkbox\", size: \"medium\", presentation: \"card\" },\n sizes: {\n small: {\n rowMinHeight: control.minTouchTarget,\n control: 20,\n hitSlop: 12,\n glyph: \"xs\",\n gap: spacing.xs,\n paddingHorizontal: spacing.sm,\n paddingVertical: spacing.xs,\n labelVariant: \"label\",\n descriptionVariant: \"caption\",\n },\n medium: {\n rowMinHeight: layout.rowHeight.singleLine,\n control: control.selectionIndicator,\n hitSlop: 10,\n glyph: \"sm\",\n gap: spacing.sm,\n paddingHorizontal: spacing.md,\n paddingVertical: spacing.sm,\n labelVariant: \"body\",\n descriptionVariant: \"label\",\n },\n },\n shapes: { checkbox: \"sm\", radio: \"full\" },\n // Web drew 2px and Native 1px; Agreement and TransferList now reuse this indicator, so the width is one value.\n indicatorBorderWidth: stroke.strong,\n presentations: {\n // Nullable and multi-select chip collections keep the existing radio/checkbox engines;\n // SegmentedControl deliberately always selects one value, so it cannot represent them.\n chips: {\n background: chipRecipe.states.idle.background,\n border: chipRecipe.states.idle.border,\n borderWidth: chipRecipe.borderWidth,\n radius: chipRecipe.radius,\n useSizePadding: true,\n labelColor: null,\n },\n plain: {\n background: null,\n border: null,\n borderWidth: 0,\n radius: \"md\",\n useSizePadding: false,\n labelColor: null,\n },\n card: {\n background: semanticColors.canvas,\n border: semanticColors.border.default,\n borderWidth: stroke.default,\n radius: \"md\",\n useSizePadding: true,\n labelColor: null,\n },\n // A row inside a card shared by the whole group (paired with\n // `selectionGroupRecipe.orientations.*.gap.grouped`). The item owns its\n // own padding so the selected fill runs the full width of the group, and\n // only the first and last rows round — an item-level radius on every row\n // left a visible white sliver in the group's corners. `labelColor` is\n // pinned here (rather than left to the row) because a grouped row's\n // label sits directly on the shared card background, not on its own\n // plate — the row needs to know the label reads correctly there.\n grouped: {\n background: null,\n border: null,\n borderWidth: 0,\n radius: \"lg\",\n useSizePadding: true,\n labelColor: semanticColors.content.primary,\n },\n },\n label: {\n color: semanticColors.content.body,\n fontWeight: fontWeight.medium,\n checkedFontWeight: fontWeight.semibold,\n },\n leading: { size: \"md\", color: semanticColors.content.secondary },\n description: { color: semanticColors.content.secondary },\n indicators: {\n checkbox: { checked: \"check\", mixed: \"dash\" },\n radio: { checked: \"dot\", mixed: null },\n },\n radioDotRatio: 0.42,\n states: {\n idleBackground: semanticColors.canvas,\n idleBorder: semanticColors.content.secondary,\n checkedBackground: semanticColors.action.brand.background,\n checkedBorder: semanticColors.border.focus,\n indicator: semanticColors.action.brand.content,\n // Keep the entire choice plate white; border and checked indicator carry selection.\n selectedBackground: semanticColors.canvas,\n selectedBorder: semanticColors.border.focus,\n hoverBackground: semanticColors.canvas,\n pressedBackground: semanticColors.canvas,\n invalidBorder: semanticColors.border.danger,\n focus: focusIndicatorContract,\n disabledOpacity: opacity.disabled,\n },\n} as const;\n\n/**\n * Persistent top-level navigation. The recipe reserves an optional center gap\n * for a sibling primary action but never treats that action as a destination.\n */\nexport const bottomNavigationRecipe = {\n slots: [\n \"root\",\n \"surface\",\n \"list\",\n \"item\",\n \"indicator\",\n \"icon\",\n \"label\",\n \"badge\",\n ] as const,\n defaults: bottomNavigationRecipeDefaults,\n // Selected full-item cards retain the existing navigation state engine (Spint, 2026-10-12).\n selectionTile: {\n background: semanticColors.surface.brand,\n selectedBackground: semanticColors.action.brand.background,\n selectedContent: semanticColors.action.brand.content,\n padding: spacing.xxs,\n gap: spacing.xxs,\n radius: \"lg\" as const,\n },\n /**\n * Opt-in thick plank for tile selection (Spint wooden sign, 2026-10-13). The\n * lower edges replace the floating shadow so the bar reads as one flat object.\n * The selected edge darkens the brand fill with `interaction.depth` because no\n * palette role names a \"pressed brand\" shade.\n */\n raisedSurface: {\n background: semanticColors.surface.sunken,\n border: semanticColors.border.control,\n depth: 4,\n selectedDepth: 3,\n selectedDepthColor: semanticColors.interaction.depth,\n },\n /**\n * Raised center destination (`prominent` item, Diairy write tab, 2026-10-18). The circle is the large control\n * height plus one 4pt step so it outranks the 40pt indicators beside it. Renderers lift it by\n * `diameter - indicator.minHeight` so its label stays on the same line as the other labels. It keeps brand\n * fill in both states because a dimmed circle would read as a large idle icon, not the product's main entry;\n * selection evidence stays on the label (weight and color), as for other items.\n */\n prominentDestination: {\n diameter: control.buttonHeight.large + spacing.xxs,\n icon: \"lg\" as const,\n background: semanticColors.action.brand.background,\n content: semanticColors.action.brand.content,\n shadow: floatingSurfaceContract.shadow,\n },\n /**\n * App-icon slots for `configuration.iconSize` (Utilverse dock artwork, 2026-10-18). `standard` keeps the\n * density glyph; 44 is the minimum touch target and 52 the large control height, the sizes the dock used.\n */\n iconSizes: {\n large: control.minTouchTarget,\n xlarge: control.buttonHeight.large,\n },\n /**\n * Floating frames for `configuration.shape` (Utilverse home shells, 2026-10-18). `surfacePadding` is the inner\n * gap between the frame and the destination row; the two tighter frames pair with `density: \"compact\"` for the\n * desktop-shell docks. Radii are theme radius tokens, so a design profile's radius scale still applies.\n * `standard` is absent on purpose: it keeps `presentations.floating`.\n */\n shapes: {\n rounded: { radius: \"xl\" as const, surfacePadding: spacing.xs },\n pill: { radius: \"full\" as const, surfacePadding: spacing.xs },\n compact: { radius: \"lg\" as const, surfacePadding: spacing.xxs },\n square: { radius: \"sm\" as const, surfacePadding: spacing.xxs },\n },\n adaptive: {\n web: \"fixed-compact-viewport\",\n native: \"navigator-tab-bar\",\n },\n presentations: {\n capsule: {\n background: semanticColors.surface.default,\n border: semanticColors.border.default,\n borderWidth: stroke.default,\n borderEdges: [\"all\"] as const,\n radius: \"full\" as const,\n shadow: floatingSurfaceContract.shadow,\n maxWidth: 480,\n contentMaxWidth: null,\n outerPaddingHorizontal: spacing.md,\n outerPaddingTop: spacing.xs,\n },\n bar: {\n background: semanticColors.canvas,\n border: semanticColors.border.default,\n borderWidth: stroke.default,\n borderEdges: [\"block-start\"] as const,\n radius: null,\n shadow: null,\n maxWidth: null,\n /**\n * The bar surface and its top edge span the viewport, but the destinations stay in a centered 480 column\n * (the capsule width): on a 1280 desktop two items otherwise sat at opposite screen edges (2026-10-17 review D8).\n */\n contentMaxWidth: 480,\n outerPaddingHorizontal: 0,\n outerPaddingTop: 0,\n },\n floating: {\n background: semanticColors.canvas,\n border: semanticColors.border.default,\n borderWidth: stroke.default,\n borderEdges: [\"all\"] as const,\n radius: \"xl\" as const,\n shadow: floatingSurfaceContract.shadow,\n maxWidth: 384,\n contentMaxWidth: null,\n outerPaddingHorizontal: spacing.md,\n outerPaddingTop: spacing.xs,\n },\n },\n distributions: {\n equal: { centerGap: 0, requiresEvenItemCount: false },\n \"center-gap\": {\n centerGap: control.buttonHeight.large + spacing.md,\n requiresEvenItemCount: true,\n },\n },\n density: {\n compact: {\n itemMinWidth: 52,\n itemMinHeight: 52,\n padding: spacing.xxs,\n gap: 2,\n icon: \"sm\" as const,\n label: \"caption\" as const,\n },\n regular: {\n itemMinWidth: 56,\n itemMinHeight: 64,\n padding: spacing.xs,\n gap: spacing.xxs,\n icon: \"md\" as const,\n label: \"caption\" as const,\n },\n },\n colors: {\n idle: semanticColors.content.secondary,\n selectedIcon: semanticColors.content.brand,\n selectedLabel: semanticColors.content.brand,\n },\n /**\n * Stable icon/badge layout anchor. Selection never paints this slot as a\n * pill: the icon and label below own the non-color selected evidence.\n */\n indicator: {\n minWidth: 40,\n minHeight: 28,\n radius: \"full\" as const,\n visual: \"none\" as const,\n background: null,\n border: null,\n borderWidth: 0,\n },\n icon: {\n /**\n * Adapters apply at least one supported emphasis. Stroke-oriented glyphs\n * use strokeWidth; renderers without stroke control use scale instead.\n */\n selectedEmphasis: {\n minimumAdaptations: 1,\n strokeWidth: { idle: stroke.strong, selected: 3 },\n scale: { idle: 1, selected: 1.06 },\n },\n /**\n * `configuration.iconEmphasis: \"lift\"` (Utilverse dock artwork, 2026-10-18): the selected icon rises one 4pt\n * step on top of the selected scale, and idle icons dim. Full-color artwork cannot take the selected tint, so\n * without the dim only the label would mark the current destination. 0.82 is the dock's measured idle opacity.\n */\n liftEmphasis: {\n translateY: -spacing.xxs,\n idleOpacity: 0.82,\n },\n },\n label: {\n fontWeight: fontWeight.medium,\n selectedFontWeight: fontWeight.semibold,\n textAlign: \"center\",\n wrap: true,\n fixedLines: null,\n },\n badge: {\n size: \"small\" as const,\n variant: \"floating\" as const,\n anchor: { blockStart: -spacing.xxs, inlineEnd: -spacing.xs },\n subtreeHiddenFromAccessibility: true,\n },\n safeArea: {\n mode: \"additive\",\n minimumBottomPadding: spacing.xs,\n },\n keyboard: { defaultBehavior: \"hide\", movesAboveKeyboard: false },\n largeText: {\n allowFontScaling: true,\n // Persistent navigation has to keep every destination visible at once.\n // Let labels respond to Dynamic Type, but cap the visual chrome before a\n // three-character destination turns into a three-line column. The full,\n // uncapped label remains the item's accessible name.\n maxFontSizeMultiplier: 1.4,\n fixedItemHeight: false,\n labelWraps: true,\n },\n direction: {\n itemOrder: \"logical\",\n badgeAnchor: \"inline-end\",\n },\n states: {\n hoverBackground: semanticColors.canvas,\n pressedBackground: semanticColors.canvas,\n focus: focusIndicatorContract,\n disabledOpacity: opacity.disabled,\n selectedNonColorEvidence: {\n target: \"icon-and-label\" as const,\n label: \"font-weight\" as const,\n icon: \"emphasis\" as const,\n },\n selectedFocusSeparation: {\n selectedTarget: \"icon-and-label\" as const,\n focusTarget: \"item\",\n minimumGap: focusIndicatorContract.offset,\n },\n },\n transition: motionPreset.micro,\n} as const;\n\nexport const tabsRecipe = {\n slots: [\"root\", \"list\", \"tab\", \"label\", \"indicator\", \"panel\"] as const,\n defaults: { size: \"medium\", layout: \"content\", overflow: \"scroll\", indicator: \"underline\" },\n /**\n * Selection mark. `filled` paints the selected tab as a brand-tinted pill instead of the 2pt underline and\n * drops the list divider, which only anchors underlines (Diairy nest tabs, 2026-10-18: the app's tab bar\n * already marks the current place with this pill, so in-screen tabs looked like a second product).\n */\n indicators: {\n underline: { listDivider: true, background: null, selectedContent: semanticColors.content.primary, radius: null },\n filled: { listDivider: false, background: semanticColors.surface.brand, selectedContent: semanticColors.content.brand, radius: \"full\" as const },\n solid: { listDivider: false, background: semanticColors.action.brand.background, selectedContent: semanticColors.action.brand.content, radius: \"full\" as const },\n },\n sizes: {\n small: {\n minHeight: control.minTouchTarget,\n paddingHorizontal: spacing.sm,\n textVariant: \"label\",\n },\n medium: {\n minHeight: 48,\n paddingHorizontal: spacing.md,\n textVariant: \"body\",\n },\n },\n colors: {\n idle: semanticColors.content.secondary,\n selected: semanticColors.content.primary,\n indicator: semanticColors.border.focus,\n divider: semanticColors.border.default,\n },\n gap: spacing.xs,\n icon: { glyph: \"xs\" },\n label: { fontWeight: fontWeight.medium, selectedFontWeight: fontWeight.semibold },\n layouts: {\n content: { fitted: false },\n fitted: { fitted: true },\n },\n overflow: {\n scroll: { scrollable: true, wrap: false },\n clip: { scrollable: false, wrap: false },\n },\n indicatorHeight: stroke.strong,\n states: {\n pressedBackground: semanticColors.canvas,\n focus: focusIndicatorContract,\n disabledOpacity: opacity.disabled,\n },\n} as const;\n\nexport type NoticeTone = \"info\" | \"success\" | \"warning\" | \"attention\" | \"danger\";\n\nexport const noticeRecipe = {\n slots: [\"root\", \"icon\", \"content\", \"title\", \"description\", \"action\"] as const,\n defaults: { tone: \"info\", appearance: \"panel\" },\n // Saved results belong beside their owner without a second banner-sized surface.\n // Both renderers reuse Badge for the short status; panels remain the default for guidance/errors.\n appearances: { panel: { padding: spacing.md, borderWidth: stroke.default }, status: { padding: 0, borderWidth: 0 } },\n tones: {\n ...semanticColors.feedback,\n info: {\n ...semanticColors.feedback.info,\n // The informational wash landed bluer and darker than the selection\n // tint itself over canvas, so a banner outranked the control the\n // reader was supposed to act on. `info` alone goes neutral — its\n // accent stays in the icon, the title, and the border; `success`/\n // `warning`/`attention`/`danger` keep the tinted surface because a\n // product author confirmed those readings didn't have the same\n // conflict with a selection state.\n background: semanticColors.canvas,\n },\n },\n radius: \"md\",\n padding: spacing.md,\n gap: spacing.sm,\n contentGap: spacing.xxs,\n iconSize: \"sm\",\n borderWidth: stroke.default,\n title: { textVariant: \"body\", fontWeight: typography.title.fontWeight },\n description: { color: semanticColors.content.body, textVariant: \"body\" },\n} as const;\n\nexport const skeletonRecipe = {\n slots: [\"root\", \"line\"] as const,\n // animated는 0.9.12까지 false였다. 정지한 블록은 로딩이 아니라 깨진 화면으로\n // 읽힌다. 전환 근거와 소비 측 migration은\n // .changeset/skeleton-pulse-by-default.md에 있다.\n defaults: { shape: \"block\", animated: true, lines: 1 },\n // 2026-10-17 사용자 요청: canvas 채움 + 1px 테두리는 흰 배경에서 거의 보이지 않아 로딩 모양을 알 수 없었다.\n // 2026-09-29 \"넓은 회색 면은 canvas\" 방향의 예외로, 자리표시는 채운 면이어야 모양이 읽힌다(skeleton.md 근거).\n background: semanticColors.surface.placeholder,\n // `aspectRatio`가 있으면 높이 대신 폭에 비례한다(media). `button`은 medium 버튼 높이와 Button 기본 모양의 모서리다.\n // 2026-10-17: 번뚝처럼 알약 버튼을 쓰는 제품은 자리표시도 알약이어야 하므로 모서리는 `buttonShape` 축\n // (buttonRecipe.shapes와 같은 이름·같은 기본값)으로 고르고, 이 값은 그 기본값에서 나온다.\n shapes: {\n block: { radius: \"md\", defaultHeight: spacing.xxl, aspectRatio: null },\n text: { radius: \"sm\", defaultHeight: spacing.md, aspectRatio: null },\n circle: { radius: \"full\", defaultHeight: glyph.xxl, aspectRatio: null },\n media: { radius: \"md\", defaultHeight: null, aspectRatio: 16 / 9 },\n button: { radius: buttonRecipe.shapes[buttonRecipe.defaults.shape], defaultHeight: control.buttonHeight.medium, aspectRatio: null },\n },\n // `lines` > 1 (text 전용): 줄 사이 간격과 짧게 끝나는 마지막 줄. 16 막대 + 8 간격 = 본문 큰 글자 줄 높이 24.\n lines: { gap: spacing.xs, lastLineWidthPercent: 60 },\n animation: {\n duration: motion.slow * 4,\n easing: \"standard\",\n fromOpacity: 0.56,\n toOpacity: 1,\n reducedMotion: \"static\",\n },\n} as const;\n\nexport const emptyStateRecipe = {\n slots: [\"root\", \"icon\", \"title\", \"description\", \"action\"] as const,\n defaults: { density: \"regular\" },\n density: {\n compact: { paddingVertical: spacing.xl },\n regular: { paddingVertical: spacing.xxxl },\n },\n paddingHorizontal: spacing.xl,\n gap: spacing.xs,\n icon: { size: \"lg\", color: semanticColors.content.decorative },\n title: { textVariant: \"body\", color: semanticColors.content.primary, fontWeight: typography.title.fontWeight },\n description: { textVariant: \"body\", color: semanticColors.content.secondary },\n} as const;\n\nexport const spinnerRecipe = {\n slots: [\"root\"] as const,\n defaults: { size: \"medium\", tone: \"brand\" },\n sizes: { small: glyph.xs, medium: glyph.sm, large: glyph.lg },\n tones: {\n brand: semanticColors.content.brand,\n neutral: semanticColors.content.secondary,\n inverse: semanticColors.content.inverse,\n },\n strokeWidth: stroke.strong,\n animation: {\n duration: 800,\n easing: \"standard\",\n reducedMotion: \"static\",\n },\n} as const;\n\nexport type LoadMoreDensity = \"compact\" | \"regular\";\n\nexport const loadMoreRecipe = {\n slots: [\n \"root\",\n \"status\",\n \"spinner\",\n \"trigger\",\n \"error\",\n \"retry\",\n \"end\",\n ] as const,\n defaults: { mode: \"automatic\", density: \"regular\" },\n density: {\n compact: { paddingVertical: spacing.sm, gap: spacing.xs },\n regular: { paddingVertical: spacing.lg, gap: spacing.sm },\n },\n status: {\n color: semanticColors.content.secondary,\n textVariant: \"label\",\n },\n error: {\n color: semanticColors.content.danger,\n textVariant: \"label\",\n },\n end: {\n color: semanticColors.content.secondary,\n textVariant: \"caption\",\n },\n trigger: {\n minHeight: control.minTouchTarget,\n paddingHorizontal: spacing.md,\n radius: \"md\",\n color: semanticColors.content.brand,\n textVariant: \"label\",\n fontWeight: fontWeight.medium,\n },\n spinner: { size: \"small\", tone: \"brand\" },\n states: {\n focus: focusIndicatorContract,\n pressedOpacity: opacity.pressed,\n disabledOpacity: opacity.disabled,\n },\n} as const satisfies {\n slots: readonly string[];\n defaults: { mode: \"automatic\" | \"manual\"; density: LoadMoreDensity };\n density: Record<LoadMoreDensity, { paddingVertical: number; gap: number }>;\n status: { color: ColorReference; textVariant: TextVariant };\n error: { color: ColorReference; textVariant: TextVariant };\n end: { color: ColorReference; textVariant: TextVariant };\n trigger: {\n minHeight: number;\n paddingHorizontal: number;\n radius: keyof typeof radius;\n color: ColorReference;\n textVariant: TextVariant;\n fontWeight: FontWeightValue;\n };\n spinner: { size: SpinnerSize; tone: SpinnerTone };\n states: {\n focus: typeof focusIndicatorContract;\n pressedOpacity: number;\n disabledOpacity: number;\n };\n};\n\nexport const avatarRecipe = {\n slots: [\"root\", \"image\", \"fallback\", \"badge\", \"group\"] as const,\n /**\n * 겹쳐 쌓은 아바타 묶음이 얼마나 겹치는가. 비율로 두는 이유는 크기 축이 이미 네 단계라\n * 픽셀로 적으면 네 벌이 되기 때문이다. 남은 인원은 제품이 문구로 만든다(\"+3\").\n */\n overlapRatio: 0.3,\n defaults: { size: \"medium\", shape: \"circle\" },\n sizes: { small: 32, medium: 40, large: 48, xlarge: 64 },\n shapes: { rounded: \"md\", circle: \"full\" },\n background: semanticColors.canvas,\n content: semanticColors.content.secondary,\n border: semanticColors.border.default,\n /** Initials use the strong emphasis step; their size follows the avatar (Web `.hjm-avatar[data-size]` steps). */\n initialsWeight: \"strong\",\n} as const;\n\n/**\n * Initials text step for an avatar diameter, shared by Web size tokens and Native numeric sizes\n * (2026-10-17 comparison: Native drew 12pt brand-colored initials at every size).\n */\nexport function resolveAvatarInitialsTextVariant(size: number): \"label\" | \"body\" | \"title\" {\n if (size < avatarRecipe.sizes.medium) return \"label\";\n if (size < avatarRecipe.sizes.xlarge) return \"body\";\n return \"title\";\n}\n\nexport type StatisticDensity = \"compact\" | \"comfortable\";\nexport type StatisticPresentation = \"plain\" | \"surface\";\n\nexport const statisticRecipe = {\n slots: [\n \"group\",\n \"root\",\n \"label\",\n \"valueRow\",\n \"prefix\",\n \"value\",\n \"suffix\",\n \"trend\",\n \"trendMark\",\n \"hint\",\n ] as const,\n defaults: { density: \"comfortable\", presentation: \"plain\", columns: 3 },\n density: {\n compact: {\n padding: spacing.sm,\n gap: spacing.xxs,\n labelVariant: \"caption\",\n // Small summary cards need a quieter count (Diairy today log, 2026-10-21 user feedback).\n valueVariant: \"bodyLarge\",\n },\n comfortable: {\n padding: spacing.md,\n gap: spacing.xs,\n labelVariant: \"label\",\n valueVariant: \"heading\",\n },\n },\n presentations: {\n plain: { background: null, border: null, borderWidth: 0, radius: \"md\" },\n surface: {\n background: semanticColors.canvas,\n border: semanticColors.border.default,\n borderWidth: stroke.default,\n radius: \"md\",\n },\n },\n group: {\n gap: spacing.xs,\n minItemWidth: 120,\n // Read-only social/count bars retain one row, with the value before its label.\n bar: { cellPadding: spacing.xs, valueGap: spacing.xxs, iconSize: glyph.sm },\n columns: [1, 2, 3, 4] as const,\n },\n label: {\n color: semanticColors.content.secondary,\n fontWeight: fontWeight.medium,\n },\n value: {\n color: semanticColors.content.primary,\n // The key number keeps the semibold emphasis step (600, 2026-10-17 lighter scale) at the `heading` size.\n // It used to borrow the display heading weight, which was removed with the display tier the same day.\n fontWeight: fontWeight.semibold,\n numericVariant: \"tabular\",\n maxLines: null,\n },\n affix: {\n color: semanticColors.content.body,\n textVariant: \"body\",\n fontWeight: fontWeight.medium,\n },\n hint: {\n color: semanticColors.content.secondary,\n textVariant: \"caption\",\n },\n trend: {\n textVariant: \"caption\",\n fontWeight: fontWeight.medium,\n gap: spacing.xxs,\n marks: {\n up: \"trendUp\",\n down: \"trendDown\",\n flat: \"trendFlat\",\n },\n tones: {\n neutral: semanticColors.content.secondary,\n success: semanticColors.feedback.success.foreground,\n warning: semanticColors.feedback.warning.foreground,\n danger: semanticColors.content.danger,\n },\n },\n} as const satisfies {\n slots: readonly string[];\n defaults: {\n density: StatisticDensity;\n presentation: StatisticPresentation;\n columns: 1 | 2 | 3 | 4;\n };\n density: Record<\n StatisticDensity,\n {\n padding: number;\n gap: number;\n labelVariant: TextVariant;\n valueVariant: TextVariant;\n }\n >;\n presentations: Record<\n StatisticPresentation,\n {\n background: ColorReference | null;\n border: ColorReference | null;\n borderWidth: number;\n radius: keyof typeof radius;\n }\n >;\n group: {\n gap: number;\n minItemWidth: number;\n bar: { cellPadding: number; valueGap: number; iconSize: number };\n columns: readonly (1 | 2 | 3 | 4)[];\n };\n label: { color: ColorReference; fontWeight: FontWeightValue };\n value: {\n color: ColorReference;\n fontWeight: FontWeightValue;\n numericVariant: \"tabular\";\n maxLines: null;\n };\n affix: { color: ColorReference; textVariant: TextVariant; fontWeight: FontWeightValue };\n hint: { color: ColorReference; textVariant: TextVariant };\n trend: {\n textVariant: TextVariant;\n fontWeight: FontWeightValue;\n gap: number;\n marks: Record<\"up\" | \"down\" | \"flat\", string>;\n tones: Record<\"neutral\" | \"success\" | \"warning\" | \"danger\", ColorReference>;\n };\n};\n\n/**\n * Adjacent action buttons use 8 in both directions. The 2026-10-20 user request tightened\n * horizontal groups to the same spacing as stacked groups; control touch targets remain unchanged.\n */\nexport const actionGroupRecipe = { inlineGap: spacing.xs, stackedGap: spacing.xs } as const;\n\nexport const sheetRecipe = {\n slots: [\"backdrop\", \"positioner\", \"content\", \"handle\", \"header\", \"title\", \"body\", \"footer\", \"close\"] as const,\n defaults: { placement: \"bottom\", size: \"auto\" },\n /**\n * How tall the sheet opens. `auto` keeps the content-driven height that the\n * recipe already caps with `maxHeightRatio`. The fixed steps exist because\n * consumers otherwise reach for `contentStyle={{ height }}`, which moves a\n * recipe-owned dimension into product code.\n */\n sizes: {\n auto: null,\n // Short explanatory sheets need breathing room without the medium step's\n // empty space (Choose Window primer review, 2026-10-20: two-thirds of medium).\n small: 0.4,\n medium: 0.6,\n large: 0.85,\n full: 1,\n },\n backdrop: backdrop.modal,\n content: {\n background: semanticColors.canvas,\n border: semanticColors.border.default,\n borderWidth: floatingSurfaceContract.borderWidth,\n radius: \"xl\",\n shadow: floatingSurfaceContract.shadow,\n /** Caps `size=\"auto\"` only; fixed `sizes` (medium/large/full) are bounded by the safe-area viewport instead. */\n maxHeightRatio: 0.9,\n paddingHorizontal: spacing.lg,\n paddingTop: spacing.sm,\n paddingBottom: spacing.sm,\n },\n web: { maxWidth: 640 },\n safeArea: {\n edge: \"bottom\",\n mode: \"additive\",\n minimumPadding: spacing.sm,\n },\n handle: {\n width: 36,\n height: 4,\n radius: \"full\",\n color: semanticColors.content.secondary,\n // Bottom sheets now always offer drag-to-dismiss, so the handle is visible whenever it is allowed.\n visibleByDefault: true,\n showWhen: \"swipe-dismiss-enabled\",\n },\n header: { minHeight: control.minTouchTarget, gap: spacing.sm },\n // No visual `title` region: sheets render the title only as the accessible name (2026-10-17 user decision).\n // The \"title\" slot stays because the title is still the dialog's name.\n body: {\n color: semanticColors.content.body,\n textVariant: \"body\",\n gap: spacing.md,\n },\n footer: {\n color: semanticColors.content.body,\n textVariant: \"body\",\n // Native stacks footer actions in a column.\n gap: actionGroupRecipe.stackedGap,\n paddingTop: spacing.sm,\n },\n transition: { enter: motionPreset.enter, exit: motionPreset.exit },\n} as const;\n\nexport const dialogRecipe = {\n slots: [\"backdrop\", \"positioner\", \"content\", \"header\", \"title\", \"description\", \"body\", \"footer\", \"close\"] as const,\n defaults: { size: \"medium\", dismissible: true },\n sizes: {\n small: { maxWidth: 320, padding: spacing.lg },\n medium: { maxWidth: 420, padding: spacing.xl },\n large: { maxWidth: 640, padding: spacing.xl },\n },\n backdrop: backdrop.modal,\n content: {\n background: semanticColors.canvas,\n border: semanticColors.border.default,\n borderWidth: floatingSurfaceContract.borderWidth,\n radius: \"lg\",\n gap: spacing.md,\n shadow: floatingSurfaceContract.shadow,\n },\n transition: { enter: motionPreset.enter, exit: motionPreset.exit },\n /**\n * ImmersiveOverlay (Dialog companion, 1.31.0): an edge-to-edge stage with a control bar and no card, scrim or\n * header, for presentations such as a display board (utilverse used a raw RN Modal because Dialog/Sheet always\n * framed their content). The stage is product-drawn; the bar reuses screen spacing so it matches a screen footer.\n */\n immersive: {\n background: semanticColors.canvas,\n controls: { padding: spacing.md, gap: spacing.xs, actionGap: actionGroupRecipe.inlineGap },\n // A presentation is read from across a room: rotation follows the device even when the app is portrait-only.\n orientations: [\"portrait\", \"landscape-left\", \"landscape-right\"],\n statusBarHidden: true,\n },\n} as const;\n\n/**\n * Tone is the dialog's reason for interrupting, not its decoration.\n *\n * `attention` and `danger` covered \"are you sure?\" and \"this destroys\n * something\", but consumers also stop the user to *explain* an action before\n * running it — an intro before a button that copies content into the account,\n * or a confirmation that something finished. Those were shipping with the\n * attention mark, so a neutral explanation read as a warning (reported by a\n * product team on 2026-09-15). `info` and `success` carry the existing feedback\n * accents so the axis stays one token lookup per renderer.\n */\nexport type AlertDialogTone = \"attention\" | \"danger\" | \"info\" | \"success\";\n\nexport const alertDialogRecipe = {\n slots: [\n \"backdrop\",\n \"positioner\",\n \"content\",\n \"icon\",\n \"title\",\n \"description\",\n \"status\",\n \"error\",\n \"actions\",\n \"cancel\",\n \"confirm\",\n ] as const,\n defaults: { tone: \"attention\", size: \"small\" },\n sizes: dialogRecipe.sizes,\n backdrop: dialogRecipe.backdrop,\n content: dialogRecipe.content,\n tones: {\n attention: {\n icon: semanticColors.feedback.attention.foreground,\n iconBackground: semanticColors.feedback.attention.background,\n confirm: semanticColors.action.brand.background,\n confirmContent: semanticColors.action.brand.content,\n },\n danger: {\n icon: semanticColors.content.danger,\n iconBackground: semanticColors.feedback.danger.background,\n confirm: semanticColors.action.danger.background,\n confirmContent: semanticColors.action.danger.content,\n },\n // Explanation and completion keep the brand confirm button: the action they\n // introduce is the ordinary one, only the mark and its wash change.\n info: {\n icon: semanticColors.feedback.info.foreground,\n iconBackground: semanticColors.feedback.info.background,\n confirm: semanticColors.action.brand.background,\n confirmContent: semanticColors.action.brand.content,\n },\n success: {\n icon: semanticColors.feedback.success.foreground,\n iconBackground: semanticColors.feedback.success.background,\n confirm: semanticColors.action.brand.background,\n confirmContent: semanticColors.action.brand.content,\n },\n },\n icon: { containerSize: control.minTouchTarget, glyph: \"md\", radius: \"full\" },\n title: {\n color: semanticColors.content.primary,\n textVariant: \"title\",\n fontWeight: typography.title.fontWeight,\n },\n description: {\n color: semanticColors.content.secondary,\n textVariant: \"body\",\n },\n error: formSupportContract.error,\n // Stacked: confirm on top, cancel below, tighter gap (reported 2026-09-27). Row stays [cancel][confirm].\n actions: {\n gap: actionGroupRecipe.inlineGap,\n stackedGap: actionGroupRecipe.stackedGap,\n stackedOrder: \"confirm-first\",\n stackBelow: breakpoint.medium,\n minButtonWidth: 96,\n },\n transition: dialogRecipe.transition,\n} as const satisfies {\n slots: readonly string[];\n defaults: { tone: AlertDialogTone; size: DialogSize };\n sizes: typeof dialogRecipe.sizes;\n backdrop: typeof dialogRecipe.backdrop;\n content: typeof dialogRecipe.content;\n tones: Record<\n AlertDialogTone,\n {\n icon: ColorReference;\n iconBackground: ColorReference;\n confirm: ColorReference;\n confirmContent: ColorReference;\n }\n >;\n icon: { containerSize: number; glyph: GlyphSize; radius: keyof typeof radius };\n title: { color: ColorReference; textVariant: TextVariant; fontWeight: FontWeightValue };\n description: { color: ColorReference; textVariant: TextVariant };\n error: { color: ColorReference; textVariant: TextVariant };\n actions: {\n gap: number;\n stackedGap: number;\n stackedOrder: \"confirm-first\";\n stackBelow: number;\n minButtonWidth: number;\n };\n transition: typeof dialogRecipe.transition;\n};\n\nexport type ToastPlacement =\n | \"top\"\n | \"top-start\"\n | \"top-end\"\n | \"bottom\"\n | \"bottom-start\"\n | \"bottom-end\";\nexport type ToastTone = \"neutral\" | \"info\" | \"success\" | \"warning\" | \"danger\";\nexport type ToastToneMark =\n | \"notifications\"\n | \"info\"\n | \"success\"\n | \"warning\"\n | \"alert\";\n\n// First-line anchor (2026-10-17 user: \"기본 토스트 좌우랑 글자 라인이 안맞는데\"). The badge box is the one\n// line every leading column, first text line and close glyph centre on; the close keeps its 44 touch target but\n// overhangs so its glyph, not its hit area, sets the visible inset. Derived here so both renderers read numbers.\nconst toastBadgeDiameter = 32;\nconst toastCloseDiameter = control.minTouchTarget;\nconst toastCloseGlyph = \"xs\" satisfies GlyphSize;\n\nexport const toastRecipe = {\n slots: [\n \"viewport\",\n \"root\",\n \"toneMark\",\n \"icon\",\n \"media\",\n \"content\",\n \"title\",\n \"description\",\n \"progress\",\n \"action\",\n \"close\",\n ] as const,\n defaults: { tone: \"neutral\", placement: \"bottom\", durationMs: 3000 },\n adaptive: { web: \"fixed-viewport\", native: \"safe-area-overlay\" },\n viewport: {\n layer: layer.toast,\n gap: spacing.sm,\n inset: spacing.md,\n maxWidth: 420,\n safeAreaMode: \"additive\",\n },\n placements: {\n top: { blockEdge: \"top\", inlineEdge: \"center\", stackFrom: \"top\" },\n \"top-start\": { blockEdge: \"top\", inlineEdge: \"start\", stackFrom: \"top\" },\n \"top-end\": { blockEdge: \"top\", inlineEdge: \"end\", stackFrom: \"top\" },\n bottom: { blockEdge: \"bottom\", inlineEdge: \"center\", stackFrom: \"bottom\" },\n \"bottom-start\": { blockEdge: \"bottom\", inlineEdge: \"start\", stackFrom: \"bottom\" },\n \"bottom-end\": { blockEdge: \"bottom\", inlineEdge: \"end\", stackFrom: \"bottom\" },\n },\n // 1.10.0: tone is carried by a tinted icon badge, not a 2px edge strip — the strip plus a bare glyph read\n // as a grey dot on neutral toasts (BurnTok 2026-09-30 feedback \"알림 ui 구려\"). `badge` is the badge fill.\n tones: {\n neutral: {\n foreground: semanticColors.content.primary,\n accent: semanticColors.content.secondary,\n badge: semanticColors.surface.sunken,\n mark: \"notifications\",\n },\n info: {\n foreground: semanticColors.content.primary,\n accent: semanticColors.feedback.info.foreground,\n badge: semanticColors.feedback.info.badgeBackground,\n mark: \"info\",\n },\n success: {\n foreground: semanticColors.content.primary,\n accent: semanticColors.feedback.success.foreground,\n badge: semanticColors.feedback.success.badgeBackground,\n mark: \"success\",\n },\n warning: {\n foreground: semanticColors.content.primary,\n accent: semanticColors.feedback.warning.foreground,\n badge: semanticColors.feedback.warning.badgeBackground,\n mark: \"warning\",\n },\n danger: {\n foreground: semanticColors.content.primary,\n accent: semanticColors.content.danger,\n badge: semanticColors.feedback.danger.badgeBackground,\n mark: \"alert\",\n },\n },\n // 2026-10-20 approved light/dark notification reference: neutral glass chrome,\n // a quiet hairline and a bare glyph replace the heavy outline and coloured badge.\n material: {\n radius: 24,\n blur: 20,\n opacity: 0.96,\n light: { background: \"#FAFBFE\", border: \"#E3E6EB\", foreground: \"#202124\", secondary: \"#626873\", close: \"#696F79\" },\n dark: { background: \"#27282B\", border: \"#4D4F54\", foreground: \"#F6F7F9\", secondary: \"#B4B8C0\", close: \"#B4B8C0\" },\n },\n surface: {\n background: semanticColors.canvas,\n // Legacy semantic references remain available; renderers resolve the theme material above.\n // 1.10.0 softened the shape to lg; 1.20 makes every toast the \"panel\" (xl) that BurnTok designed for its\n // review status, by user request on 2026-10-10 (\"패널이 토스트가 되는거지\").\n border: semanticColors.border.strong,\n borderWidth: stroke.default,\n radius: \"xl\",\n shadow: floatingSurfaceContract.shadow,\n minHeight: layout.rowHeight.singleLine,\n // block sm + anchor 32 + sm = the 56 single-line row; inline md on both edges so the badge's start inset\n // equals the close glyph's end inset (Web had sm/xs/sm/md, Native md on all sides — 2026-10-17 measurement).\n padding: { block: spacing.sm, inline: spacing.md },\n gap: spacing.sm,\n maxWidth: 420,\n },\n // First text line (title, else description) is centred on this box: content insets its first line by\n // (blockSize − first-line line-height) / 2. Multi-line copy grows downward; the lead and close stay beside\n // the first line instead of centring on the whole block. Product media (44) start-aligns to the same top and\n // is not the anchor: centring the title on the media pushed the description below the avatar.\n anchor: { blockSize: toastBadgeDiameter },\n /**\n * @deprecated Toast has no edge stripe: the tinted icon badge (or product media) carries tone. Retired in 1.10.0\n * (width 0); since 1.32.0 neither renderer draws an element for it, so there is nothing for a product to hide\n * (2026-10-18 BurnTok still hid a strip that no longer existed). Kept only so the published recipe shape stays\n * compatible; remove in the next major.\n */\n toneMark: { width: 0, radius: \"full\" },\n icon: { glyph: \"sm\", badgeDiameter: toastBadgeDiameter, badgeRadius: \"full\" },\n // A product media (mascot, avatar) replaces the tone badge in the same leading column. 44 keeps a\n // character legible; it is decorative, so the tone still lives in `data-tone` and the copy.\n media: { size: 44 },\n content: { gap: spacing.xxs },\n title: {\n color: semanticColors.content.primary,\n textVariant: \"body\",\n fontWeight: typography.title.fontWeight,\n },\n // Secondary copy so the title leads; body-on-body read as one grey block.\n description: {\n color: semanticColors.content.secondary,\n textVariant: \"body\",\n },\n // Step dots of a running task: done and current are brand, upcoming is the divider colour; the current\n // label is emphasized. Labels sit beside each dot so the row reads without colour alone (WCAG 1.4.1).\n progress: {\n gap: spacing.sm,\n dotSize: 6,\n currentScale: 1.4,\n doneColor: semanticColors.content.brand,\n upcomingColor: semanticColors.border.default,\n labelColor: semanticColors.content.secondary,\n currentLabelColor: semanticColors.content.primary,\n textVariant: \"caption\",\n },\n // 1.10.0: a tinted pill button instead of a bare text link, so the one thing a toast asks for is\n // recognisable as a control. Hit area stays the 44pt touch target. 1.20 panel: it sits under the copy\n // at the start edge, where the eye already is, instead of the far end.\n action: {\n color: semanticColors.content.brand,\n background: semanticColors.surface.brand,\n radius: \"full\",\n align: \"start\",\n textVariant: \"body\",\n fontWeight: fontWeight.medium,\n minHeight: control.minTouchTarget,\n paddingHorizontal: spacing.md,\n },\n close: {\n color: semanticColors.content.secondary,\n diameter: toastCloseDiameter,\n glyph: toastCloseGlyph,\n // Negative block margin on both sides: the 44 target centres on the anchor line without stretching the row.\n blockOverhang: (toastCloseDiameter - toastBadgeDiameter) / 2,\n // Negative inline-end margin: the glyph box ends at the md padding edge, mirroring the badge's start inset.\n inlineOverhang: (toastCloseDiameter - glyph[toastCloseGlyph]) / 2,\n },\n states: {\n pressedOpacity: opacity.pressed,\n draggedOpacity: opacity.dragged,\n focus: focusIndicatorContract,\n },\n gesture: { dismissThreshold: 50 },\n transition: {\n web: { enter: motionPreset.micro, exit: motionPreset.exit },\n native: { enter: motionPreset.enter, exit: motionPreset.exit },\n },\n} as const satisfies {\n slots: readonly string[];\n defaults: { tone: ToastTone; placement: ToastPlacement; durationMs: number };\n adaptive: { web: \"fixed-viewport\"; native: \"safe-area-overlay\" };\n viewport: {\n layer: number;\n gap: number;\n inset: number;\n maxWidth: number;\n safeAreaMode: \"additive\";\n };\n placements: Record<\n ToastPlacement,\n {\n blockEdge: \"top\" | \"bottom\";\n inlineEdge: \"start\" | \"center\" | \"end\";\n stackFrom: \"top\" | \"bottom\";\n }\n >;\n tones: Record<\n ToastTone,\n { foreground: ColorReference; accent: ColorReference; badge: ColorReference; mark: ToastToneMark }\n >;\n material: { radius: number; blur: number; opacity: number } & Record<\"light\" | \"dark\", { background: string; border: string; foreground: string; secondary: string; close: string }>;\n surface: {\n background: ColorReference;\n border: ColorReference;\n borderWidth: number;\n radius: keyof typeof radius;\n shadow: typeof floatingSurfaceContract.shadow;\n minHeight: number;\n padding: { block: number; inline: number };\n gap: number;\n maxWidth: number;\n };\n anchor: { blockSize: number };\n toneMark: { width: number; radius: keyof typeof radius };\n icon: { glyph: GlyphSize; badgeDiameter: number; badgeRadius: keyof typeof radius };\n media: { size: number };\n content: { gap: number };\n title: { color: ColorReference; textVariant: TextVariant; fontWeight: FontWeightValue };\n description: { color: ColorReference; textVariant: TextVariant };\n progress: {\n gap: number;\n dotSize: number;\n currentScale: number;\n doneColor: ColorReference;\n upcomingColor: ColorReference;\n labelColor: ColorReference;\n currentLabelColor: ColorReference;\n textVariant: TextVariant;\n };\n action: {\n color: ColorReference;\n background: ColorReference;\n radius: keyof typeof radius;\n align: \"start\" | \"end\";\n textVariant: TextVariant;\n fontWeight: FontWeightValue;\n minHeight: number;\n paddingHorizontal: number;\n };\n close: {\n color: ColorReference;\n diameter: number;\n glyph: GlyphSize;\n blockOverhang: number;\n inlineOverhang: number;\n };\n states: {\n pressedOpacity: number;\n draggedOpacity: number;\n focus: typeof focusIndicatorContract;\n };\n gesture: { dismissThreshold: number };\n transition: {\n web: { enter: typeof motionPreset.micro; exit: typeof motionPreset.exit };\n native: { enter: typeof motionPreset.enter; exit: typeof motionPreset.exit };\n };\n};\n\nexport const tooltipRecipe = {\n slots: [\"provider\", \"trigger\", \"content\", \"arrow\"] as const,\n defaults: tooltipDescriptorDefaults,\n layer: layer.tooltip,\n surface: {\n ...floatingSurfaceContract,\n background: semanticColors.content.primary,\n border: semanticColors.content.primary,\n radius: \"sm\" as const,\n padding: spacing.xs,\n },\n content: {\n color: semanticColors.canvas,\n textVariant: \"label\",\n maxWidth: 280,\n },\n arrow: {\n width: 10,\n height: 5,\n color: semanticColors.content.primary,\n padding: spacing.xs,\n },\n positioning: {\n sideOffset: spacing.xxs,\n collisionPadding: spacing.sm,\n },\n transition: { enter: motionPreset.micro, exit: motionPreset.exit },\n} as const;\n\nexport const topBarRecipe = {\n slots: [\n \"root\",\n \"leading\",\n \"title\",\n \"titleLeading\",\n \"titleAction\",\n \"trailing\",\n \"action\",\n \"actionLabel\",\n ] as const,\n defaults: { centered: true },\n minHeight: control.buttonHeight.large,\n sideMinWidth: control.buttonHeight.small,\n paddingHorizontal: spacing.md,\n gap: spacing.xxs,\n largeTextThreshold,\n title: { textVariant: \"bodyLarge\", color: semanticColors.content.primary, fontWeight: typography.title.fontWeight },\n titleAction: {\n minHeight: control.minTouchTarget,\n minWidth: control.minTouchTarget,\n gap: spacing.xs,\n pressedOpacity: opacity.pressed,\n },\n // 2026-10-21: compact header tools approved after the Today Baseball home trial.\n action: {\n size: \"small\",\n hitSlop: 0,\n minHeight: control.buttonHeight.small,\n minWidth: control.buttonHeight.small,\n gap: spacing.xxs,\n paddingHorizontal: spacing.xxs,\n pressedOpacity: opacity.pressed,\n disabledOpacity: opacity.disabled,\n },\n actionLabel: {\n textVariant: \"caption\",\n color: semanticColors.content.primary,\n fontWeight: fontWeight.medium,\n },\n background: semanticColors.canvas,\n} as const;\n\nexport const bottomCtaRecipe = {\n slots: [\"root\", \"description\", \"secondaryAction\", \"primaryAction\"] as const,\n minHeight: 64,\n // A standalone bar shares ScreenLayout's 16pt content edges. The general 20pt page gutter\n // narrowed the pinned action below the search field (Unairplane simulator review, 2026-10-20).\n paddingHorizontal: spacing.md,\n paddingTop: spacing.sm,\n paddingBottom: spacing.sm,\n gap: spacing.sm,\n // ScreenLayout's reading width includes its two body gutters. Subtract them here because this\n // max width measures the actions themselves; otherwise tablet buttons extend 16pt beyond each body edge.\n contentMaxWidth: layout.readingMaxWidth - spacing.md * 2,\n // A footer painted in the canvas tone left only a 1pt hairline between it\n // and the content scrolling underneath — a product author found that the\n // line cut a glyph in half at whatever scroll position the reader stopped\n // at, reading as a broken card rather than a footer. Layering by surface\n // (one step up from canvas) instead of by shadow alone is how this\n // component builds the separation; `shadow` below is reserved for the one\n // case that still needs it — see its comment.\n background: semanticColors.canvas,\n border: semanticColors.border.default,\n borderWidth: stroke.default,\n // The cut described above is the scroll viewport's edge, not a spacing\n // problem — content clips mid-glyph, and a hairline between two\n // similarly-light planes can't carry that on its own. The footer casts\n // upward instead: the one case where a shadow, rather than a surface step,\n // is the right tool, because the footer genuinely overlaps the content\n // beneath it.\n shadow: {\n color: \"#000000\",\n opacity: 0.08,\n radius: 8,\n offsetY: -2,\n elevation: 8,\n },\n} as const;\n\nexport const sectionRecipe = {\n slots: [\"root\", \"header\", \"copy\", \"title\", \"description\", \"action\", \"content\"] as const,\n gap: spacing.xs,\n headerGap: spacing.sm,\n copyGap: spacing.xxs,\n title: { textVariant: \"title\", color: semanticColors.content.body, fontWeight: typography.title.fontWeight },\n description: { textVariant: \"caption\", color: semanticColors.content.secondary },\n} as const;\n\nexport type SegmentedControlSize = keyof typeof segmentedControlRecipe.sizes;\nexport type SwitchPresentation = \"inline\" | \"row\";\nexport type SwitchSize = keyof typeof switchRecipe.sizes;\nexport type SelectionControlSize = keyof typeof selectionControlRecipe.sizes;\nexport type SelectionControlPresentation = keyof typeof selectionControlRecipe.presentations;\nexport type TabSize = keyof typeof tabsRecipe.sizes;\nexport type TabsLayout = keyof typeof tabsRecipe.layouts;\nexport type TabsOverflow = keyof typeof tabsRecipe.overflow;\nexport type TabsIndicator = keyof typeof tabsRecipe.indicators;\nexport type SpinnerSize = keyof typeof spinnerRecipe.sizes;\nexport type SpinnerTone = keyof typeof spinnerRecipe.tones;\nexport type AvatarSize = keyof typeof avatarRecipe.sizes;\nexport type AvatarShape = keyof typeof avatarRecipe.shapes;\nexport type DialogSize = keyof typeof dialogRecipe.sizes;\n"]}
1
+ {"version":3,"file":"component-recipes.js","sourceRoot":"","sources":["../src/component-recipes.ts"],"names":[],"mappings":"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","sourcesContent":["import { solidAccentColor, type ColorReference } from \"./color-references.js\";\nimport {\n collectionItemContract,\n fieldFrameContract,\n floatingSurfaceContract,\n focusIndicatorContract,\n formSupportContract,\n} from \"./component-contracts.js\";\nimport {\n backdrop,\n breakpoint,\n control,\n glyph,\n layer,\n largeTextThreshold,\n layout,\n fontWeight,\n motion,\n motionPreset,\n opacity,\n radius,\n spacing,\n stroke,\n typography,\n type FontWeightValue,\n type GlyphSize,\n type TextVariant,\n} from \"./foundations.js\";\nimport { buttonRecipe } from \"./base-recipes.js\";\nimport { semanticColors } from \"./semantic-colors.js\";\nimport { tooltipDescriptorDefaults } from \"./tooltip.js\";\nimport { bottomNavigationRecipeDefaults } from \"./bottom-navigation-defaults.js\";\n\nexport {\n iconButtonEdges,\n iconButtonRecipe,\n resolveIconButtonEdgeOverhang,\n resolveIconButtonPresentation,\n type IconButtonEdge,\n type IconButtonShape,\n type IconButtonSize,\n type IconButtonTone,\n type ResolvedIconButtonPresentation,\n} from \"./icon-button-recipe.js\";\nexport {\n counterBadgeDefaults,\n counterBadgeRecipe,\n formatCounterBadgeCount,\n type CounterBadgeSize,\n type CounterBadgeTone,\n type CounterBadgeVariant,\n} from \"./counter-badge-recipe.js\";\nexport {\n progressRecipe,\n resolveProgressSegments,\n type ProgressShape,\n type ProgressSize,\n type ProgressTone,\n} from \"./progress-recipe.js\";\nexport type {\n BottomNavigationDensity,\n BottomNavigationDistribution,\n BottomNavigationPresentation,\n} from \"./bottom-navigation-defaults.js\";\n\nexport type TextTone =\n | \"primary\"\n | \"body\"\n | \"muted\"\n | \"subtle\"\n | \"weak\"\n | \"brand\"\n | \"danger\"\n | \"inverse\";\nexport type TextEmphasis = \"regular\" | \"medium\" | \"strong\";\n\nexport const textRecipe = {\n slots: [\"root\"] as const,\n defaults: { variant: \"body\", tone: \"primary\", emphasis: \"regular\" },\n tones: {\n primary: semanticColors.content.primary,\n body: semanticColors.content.body,\n muted: semanticColors.content.secondary,\n subtle: semanticColors.content.tertiary,\n weak: semanticColors.content.decorative,\n brand: semanticColors.content.brand,\n danger: semanticColors.content.danger,\n inverse: semanticColors.content.inverse,\n },\n // 2026-10-17 user decisions: the strongest inline emphasis matches the title weight. strong=700 made unread\n // notification titles and labels heavier than every title after titles moved to 600 (\"왜 폰트가 진해\"), so\n // strong became 600; the second round (\"굵기 좀더 줄여\") moved titles 600→500 and display headings 700→600,\n // so strong follows the title role (500) and equals `medium`. Semibold 600 is the key-number/selected step.\n emphasis: {\n regular: fontWeight.regular,\n medium: fontWeight.medium,\n strong: typography.title.fontWeight,\n },\n /**\n * Variants whose omitted `emphasis` renders the variant's typography weight even without a design profile.\n * Label's 500 equals the `medium` emphasis step, but the shared `regular` default drew form labels at\n * body weight (2026-10-17 user decision: label 500 on Web and Native). Other variants keep `regular`.\n */\n variantWeight: [\"label\"],\n} as const satisfies {\n slots: readonly [\"root\"];\n defaults: {\n variant: TextVariant;\n tone: TextTone;\n emphasis: TextEmphasis;\n };\n tones: Record<TextTone, ColorReference>;\n emphasis: Record<TextEmphasis, FontWeightValue>;\n variantWeight: readonly TextVariant[];\n};\n\n/**\n * Weight Text renders when the caller omits `emphasis`; `undefined` means `textRecipe.defaults.emphasis` applies.\n * Inside a design profile every variant follows the profile's typography weight; outside one only\n * `textRecipe.variantWeight` variants do. An explicit `emphasis` always wins and never reaches this resolver.\n */\nexport function resolveTextDefaultWeight(\n variant: TextVariant,\n typographyTokens: Readonly<Record<TextVariant, Readonly<{ fontWeight: FontWeightValue }>>>,\n designProfileActive: boolean,\n): FontWeightValue | undefined {\n return designProfileActive || (textRecipe.variantWeight as readonly TextVariant[]).includes(variant)\n ? typographyTokens[variant].fontWeight\n : undefined;\n}\n\nexport type IconTone =\n | \"primary\"\n | \"secondary\"\n | \"decorative\"\n | \"brand\"\n | \"info\"\n | \"success\"\n | \"warning\"\n | \"danger\"\n | \"inverse\";\nexport type IconWeight = \"regular\" | \"strong\";\n\nexport const iconRecipe = {\n slots: [\"root\"] as const,\n defaults: {\n size: \"md\",\n tone: \"secondary\",\n weight: \"regular\",\n decorative: true,\n },\n sizes: glyph,\n tones: {\n primary: semanticColors.content.primary,\n secondary: semanticColors.content.secondary,\n decorative: semanticColors.content.decorative,\n brand: semanticColors.content.brand,\n info: semanticColors.feedback.info.foreground,\n success: semanticColors.feedback.success.foreground,\n warning: semanticColors.feedback.warning.foreground,\n danger: semanticColors.content.danger,\n inverse: semanticColors.content.inverse,\n },\n weights: { regular: 2, strong: 2.5 },\n stroke: {\n lineCap: \"round\",\n lineJoin: \"round\",\n scaling: \"proportional\",\n },\n} as const satisfies {\n slots: readonly [\"root\"];\n defaults: {\n size: GlyphSize;\n tone: IconTone;\n weight: IconWeight;\n decorative: boolean;\n };\n sizes: Record<GlyphSize, number>;\n tones: Record<IconTone, ColorReference>;\n weights: Record<IconWeight, number>;\n stroke: {\n lineCap: \"round\";\n lineJoin: \"round\";\n scaling: \"proportional\";\n };\n};\n\nexport type StackAxis = \"block\" | \"inline\";\nexport type StackGap = keyof typeof spacing;\nexport type StackAlign = \"start\" | \"center\" | \"end\" | \"stretch\";\nexport type StackJustify = \"start\" | \"center\" | \"end\" | \"between\";\n\nexport const stackRecipe = {\n slots: [\"root\"] as const,\n defaults: { axis: \"block\", gap: \"md\", align: \"stretch\", justify: \"start\", wrap: false },\n axes: { block: \"column\", inline: \"row\" },\n gaps: spacing,\n align: [\"start\", \"center\", \"end\", \"stretch\"] as const,\n justify: [\"start\", \"center\", \"end\", \"between\"] as const,\n} as const satisfies {\n slots: readonly [\"root\"];\n defaults: {\n axis: StackAxis;\n gap: StackGap;\n align: StackAlign;\n justify: StackJustify;\n wrap: boolean;\n };\n axes: Record<StackAxis, \"column\" | \"row\">;\n gaps: Record<StackGap, number>;\n align: readonly StackAlign[];\n justify: readonly StackJustify[];\n};\n\nexport type LinkTone = \"brand\" | \"neutral\";\nexport type LinkVariant = \"inline\" | \"standalone\";\n\nexport const linkRecipe = {\n slots: [\"root\", \"leading\", \"label\", \"trailing\"] as const,\n defaults: { tone: \"brand\", variant: \"inline\" },\n tones: {\n brand: semanticColors.content.brand,\n neutral: semanticColors.content.body,\n },\n variants: {\n inline: {\n textVariant: \"body\",\n fontWeight: fontWeight.medium,\n underline: \"always\",\n minHeight: null,\n minWidth: null,\n },\n /** 그 자체가 동작이므로 두 축 모두 최소 터치 타깃. 높이만 잡으면 짧은 라벨이 좁아진다. */\n standalone: {\n textVariant: \"body\",\n fontWeight: fontWeight.medium,\n underline: \"hover\",\n minHeight: control.minTouchTarget,\n minWidth: control.minTouchTarget,\n },\n },\n gap: spacing.xxs,\n icon: { glyph: \"xs\", inheritsTone: true },\n states: {\n pressedOpacity: opacity.pressed,\n focus: focusIndicatorContract,\n },\n} as const satisfies {\n slots: readonly [\"root\", \"leading\", \"label\", \"trailing\"];\n defaults: { tone: LinkTone; variant: LinkVariant };\n tones: Record<LinkTone, ColorReference>;\n variants: Record<\n LinkVariant,\n {\n textVariant: TextVariant;\n fontWeight: FontWeightValue;\n underline: \"always\" | \"hover\";\n minHeight: number | null;\n minWidth: number | null;\n }\n >;\n gap: number;\n icon: { glyph: GlyphSize; inheritsTone: true };\n states: {\n pressedOpacity: number;\n focus: typeof focusIndicatorContract;\n };\n};\n\nexport const selectionGroupRecipe = {\n slots: [\"root\", \"label\", \"requiredIndicator\", \"description\", \"items\", \"itemLabel\", \"itemAction\", \"error\"] as const,\n defaults: { orientation: \"vertical\", presentation: \"card\" },\n orientations: {\n vertical: {\n direction: \"column\",\n // `grouped` rows sit flush inside one shared card, so the group owns\n // the only outer radius and the rows share edges instead of floating\n // apart with their own gap — the same shape as `selectionControlRecipe`'s\n // `grouped` presentation, which this gap pairs with.\n gap: { plain: spacing.xxs, card: spacing.xs, grouped: 0, chips: spacing.xs },\n },\n horizontal: {\n direction: \"row\",\n gap: { plain: spacing.sm, card: spacing.md, grouped: 0, chips: spacing.xs },\n },\n },\n label: formSupportContract.label,\n requiredIndicator: { color: semanticColors.content.danger },\n description: formSupportContract.hint,\n error: formSupportContract.error,\n supportGap: formSupportContract.gap,\n states: { disabledOpacity: opacity.disabled },\n} as const;\n\nexport type SelectionGroupOrientation = keyof typeof selectionGroupRecipe.orientations;\nexport type SelectionGroupPresentation = keyof typeof selectionGroupRecipe.orientations.vertical.gap;\n\nexport type BadgeTone =\n | \"neutral\"\n /**\n * One step stronger than `neutral`: solid ink plate instead of a muted\n * label + sunken plate. A product author needed this for a result screen\n * where win/loss is the fact itself, not a side note, and `neutral` plus\n * its `outline` variant read as nearly the same grey — the one place the\n * distinction had to be unmistakable at a glance. Use it where a badge must\n * outrank `neutral` without borrowing an accent or the brand tint (both of\n * which already carry other meanings — see the `brand` tone below).\n */\n | \"strong\"\n | \"brand\"\n | \"info\"\n | \"success\"\n | \"warning\"\n | \"attention\"\n | \"danger\";\nexport type BadgeSize = \"small\" | \"medium\";\nexport type BadgeVariant = \"filled\" | \"outline\";\n\nexport type BadgeAdornmentContext = Readonly<{ color: string; size: number }>;\n\nexport const badgeRecipe = {\n slots: [\"root\", \"icon\", \"label\", \"trailing\"] as const,\n defaults: { tone: \"neutral\", size: \"medium\", variant: \"filled\" },\n variants: {\n filled: {\n usesToneBackground: true,\n borderFallback: null,\n },\n outline: {\n usesToneBackground: false,\n borderFallback: semanticColors.border.default,\n },\n },\n // 2026-10-18: match the Today Baseball status plate reference: solid fill,\n // white copy and compact rounded corners. Outline retains its tone-colored copy.\n tones: {\n neutral: { content: semanticColors.content.statusInverse, outlineContent: semanticColors.content.secondary, background: semanticColors.surface.statusNeutral, border: null },\n strong: { content: semanticColors.content.statusInverse, outlineContent: semanticColors.content.primary, background: semanticColors.surface.statusStrong, border: null },\n brand: { content: semanticColors.content.inverse, outlineContent: semanticColors.content.brand, background: semanticColors.action.brand.background, border: null },\n info: { content: semanticColors.content.statusInverse, outlineContent: semanticColors.feedback.info.foreground, background: solidAccentColor(\"info\"), border: semanticColors.feedback.info.border },\n success: { content: semanticColors.content.statusInverse, outlineContent: semanticColors.feedback.success.foreground, background: solidAccentColor(\"success\"), border: semanticColors.feedback.success.border },\n warning: { content: semanticColors.content.statusInverse, outlineContent: semanticColors.feedback.warning.foreground, background: solidAccentColor(\"warning\"), border: semanticColors.feedback.warning.border },\n attention: { content: semanticColors.content.statusInverse, outlineContent: semanticColors.feedback.attention.foreground, background: solidAccentColor(\"attention\"), border: semanticColors.feedback.attention.border },\n danger: { content: semanticColors.action.danger.content, outlineContent: semanticColors.content.danger, background: semanticColors.action.danger.background, border: semanticColors.feedback.danger.border },\n },\n sizes: {\n small: {\n minHeight: 20,\n paddingHorizontal: spacing.xs,\n gap: spacing.xxs,\n iconSize: glyph.xs,\n textVariant: \"caption\",\n },\n medium: {\n minHeight: 24,\n paddingHorizontal: spacing.xs,\n gap: spacing.xxs,\n iconSize: glyph.xs,\n textVariant: \"caption\",\n },\n },\n radius: \"sm\",\n borderWidth: stroke.default,\n fontWeight: fontWeight.bold,\n} as const;\n\nexport type SearchFieldSize = \"medium\" | \"large\";\n\n/** Search is a field specialization with stable affordance and clear targets. */\nexport const searchFieldRecipe = {\n slots: [\"root\", \"leading\", \"input\", \"trailing\", \"clear\", \"spinner\"] as const,\n defaults: { size: \"medium\", shape: \"medium\" },\n sizes: {\n medium: {\n minHeight: control.minTouchTarget,\n paddingHorizontal: spacing.sm,\n gap: spacing.xs,\n glyph: \"sm\",\n clearDiameter: 36,\n clearHitSlop: 4,\n textVariant: \"body\",\n },\n large: {\n minHeight: control.buttonHeight.large,\n paddingHorizontal: spacing.md,\n gap: spacing.sm,\n glyph: \"sm\",\n clearDiameter: control.minTouchTarget,\n clearHitSlop: 0,\n textVariant: \"bodyLarge\",\n },\n },\n colors: {\n background: semanticColors.canvas,\n content: semanticColors.content.primary,\n placeholder: semanticColors.content.secondary,\n leading: semanticColors.content.decorative,\n clear: semanticColors.content.secondary,\n border: semanticColors.border.control,\n focus: focusIndicatorContract.color,\n invalid: semanticColors.border.danger,\n },\n /**\n * 모양은 **축이다** — 값 하나로 못 박지 않는다.\n *\n * 원래 여기는 `radius: \"full\"` 하나였다. 그런데 `fieldRecipe`는 같은 결정을\n * `shapes: { medium, large, full }` 축으로 열어 두고 있었고, 그래서 **한 앱 안에서\n * 평범한 입력과 찾기 입력이 서로 다른 모양이 되는 것을 계약이 막지 못했다.** 실제로\n * 갈라졌다 — app-rn은 `\"md\"`로 그리고 있었는데 이 계약은 `\"full\"`이라고 말하고\n * 있었고, 어느 쪽이 옳은지 양쪽 문서 어디에도 없었다.\n *\n * 찾기 입력이 알약이어야 하는지는 **제품이 정할 일**이고(iOS 관례는 알약, 이 앱은\n * 사각), 계약이 할 일은 그 선택지를 `fieldRecipe`와 **같은 이름으로** 주는 것이다.\n * 그러면 두 입력의 모양을 나란히 맞추는 것과 일부러 다르게 하는 것이 둘 다 표현된다.\n */\n shapes: { medium: \"md\", large: \"lg\", full: \"full\" },\n borderWidth: stroke.default,\n focusRingWidth: focusIndicatorContract.width,\n focusRingOffset: focusIndicatorContract.offset,\n states: {\n disabledOpacity: opacity.disabled,\n pressedOpacity: opacity.pressed,\n },\n} as const satisfies {\n slots: readonly [\"root\", \"leading\", \"input\", \"trailing\", \"clear\", \"spinner\"];\n defaults: { size: SearchFieldSize; shape: \"medium\" | \"large\" | \"full\" };\n sizes: Record<\n SearchFieldSize,\n {\n minHeight: number;\n paddingHorizontal: number;\n gap: number;\n glyph: GlyphSize;\n clearDiameter: number;\n clearHitSlop: number;\n textVariant: TextVariant;\n }\n >;\n colors: Record<\n \"background\" | \"content\" | \"placeholder\" | \"leading\" | \"clear\" | \"border\" | \"focus\" | \"invalid\",\n ColorReference\n >;\n shapes: Record<\"medium\" | \"large\" | \"full\", keyof typeof radius>;\n borderWidth: number;\n focusRingWidth: number;\n focusRingOffset: number;\n states: { disabledOpacity: number; pressedOpacity: number };\n};\n\nexport type ChipSize = keyof typeof control.chipHeight;\n\nexport const chipRecipe = {\n slots: [\"root\", \"leading\", \"indicator\", \"label\", \"trailing\"] as const,\n defaults: { size: \"small\", selected: false },\n /**\n * `height` is the minimum visible height; a label taller than it grows the chip (Web `min-block-size`,\n * Native `minHeight` from 1.13.1). Native used it as a fixed height and clipped labels at large text\n * (utilverse 1.13.0 adoption, 2026-10-06), unlike Web and Button.\n */\n sizes: {\n small: {\n height: control.chipHeight.small,\n hitSlop: 4,\n paddingHorizontal: spacing.sm,\n gap: spacing.xxs,\n textVariant: \"body\",\n },\n medium: {\n height: control.chipHeight.medium,\n hitSlop: 0,\n paddingHorizontal: spacing.md,\n gap: spacing.xs,\n textVariant: \"body\",\n },\n },\n states: {\n idle: {\n background: semanticColors.canvas,\n content: semanticColors.content.secondary,\n // A resting chip wears the shared hairline, not a text-strength\n // outline. Drawing it in `content.secondary` made an unselected chip\n // read heavier than the selected one beside it, inverting the one\n // signal that matters in a filter row.\n border: semanticColors.border.default,\n },\n selected: {\n background: semanticColors.selection.background,\n content: semanticColors.selection.content,\n border: semanticColors.selection.border,\n },\n pressedOpacity: opacity.pressed,\n disabledOpacity: opacity.disabled,\n },\n radius: \"full\",\n borderWidth: stroke.default,\n // Selected keeps one step above idle (500 → 600) so the state still carries a weight cue on the lighter scale.\n label: { fontWeight: fontWeight.medium, selectedFontWeight: fontWeight.semibold },\n selectionIndicator: {\n color: semanticColors.selection.content,\n glyph: \"xs\",\n },\n focus: focusIndicatorContract,\n} as const;\n\nexport const dividerRecipe = {\n slots: [\"root\", \"label\"] as const,\n defaults: { orientation: \"horizontal\", inset: \"none\" },\n color: semanticColors.border.default,\n thickness: stroke.subtle,\n insets: {\n none: 0,\n start: spacing.md,\n both: spacing.md,\n },\n} as const;\n\n/**\n * How far a ListRow surface (pressed, hover, selected, focus ring) reaches past the row text on each inline side.\n * 2026-10-17 user decision: the row text sits on its container's content edge (the 16 screen gutter on a default\n * screen) and only the surface bleeds outward by this amount. Rows used to put it inside as padding, so row text\n * started at 16 + 8 = 24 while section titles and result headers started at 16. Containers that clip (grouped List,\n * VirtualList) keep exactly this much inline room so the bleed is never cut.\n */\nconst listRowSurfaceBleed = spacing.xs;\n/** ListRow leading frame and the gap before its text column; the indented separator reuses both. */\nconst listRowLeadingSize = 40;\nconst listRowGap = spacing.sm;\n\nexport const listRecipe = {\n slots: [\"root\", \"item\", \"separator\"] as const,\n defaults: { separator: \"indented\" },\n /**\n * Separators are measured from the list's content edge, where the row text sits, and each one belongs to the row\n * above it (iOS cell separator). \"full\" spans the row surface (content edge ± bleed). \"indented\" follows that row's\n * text column: it starts at the text — `leadingInsetStart` (leading 40 + gap 12) when the row has a leading\n * element, `insetStart` 0 when it has none — and ends on the row's trailing content edge (0).\n * 2026-10-17 user report: a fixed 52 start cut the line off midway under rows without leading (text at 16, line\n * from 68), and the −8 end ran past the trailing content.\n */\n separators: {\n none: null,\n // Controls and router-owned rows already contain their own padding; their separators stay on the content edge.\n content: { insetStart: 0, leadingInsetStart: 0, insetEnd: 0 },\n full: { insetStart: -listRowSurfaceBleed, leadingInsetStart: -listRowSurfaceBleed, insetEnd: -listRowSurfaceBleed },\n indented: { insetStart: 0, leadingInsetStart: listRowLeadingSize + listRowGap, insetEnd: 0 },\n },\n // A grouped list paints its own rounded surface and clips to it, so it leaves the row bleed as inline padding:\n // rows keep their full surface inside the radius and the text stays 8 inside the group edge as before.\n grouped: { paddingInline: listRowSurfaceBleed },\n background: null,\n} as const;\n\nexport type ListRowDensity = \"compact\" | \"comfortable\" | \"relaxed\" | \"spacious\";\n/** Frame geometry the ListRow paints around its leading slot. */\nexport type ListRowLeadingShape = \"square\" | \"circle\";\n\nexport const listRowRecipe = {\n slots: [\"root\", \"leading\", \"content\", \"title\", \"description\", \"trailing\"] as const,\n defaults: { density: \"comfortable\", selected: false, tone: \"default\" },\n // Destructive destinations keep semantic emphasis without renderer-specific title styles.\n tones: { default: { titleColor: semanticColors.content.body }, danger: { titleColor: semanticColors.content.danger } },\n density: {\n compact: {\n oneLineMinHeight: control.minTouchTarget,\n twoLineMinHeight: 60,\n paddingHorizontal: listRowSurfaceBleed,\n paddingVertical: spacing.xxs,\n },\n comfortable: {\n oneLineMinHeight: layout.rowHeight.singleLine,\n twoLineMinHeight: layout.rowHeight.twoLine,\n paddingHorizontal: listRowSurfaceBleed,\n paddingVertical: spacing.xs,\n },\n /*\n 토스 TDS의 ListRow는 세로 여백을 네 단계로 둔다. HJM이 두 단계만 갖고 있던 동안\n 제품은 그 사이 값을 제품 CSS로 만들었다(설정 목록은 넓게, 검색 결과는 좁게).\n 숫자는 이미 있는 spacing 스케일(sm/md)을 그대로 쓰고 새 값을 만들지 않는다.\n 최소 높이는 여백에 맞춰 함께 올라간다 — 여백만 키우면 한 줄 행이 위아래로 치우친다.\n */\n relaxed: {\n oneLineMinHeight: layout.rowHeight.singleLine + spacing.xs,\n twoLineMinHeight: layout.rowHeight.twoLine + spacing.xs,\n paddingHorizontal: listRowSurfaceBleed,\n paddingVertical: spacing.sm,\n },\n spacious: {\n oneLineMinHeight: layout.rowHeight.singleLine + spacing.md,\n twoLineMinHeight: layout.rowHeight.twoLine + spacing.md,\n paddingHorizontal: listRowSurfaceBleed,\n paddingVertical: spacing.md,\n },\n },\n // Loading uses the same row/line boxes as content; only the copy width is illustrative.\n loading: { titleWidthPercent: 60, descriptionWidthPercent: 40, trailingWidth: spacing.xxl },\n /**\n * Inline placement (2026-10-17 user decision, see `listRowSurfaceBleed`): the content box sits on the container's\n * content edge and the surface bleeds outward by `paddingHorizontal` — renderers draw the row with that padding and\n * the same negative inline margin, so pressed/selected fills keep 8 of room beyond the text.\n */\n surfaceBleed: listRowSurfaceBleed,\n gap: listRowGap,\n leadingSize: listRowLeadingSize,\n /**\n * Frame geometry for the leading slot. The size was already declared here but\n * no renderer bound it, so every consumer re-derived the avatar box (radius,\n * clipping, centering) in product styles.\n */\n leadingShapes: { square: null, circle: \"full\" },\n title: { color: semanticColors.content.body, textVariant: \"bodyLarge\", fontWeight: typography.title.fontWeight },\n description: { color: semanticColors.content.secondary, textVariant: \"body\" },\n trailing: {\n textColor: semanticColors.content.secondary,\n iconColor: semanticColors.content.decorative,\n glyph: \"sm\",\n textVariant: \"caption\",\n },\n states: {\n pressedBackground: semanticColors.canvas,\n selectedBackground: semanticColors.selection.background,\n disabledOpacity: opacity.disabled,\n },\n} as const satisfies {\n slots: readonly string[];\n defaults: { density: ListRowDensity; selected: boolean; tone: \"default\" | \"danger\" };\n tones: Record<\"default\" | \"danger\", { titleColor: ColorReference }>;\n density: Record<ListRowDensity, {\n oneLineMinHeight: number;\n twoLineMinHeight: number;\n paddingHorizontal: number;\n paddingVertical: number;\n }>;\n loading: { titleWidthPercent: number; descriptionWidthPercent: number; trailingWidth: number };\n surfaceBleed: number;\n gap: number;\n leadingSize: number;\n leadingShapes: Record<ListRowLeadingShape, keyof typeof radius | null>;\n title: unknown;\n description: unknown;\n trailing: unknown;\n states: unknown;\n};\n\nexport type AccordionDensity = \"compact\" | \"comfortable\";\n\nexport const accordionRecipe = {\n slots: [\"root\", \"item\", \"header\", \"trigger\", \"title\", \"indicator\", \"panel\", \"divider\"] as const,\n defaults: { density: \"comfortable\", allowsMultipleExpanded: false },\n density: {\n compact: { triggerMinHeight: control.minTouchTarget, paddingVertical: spacing.xs },\n comfortable: { triggerMinHeight: layout.rowHeight.singleLine, paddingVertical: spacing.sm },\n },\n paddingHorizontal: spacing.xs,\n gap: spacing.sm,\n title: { color: semanticColors.content.body, textVariant: \"bodyLarge\", fontWeight: typography.title.fontWeight },\n indicator: { color: semanticColors.content.secondary, glyph: \"sm\" },\n panel: {\n color: semanticColors.content.body,\n textVariant: \"body\",\n paddingBottom: spacing.md,\n paddingInlineStart: spacing.xs,\n },\n divider: semanticColors.border.default,\n states: {\n pressedBackground: semanticColors.canvas,\n focus: focusIndicatorContract,\n disabledOpacity: opacity.disabled,\n },\n transition: motionPreset.enter,\n} as const;\n\nexport type MenuItemTone = \"neutral\" | \"danger\";\n\nexport const menuRecipe = {\n slots: [\n \"trigger\",\n \"content\",\n \"viewport\",\n \"section\",\n \"sectionLabel\",\n \"item\",\n \"leading\",\n \"copy\",\n \"label\",\n \"description\",\n \"trailing\",\n \"shortcut\",\n \"indicator\",\n \"dangerIndicator\",\n \"separator\",\n ] as const,\n defaults: { density: \"comfortable\", itemTone: \"neutral\" },\n // 2026-10-20: one menu contract, three intentional placements. Item count never changes the presentation.\n presentations: {\n grouped: { maxWidth: 288, padding: spacing.sm, gap: spacing.xs, rowHeight: 52 },\n anchored: { maxWidth: 280, padding: spacing.xs, gap: spacing.xs, rowHeight: 48 },\n bottom: { maxWidth: 420, padding: 0, gap: spacing.xs, rowHeight: 56 },\n },\n surface: floatingSurfaceContract,\n density: {\n compact: { ...collectionItemContract, minHeight: control.minTouchTarget },\n comfortable: { ...collectionItemContract, minHeight: layout.rowHeight.singleLine },\n },\n tones: {\n neutral: collectionItemContract.label.color,\n danger: collectionItemContract.danger,\n },\n sectionLabel: {\n color: semanticColors.content.secondary,\n textVariant: \"label\",\n paddingHorizontal: spacing.sm,\n paddingVertical: spacing.xs,\n },\n leading: { color: semanticColors.content.secondary, glyph: \"sm\" },\n shortcut: { color: semanticColors.content.secondary, textVariant: \"caption\" },\n indicator: { color: collectionItemContract.selectedIndicator, glyph: \"sm\" },\n separator: semanticColors.border.default,\n dangerIndicator: {\n color: collectionItemContract.danger,\n glyph: \"sm\",\n mark: \"alert\",\n },\n minWidth: 220,\n maxWidth: 320,\n maxHeight: 360,\n sideOffset: spacing.xs,\n collisionPadding: spacing.xs,\n states: { disabledOpacity: opacity.disabled },\n transition: { enter: motionPreset.enter, exit: motionPreset.exit },\n} as const satisfies {\n slots: readonly string[];\n defaults: { density: \"compact\" | \"comfortable\"; itemTone: MenuItemTone };\n presentations: Record<\"grouped\" | \"anchored\" | \"bottom\", { maxWidth: number; padding: number; gap: number; rowHeight: number }>;\n surface: typeof floatingSurfaceContract;\n density: Record<\n \"compact\" | \"comfortable\",\n Omit<typeof collectionItemContract, \"minHeight\"> & { minHeight: number }\n >;\n tones: Record<MenuItemTone, ColorReference>;\n sectionLabel: {\n color: ColorReference;\n textVariant: TextVariant;\n paddingHorizontal: number;\n paddingVertical: number;\n };\n leading: { color: ColorReference; glyph: GlyphSize };\n shortcut: { color: ColorReference; textVariant: TextVariant };\n indicator: { color: ColorReference; glyph: GlyphSize };\n separator: ColorReference;\n dangerIndicator: {\n color: ColorReference;\n glyph: GlyphSize;\n mark: \"alert\";\n };\n minWidth: number;\n maxWidth: number;\n maxHeight: number;\n sideOffset: number;\n collisionPadding: number;\n states: { disabledOpacity: number };\n transition: { enter: typeof motionPreset.enter; exit: typeof motionPreset.exit };\n};\n\nexport type MenuDensity = keyof typeof menuRecipe.density;\nexport type MenuPresentation = keyof typeof menuRecipe.presentations;\n\nexport type SelectSize = \"medium\" | \"large\";\nexport type SelectDensity = \"compact\" | \"comfortable\";\n\n/**\n * Select is visually one field plus one collection, even though Web renders\n * the collection in a popover and Native renders it in a modal sheet.\n */\nexport const selectRecipe = {\n slots: [\n \"root\",\n \"label\",\n \"trigger\",\n \"leading\",\n \"value\",\n \"placeholder\",\n \"busyIndicator\",\n \"indicator\",\n \"description\",\n \"error\",\n \"popover\",\n \"viewport\",\n \"section\",\n \"sectionLabel\",\n \"option\",\n \"optionLeading\",\n \"optionCopy\",\n \"optionLabel\",\n \"optionDescription\",\n \"selectionIndicator\",\n \"stateMessage\",\n ] as const,\n defaults: { size: \"medium\", density: \"comfortable\" },\n adaptive: { web: \"popover\", native: \"sheet\" },\n frame: fieldFrameContract,\n sizes: {\n medium: {\n minHeight: fieldFrameContract.minHeight,\n paddingHorizontal: fieldFrameContract.paddingHorizontal,\n textVariant: \"body\",\n glyph: \"sm\",\n },\n large: {\n minHeight: control.buttonHeight.large,\n paddingHorizontal: spacing.lg,\n textVariant: \"bodyLarge\",\n glyph: \"md\",\n },\n },\n support: formSupportContract,\n value: {\n color: semanticColors.content.body,\n placeholderColor: semanticColors.content.secondary,\n gap: spacing.sm,\n },\n leading: { color: semanticColors.content.secondary },\n indicator: { color: semanticColors.content.secondary },\n busyIndicator: { color: semanticColors.content.brand, glyph: \"sm\" },\n popover: {\n ...floatingSurfaceContract,\n minWidth: 220,\n maxWidth: 420,\n maxHeight: 360,\n sideOffset: spacing.xs,\n collisionPadding: spacing.xs,\n },\n density: {\n compact: { ...collectionItemContract, minHeight: control.minTouchTarget },\n comfortable: { ...collectionItemContract, minHeight: layout.rowHeight.singleLine },\n },\n sectionLabel: {\n color: semanticColors.content.secondary,\n textVariant: \"label\",\n paddingHorizontal: spacing.sm,\n paddingVertical: spacing.xs,\n },\n optionLeading: { color: semanticColors.content.secondary, glyph: \"sm\" },\n optionLabel: { fontWeight: fontWeight.medium, selectedFontWeight: fontWeight.semibold },\n selectionIndicator: { color: semanticColors.selection.content, glyph: \"sm\" },\n stateMessage: {\n color: semanticColors.content.secondary,\n textVariant: \"body\",\n minHeight: control.minTouchTarget,\n paddingHorizontal: spacing.sm,\n paddingVertical: spacing.sm,\n },\n states: {\n hoverBackground: semanticColors.canvas,\n pressedBackground: semanticColors.canvas,\n focus: focusIndicatorContract,\n invalidBorder: semanticColors.border.danger,\n disabledOpacity: opacity.disabled,\n },\n transition: {\n web: { enter: motionPreset.micro, exit: motionPreset.exit },\n native: { enter: motionPreset.enter, exit: motionPreset.exit },\n },\n} as const satisfies {\n slots: readonly string[];\n defaults: { size: SelectSize; density: SelectDensity };\n adaptive: { web: \"popover\"; native: \"sheet\" };\n frame: typeof fieldFrameContract;\n sizes: Record<\n SelectSize,\n {\n minHeight: number;\n paddingHorizontal: number;\n textVariant: TextVariant;\n glyph: GlyphSize;\n }\n >;\n support: typeof formSupportContract;\n value: { color: ColorReference; placeholderColor: ColorReference; gap: number };\n leading: { color: ColorReference };\n indicator: { color: ColorReference };\n busyIndicator: { color: ColorReference; glyph: GlyphSize };\n popover: typeof floatingSurfaceContract & {\n minWidth: number;\n maxWidth: number;\n maxHeight: number;\n sideOffset: number;\n collisionPadding: number;\n };\n density: Record<\n SelectDensity,\n Omit<typeof collectionItemContract, \"minHeight\" | \"selectedBackground\" | \"highlightedBackground\"> & { minHeight: number; selectedBackground: ColorReference; highlightedBackground: ColorReference }\n >;\n sectionLabel: {\n color: ColorReference;\n textVariant: TextVariant;\n paddingHorizontal: number;\n paddingVertical: number;\n };\n optionLeading: { color: ColorReference; glyph: GlyphSize };\n optionLabel: { fontWeight: FontWeightValue; selectedFontWeight: FontWeightValue };\n selectionIndicator: { color: ColorReference; glyph: GlyphSize };\n stateMessage: {\n color: ColorReference;\n textVariant: TextVariant;\n minHeight: number;\n paddingHorizontal: number;\n paddingVertical: number;\n };\n states: {\n hoverBackground: ColorReference;\n pressedBackground: ColorReference;\n focus: typeof focusIndicatorContract;\n invalidBorder: ColorReference;\n disabledOpacity: number;\n };\n transition: {\n web: { enter: typeof motionPreset.micro; exit: typeof motionPreset.exit };\n native: { enter: typeof motionPreset.enter; exit: typeof motionPreset.exit };\n };\n};\n\n/** Editable input anatomy layered on the exact same collection grammar. */\nexport const comboboxRecipe = {\n slots: [\n \"root\",\n \"label\",\n \"field\",\n \"leading\",\n \"input\",\n \"indicator\",\n \"clear\",\n \"loadingIndicator\",\n \"description\",\n \"error\",\n \"popover\",\n \"viewport\",\n \"section\",\n \"sectionLabel\",\n \"option\",\n \"optionLeading\",\n \"optionCopy\",\n \"optionLabel\",\n \"optionDescription\",\n \"selectionIndicator\",\n \"stateMessage\",\n ] as const,\n defaults: selectRecipe.defaults,\n adaptive: selectRecipe.adaptive,\n frame: selectRecipe.frame,\n sizes: selectRecipe.sizes,\n support: selectRecipe.support,\n input: selectRecipe.value,\n leading: selectRecipe.leading,\n indicator: selectRecipe.indicator,\n clear: {\n diameter: control.buttonHeight.small,\n hitSlop: control.buttonHitSlop.small,\n glyph: \"xs\",\n color: semanticColors.content.secondary,\n },\n loadingIndicator: { color: semanticColors.content.brand, glyph: \"sm\" },\n popover: selectRecipe.popover,\n density: selectRecipe.density,\n sectionLabel: selectRecipe.sectionLabel,\n optionLeading: selectRecipe.optionLeading,\n optionLabel: selectRecipe.optionLabel,\n selectionIndicator: selectRecipe.selectionIndicator,\n stateMessage: selectRecipe.stateMessage,\n states: selectRecipe.states,\n transition: selectRecipe.transition,\n} as const satisfies {\n slots: readonly string[];\n defaults: typeof selectRecipe.defaults;\n adaptive: typeof selectRecipe.adaptive;\n frame: typeof selectRecipe.frame;\n sizes: typeof selectRecipe.sizes;\n support: typeof selectRecipe.support;\n input: typeof selectRecipe.value;\n leading: typeof selectRecipe.leading;\n indicator: typeof selectRecipe.indicator;\n clear: { diameter: number; hitSlop: number; glyph: GlyphSize; color: ColorReference };\n loadingIndicator: { color: ColorReference; glyph: GlyphSize };\n popover: typeof selectRecipe.popover;\n density: typeof selectRecipe.density;\n sectionLabel: typeof selectRecipe.sectionLabel;\n optionLeading: typeof selectRecipe.optionLeading;\n optionLabel: typeof selectRecipe.optionLabel;\n selectionIndicator: typeof selectRecipe.selectionIndicator;\n stateMessage: typeof selectRecipe.stateMessage;\n states: typeof selectRecipe.states;\n transition: typeof selectRecipe.transition;\n};\n\n/** Block-side inset of the connected track: `container.padding` + `container.borderWidth`. */\nconst segmentedTrackInset = spacing.xxs + stroke.subtle;\n\nexport const segmentedControlRecipe = {\n // Text navigation reuses radio selection, without cloning a product-only tab engine.\n text: { gap: spacing.md, indicatorWidth: 16, indicatorHeight: 2, indicatorRadius: radius.full,\n minHeight: control.minTouchTarget, labelGap: spacing.xxs, regular: {idle:\"400\",selected:\"600\"}, strong:{idle:\"500\",selected:\"700\"} },\n slots: [\"root\", \"item\", \"label\", \"indicator\"] as const,\n defaults: { size: \"medium\" },\n // Category filters share the single-selection engine, with a compact surface inside a 44 target.\n // See usage/components/segmented-control.md; no separate filter-selection state is introduced.\n // Match Chip's visible size step in mixed filter rails; the inset keeps a separate 44pt touch box.\n // The old 8pt inset drew 28pt pills next to a 36pt small action chip (Utilverse, 2026-10-20).\n // Spint review (2026-10-20): restore the original inset and use a smaller category label instead.\n // Strong selection uses the product primary/onPrimary contrast pair (Diairy/Spint review, 2026-10-21).\n selectedBrand: { background: semanticColors.action.brand.background, content: semanticColors.action.brand.content },\n pills: { textVariant: \"label\", paddingHorizontal: { small: spacing.sm, medium: spacing.md }, gap: spacing.xs, radius: radius.full, inset: spacing.xxs, minHeight: control.minTouchTarget,\n // Utilverse's pastel scene swallowed the sunken fill without an outline (2026-10-20).\n // Use the resting control border on the inset surface so touch geometry stays unchanged.\n background: semanticColors.surface.raised, border: semanticColors.border.control, borderWidth: stroke.subtle,\n selectedBackground: semanticColors.selection.background, selectedContent: semanticColors.selection.content,\n /**\n * Pills are content-width, so large text keeps the row: it wraps inside a block and stays one line\n * inside a horizontal scroller (SearchScreen `filtersOverflow=\"scroll\"`, a product rail). `adaptive`\n * stacking is for the equal-width connected track only. Stacking pills too turned a seven-theme\n * filter rail into a ~440pt column at accessibility-large (utilverse 1.13.0 adoption, 2026-10-06),\n * and the product swapped in a Select to escape it. Rejected: a pills-only scroll prop, because\n * the host already owns the rail and a second scroller inside it would nest horizontal scrolling.\n */\n largeTextLayout: \"wrap\" as const },\n adaptive: {\n // Equal-width rows stop being comparable when every short label wraps one\n // Hangul syllable per line. Native renderers stack the options before that\n // point so each choice remains a readable phrase and a 44pt target.\n // Applies to presentation=\"connected\" only; pills follow `pills.largeTextLayout`.\n largeTextLayout: \"stacked\" as const,\n stackAtFontScale: largeTextThreshold,\n },\n // The neutral selected surface is shared with pills and Chip; the ring remains a separate selection cue.\n container: {\n background: semanticColors.canvas,\n border: semanticColors.border.default,\n borderWidth: stroke.subtle,\n radius: \"lg\",\n padding: spacing.xxs,\n gap: spacing.xxs,\n },\n /**\n * `height` is the connected control's outer height (track border + padding included) and matches the Button /\n * IconButton / Chip height of the same size step, so a segmented control and a chip in one row line up.\n * `minHeight` is the option inside the track (height − 2 × (`container.padding` + `container.borderWidth`)) and `hitSlop` extends each\n * option vertically to the 44 touch target. Before 2026-10-17 `minHeight` was the option itself, so the track\n * drew 46/54 next to 36/44 chips and buttons (DiscoveryGallery sort row, user request \"높이 맞춰\").\n */\n sizes: {\n small: {\n height: control.buttonHeight.small,\n minHeight: control.buttonHeight.small - 2 * segmentedTrackInset,\n hitSlop: (control.minTouchTarget - (control.buttonHeight.small - 2 * segmentedTrackInset)) / 2,\n paddingHorizontal: spacing.sm,\n textVariant: \"label\",\n },\n medium: {\n height: control.buttonHeight.medium,\n minHeight: control.buttonHeight.medium - 2 * segmentedTrackInset,\n hitSlop: (control.minTouchTarget - (control.buttonHeight.medium - 2 * segmentedTrackInset)) / 2,\n paddingHorizontal: spacing.md,\n textVariant: \"body\",\n },\n },\n item: {\n radius: \"md\",\n gap: spacing.xxs,\n idleContent: semanticColors.content.secondary,\n fontWeight: fontWeight.medium,\n selectedBackground: semanticColors.selection.background,\n selectedContent: semanticColors.selection.content,\n /**\n * The ring stays the selection signal so the control keeps a non-text\n * contrast of at least 3:1; a fill-only thumb cannot reach that against a\n * neutral track.\n */\n selectedBorder: semanticColors.border.focus,\n selectedBorderWidth: stroke.strong,\n selectedFontWeight: fontWeight.semibold,\n focusRing: semanticColors.border.focus,\n pressedOpacity: opacity.pressed,\n disabledOpacity: opacity.disabled,\n },\n} as const;\n\nexport const switchRecipe = {\n // Settings rows are controls, not prominent reading content. Spint's native row\n // used bodyLarge while Web inherited its parent; one role prevents that drift.\n rowLabelTextVariant: \"body\",\n slots: [\"root\", \"track\", \"thumb\", \"label\", \"description\"] as const,\n defaults: { size: \"medium\" },\n // One default on both renderers: label/description first, track at the trailing edge\n // (2026-10-17 web/native comparison: Web defaulted to an inline track-first switch, so the\n // same settings toggle rendered mirrored). Compact toolbars can still pass `inline`.\n presentationDefaults: { web: \"row\", native: \"row\" },\n // Descriptions beside a fixed track become a narrow column at larger text sizes.\n // Reuse the provider's large-text boundary so Web CSS and Native reflow together.\n stackedTextScale: largeTextThreshold,\n sizes: {\n small: { width: 44, height: 26, thumb: 22, inset: 2 },\n medium: { width: 52, height: 32, thumb: 28, inset: 2 },\n },\n colors: {\n // The off state is two unsaturated planes — a `surfaceAlt` track holding a `bg`\n // thumb — so on a dark palette both collapse into the card behind them: measured\n // 1.10:1 track-to-surface and 1.20:1 thumb-to-track on the canonical dark theme,\n // where the thumb is actually *darker* than its own track. The `*OffBorder`\n // hairlines are what keep the shape readable, so they are part of the contract\n // rather than a renderer flourish. A consumer settings screen shipped with the web\n // renderer ignoring them and the control was invisible (2026-09-14); the web\n // stylesheet now paints them and `action-contrast.browser.test.tsx` holds the line.\n trackOff: semanticColors.surface.sunken,\n trackOffBorder: semanticColors.content.secondary,\n // A lit track is a filled brand plate, same role as a checked checkbox\n // (`selectionControlRecipe.states.checkedBackground`). Was `content.brand`, a\n // content role; both renderers painted `primary` anyway, so this is a no-op.\n trackOn: semanticColors.action.brand.background,\n trackOnBorder: semanticColors.border.focus,\n thumbOff: semanticColors.canvas,\n thumbOffBorder: semanticColors.content.secondary,\n thumbOn: semanticColors.canvas,\n // A disabled switch still has to report what it is set to, so disabled\n // state changes hue instead of fading uniformly with `states.disabledOpacity`\n // — a product author found that a flat opacity made \"on\" and \"off\" nearly\n // identical, turning a saved setting unreadable while its backing request\n // was in flight. The on track keeps a recognisable (if muted) brand wash,\n // the off track and both thumbs drop to neutral tones, and every part\n // keeps a hairline border so the shape stays legible at reduced contrast.\n trackOffDisabled: semanticColors.border.default,\n trackOffBorderDisabled: semanticColors.border.default,\n trackOnDisabled: { ...semanticColors.action.brand.background, alpha: 0.38 },\n trackOnBorderDisabled: { ...semanticColors.action.brand.background, alpha: 0.38 },\n thumbDisabled: semanticColors.canvas,\n thumbDisabledBorder: semanticColors.content.decorative,\n },\n states: {\n disabledOpacity: opacity.disabled,\n pressedOpacity: opacity.pressed,\n },\n rowMinHeight: control.minTouchTarget,\n // A described switch is a two-line row: the copy (body 20 + gap 4 + caption 16 = 40) with the\n // comfortable list-row vertical padding (8) on both sides. The padding is drawn by the row itself\n // so it survives larger text, and the minimum keeps neighbouring rows equal (a product author found\n // content-only height gave them different heights). It used to borrow ListRow's 68, which is sized\n // for a bodyLarge title + body description; on the smaller switch copy that left 14 above and below,\n // and stacked rows read as widely spaced (2026-10-17 user report, notification settings: 84 pitch\n // for 40 of copy, together with a Stack gap the rows must not have).\n rowPaddingVertical: listRowRecipe.density.comfortable.paddingVertical,\n rowTwoLineMinHeight:\n typography.body.lineHeight + spacing.xxs + typography.caption.lineHeight\n + 2 * listRowRecipe.density.comfortable.paddingVertical,\n} as const;\n\nexport type SelectionControlKind = \"checkbox\" | \"radio\";\n\nexport const selectionControlRecipe = {\n slots: [\n \"root\",\n \"control\",\n \"indicator\",\n \"leading\",\n \"content\",\n \"label\",\n \"description\",\n ] as const,\n defaults: { kind: \"checkbox\", size: \"medium\", presentation: \"card\" },\n sizes: {\n small: {\n rowMinHeight: control.minTouchTarget,\n control: 20,\n hitSlop: 12,\n glyph: \"xs\",\n gap: spacing.xs,\n paddingHorizontal: spacing.sm,\n paddingVertical: spacing.xs,\n labelVariant: \"label\",\n descriptionVariant: \"caption\",\n },\n medium: {\n rowMinHeight: layout.rowHeight.singleLine,\n control: control.selectionIndicator,\n hitSlop: 10,\n glyph: \"sm\",\n gap: spacing.sm,\n paddingHorizontal: spacing.md,\n paddingVertical: spacing.sm,\n labelVariant: \"body\",\n descriptionVariant: \"label\",\n },\n },\n shapes: { checkbox: \"sm\", radio: \"full\" },\n // Web drew 2px and Native 1px; Agreement and TransferList now reuse this indicator, so the width is one value.\n indicatorBorderWidth: stroke.strong,\n presentations: {\n // Nullable and multi-select chip collections keep the existing radio/checkbox engines;\n // SegmentedControl deliberately always selects one value, so it cannot represent them.\n chips: {\n background: chipRecipe.states.idle.background,\n border: chipRecipe.states.idle.border,\n borderWidth: chipRecipe.borderWidth,\n radius: chipRecipe.radius,\n useSizePadding: true,\n labelColor: null,\n },\n plain: {\n background: null,\n border: null,\n borderWidth: 0,\n radius: \"md\",\n useSizePadding: false,\n labelColor: null,\n },\n card: {\n background: semanticColors.canvas,\n border: semanticColors.border.default,\n borderWidth: stroke.default,\n radius: \"md\",\n useSizePadding: true,\n labelColor: null,\n },\n // A row inside a card shared by the whole group (paired with\n // `selectionGroupRecipe.orientations.*.gap.grouped`). The item owns its\n // own padding so the selected fill runs the full width of the group, and\n // only the first and last rows round — an item-level radius on every row\n // left a visible white sliver in the group's corners. `labelColor` is\n // pinned here (rather than left to the row) because a grouped row's\n // label sits directly on the shared card background, not on its own\n // plate — the row needs to know the label reads correctly there.\n grouped: {\n background: null,\n border: null,\n borderWidth: 0,\n radius: \"lg\",\n useSizePadding: true,\n labelColor: semanticColors.content.primary,\n },\n },\n label: {\n color: semanticColors.content.body,\n fontWeight: fontWeight.medium,\n checkedFontWeight: fontWeight.semibold,\n },\n leading: { size: \"md\", color: semanticColors.content.secondary },\n description: { color: semanticColors.content.secondary },\n indicators: {\n checkbox: { checked: \"check\", mixed: \"dash\" },\n radio: { checked: \"dot\", mixed: null },\n },\n radioDotRatio: 0.42,\n states: {\n idleBackground: semanticColors.canvas,\n idleBorder: semanticColors.content.secondary,\n checkedBackground: semanticColors.action.brand.background,\n checkedBorder: semanticColors.border.focus,\n indicator: semanticColors.action.brand.content,\n // The full plate uses neutral selection; the compact checked glyph remains primary.\n selectedBackground: semanticColors.selection.background,\n selectedBorder: semanticColors.selection.border,\n hoverBackground: semanticColors.canvas,\n pressedBackground: semanticColors.canvas,\n invalidBorder: semanticColors.border.danger,\n focus: focusIndicatorContract,\n disabledOpacity: opacity.disabled,\n },\n} as const;\n\n/**\n * Persistent top-level navigation. The recipe reserves an optional center gap\n * for a sibling primary action but never treats that action as a destination.\n */\nexport const bottomNavigationRecipe = {\n slots: [\n \"root\",\n \"surface\",\n \"list\",\n \"item\",\n \"indicator\",\n \"icon\",\n \"label\",\n \"badge\",\n ] as const,\n defaults: bottomNavigationRecipeDefaults,\n // Selected full-item cards retain the existing navigation state engine (Spint, 2026-10-12).\n // Capsule navigation is ordinary selection; tile is an explicit strong brand treatment.\n selectionCapsule: { background: semanticColors.selection.background, content: semanticColors.selection.content },\n selectionTile: {\n background: semanticColors.surface.brand,\n selectedBackground: semanticColors.action.brand.background,\n selectedContent: semanticColors.action.brand.content,\n padding: spacing.xxs,\n gap: spacing.xxs,\n radius: \"lg\" as const,\n },\n /**\n * Opt-in thick plank for tile selection (Spint wooden sign, 2026-10-13). The\n * lower edges replace the floating shadow so the bar reads as one flat object.\n * The selected edge darkens the brand fill with `interaction.depth` because no\n * palette role names a \"pressed brand\" shade.\n */\n raisedSurface: {\n background: semanticColors.surface.sunken,\n border: semanticColors.border.control,\n depth: 4,\n selectedDepth: 3,\n selectedDepthColor: semanticColors.interaction.depth,\n },\n /**\n * Raised center destination (`prominent` item, Diairy write tab, 2026-10-18). The circle is the large control\n * height plus one 4pt step so it outranks the 40pt indicators beside it. Renderers lift it by\n * `diameter - indicator.minHeight` so its label stays on the same line as the other labels. It keeps brand\n * fill in both states because a dimmed circle would read as a large idle icon, not the product's main entry;\n * selection evidence stays on the label (weight and color), as for other items.\n */\n prominentDestination: {\n diameter: control.buttonHeight.large + spacing.xxs,\n icon: \"lg\" as const,\n background: semanticColors.action.brand.background,\n content: semanticColors.action.brand.content,\n shadow: floatingSurfaceContract.shadow,\n },\n /**\n * App-icon slots for `configuration.iconSize` (Utilverse dock artwork, 2026-10-18). `standard` keeps the\n * density glyph; 44 is the minimum touch target and 52 the large control height, the sizes the dock used.\n */\n iconSizes: {\n large: control.minTouchTarget,\n xlarge: control.buttonHeight.large,\n },\n /**\n * Floating frames for `configuration.shape` (Utilverse home shells, 2026-10-18). `surfacePadding` is the inner\n * gap between the frame and the destination row; the two tighter frames pair with `density: \"compact\"` for the\n * desktop-shell docks. Radii are theme radius tokens, so a design profile's radius scale still applies.\n * `standard` is absent on purpose: it keeps `presentations.floating`.\n */\n shapes: {\n rounded: { radius: \"xl\" as const, surfacePadding: spacing.xs },\n pill: { radius: \"full\" as const, surfacePadding: spacing.xs },\n compact: { radius: \"lg\" as const, surfacePadding: spacing.xxs },\n square: { radius: \"sm\" as const, surfacePadding: spacing.xxs },\n },\n adaptive: {\n web: \"fixed-compact-viewport\",\n native: \"navigator-tab-bar\",\n },\n presentations: {\n capsule: {\n background: semanticColors.surface.default,\n border: semanticColors.border.default,\n borderWidth: stroke.default,\n borderEdges: [\"all\"] as const,\n radius: \"full\" as const,\n shadow: floatingSurfaceContract.shadow,\n maxWidth: 480,\n contentMaxWidth: null,\n outerPaddingHorizontal: spacing.md,\n outerPaddingTop: spacing.xs,\n },\n bar: {\n background: semanticColors.canvas,\n border: semanticColors.border.default,\n borderWidth: stroke.default,\n borderEdges: [\"block-start\"] as const,\n radius: null,\n shadow: null,\n maxWidth: null,\n /**\n * The bar surface and its top edge span the viewport, but the destinations stay in a centered 480 column\n * (the capsule width): on a 1280 desktop two items otherwise sat at opposite screen edges (2026-10-17 review D8).\n */\n contentMaxWidth: 480,\n outerPaddingHorizontal: 0,\n outerPaddingTop: 0,\n },\n floating: {\n background: semanticColors.canvas,\n border: semanticColors.border.default,\n borderWidth: stroke.default,\n borderEdges: [\"all\"] as const,\n radius: \"xl\" as const,\n shadow: floatingSurfaceContract.shadow,\n maxWidth: 384,\n contentMaxWidth: null,\n outerPaddingHorizontal: spacing.md,\n outerPaddingTop: spacing.xs,\n },\n },\n distributions: {\n equal: { centerGap: 0, requiresEvenItemCount: false },\n \"center-gap\": {\n centerGap: control.buttonHeight.large + spacing.md,\n requiresEvenItemCount: true,\n },\n },\n density: {\n compact: {\n itemMinWidth: 52,\n itemMinHeight: 52,\n padding: spacing.xxs,\n gap: 2,\n icon: \"sm\" as const,\n label: \"caption\" as const,\n },\n regular: {\n itemMinWidth: 56,\n itemMinHeight: 64,\n padding: spacing.xs,\n gap: spacing.xxs,\n icon: \"md\" as const,\n label: \"caption\" as const,\n },\n },\n colors: {\n idle: semanticColors.content.secondary,\n selectedIcon: semanticColors.content.brand,\n selectedLabel: semanticColors.content.brand,\n },\n /**\n * Stable icon/badge layout anchor. Selection never paints this slot as a\n * pill: the icon and label below own the non-color selected evidence.\n */\n indicator: {\n minWidth: 40,\n minHeight: 28,\n radius: \"full\" as const,\n visual: \"none\" as const,\n background: null,\n border: null,\n borderWidth: 0,\n },\n icon: {\n /**\n * Adapters apply at least one supported emphasis. Stroke-oriented glyphs\n * use strokeWidth; renderers without stroke control use scale instead.\n */\n selectedEmphasis: {\n minimumAdaptations: 1,\n strokeWidth: { idle: stroke.strong, selected: 3 },\n scale: { idle: 1, selected: 1.06 },\n },\n /**\n * `configuration.iconEmphasis: \"lift\"` (Utilverse dock artwork, 2026-10-18): the selected icon rises one 4pt\n * step on top of the selected scale, and idle icons dim. Full-color artwork cannot take the selected tint, so\n * without the dim only the label would mark the current destination. 0.82 is the dock's measured idle opacity.\n */\n liftEmphasis: {\n translateY: -spacing.xxs,\n idleOpacity: 0.82,\n },\n },\n label: {\n fontWeight: fontWeight.medium,\n selectedFontWeight: fontWeight.semibold,\n textAlign: \"center\",\n wrap: true,\n fixedLines: null,\n },\n badge: {\n size: \"small\" as const,\n variant: \"floating\" as const,\n anchor: { blockStart: -spacing.xxs, inlineEnd: -spacing.xs },\n subtreeHiddenFromAccessibility: true,\n },\n safeArea: {\n mode: \"additive\",\n minimumBottomPadding: spacing.xs,\n },\n keyboard: { defaultBehavior: \"hide\", movesAboveKeyboard: false },\n largeText: {\n allowFontScaling: true,\n // Persistent navigation has to keep every destination visible at once.\n // Let labels respond to Dynamic Type, but cap the visual chrome before a\n // three-character destination turns into a three-line column. The full,\n // uncapped label remains the item's accessible name.\n maxFontSizeMultiplier: 1.4,\n fixedItemHeight: false,\n labelWraps: true,\n },\n direction: {\n itemOrder: \"logical\",\n badgeAnchor: \"inline-end\",\n },\n states: {\n hoverBackground: semanticColors.canvas,\n pressedBackground: semanticColors.canvas,\n focus: focusIndicatorContract,\n disabledOpacity: opacity.disabled,\n selectedNonColorEvidence: {\n target: \"icon-and-label\" as const,\n label: \"font-weight\" as const,\n icon: \"emphasis\" as const,\n },\n selectedFocusSeparation: {\n selectedTarget: \"icon-and-label\" as const,\n focusTarget: \"item\",\n minimumGap: focusIndicatorContract.offset,\n },\n },\n transition: motionPreset.micro,\n} as const;\n\nexport const tabsRecipe = {\n slots: [\"root\", \"list\", \"tab\", \"label\", \"indicator\", \"panel\"] as const,\n defaults: { size: \"medium\", layout: \"content\", overflow: \"scroll\", indicator: \"underline\" },\n /**\n * Selection mark. `filled` paints the selected tab as a brand-tinted pill instead of the 2pt underline and\n * drops the list divider, which only anchors underlines (Diairy nest tabs, 2026-10-18: the app's tab bar\n * already marks the current place with this pill, so in-screen tabs looked like a second product).\n */\n indicators: {\n underline: { listDivider: true, background: null, selectedContent: semanticColors.content.primary, radius: null },\n filled: { listDivider: false, background: semanticColors.selection.background, selectedContent: semanticColors.selection.content, radius: \"full\" as const },\n solid: { listDivider: false, background: semanticColors.action.brand.background, selectedContent: semanticColors.action.brand.content, radius: \"full\" as const },\n },\n sizes: {\n small: {\n minHeight: control.minTouchTarget,\n paddingHorizontal: spacing.sm,\n textVariant: \"label\",\n },\n medium: {\n minHeight: 48,\n paddingHorizontal: spacing.md,\n textVariant: \"body\",\n },\n },\n colors: {\n idle: semanticColors.content.secondary,\n selected: semanticColors.content.primary,\n indicator: semanticColors.border.focus,\n divider: semanticColors.border.default,\n },\n gap: spacing.xs,\n icon: { glyph: \"xs\" },\n label: { fontWeight: fontWeight.medium, selectedFontWeight: fontWeight.semibold },\n layouts: {\n content: { fitted: false },\n fitted: { fitted: true },\n },\n overflow: {\n scroll: { scrollable: true, wrap: false },\n clip: { scrollable: false, wrap: false },\n },\n indicatorHeight: stroke.strong,\n states: {\n pressedBackground: semanticColors.canvas,\n focus: focusIndicatorContract,\n disabledOpacity: opacity.disabled,\n },\n} as const;\n\nexport type NoticeTone = \"info\" | \"success\" | \"warning\" | \"attention\" | \"danger\";\n\nexport const noticeRecipe = {\n slots: [\"root\", \"icon\", \"content\", \"title\", \"description\", \"action\"] as const,\n defaults: { tone: \"info\", appearance: \"panel\" },\n // Saved results belong beside their owner without a second banner-sized surface.\n // Both renderers reuse Badge for the short status; panels remain the default for guidance/errors.\n appearances: { panel: { padding: spacing.md, borderWidth: stroke.default }, status: { padding: 0, borderWidth: 0 } },\n tones: {\n ...semanticColors.feedback,\n info: {\n ...semanticColors.feedback.info,\n // The informational wash landed bluer and darker than the selection\n // tint itself over canvas, so a banner outranked the control the\n // reader was supposed to act on. `info` alone goes neutral — its\n // accent stays in the icon, the title, and the border; `success`/\n // `warning`/`attention`/`danger` keep the tinted surface because a\n // product author confirmed those readings didn't have the same\n // conflict with a selection state.\n background: semanticColors.canvas,\n },\n },\n radius: \"md\",\n padding: spacing.md,\n gap: spacing.sm,\n contentGap: spacing.xxs,\n iconSize: \"sm\",\n borderWidth: stroke.default,\n title: { textVariant: \"body\", fontWeight: typography.title.fontWeight },\n description: { color: semanticColors.content.body, textVariant: \"body\" },\n} as const;\n\nexport const skeletonRecipe = {\n slots: [\"root\", \"line\"] as const,\n // animated는 0.9.12까지 false였다. 정지한 블록은 로딩이 아니라 깨진 화면으로\n // 읽힌다. 전환 근거와 소비 측 migration은\n // .changeset/skeleton-pulse-by-default.md에 있다.\n defaults: { shape: \"block\", animated: true, lines: 1 },\n // 2026-10-17 사용자 요청: canvas 채움 + 1px 테두리는 흰 배경에서 거의 보이지 않아 로딩 모양을 알 수 없었다.\n // 2026-09-29 \"넓은 회색 면은 canvas\" 방향의 예외로, 자리표시는 채운 면이어야 모양이 읽힌다(skeleton.md 근거).\n background: semanticColors.surface.placeholder,\n // `aspectRatio`가 있으면 높이 대신 폭에 비례한다(media). `button`은 medium 버튼 높이와 Button 기본 모양의 모서리다.\n // 2026-10-17: 번뚝처럼 알약 버튼을 쓰는 제품은 자리표시도 알약이어야 하므로 모서리는 `buttonShape` 축\n // (buttonRecipe.shapes와 같은 이름·같은 기본값)으로 고르고, 이 값은 그 기본값에서 나온다.\n shapes: {\n block: { radius: \"md\", defaultHeight: spacing.xxl, aspectRatio: null },\n text: { radius: \"sm\", defaultHeight: spacing.md, aspectRatio: null },\n circle: { radius: \"full\", defaultHeight: glyph.xxl, aspectRatio: null },\n media: { radius: \"md\", defaultHeight: null, aspectRatio: 16 / 9 },\n button: { radius: buttonRecipe.shapes[buttonRecipe.defaults.shape], defaultHeight: control.buttonHeight.medium, aspectRatio: null },\n },\n // `lines` > 1 (text 전용): 줄 사이 간격과 짧게 끝나는 마지막 줄. 16 막대 + 8 간격 = 본문 큰 글자 줄 높이 24.\n lines: { gap: spacing.xs, lastLineWidthPercent: 60 },\n animation: {\n duration: motion.slow * 4,\n easing: \"standard\",\n fromOpacity: 0.56,\n toOpacity: 1,\n reducedMotion: \"static\",\n },\n} as const;\n\nexport const emptyStateRecipe = {\n slots: [\"root\", \"icon\", \"title\", \"description\", \"action\"] as const,\n defaults: { density: \"regular\" },\n density: {\n compact: { paddingVertical: spacing.xl },\n regular: { paddingVertical: spacing.xxxl },\n },\n paddingHorizontal: spacing.xl,\n gap: spacing.xs,\n icon: { size: \"lg\", color: semanticColors.content.decorative },\n title: { textVariant: \"body\", color: semanticColors.content.primary, fontWeight: typography.title.fontWeight },\n description: { textVariant: \"body\", color: semanticColors.content.secondary },\n} as const;\n\nexport const spinnerRecipe = {\n slots: [\"root\"] as const,\n defaults: { size: \"medium\", tone: \"brand\" },\n sizes: { small: glyph.xs, medium: glyph.sm, large: glyph.lg },\n tones: {\n brand: semanticColors.content.brand,\n neutral: semanticColors.content.secondary,\n inverse: semanticColors.content.inverse,\n },\n strokeWidth: stroke.strong,\n animation: {\n duration: 800,\n easing: \"standard\",\n reducedMotion: \"static\",\n },\n} as const;\n\nexport type LoadMoreDensity = \"compact\" | \"regular\";\n\nexport const loadMoreRecipe = {\n slots: [\n \"root\",\n \"status\",\n \"spinner\",\n \"trigger\",\n \"error\",\n \"retry\",\n \"end\",\n ] as const,\n defaults: { mode: \"automatic\", density: \"regular\" },\n density: {\n compact: { paddingVertical: spacing.sm, gap: spacing.xs },\n regular: { paddingVertical: spacing.lg, gap: spacing.sm },\n },\n status: {\n color: semanticColors.content.secondary,\n textVariant: \"label\",\n },\n error: {\n color: semanticColors.content.danger,\n textVariant: \"label\",\n },\n end: {\n color: semanticColors.content.secondary,\n textVariant: \"caption\",\n },\n trigger: {\n minHeight: control.minTouchTarget,\n paddingHorizontal: spacing.md,\n radius: \"md\",\n color: semanticColors.content.brand,\n textVariant: \"label\",\n fontWeight: fontWeight.medium,\n },\n spinner: { size: \"small\", tone: \"brand\" },\n states: {\n focus: focusIndicatorContract,\n pressedOpacity: opacity.pressed,\n disabledOpacity: opacity.disabled,\n },\n} as const satisfies {\n slots: readonly string[];\n defaults: { mode: \"automatic\" | \"manual\"; density: LoadMoreDensity };\n density: Record<LoadMoreDensity, { paddingVertical: number; gap: number }>;\n status: { color: ColorReference; textVariant: TextVariant };\n error: { color: ColorReference; textVariant: TextVariant };\n end: { color: ColorReference; textVariant: TextVariant };\n trigger: {\n minHeight: number;\n paddingHorizontal: number;\n radius: keyof typeof radius;\n color: ColorReference;\n textVariant: TextVariant;\n fontWeight: FontWeightValue;\n };\n spinner: { size: SpinnerSize; tone: SpinnerTone };\n states: {\n focus: typeof focusIndicatorContract;\n pressedOpacity: number;\n disabledOpacity: number;\n };\n};\n\nexport const avatarRecipe = {\n slots: [\"root\", \"image\", \"fallback\", \"badge\", \"group\"] as const,\n /**\n * 겹쳐 쌓은 아바타 묶음이 얼마나 겹치는가. 비율로 두는 이유는 크기 축이 이미 네 단계라\n * 픽셀로 적으면 네 벌이 되기 때문이다. 남은 인원은 제품이 문구로 만든다(\"+3\").\n */\n overlapRatio: 0.3,\n defaults: { size: \"medium\", shape: \"circle\" },\n sizes: { small: 32, medium: 40, large: 48, xlarge: 64 },\n shapes: { rounded: \"md\", circle: \"full\" },\n background: semanticColors.canvas,\n content: semanticColors.content.secondary,\n border: semanticColors.border.default,\n /** Initials use the strong emphasis step; their size follows the avatar (Web `.hjm-avatar[data-size]` steps). */\n initialsWeight: \"strong\",\n} as const;\n\n/**\n * Initials text step for an avatar diameter, shared by Web size tokens and Native numeric sizes\n * (2026-10-17 comparison: Native drew 12pt brand-colored initials at every size).\n */\nexport function resolveAvatarInitialsTextVariant(size: number): \"label\" | \"body\" | \"title\" {\n if (size < avatarRecipe.sizes.medium) return \"label\";\n if (size < avatarRecipe.sizes.xlarge) return \"body\";\n return \"title\";\n}\n\nexport type StatisticDensity = \"compact\" | \"comfortable\";\nexport type StatisticPresentation = \"plain\" | \"surface\";\n\nexport const statisticRecipe = {\n slots: [\n \"group\",\n \"root\",\n \"label\",\n \"valueRow\",\n \"prefix\",\n \"value\",\n \"suffix\",\n \"trend\",\n \"trendMark\",\n \"hint\",\n ] as const,\n defaults: { density: \"comfortable\", presentation: \"plain\", columns: 3 },\n density: {\n compact: {\n padding: spacing.sm,\n gap: spacing.xxs,\n labelVariant: \"caption\",\n // Small summary cards need a quieter count (Diairy today log, 2026-10-21 user feedback).\n valueVariant: \"bodyLarge\",\n },\n comfortable: {\n padding: spacing.md,\n gap: spacing.xs,\n labelVariant: \"label\",\n valueVariant: \"heading\",\n },\n },\n presentations: {\n plain: { background: null, border: null, borderWidth: 0, radius: \"md\" },\n surface: {\n background: semanticColors.canvas,\n border: semanticColors.border.default,\n borderWidth: stroke.default,\n radius: \"md\",\n },\n },\n group: {\n gap: spacing.xs,\n minItemWidth: 120,\n // Read-only social/count bars retain one row, with the value before its label.\n bar: { cellPadding: spacing.xs, valueGap: spacing.xxs, iconSize: glyph.sm },\n columns: [1, 2, 3, 4] as const,\n },\n label: {\n color: semanticColors.content.secondary,\n fontWeight: fontWeight.medium,\n },\n value: {\n color: semanticColors.content.primary,\n // The key number keeps the semibold emphasis step (600, 2026-10-17 lighter scale) at the `heading` size.\n // It used to borrow the display heading weight, which was removed with the display tier the same day.\n fontWeight: fontWeight.semibold,\n numericVariant: \"tabular\",\n maxLines: null,\n },\n affix: {\n color: semanticColors.content.body,\n textVariant: \"body\",\n fontWeight: fontWeight.medium,\n },\n hint: {\n color: semanticColors.content.secondary,\n textVariant: \"caption\",\n },\n trend: {\n textVariant: \"caption\",\n fontWeight: fontWeight.medium,\n gap: spacing.xxs,\n marks: {\n up: \"trendUp\",\n down: \"trendDown\",\n flat: \"trendFlat\",\n },\n tones: {\n neutral: semanticColors.content.secondary,\n success: semanticColors.feedback.success.foreground,\n warning: semanticColors.feedback.warning.foreground,\n danger: semanticColors.content.danger,\n },\n },\n} as const satisfies {\n slots: readonly string[];\n defaults: {\n density: StatisticDensity;\n presentation: StatisticPresentation;\n columns: 1 | 2 | 3 | 4;\n };\n density: Record<\n StatisticDensity,\n {\n padding: number;\n gap: number;\n labelVariant: TextVariant;\n valueVariant: TextVariant;\n }\n >;\n presentations: Record<\n StatisticPresentation,\n {\n background: ColorReference | null;\n border: ColorReference | null;\n borderWidth: number;\n radius: keyof typeof radius;\n }\n >;\n group: {\n gap: number;\n minItemWidth: number;\n bar: { cellPadding: number; valueGap: number; iconSize: number };\n columns: readonly (1 | 2 | 3 | 4)[];\n };\n label: { color: ColorReference; fontWeight: FontWeightValue };\n value: {\n color: ColorReference;\n fontWeight: FontWeightValue;\n numericVariant: \"tabular\";\n maxLines: null;\n };\n affix: { color: ColorReference; textVariant: TextVariant; fontWeight: FontWeightValue };\n hint: { color: ColorReference; textVariant: TextVariant };\n trend: {\n textVariant: TextVariant;\n fontWeight: FontWeightValue;\n gap: number;\n marks: Record<\"up\" | \"down\" | \"flat\", string>;\n tones: Record<\"neutral\" | \"success\" | \"warning\" | \"danger\", ColorReference>;\n };\n};\n\n/**\n * Adjacent action buttons use 8 in both directions. The 2026-10-20 user request tightened\n * horizontal groups to the same spacing as stacked groups; control touch targets remain unchanged.\n */\nexport const actionGroupRecipe = { inlineGap: spacing.xs, stackedGap: spacing.xs } as const;\n\nexport const sheetRecipe = {\n slots: [\"backdrop\", \"positioner\", \"content\", \"handle\", \"header\", \"title\", \"body\", \"footer\", \"close\"] as const,\n defaults: { placement: \"bottom\", size: \"auto\" },\n /**\n * How tall the sheet opens. `auto` keeps the content-driven height that the\n * recipe already caps with `maxHeightRatio`. The fixed steps exist because\n * consumers otherwise reach for `contentStyle={{ height }}`, which moves a\n * recipe-owned dimension into product code.\n */\n sizes: {\n auto: null,\n // Short explanatory sheets need breathing room without the medium step's\n // empty space (Choose Window primer review, 2026-10-20: two-thirds of medium).\n small: 0.4,\n medium: 0.6,\n large: 0.85,\n full: 1,\n },\n backdrop: backdrop.modal,\n content: {\n background: semanticColors.canvas,\n border: semanticColors.border.default,\n borderWidth: floatingSurfaceContract.borderWidth,\n radius: \"xl\",\n shadow: floatingSurfaceContract.shadow,\n /** Caps `size=\"auto\"` only; fixed `sizes` (medium/large/full) are bounded by the safe-area viewport instead. */\n maxHeightRatio: 0.9,\n paddingHorizontal: spacing.lg,\n paddingTop: spacing.sm,\n paddingBottom: spacing.sm,\n },\n web: { maxWidth: 640 },\n safeArea: {\n edge: \"bottom\",\n mode: \"additive\",\n minimumPadding: spacing.sm,\n },\n handle: {\n width: 36,\n height: 4,\n radius: \"full\",\n color: semanticColors.content.secondary,\n // Bottom sheets now always offer drag-to-dismiss, so the handle is visible whenever it is allowed.\n visibleByDefault: true,\n showWhen: \"swipe-dismiss-enabled\",\n },\n header: { minHeight: control.minTouchTarget, gap: spacing.sm },\n // No visual `title` region: sheets render the title only as the accessible name (2026-10-17 user decision).\n // The \"title\" slot stays because the title is still the dialog's name.\n body: {\n color: semanticColors.content.body,\n textVariant: \"body\",\n gap: spacing.md,\n },\n footer: {\n color: semanticColors.content.body,\n textVariant: \"body\",\n // Native stacks footer actions in a column.\n gap: actionGroupRecipe.stackedGap,\n paddingTop: spacing.sm,\n },\n transition: { enter: motionPreset.enter, exit: motionPreset.exit },\n} as const;\n\nexport const dialogRecipe = {\n slots: [\"backdrop\", \"positioner\", \"content\", \"header\", \"title\", \"description\", \"body\", \"footer\", \"close\"] as const,\n defaults: { size: \"medium\", dismissible: true },\n sizes: {\n small: { maxWidth: 320, padding: spacing.lg },\n medium: { maxWidth: 420, padding: spacing.xl },\n large: { maxWidth: 640, padding: spacing.xl },\n },\n backdrop: backdrop.modal,\n content: {\n background: semanticColors.canvas,\n border: semanticColors.border.default,\n borderWidth: floatingSurfaceContract.borderWidth,\n radius: \"lg\",\n gap: spacing.md,\n shadow: floatingSurfaceContract.shadow,\n },\n transition: { enter: motionPreset.enter, exit: motionPreset.exit },\n /**\n * ImmersiveOverlay (Dialog companion, 1.31.0): an edge-to-edge stage with a control bar and no card, scrim or\n * header, for presentations such as a display board (utilverse used a raw RN Modal because Dialog/Sheet always\n * framed their content). The stage is product-drawn; the bar reuses screen spacing so it matches a screen footer.\n */\n immersive: {\n background: semanticColors.canvas,\n controls: { padding: spacing.md, gap: spacing.xs, actionGap: actionGroupRecipe.inlineGap },\n // A presentation is read from across a room: rotation follows the device even when the app is portrait-only.\n orientations: [\"portrait\", \"landscape-left\", \"landscape-right\"],\n statusBarHidden: true,\n },\n} as const;\n\n/**\n * Tone is the dialog's reason for interrupting, not its decoration.\n *\n * `attention` and `danger` covered \"are you sure?\" and \"this destroys\n * something\", but consumers also stop the user to *explain* an action before\n * running it — an intro before a button that copies content into the account,\n * or a confirmation that something finished. Those were shipping with the\n * attention mark, so a neutral explanation read as a warning (reported by a\n * product team on 2026-09-15). `info` and `success` carry the existing feedback\n * accents so the axis stays one token lookup per renderer.\n */\nexport type AlertDialogTone = \"attention\" | \"danger\" | \"info\" | \"success\";\n\nexport const alertDialogRecipe = {\n slots: [\n \"backdrop\",\n \"positioner\",\n \"content\",\n \"icon\",\n \"title\",\n \"description\",\n \"status\",\n \"error\",\n \"actions\",\n \"cancel\",\n \"confirm\",\n ] as const,\n defaults: { tone: \"attention\", size: \"small\" },\n sizes: dialogRecipe.sizes,\n backdrop: dialogRecipe.backdrop,\n content: dialogRecipe.content,\n tones: {\n attention: {\n icon: semanticColors.feedback.attention.foreground,\n iconBackground: semanticColors.feedback.attention.background,\n confirm: semanticColors.action.brand.background,\n confirmContent: semanticColors.action.brand.content,\n },\n danger: {\n icon: semanticColors.content.danger,\n iconBackground: semanticColors.feedback.danger.background,\n confirm: semanticColors.action.danger.background,\n confirmContent: semanticColors.action.danger.content,\n },\n // Explanation and completion keep the brand confirm button: the action they\n // introduce is the ordinary one, only the mark and its wash change.\n info: {\n icon: semanticColors.feedback.info.foreground,\n iconBackground: semanticColors.feedback.info.background,\n confirm: semanticColors.action.brand.background,\n confirmContent: semanticColors.action.brand.content,\n },\n success: {\n icon: semanticColors.feedback.success.foreground,\n iconBackground: semanticColors.feedback.success.background,\n confirm: semanticColors.action.brand.background,\n confirmContent: semanticColors.action.brand.content,\n },\n },\n icon: { containerSize: control.minTouchTarget, glyph: \"md\", radius: \"full\" },\n title: {\n color: semanticColors.content.primary,\n textVariant: \"title\",\n fontWeight: typography.title.fontWeight,\n },\n description: {\n color: semanticColors.content.secondary,\n textVariant: \"body\",\n },\n error: formSupportContract.error,\n // Stacked: confirm on top, cancel below, tighter gap (reported 2026-09-27). Row stays [cancel][confirm].\n actions: {\n gap: actionGroupRecipe.inlineGap,\n stackedGap: actionGroupRecipe.stackedGap,\n stackedOrder: \"confirm-first\",\n stackBelow: breakpoint.medium,\n minButtonWidth: 96,\n },\n transition: dialogRecipe.transition,\n} as const satisfies {\n slots: readonly string[];\n defaults: { tone: AlertDialogTone; size: DialogSize };\n sizes: typeof dialogRecipe.sizes;\n backdrop: typeof dialogRecipe.backdrop;\n content: typeof dialogRecipe.content;\n tones: Record<\n AlertDialogTone,\n {\n icon: ColorReference;\n iconBackground: ColorReference;\n confirm: ColorReference;\n confirmContent: ColorReference;\n }\n >;\n icon: { containerSize: number; glyph: GlyphSize; radius: keyof typeof radius };\n title: { color: ColorReference; textVariant: TextVariant; fontWeight: FontWeightValue };\n description: { color: ColorReference; textVariant: TextVariant };\n error: { color: ColorReference; textVariant: TextVariant };\n actions: {\n gap: number;\n stackedGap: number;\n stackedOrder: \"confirm-first\";\n stackBelow: number;\n minButtonWidth: number;\n };\n transition: typeof dialogRecipe.transition;\n};\n\nexport type ToastPlacement =\n | \"top\"\n | \"top-start\"\n | \"top-end\"\n | \"bottom\"\n | \"bottom-start\"\n | \"bottom-end\";\nexport type ToastTone = \"neutral\" | \"info\" | \"success\" | \"warning\" | \"danger\";\nexport type ToastToneMark =\n | \"notifications\"\n | \"info\"\n | \"success\"\n | \"warning\"\n | \"alert\";\n\n// First-line anchor (2026-10-17 user: \"기본 토스트 좌우랑 글자 라인이 안맞는데\"). The badge box is the one\n// line every leading column, first text line and close glyph centre on; the close keeps its 44 touch target but\n// overhangs so its glyph, not its hit area, sets the visible inset. Derived here so both renderers read numbers.\nconst toastBadgeDiameter = 32;\nconst toastCloseDiameter = control.minTouchTarget;\nconst toastCloseGlyph = \"xs\" satisfies GlyphSize;\n\nexport const toastRecipe = {\n slots: [\n \"viewport\",\n \"root\",\n \"toneMark\",\n \"icon\",\n \"media\",\n \"content\",\n \"title\",\n \"description\",\n \"progress\",\n \"action\",\n \"close\",\n ] as const,\n defaults: { tone: \"neutral\", placement: \"bottom\", durationMs: 3000 },\n adaptive: { web: \"fixed-viewport\", native: \"safe-area-overlay\" },\n viewport: {\n layer: layer.toast,\n gap: spacing.sm,\n inset: spacing.md,\n maxWidth: 420,\n safeAreaMode: \"additive\",\n },\n placements: {\n top: { blockEdge: \"top\", inlineEdge: \"center\", stackFrom: \"top\" },\n \"top-start\": { blockEdge: \"top\", inlineEdge: \"start\", stackFrom: \"top\" },\n \"top-end\": { blockEdge: \"top\", inlineEdge: \"end\", stackFrom: \"top\" },\n bottom: { blockEdge: \"bottom\", inlineEdge: \"center\", stackFrom: \"bottom\" },\n \"bottom-start\": { blockEdge: \"bottom\", inlineEdge: \"start\", stackFrom: \"bottom\" },\n \"bottom-end\": { blockEdge: \"bottom\", inlineEdge: \"end\", stackFrom: \"bottom\" },\n },\n // 1.10.0: tone is carried by a tinted icon badge, not a 2px edge strip — the strip plus a bare glyph read\n // as a grey dot on neutral toasts (BurnTok 2026-09-30 feedback \"알림 ui 구려\"). `badge` is the badge fill.\n tones: {\n neutral: {\n foreground: semanticColors.content.primary,\n accent: semanticColors.content.secondary,\n badge: semanticColors.surface.sunken,\n mark: \"notifications\",\n },\n info: {\n foreground: semanticColors.content.primary,\n accent: semanticColors.feedback.info.foreground,\n badge: semanticColors.feedback.info.badgeBackground,\n mark: \"info\",\n },\n success: {\n foreground: semanticColors.content.primary,\n accent: semanticColors.feedback.success.foreground,\n badge: semanticColors.feedback.success.badgeBackground,\n mark: \"success\",\n },\n warning: {\n foreground: semanticColors.content.primary,\n accent: semanticColors.feedback.warning.foreground,\n badge: semanticColors.feedback.warning.badgeBackground,\n mark: \"warning\",\n },\n danger: {\n foreground: semanticColors.content.primary,\n accent: semanticColors.content.danger,\n badge: semanticColors.feedback.danger.badgeBackground,\n mark: \"alert\",\n },\n },\n // 2026-10-20 approved light/dark notification reference: neutral glass chrome,\n // a quiet hairline and a bare glyph replace the heavy outline and coloured badge.\n material: {\n radius: 24,\n blur: 20,\n opacity: 0.96,\n light: { background: \"#FAFBFE\", border: \"#E3E6EB\", foreground: \"#202124\", secondary: \"#626873\", close: \"#696F79\" },\n dark: { background: \"#27282B\", border: \"#4D4F54\", foreground: \"#F6F7F9\", secondary: \"#B4B8C0\", close: \"#B4B8C0\" },\n },\n surface: {\n background: semanticColors.canvas,\n // Legacy semantic references remain available; renderers resolve the theme material above.\n // 1.10.0 softened the shape to lg; 1.20 makes every toast the \"panel\" (xl) that BurnTok designed for its\n // review status, by user request on 2026-10-10 (\"패널이 토스트가 되는거지\").\n border: semanticColors.border.strong,\n borderWidth: stroke.default,\n radius: \"xl\",\n shadow: floatingSurfaceContract.shadow,\n minHeight: layout.rowHeight.singleLine,\n // block sm + anchor 32 + sm = the 56 single-line row; inline md on both edges so the badge's start inset\n // equals the close glyph's end inset (Web had sm/xs/sm/md, Native md on all sides — 2026-10-17 measurement).\n padding: { block: spacing.sm, inline: spacing.md },\n gap: spacing.sm,\n maxWidth: 420,\n },\n // First text line (title, else description) is centred on this box: content insets its first line by\n // (blockSize − first-line line-height) / 2. Multi-line copy grows downward; the lead and close stay beside\n // the first line instead of centring on the whole block. Product media (44) start-aligns to the same top and\n // is not the anchor: centring the title on the media pushed the description below the avatar.\n anchor: { blockSize: toastBadgeDiameter },\n /**\n * @deprecated Toast has no edge stripe: the tinted icon badge (or product media) carries tone. Retired in 1.10.0\n * (width 0); since 1.32.0 neither renderer draws an element for it, so there is nothing for a product to hide\n * (2026-10-18 BurnTok still hid a strip that no longer existed). Kept only so the published recipe shape stays\n * compatible; remove in the next major.\n */\n toneMark: { width: 0, radius: \"full\" },\n icon: { glyph: \"sm\", badgeDiameter: toastBadgeDiameter, badgeRadius: \"full\" },\n // A product media (mascot, avatar) replaces the tone badge in the same leading column. 44 keeps a\n // character legible; it is decorative, so the tone still lives in `data-tone` and the copy.\n media: { size: 44 },\n content: { gap: spacing.xxs },\n title: {\n color: semanticColors.content.primary,\n textVariant: \"body\",\n fontWeight: typography.title.fontWeight,\n },\n // Secondary copy so the title leads; body-on-body read as one grey block.\n description: {\n color: semanticColors.content.secondary,\n textVariant: \"body\",\n },\n // Step dots of a running task: done and current are brand, upcoming is the divider colour; the current\n // label is emphasized. Labels sit beside each dot so the row reads without colour alone (WCAG 1.4.1).\n progress: {\n gap: spacing.sm,\n dotSize: 6,\n currentScale: 1.4,\n doneColor: semanticColors.content.brand,\n upcomingColor: semanticColors.border.default,\n labelColor: semanticColors.content.secondary,\n currentLabelColor: semanticColors.content.primary,\n textVariant: \"caption\",\n },\n // 1.10.0: a tinted pill button instead of a bare text link, so the one thing a toast asks for is\n // recognisable as a control. Hit area stays the 44pt touch target. 1.20 panel: it sits under the copy\n // at the start edge, where the eye already is, instead of the far end.\n action: {\n color: semanticColors.content.brand,\n background: semanticColors.surface.brand,\n radius: \"full\",\n align: \"start\",\n textVariant: \"body\",\n fontWeight: fontWeight.medium,\n minHeight: control.minTouchTarget,\n paddingHorizontal: spacing.md,\n },\n close: {\n color: semanticColors.content.secondary,\n diameter: toastCloseDiameter,\n glyph: toastCloseGlyph,\n // Negative block margin on both sides: the 44 target centres on the anchor line without stretching the row.\n blockOverhang: (toastCloseDiameter - toastBadgeDiameter) / 2,\n // Negative inline-end margin: the glyph box ends at the md padding edge, mirroring the badge's start inset.\n inlineOverhang: (toastCloseDiameter - glyph[toastCloseGlyph]) / 2,\n },\n states: {\n pressedOpacity: opacity.pressed,\n draggedOpacity: opacity.dragged,\n focus: focusIndicatorContract,\n },\n gesture: { dismissThreshold: 50 },\n transition: {\n web: { enter: motionPreset.micro, exit: motionPreset.exit },\n native: { enter: motionPreset.enter, exit: motionPreset.exit },\n },\n} as const satisfies {\n slots: readonly string[];\n defaults: { tone: ToastTone; placement: ToastPlacement; durationMs: number };\n adaptive: { web: \"fixed-viewport\"; native: \"safe-area-overlay\" };\n viewport: {\n layer: number;\n gap: number;\n inset: number;\n maxWidth: number;\n safeAreaMode: \"additive\";\n };\n placements: Record<\n ToastPlacement,\n {\n blockEdge: \"top\" | \"bottom\";\n inlineEdge: \"start\" | \"center\" | \"end\";\n stackFrom: \"top\" | \"bottom\";\n }\n >;\n tones: Record<\n ToastTone,\n { foreground: ColorReference; accent: ColorReference; badge: ColorReference; mark: ToastToneMark }\n >;\n material: { radius: number; blur: number; opacity: number } & Record<\"light\" | \"dark\", { background: string; border: string; foreground: string; secondary: string; close: string }>;\n surface: {\n background: ColorReference;\n border: ColorReference;\n borderWidth: number;\n radius: keyof typeof radius;\n shadow: typeof floatingSurfaceContract.shadow;\n minHeight: number;\n padding: { block: number; inline: number };\n gap: number;\n maxWidth: number;\n };\n anchor: { blockSize: number };\n toneMark: { width: number; radius: keyof typeof radius };\n icon: { glyph: GlyphSize; badgeDiameter: number; badgeRadius: keyof typeof radius };\n media: { size: number };\n content: { gap: number };\n title: { color: ColorReference; textVariant: TextVariant; fontWeight: FontWeightValue };\n description: { color: ColorReference; textVariant: TextVariant };\n progress: {\n gap: number;\n dotSize: number;\n currentScale: number;\n doneColor: ColorReference;\n upcomingColor: ColorReference;\n labelColor: ColorReference;\n currentLabelColor: ColorReference;\n textVariant: TextVariant;\n };\n action: {\n color: ColorReference;\n background: ColorReference;\n radius: keyof typeof radius;\n align: \"start\" | \"end\";\n textVariant: TextVariant;\n fontWeight: FontWeightValue;\n minHeight: number;\n paddingHorizontal: number;\n };\n close: {\n color: ColorReference;\n diameter: number;\n glyph: GlyphSize;\n blockOverhang: number;\n inlineOverhang: number;\n };\n states: {\n pressedOpacity: number;\n draggedOpacity: number;\n focus: typeof focusIndicatorContract;\n };\n gesture: { dismissThreshold: number };\n transition: {\n web: { enter: typeof motionPreset.micro; exit: typeof motionPreset.exit };\n native: { enter: typeof motionPreset.enter; exit: typeof motionPreset.exit };\n };\n};\n\nexport const tooltipRecipe = {\n slots: [\"provider\", \"trigger\", \"content\", \"arrow\"] as const,\n defaults: tooltipDescriptorDefaults,\n layer: layer.tooltip,\n surface: {\n ...floatingSurfaceContract,\n background: semanticColors.content.primary,\n border: semanticColors.content.primary,\n radius: \"sm\" as const,\n padding: spacing.xs,\n },\n content: {\n color: semanticColors.canvas,\n textVariant: \"label\",\n maxWidth: 280,\n },\n arrow: {\n width: 10,\n height: 5,\n color: semanticColors.content.primary,\n padding: spacing.xs,\n },\n positioning: {\n sideOffset: spacing.xxs,\n collisionPadding: spacing.sm,\n },\n transition: { enter: motionPreset.micro, exit: motionPreset.exit },\n} as const;\n\nexport const topBarRecipe = {\n slots: [\n \"root\",\n \"leading\",\n \"title\",\n \"titleLeading\",\n \"titleAction\",\n \"trailing\",\n \"action\",\n \"actionLabel\",\n ] as const,\n defaults: { centered: true },\n minHeight: control.buttonHeight.large,\n sideMinWidth: control.buttonHeight.small,\n paddingHorizontal: spacing.md,\n gap: spacing.xxs,\n largeTextThreshold,\n title: { textVariant: \"bodyLarge\", color: semanticColors.content.primary, fontWeight: typography.title.fontWeight },\n titleAction: {\n minHeight: control.minTouchTarget,\n minWidth: control.minTouchTarget,\n gap: spacing.xs,\n pressedOpacity: opacity.pressed,\n },\n // 2026-10-21: compact header tools approved after the Today Baseball home trial.\n action: {\n size: \"small\",\n hitSlop: 0,\n minHeight: control.buttonHeight.small,\n minWidth: control.buttonHeight.small,\n gap: spacing.xxs,\n paddingHorizontal: spacing.xxs,\n pressedOpacity: opacity.pressed,\n disabledOpacity: opacity.disabled,\n },\n actionLabel: {\n textVariant: \"caption\",\n color: semanticColors.content.primary,\n fontWeight: fontWeight.medium,\n },\n background: semanticColors.canvas,\n} as const;\n\nexport const bottomCtaRecipe = {\n slots: [\"root\", \"description\", \"secondaryAction\", \"primaryAction\"] as const,\n minHeight: 64,\n // A standalone bar shares ScreenLayout's 16pt content edges. The general 20pt page gutter\n // narrowed the pinned action below the search field (Unairplane simulator review, 2026-10-20).\n paddingHorizontal: spacing.md,\n paddingTop: spacing.sm,\n paddingBottom: spacing.sm,\n gap: spacing.sm,\n // ScreenLayout's reading width includes its two body gutters. Subtract them here because this\n // max width measures the actions themselves; otherwise tablet buttons extend 16pt beyond each body edge.\n contentMaxWidth: layout.readingMaxWidth - spacing.md * 2,\n // A footer painted in the canvas tone left only a 1pt hairline between it\n // and the content scrolling underneath — a product author found that the\n // line cut a glyph in half at whatever scroll position the reader stopped\n // at, reading as a broken card rather than a footer. Layering by surface\n // (one step up from canvas) instead of by shadow alone is how this\n // component builds the separation; `shadow` below is reserved for the one\n // case that still needs it — see its comment.\n background: semanticColors.canvas,\n border: semanticColors.border.default,\n borderWidth: stroke.default,\n // The cut described above is the scroll viewport's edge, not a spacing\n // problem — content clips mid-glyph, and a hairline between two\n // similarly-light planes can't carry that on its own. The footer casts\n // upward instead: the one case where a shadow, rather than a surface step,\n // is the right tool, because the footer genuinely overlaps the content\n // beneath it.\n shadow: {\n color: \"#000000\",\n opacity: 0.08,\n radius: 8,\n offsetY: -2,\n elevation: 8,\n },\n} as const;\n\nexport const sectionRecipe = {\n slots: [\"root\", \"header\", \"copy\", \"title\", \"description\", \"action\", \"content\"] as const,\n gap: spacing.xs,\n headerGap: spacing.sm,\n copyGap: spacing.xxs,\n title: { textVariant: \"title\", color: semanticColors.content.body, fontWeight: typography.title.fontWeight },\n description: { textVariant: \"caption\", color: semanticColors.content.secondary },\n} as const;\n\nexport type SegmentedControlSize = keyof typeof segmentedControlRecipe.sizes;\nexport type SwitchPresentation = \"inline\" | \"row\";\nexport type SwitchSize = keyof typeof switchRecipe.sizes;\nexport type SelectionControlSize = keyof typeof selectionControlRecipe.sizes;\nexport type SelectionControlPresentation = keyof typeof selectionControlRecipe.presentations;\nexport type TabSize = keyof typeof tabsRecipe.sizes;\nexport type TabsLayout = keyof typeof tabsRecipe.layouts;\nexport type TabsOverflow = keyof typeof tabsRecipe.overflow;\nexport type TabsIndicator = keyof typeof tabsRecipe.indicators;\nexport type SpinnerSize = keyof typeof spinnerRecipe.sizes;\nexport type SpinnerTone = keyof typeof spinnerRecipe.tones;\nexport type AvatarSize = keyof typeof avatarRecipe.sizes;\nexport type AvatarShape = keyof typeof avatarRecipe.shapes;\nexport type DialogSize = keyof typeof dialogRecipe.sizes;\n"]}