import type { Theme } from '../schema';
type Brand<T, TBrand extends string> = T & {
    readonly __brand: TBrand;
};
export type DesignBlockId = Brand<string, 'DesignBlockId'>;
export type DesignPageId = Brand<string, 'DesignPageId'>;
export type DesignEntryId = Brand<string, 'DesignEntryId'>;
export type PageContentVersionId = Brand<string, 'PageContentVersionId'>;
export type BlockContentVersionId = Brand<string, 'BlockContentVersionId'>;
export type DesignBoundaryId = Brand<string, 'DesignBoundaryId'>;
export type BlockOrderIndex = Brand<number, 'BlockOrderIndex'>;
export type LayoutVariantKey = Brand<string, 'LayoutVariantKey'>;
export type AppearancePresetId = Brand<string, 'AppearancePresetId'>;
export type BoundaryOptionId = Brand<string, 'BoundaryOptionId'>;
export type PageFlowPresetId = Brand<string, 'PageFlowPresetId'>;
export type SiteStyleId = Brand<string, 'SiteStyleId'>;
export type DesignSystemTemplateId = Brand<string, 'DesignSystemTemplateId'>;
export type NonEmptyReadonlyArray<T> = readonly [T, ...T[]];
export declare function asDesignBlockId(value: string): DesignBlockId;
export declare function asDesignPageId(value: string): DesignPageId;
export declare function asDesignEntryId(value: string): DesignEntryId;
export declare function asPageContentVersionId(value: string): PageContentVersionId;
export declare function asBlockContentVersionId(value: string): BlockContentVersionId;
export declare function asDesignBoundaryId(value: string): DesignBoundaryId;
export declare function asBlockOrderIndex(value: number): BlockOrderIndex;
export declare function asLayoutVariantKey(value: string): LayoutVariantKey;
export declare function asAppearancePresetId(value: string): AppearancePresetId;
export declare function asBoundaryOptionId(value: string): BoundaryOptionId;
export declare function asPageFlowPresetId(value: string): PageFlowPresetId;
export declare function asSiteStyleId(value: string): SiteStyleId;
export declare function asDesignSystemTemplateId(value: string): DesignSystemTemplateId;
export declare function toNonEmptyReadonlyArray<T>(values: readonly T[]): NonEmptyReadonlyArray<T> | null;
export declare function requireNonEmptyReadonlyArray<T>(values: readonly T[], message?: string): NonEmptyReadonlyArray<T>;
export declare function mapNonEmptyReadonlyArray<TValue, TResult>(values: NonEmptyReadonlyArray<TValue>, mapValue: (value: TValue, index: number) => TResult): NonEmptyReadonlyArray<TResult>;
export declare function makeBoundaryId(previousBlockId: DesignBlockId, nextBlockId: DesignBlockId): DesignBoundaryId;
export declare function assertNever(value: never, message?: string): never;
export type PublishedPageBlockSnapshot = Readonly<{
    kind: 'published-block-content';
    blockId: DesignBlockId;
    contentVersionId: BlockContentVersionId;
    identifier: string | null;
    blockKind: string;
    orderIndex: BlockOrderIndex;
}>;
export type DraftPageBlockSnapshot = Readonly<{
    kind: 'draft-block-content';
    blockId: DesignBlockId;
    contentVersionId: BlockContentVersionId | null;
    identifier: string | null;
    blockKind: string;
    orderIndex: BlockOrderIndex;
}>;
export type MissingPageBlockContentReason = 'new-block' | 'deleted-content-version' | 'unpublished-block';
export type MissingPageBlockSnapshot = Readonly<{
    kind: 'missing-block-content';
    blockId: DesignBlockId;
    identifier: string | null;
    blockKind: string;
    orderIndex: BlockOrderIndex;
    reason: MissingPageBlockContentReason;
}>;
export type PageBlockSnapshot = PublishedPageBlockSnapshot | DraftPageBlockSnapshot | MissingPageBlockSnapshot;
export type PublishedPageDesignVersionDataV1 = Readonly<{
    schemaVersion: 1;
    stage: 'published';
    pageId: DesignPageId;
    blockSequence: readonly PublishedPageBlockSnapshot[];
}>;
export type DraftPageDesignVersionDataV1 = Readonly<{
    schemaVersion: 1;
    stage: 'draft';
    pageId: DesignPageId;
    blockSequence: readonly PageBlockSnapshot[];
}>;
export type PageDesignVersionDataV1 = PublishedPageDesignVersionDataV1 | DraftPageDesignVersionDataV1;
export declare function blockContentVersionIdsForPageDesignVersionData(versionData: PageDesignVersionDataV1): readonly BlockContentVersionId[];
export type ContentVersionOwner = Readonly<{
    kind: 'block';
    blockId: DesignBlockId;
}> | Readonly<{
    kind: 'entry';
    entryId: DesignEntryId;
}> | Readonly<{
    kind: 'page';
    pageId: DesignPageId;
}>;
export type DesignResolutionPolicy = 'generated' | 'user' | 'admin' | 'sdk';
export type DesignIssueSeverity = 'blocking' | 'repairable' | 'advisory';
export declare function designIssueSeverityForPolicy(policy: DesignResolutionPolicy): DesignIssueSeverity;
export type SiteStyleSurfaceIntent = 'base' | 'muted-band' | 'accent-band' | 'hero-image';
export type SiteStyleItemSurfaceIntent = 'none' | 'default' | 'flat' | 'outlined' | 'raised' | 'inset' | 'editorial';
export type SiteStyleSectionTransitionIntent = 'none' | 'soft-fade-short' | 'soft-fade-long' | 'wave-edge' | 'angle-edge';
export type SiteStyleEmphasis = 'low' | 'medium' | 'high';
export type SectionHeightIntent = 'default' | 'banner' | 'hero' | 'immersive';
export type FrameKind = 'plain' | 'panel' | 'flush-panel';
export type PanelFrameTreatment = 'inset' | 'raised' | 'editorial';
export type FlushFrameTreatment = 'media-panel';
export type FrameBleedEdge = 'start' | 'end' | 'both';
export type PlainFrameIntent = Readonly<{
    kind: 'plain';
}>;
export type PanelFrameIntent = Readonly<{
    kind: 'panel';
    treatment: PanelFrameTreatment;
}>;
export type FlushPanelFrameIntent = Readonly<{
    kind: 'flush-panel';
    treatment: FlushFrameTreatment;
    bleed: FrameBleedEdge;
}>;
export type ContentFrameIntent = PlainFrameIntent | PanelFrameIntent | FlushPanelFrameIntent;
export type FrameCapability = readonly [FrameKind, ...FrameKind[]];
export type FrameDecisionFor<C extends FrameCapability> = ('plain' extends C[number] ? PlainFrameIntent : never) | ('panel' extends C[number] ? PanelFrameIntent : never) | ('flush-panel' extends C[number] ? FlushPanelFrameIntent : never);
export declare const plainFrame: {
    readonly kind: "plain";
};
export declare function panelFrame<const TTreatment extends PanelFrameTreatment>(treatment: TTreatment): Readonly<{
    kind: 'panel';
    treatment: TTreatment;
}>;
export declare function flushPanelFrame<const TBleed extends FrameBleedEdge>(options: Readonly<{
    bleed: TBleed;
    treatment?: FlushFrameTreatment;
}>): Readonly<{
    kind: 'flush-panel';
    treatment: FlushFrameTreatment;
    bleed: TBleed;
}>;
export declare function defineFrameCapability<const C extends FrameCapability>(capability: C): C;
export type ContentFrameKind = FrameKind;
export type PlainContentFrameIntent = PlainFrameIntent;
export type PanelContentFrameIntent = PanelFrameIntent;
export type FlushPanelContentFrameIntent = FlushPanelFrameIntent;
export type SiteStyleContentFrameIntent = ContentFrameIntent;
export type GeneratedDesignChoice<TAllowed> = Readonly<{
    source: 'generated';
    kind: 'auto';
}> | Readonly<{
    source: 'generated';
    kind: 'explicit';
    value: TAllowed;
}>;
export type UserDesignChoice<TAllowed> = Readonly<{
    source: 'user';
    kind: 'auto';
}> | Readonly<{
    source: 'user';
    kind: 'explicit';
    value: TAllowed;
}>;
export type AdvancedDetachedDesignValue = Readonly<{
    kind: 'detached-custom';
    runtimeStyles: Record<string, unknown>;
}>;
export type AdvancedDesignChoice<TAllowed> = UserDesignChoice<TAllowed> | Readonly<{
    source: 'advanced';
    kind: 'detached-custom';
    value: AdvancedDetachedDesignValue;
}>;
export type GeneratedSurfaceIntent = SiteStyleSurfaceIntent;
export type UserSurfaceIntent = SiteStyleSurfaceIntent;
export type AdvancedSurfaceIntent = SiteStyleSurfaceIntent | AdvancedDetachedDesignValue;
export type MediaCompositionIntent = 'none' | 'supporting' | 'dominant';
export type DecorativeCompositionIntent = 'none' | 'supporting' | 'feature';
export type HeroLegibilityStrategy = 'none' | 'scrim-gradient' | 'solid-panel';
export type ImageSurfaceTreatmentToken = 'primary' | 'secondary' | 'accent';
export type ImageSurfaceTreatmentIntensity = 'soft' | 'balanced' | 'strong';
export type ImageSurfaceMotion = 'static' | 'fixed-frame';
export type ImageSurfaceTreatment = Readonly<{
    kind: 'none';
}> | Readonly<{
    kind: 'brand-scrim';
    token: ImageSurfaceTreatmentToken;
    intensity?: ImageSurfaceTreatmentIntensity;
}> | Readonly<{
    kind: 'brand-wash';
    token: ImageSurfaceTreatmentToken;
    intensity?: ImageSurfaceTreatmentIntensity;
}> | Readonly<{
    kind: 'neutral-scrim';
    intensity?: ImageSurfaceTreatmentIntensity;
}> | Readonly<{
    kind: 'neutral-wash';
    intensity?: ImageSurfaceTreatmentIntensity;
}> | Readonly<{
    kind: 'solid-panel';
    intensity?: ImageSurfaceTreatmentIntensity;
}>;
export type ImageSurfaceTreatmentKind = ImageSurfaceTreatment['kind'];
export type TestimonialCardTreatment = 'default' | 'accent-quote';
export declare const eyebrowTreatmentValues: readonly ["plain", "pill", "accent-pill", "pill-bounce", "accent-pill-bounce"];
export type EyebrowTreatment = (typeof eyebrowTreatmentValues)[number];
export type GeneratedMediaCompositionIntent = Extract<MediaCompositionIntent, 'none' | 'supporting' | 'dominant'>;
export type UserMediaCompositionIntent = MediaCompositionIntent;
export type AdvancedMediaCompositionIntent = MediaCompositionIntent | AdvancedDetachedDesignValue;
export type GeneratedDecorativeCompositionIntent = Extract<DecorativeCompositionIntent, 'none' | 'supporting'>;
export type UserDecorativeCompositionIntent = DecorativeCompositionIntent;
export type AdvancedDecorativeCompositionIntent = DecorativeCompositionIntent | AdvancedDetachedDesignValue;
export type GeneratedHeroLegibilityStrategy = Extract<HeroLegibilityStrategy, 'none' | 'scrim-gradient'>;
export type UserHeroLegibilityStrategy = HeroLegibilityStrategy;
export type AdvancedHeroLegibilityStrategy = HeroLegibilityStrategy | AdvancedDetachedDesignValue;
export type GeneratedPanelFrameIntent = Readonly<{
    kind: 'panel';
    treatment: Extract<PanelFrameTreatment, 'inset' | 'raised'>;
}>;
export type GeneratedFlushPanelFrameIntent = Readonly<{
    kind: 'flush-panel';
    treatment: FlushFrameTreatment;
    bleed: Extract<FrameBleedEdge, 'start'>;
}>;
export type GeneratedContentFrameIntent = PlainFrameIntent | GeneratedPanelFrameIntent | GeneratedFlushPanelFrameIntent;
export type UserContentFrameIntent = ContentFrameIntent;
export type AdvancedContentFrameIntent = ContentFrameIntent | AdvancedDetachedDesignValue;
export type GeneratedItemSurfaceIntent = Extract<SiteStyleItemSurfaceIntent, 'none' | 'default' | 'flat' | 'outlined' | 'raised'>;
export type UserItemSurfaceIntent = SiteStyleItemSurfaceIntent;
export type AdvancedItemSurfaceIntent = SiteStyleItemSurfaceIntent | AdvancedDetachedDesignValue;
export type GeneratedSectionTransitionIntent = Extract<SiteStyleSectionTransitionIntent, 'none' | 'soft-fade-short' | 'soft-fade-long'>;
export type UserSectionTransitionIntent = SiteStyleSectionTransitionIntent;
export type AdvancedSectionTransitionIntent = SiteStyleSectionTransitionIntent | AdvancedDetachedDesignValue;
export type GeneratedBlockDesignIntent = Readonly<{
    sectionSurface: GeneratedDesignChoice<GeneratedSurfaceIntent>;
    contentFrame: GeneratedDesignChoice<GeneratedContentFrameIntent>;
    itemSurface: GeneratedDesignChoice<GeneratedItemSurfaceIntent>;
    transitionAfter: GeneratedDesignChoice<GeneratedSectionTransitionIntent>;
    emphasis: GeneratedDesignChoice<SiteStyleEmphasis>;
}>;
export type GeneratedBlockMediaIntent = Readonly<{
    media: GeneratedMediaCompositionIntent;
    decorative: GeneratedDecorativeCompositionIntent;
    heroLegibility: GeneratedDesignChoice<GeneratedHeroLegibilityStrategy>;
}>;
export type GeneratedBoundaryIntent = Readonly<{
    transitionAfter: GeneratedDesignChoice<GeneratedSectionTransitionIntent>;
}>;
export type GeneratedPageDesignBlockIntent<TBlockId extends string = string> = Readonly<{
    blockId: TBlockId;
    blockKind: string;
    purpose: string;
    design: GeneratedBlockDesignIntent;
    mediaIntent: GeneratedBlockMediaIntent;
    boundaryIntent: GeneratedBoundaryIntent;
}>;
export type GeneratedPageDesignIntent<TBlockId extends string = string> = Readonly<{
    siteStyleId: SiteStyleId;
    blocks: readonly GeneratedPageDesignBlockIntent<TBlockId>[];
}>;
export type UserBlockDesignIntent = Readonly<{
    sectionSurface: UserDesignChoice<UserSurfaceIntent>;
    contentFrame: UserDesignChoice<UserContentFrameIntent>;
    itemSurface: UserDesignChoice<UserItemSurfaceIntent>;
    transitionAfter: UserDesignChoice<UserSectionTransitionIntent>;
    emphasis: UserDesignChoice<SiteStyleEmphasis>;
}>;
export type AdvancedBlockDesignIntent = Readonly<{
    sectionSurface: AdvancedDesignChoice<AdvancedSurfaceIntent>;
    contentFrame: AdvancedDesignChoice<AdvancedContentFrameIntent>;
    itemSurface: AdvancedDesignChoice<AdvancedItemSurfaceIntent>;
    transitionAfter: AdvancedDesignChoice<AdvancedSectionTransitionIntent>;
    emphasis: AdvancedDesignChoice<SiteStyleEmphasis>;
}>;
export type ThemeTokenPaletteRecipe = 'brand-led' | 'warm-neutral' | 'high-contrast' | 'soft-natural';
export type ThemeTokenContrastRecipe = 'standard' | 'strong' | 'maximum';
export type ThemeTokenRadiusRecipe = 'square' | 'soft' | 'rounded' | 'pill';
export type ThemeTokenShadowRecipe = 'none' | 'subtle' | 'layered';
export type ThemeTokenTypographyRecipe = 'serif-editorial' | 'clean-sans' | 'classic-serif' | 'friendly-sans';
export type ThemeTokenSpacingRecipe = 'compact' | 'regular' | 'airy';
export type ThemeTokenMotionRecipe = 'none' | 'subtle' | 'expressive';
export type ThemeTokenRecipes = Readonly<{
    palette: ThemeTokenPaletteRecipe;
    contrast: ThemeTokenContrastRecipe;
    radius: ThemeTokenRadiusRecipe;
    shadow: ThemeTokenShadowRecipe;
    typography: ThemeTokenTypographyRecipe;
    spacing: ThemeTokenSpacingRecipe;
    motion: ThemeTokenMotionRecipe;
}>;
export type CompositionBudget = Readonly<{
    accentDensity: 'low' | 'medium' | 'high';
    panelDensity: 'low' | 'medium' | 'high';
    transitionMix: 'quiet' | 'balanced' | 'expressive';
    primaryCtaLimit: number;
    mediaDensity: 'low' | 'medium' | 'high';
    decorativeRepetition: 'low' | 'medium' | 'high';
}>;
export type CompositionDensityBudget = CompositionBudget['accentDensity'];
export type CompositionTransitionMixBudget = CompositionBudget['transitionMix'];
/**
 * V1 composition budgets are interpreted as fractions of resolved page blocks.
 * Site styles still choose the budget enum values; these shared limits define the
 * first-pass global meaning of each enum until styles need per-template tuning.
 */
