/**
 * Color scale configuration.
 *
 * @example
 * ```
 * // Minimal — just a seed color
 * { accent: '#0064E0' }
 *
 * // With customization
 * { accent: '#B7410E', neutralStyle: 'warm', contrast: 'high' }
 *
 * // Neutral-only — keeps the default accent, themes the neutrals
 * { neutralStyle: 'warm' }
 * ```
 */
export interface ColorScaleConfig {
    /**
     * Seed accent color as hex (#RRGGBB). Everything derives from this.
     *
     * Optional. When omitted, the neutral palettes are seeded from the
     * default accent's hue and the accent tokens (--color-accent,
     * --color-accent-muted, --color-on-accent) are not generated — they
     * fall through to colorDefaults.
     */
    accent?: string;
    /**
     * Neutral tone warmth. Controls how much of the seed's hue bleeds
     * into neutral/background colors.
     * @default 'cool'
     */
    neutralStyle?: 'warm' | 'cool' | 'neutral';
    /**
     * Contrast level. `'high'` pulls text, icons, and borders toward stronger
     * tones (and thickens the subtle border's alpha) so structural and textual
     * boundaries stay perceivable.
     * @default 'standard'
     */
    contrast?: 'standard' | 'high';
}
export type ColorScaleTokens = Record<string, string>;
/**
 * Walk tone in `step` increments from `startTone` until the color reaches
 * `minRatio` against `background`, and return the resulting hex.
 *
 * Used for tokens whose preferred tone is not guaranteed by tone spacing
 * alone (e.g. --color-border-emphasized). Because HCT tone is CIE L*,
 * each step moves luminance monotonically, so the loop always terminates —
 * at worst at pure black/white (21:1 against anything mid-range).
 */
export declare function ensureContrastTone(hue: number, chroma: number, startTone: number, step: -1 | 1, background: string, minRatio: number): string;
/**
 * Expand a color scale config into Astryx color token overrides.
 *
 * Only generates tokens that meaningfully derive from the accent color.
 * Tokens that are convention-bound (status colors, categorical hues,
 * --color-on-dark/on-light) are NOT generated — they fall through
 * to colorDefaults.
 *
 * Without an `accent`, the accent tokens join that fall-through set: the
 * neutrals are seeded from the default accent's hue, and --color-accent,
 * --color-accent-muted and --color-on-accent keep their colorDefaults values.
 *
 * @example
 * ```
 * const tokens = expandColorScale({ accent: '#0064E0' });
 * // tokens['--color-accent'] === 'light-dark(#..., #...)'
 *
 * const neutralOnly = expandColorScale({ neutralStyle: 'warm' });
 * // neutralOnly['--color-accent'] === undefined
 * ```
 */
export declare function expandColorScale(config: ColorScaleConfig): ColorScaleTokens;
//# sourceMappingURL=expandColorScale.d.ts.map