/** Visitor preferences are runtime state, separate from persisted author theme values. */ export interface StudioAccessibilityPreferences { textScale?: number; contrast?: "none" | "light" | "dark"; inverted?: boolean; monochrome?: boolean; saturation?: number; textSpacing?: boolean; reducedMotion?: boolean; } export type PresentationColorRole = "foreground" | "background" | "border" | "action" | "on-action" | "inverse" | "on-inverse"; export declare function normalizeAccessibility(preferences?: StudioAccessibilityPreferences): Required; export declare function semanticColorDefaults(): Record; /** Resolve only known custom properties; unresolved extension values remain valid CSS. */ export declare function resolvePresentationColor(value: string, variables: Record, seen?: Set): string; export declare function contrastColor(role: PresentationColorRole, contrast: "light" | "dark"): string; export declare function presentationColor(value: string | undefined, role?: PresentationColorRole, preferences?: StudioAccessibilityPreferences, variables?: Record): string | undefined; /** background-image requires an image even when a contrast palette flattens its stops. */ export declare function presentationBackground(value: string | undefined, preferences?: StudioAccessibilityPreferences, variables?: Record): string | undefined; /** Re-emitted at theme boundaries so aliases use that subtree's author values. */ export declare function accessibilityVariables(authoredVariables: Record, preferences?: StudioAccessibilityPreferences): Record; /** Relative values inherit the scaled parent; absolute authored sizes scale once. */ export declare function scaledFontSize(value: string | undefined): string | undefined; /** Fixed authored line boxes must enlarge alongside their text. */ export declare function scaledLineHeight(value: string | undefined): string | undefined; /** Static scoped CSS ships with the renderer, including consumers that don't import package CSS. */ export declare const STUDIO_ACCESSIBILITY_CSS = "\n[data-studio-theme-root] {\n overflow-wrap: var(--studio-overflow-wrap, inherit);\n font-size: var(--studio-root-font-size, inherit);\n}\n[data-studio-text-spacing=\"true\"] :where(p, h1, h2, h3, h4, h5, h6, li, a, button, input, select, textarea, label, span, td, th) {\n line-height: 1.5 !important;\n letter-spacing: .12em !important;\n word-spacing: .16em !important;\n}\n[data-studio-text-spacing=\"true\"] p { margin-block-end: 2em !important; }\n[data-studio-reduced-motion=\"true\"] *, [data-studio-reduced-motion=\"true\"] *::before, [data-studio-reduced-motion=\"true\"] *::after {\n animation-duration: .01ms !important; animation-iteration-count: 1 !important;\n transition-duration: .01ms !important; scroll-behavior: auto !important;\n}\n@media (prefers-reduced-motion: reduce) {\n [data-studio-theme-root] *, [data-studio-theme-root] *::before, [data-studio-theme-root] *::after {\n animation-duration: .01ms !important; animation-iteration-count: 1 !important;\n transition-duration: .01ms !important; scroll-behavior: auto !important;\n }\n}\n@media (forced-colors: active) {\n [data-studio-theme-root] :where(button, input, select, textarea, [role=\"button\"]) { border: 1px solid ButtonText; }\n [data-studio-theme-root] :focus-visible { outline: 2px solid Highlight !important; outline-offset: 2px !important; }\n [data-studio-theme-root] svg { forced-color-adjust: auto; }\n}\n"; /** A base-layer fallback lets content's existing paired utility backgrounds win. */ export declare const STUDIO_MEDIA_CONTRAST_CSS = "@layer base {\n [data-studio-media-contrast] > :not([aria-hidden=\"true\"]):not(style) {\n background-color: var(--color-surface);\n color: var(--color-foreground);\n }\n}"; //# sourceMappingURL=accessibility.d.ts.map