export declare const compositionDensityRatioLimits: {
    readonly low: 0.25;
    readonly medium: 0.5;
    readonly high: 0.75;
};
/**
 * V1 transition budgets are also fraction-of-blocks limits, separated from
 * density because transition labels use quiet/balanced/expressive language.
 */
export declare const compositionTransitionMixRatioLimits: {
    readonly quiet: 0.2;
    readonly balanced: 0.5;
    readonly expressive: 0.75;
};
export type DesignSystemTemplate = Readonly<{
    id: DesignSystemTemplateId;
    name: string;
    version: number;
    tokenRecipes: ThemeTokenRecipes;
    compositionBudget: CompositionBudget;
    supportedSectionSurfaces: readonly SiteStyleSurfaceIntent[];
    supportedContentFrames: readonly FrameKind[];
    supportedItemSurfaces: readonly SiteStyleItemSurfaceIntent[];
    supportedTransitions: readonly SiteStyleSectionTransitionIntent[];
}>;
export type SiteTheme = Readonly<{
    siteStyleId: SiteStyleId;
    templateId: DesignSystemTemplateId;
    templateVersion: number;
    tokenRecipes: ThemeTokenRecipes;
    theme: Theme;
}>;
export type ResolvedThemeRuntime = Readonly<{
    theme: Theme;
    templateId: DesignSystemTemplateId;
    templateVersion: number;
    resolverVersion: number;
    issues: readonly DesignResolutionIssue[];
}>;
export type BlockDesignPlan<TBlockId extends string = DesignBlockId, TPurpose extends string = string> = Readonly<{
    blockId: TBlockId;
    blockKind: string;
    purpose: TPurpose;
    sectionSurface: SiteStyleSurfaceIntent;
    contentFrame: ContentFrameIntent;
    itemSurface: SiteStyleItemSurfaceIntent;
    transitionAfter: SiteStyleSectionTransitionIntent;
    emphasis: SiteStyleEmphasis;
    sectionHeight?: SectionHeightIntent;
    heroLegibility?: HeroLegibilityStrategy;
    imageSurfaceTreatment?: ImageSurfaceTreatment;
    imageSurfaceMotion?: ImageSurfaceMotion;
    testimonialCardTreatment?: TestimonialCardTreatment;
    eyebrowTreatment?: EyebrowTreatment;
}>;
export type ResolvedBlockDesignPlan<TBlockId extends string = DesignBlockId, TPurpose extends string = string> = Readonly<BlockDesignPlan<TBlockId, TPurpose> & {
    appliedSectionSurface: SiteStyleSurfaceIntent;
    appliedContentFrame: ContentFrameIntent;
    appliedTransitionAfter: SiteStyleSectionTransitionIntent;
    appliedItemSurface: SiteStyleItemSurfaceIntent;
    appliedSectionHeight: SectionHeightIntent;
    appliedHeroLegibility: HeroLegibilityStrategy;
    appliedImageSurfaceTreatment: ImageSurfaceTreatment;
    appliedImageSurfaceMotion: ImageSurfaceMotion;
    appliedTestimonialCardTreatment: TestimonialCardTreatment;
    appliedEyebrowTreatment: EyebrowTreatment;
}>;
export type PageDesignState<TBlockId extends string = DesignBlockId, TPurpose extends string = string> = Readonly<{
    schemaVersion: 1;
    rhythmPresetId: string;
    blocks: readonly BlockDesignPlan<TBlockId, TPurpose>[];
}>;
export type ResolvedPageDesignPlan<TBlockId extends string = DesignBlockId, TPurpose extends string = string> = Readonly<{
    blocks: readonly ResolvedBlockDesignPlan<TBlockId, TPurpose>[];
    issues: readonly DesignResolutionIssue<TBlockId, TPurpose>[];
}>;
export type DesignedBlockDesignCapabilityInput = Readonly<{
    sectionSurfaces: 'supported' | 'unsupported';
    contentFrames: FrameCapability;
    itemSurfaces: 'supported' | 'unsupported';
    sectionHeights?: NonEmptyReadonlyArray<SectionHeightIntent>;
    imageSurfaceTreatments?: NonEmptyReadonlyArray<ImageSurfaceTreatmentKind>;
    imageSurfaceMotions?: NonEmptyReadonlyArray<ImageSurfaceMotion>;
    testimonialCardTreatments?: NonEmptyReadonlyArray<TestimonialCardTreatment>;
    eyebrowTreatments?: NonEmptyReadonlyArray<EyebrowTreatment>;
}>;
export type DesignedBlockDesignCapability = Readonly<{
    kind: 'designed';
    sectionSurfaces: 'supported' | 'unsupported';
    contentFrames: FrameCapability;
    itemSurfaces: 'supported' | 'unsupported';
    sectionHeights: NonEmptyReadonlyArray<SectionHeightIntent>;
    imageSurfaceTreatments: NonEmptyReadonlyArray<ImageSurfaceTreatmentKind>;
    imageSurfaceMotions: NonEmptyReadonlyArray<ImageSurfaceMotion>;
    testimonialCardTreatments: NonEmptyReadonlyArray<TestimonialCardTreatment>;
    eyebrowTreatments: NonEmptyReadonlyArray<EyebrowTreatment>;
}>;
export type UnsupportedBlockDesignCapabilityReason = 'site-chrome' | 'transactional' | 'placeholder' | 'legacy-layout' | 'custom-runtime';
export type NoBlockDesignCapability = Readonly<{
    kind: 'not-designed';
    reason: UnsupportedBlockDesignCapabilityReason;
}>;
export type BlockDesignCapability = DesignedBlockDesignCapability | NoBlockDesignCapability;
export type BlockDesignCapabilityMap = Readonly<Partial<Record<string, BlockDesignCapability>>>;
export declare function defineBlockDesignCapability(capability: DesignedBlockDesignCapabilityInput): DesignedBlockDesignCapability;
export declare function defineNoBlockDesignCapability(reason: UnsupportedBlockDesignCapabilityReason): NoBlockDesignCapability;
export type DesignRepairAction = 'fallback-block-design' | 'fallback-section-surface' | 'fallback-content-frame' | 'fallback-item-surface' | 'fallback-section-height' | 'fallback-image-surface-treatment' | 'fallback-image-surface-motion' | 'fallback-testimonial-card-treatment' | 'fallback-eyebrow-treatment' | 'remove-hero-legibility' | 'remove-transition' | 'fallback-hero-legibility' | 'reduce-accent-density' | 'reduce-panel-density' | 'reduce-transition-mix' | 'reduce-primary-ctas' | 'reduce-media-density' | 'reduce-decorative-repetition';
export type UnsupportedSectionSurfaceIssue<TBlockId extends string = DesignBlockId, TPurpose extends string = string> = Readonly<{
    kind: 'unsupported-section-surface';
    blockId: TBlockId;
    blockKind: string;
    purpose: TPurpose;
    requested: SiteStyleSurfaceIntent;
    fallback: SiteStyleSurfaceIntent;
    policy: DesignResolutionPolicy;
    severity: DesignIssueSeverity;
    allowedRepairActions: readonly ['fallback-section-surface'];
}>;
export type UnsupportedContentFrameIssue<TBlockId extends string = DesignBlockId, TPurpose extends string = string> = Readonly<{
    kind: 'unsupported-content-frame';
    blockId: TBlockId;
    blockKind: string;
    purpose: TPurpose;
    requested: ContentFrameIntent;
    fallback: ContentFrameIntent;
    policy: DesignResolutionPolicy;
    severity: DesignIssueSeverity;
    allowedRepairActions: readonly ['fallback-content-frame'];
}>;
export type UnsupportedItemSurfaceIssue<TBlockId extends string = DesignBlockId, TPurpose extends string = string> = Readonly<{
    kind: 'unsupported-item-surface';
    blockId: TBlockId;
    blockKind: string;
    purpose: TPurpose;
    requested: SiteStyleItemSurfaceIntent;
    fallback: SiteStyleItemSurfaceIntent;
    policy: DesignResolutionPolicy;
    severity: DesignIssueSeverity;
    allowedRepairActions: readonly ['fallback-item-surface'];
}>;
export type UnsupportedSectionHeightIssue<TBlockId extends string = DesignBlockId, TPurpose extends string = string> = Readonly<{
    kind: 'unsupported-section-height';
    blockId: TBlockId;
    blockKind: string;
    purpose: TPurpose;
    requested: SectionHeightIntent;
    fallback: 'default';
    policy: DesignResolutionPolicy;
    severity: DesignIssueSeverity;
    allowedRepairActions: readonly ['fallback-section-height'];
}>;
export type UnsupportedImageSurfaceTreatmentIssue<TBlockId extends string = DesignBlockId, TPurpose extends string = string> = Readonly<{
    kind: 'unsupported-image-surface-treatment';
    blockId: TBlockId;
    blockKind: string;
    purpose: TPurpose;
    requested: ImageSurfaceTreatment;
    fallback: Readonly<{
        kind: 'none';
    }>;
    policy: DesignResolutionPolicy;
    severity: DesignIssueSeverity;
    allowedRepairActions: readonly ['fallback-image-surface-treatment'];
}>;
export type UnsupportedImageSurfaceMotionIssue<TBlockId extends string = DesignBlockId, TPurpose extends string = string> = Readonly<{
    kind: 'unsupported-image-surface-motion';
    blockId: TBlockId;
    blockKind: string;
    purpose: TPurpose;
    requested: ImageSurfaceMotion;
    fallback: 'static';
    policy: DesignResolutionPolicy;
    severity: DesignIssueSeverity;
    allowedRepairActions: readonly ['fallback-image-surface-motion'];
}>;
export type UnsupportedTestimonialCardTreatmentIssue<TBlockId extends string = DesignBlockId, TPurpose extends string = string> = Readonly<{
    kind: 'unsupported-testimonial-card-treatment';
    blockId: TBlockId;
    blockKind: string;
    purpose: TPurpose;
    requested: TestimonialCardTreatment;
    fallback: 'default';
    policy: DesignResolutionPolicy;
    severity: DesignIssueSeverity;
    allowedRepairActions: readonly ['fallback-testimonial-card-treatment'];
}>;
export type UnsupportedEyebrowTreatmentIssue<TBlockId extends string = DesignBlockId, TPurpose extends string = string> = Readonly<{
    kind: 'unsupported-eyebrow-treatment';
    blockId: TBlockId;
    blockKind: string;
    purpose: TPurpose;
    requested: EyebrowTreatment;
    fallback: 'plain';
    policy: DesignResolutionPolicy;
    severity: DesignIssueSeverity;
    allowedRepairActions: readonly ['fallback-eyebrow-treatment'];
}>;
export type ImageSurfaceTreatmentWithoutImageSurfaceIssue<TBlockId extends string = DesignBlockId, TPurpose extends string = string> = Readonly<{
    kind: 'image-surface-treatment-without-image-surface';
    blockId: TBlockId;
    blockKind: string;
    purpose: TPurpose;
    requested: ImageSurfaceTreatment;
    fallback: Readonly<{
        kind: 'none';
    }>;
    policy: DesignResolutionPolicy;
    severity: DesignIssueSeverity;
    allowedRepairActions: readonly ['fallback-image-surface-treatment'];
}>;
export type ImageSurfaceMotionWithoutImageSurfaceIssue<TBlockId extends string = DesignBlockId, TPurpose extends string = string> = Readonly<{
    kind: 'image-surface-motion-without-image-surface';
    blockId: TBlockId;
    blockKind: string;
    purpose: TPurpose;
    requested: ImageSurfaceMotion;
    fallback: 'static';
    policy: DesignResolutionPolicy;
    severity: DesignIssueSeverity;
    allowedRepairActions: readonly ['fallback-image-surface-motion'];
}>;
export type HeroLegibilityOverriddenByImageSurfaceTreatmentIssue<TBlockId extends string = DesignBlockId, TPurpose extends string = string> = Readonly<{
    kind: 'hero-legibility-overridden-by-image-surface-treatment';
    blockId: TBlockId;
    blockKind: string;
    purpose: TPurpose;
    requested: HeroLegibilityStrategy;
    fallback: 'none';
    policy: DesignResolutionPolicy;
    severity: DesignIssueSeverity;
    allowedRepairActions: readonly ['remove-hero-legibility'];
}>;
export type BlockDesignCapabilityRequest = Readonly<{
    sectionSurface: SiteStyleSurfaceIntent;
    contentFrame: ContentFrameIntent;
    itemSurface: SiteStyleItemSurfaceIntent;
    transitionAfter: SiteStyleSectionTransitionIntent;
    sectionHeight?: SectionHeightIntent;
    heroLegibility?: HeroLegibilityStrategy;
    imageSurfaceTreatment?: ImageSurfaceTreatment;
    imageSurfaceMotion?: ImageSurfaceMotion;
    testimonialCardTreatment?: TestimonialCardTreatment;
    eyebrowTreatment?: EyebrowTreatment;
}>;
export type BlockDesignCapabilityFallback = Readonly<{
    sectionSurface: 'base';
    contentFrame: PlainFrameIntent;
    itemSurface: 'none';
    transitionAfter: 'none';
    sectionHeight: 'default';
    heroLegibility: 'none';
    imageSurfaceTreatment: Readonly<{
        kind: 'none';
    }>;
    imageSurfaceMotion: 'static';
    testimonialCardTreatment: 'default';
    eyebrowTreatment: 'plain';
}>;
export type MissingBlockDesignCapabilityIssue<TBlockId extends string = DesignBlockId, TPurpose extends string = string> = Readonly<{
    kind: 'missing-block-design-capability';
    blockId: TBlockId;
    blockKind: string;
    purpose: TPurpose;
    requested: BlockDesignCapabilityRequest;
    fallback: BlockDesignCapabilityFallback;
    policy: DesignResolutionPolicy;
    severity: DesignIssueSeverity;
    allowedRepairActions: readonly ['fallback-block-design'];
}>;
export type UnsupportedBlockDesignCapabilityIssue<TBlockId extends string = DesignBlockId, TPurpose extends string = string> = Readonly<{
    kind: 'unsupported-block-design-capability';
    blockId: TBlockId;
    blockKind: string;
    purpose: TPurpose;
    reason: UnsupportedBlockDesignCapabilityReason;
    requested: BlockDesignCapabilityRequest;
    fallback: BlockDesignCapabilityFallback;
    policy: DesignResolutionPolicy;
    severity: DesignIssueSeverity;
    allowedRepairActions: readonly ['fallback-block-design'];
}>;
export type RemovedTransitionForFlushFrameIssue<TBlockId extends string = DesignBlockId, TPurpose extends string = string> = Readonly<{
    kind: 'removed-transition-for-flush-frame';
    blockId: TBlockId;
    blockKind: string;
    purpose: TPurpose;
    requested: SiteStyleSectionTransitionIntent;
    fallback: 'none';
    policy: DesignResolutionPolicy;
    severity: DesignIssueSeverity;
    allowedRepairActions: readonly ['remove-transition'];
}>;
export type HeroImageWithoutLegibilityIssue<TBlockId extends string = DesignBlockId, TPurpose extends string = string> = Readonly<{
    kind: 'hero-image-without-legibility';
    blockId: TBlockId;
    blockKind: string;
    purpose: TPurpose;
    requested: HeroLegibilityStrategy | undefined;
    fallback: HeroLegibilityStrategy;
    policy: DesignResolutionPolicy;
    severity: DesignIssueSeverity;
    allowedRepairActions: readonly ['fallback-hero-legibility'];
}>;
export type DesignResolutionIssue<TBlockId extends string = DesignBlockId, TPurpose extends string = string> = UnsupportedSectionSurfaceIssue<TBlockId, TPurpose> | UnsupportedContentFrameIssue<TBlockId, TPurpose> | UnsupportedItemSurfaceIssue<TBlockId, TPurpose> | UnsupportedSectionHeightIssue<TBlockId, TPurpose> | UnsupportedImageSurfaceTreatmentIssue<TBlockId, TPurpose> | UnsupportedImageSurfaceMotionIssue<TBlockId, TPurpose> | UnsupportedTestimonialCardTreatmentIssue<TBlockId, TPurpose> | UnsupportedEyebrowTreatmentIssue<TBlockId, TPurpose> | ImageSurfaceTreatmentWithoutImageSurfaceIssue<TBlockId, TPurpose> | ImageSurfaceMotionWithoutImageSurfaceIssue<TBlockId, TPurpose> | HeroLegibilityOverriddenByImageSurfaceTreatmentIssue<TBlockId, TPurpose> | MissingBlockDesignCapabilityIssue<TBlockId, TPurpose> | UnsupportedBlockDesignCapabilityIssue<TBlockId, TPurpose> | RemovedTransitionForFlushFrameIssue<TBlockId, TPurpose> | HeroImageWithoutLegibilityIssue<TBlockId, TPurpose>;
export type DesignRepairResultForIssue<TIssue extends DesignResolutionIssue<string, string>> = {
    [TKind in TIssue['kind']]: Readonly<{
        kind: TKind extends 'removed-transition-for-flush-frame' ? 'repaired' : 'fallbackApplied';
        issue: Extract<TIssue, {
            kind: TKind;
        }>;
        action: Extract<TIssue, {
            kind: TKind;
        }>['allowedRepairActions'][number];
    }>;
}[TIssue['kind']] | Readonly<{
    kind: 'fatal';
    issue: TIssue;
    action: null;
    reason: 'no-repair-action-available';
}>;
export type DesignRepairResult<TBlockId extends string = DesignBlockId, TPurpose extends string = string> = DesignRepairResultForIssue<DesignResolutionIssue<TBlockId, TPurpose>>;
export type SiteStyleSwitchResult<TBlockId extends string = DesignBlockId, TPurpose extends string = string> = Readonly<{
    resolved: ResolvedPageDesignPlan<TBlockId, TPurpose>;
    preservedBlockIds: readonly TBlockId[];
    incompatibleBlockIds: readonly TBlockId[];
    fallbackBlockIds: readonly TBlockId[];
}>;
export {};
