/**
 * Dark “brushed metal” main-column background (DashPreviewCanvas dark + brushed).
 * **`DEFAULT_GROOVED_PANEL_DARK_APPEARANCE`** is the shipped product profile (edit in
 * code). `GroovedPanelPreferenceProvider` only persists grooved on/off.
 */
interface GroovedPanelDarkAppearance {
    /** 6-digit hex: lighter stop of the diagonal metal ramp (seen toward top-left). */
    gradientStartHex: string;
    /** 6-digit hex: deeper stop (toward bottom-right). */
    gradientEndHex: string;
    /** 6-digit hex: horizontal groove stroke color (RGB only; alpha separate). */
    grooveLineHex: string;
    /** Groove stroke opacity 0–1. */
    grooveOpacity: number;
    /** Top sheen: RGB tint (usually near-black to deepen the top, not a chalky white). */
    sheenColorHex: string;
    /** Top sheen opacity 0–1 (strength of the sheen gradient). */
    sheenOpacity: number;
    /**
     * Black vignette from the top (0–1). Painted above grooves and sheen so it kills
     * stray white rims from bright groove lines or specular highlights.
     */
    topVignetteOpacity: number;
    /**
     * Extra “extended” top crush (0–1). Stacks **above** vignette + sheen as a single
     * smooth, monotonic black falloff—use when you want a darker, more even top without
     * multi-layer vignette banding or bright mid-stops.
     */
    topCrushExtended: number;
    /**
     * 0–200: horizontal groove contrast on the dark brushed layer (`DashPreviewCanvas`
     * `grooveIntensity`). Lower = subtler lines; higher = brighter strokes.
     */
    brushGrooveIntensity: number;
    /**
     * 0–200: diagonal metal ramp depth (`baseGradientDepth`). Higher usually reads as
     * deeper / richer dark metal vs a flatter wash.
     */
    brushBaseGradientDepth: number;
}
/** Product baseline (matches tuned General settings preview). */
declare const DEFAULT_GROOVED_PANEL_DARK_APPEARANCE: GroovedPanelDarkAppearance;
declare function normalizeGrooveHex(input: string, fallback: string): string;
declare function clampOpacity(value: number): number;
declare function clampGrooveDial(value: number, fallback: number): number;
/**
 * Merge partial fields onto a base (e.g. previous state). Hex strings are kept as-is so
 * typing “#2a…” does not snap to defaults on every keystroke.
 * Opacity fields are always clamped.
 */
declare function mergeGroovedPanelDarkAppearance(incoming: Partial<GroovedPanelDarkAppearance> | undefined, base: GroovedPanelDarkAppearance): GroovedPanelDarkAppearance;
/**
 * Safe values for painting (invalid / in-progress hex → fall back to defaults per field).
 */
declare function normalizeAppearanceForCanvas(a: GroovedPanelDarkAppearance): GroovedPanelDarkAppearance;

export { DEFAULT_GROOVED_PANEL_DARK_APPEARANCE, type GroovedPanelDarkAppearance, clampGrooveDial, clampOpacity, mergeGroovedPanelDarkAppearance, normalizeAppearanceForCanvas, normalizeGrooveHex };
