/**
 * Appearance + brand settings types.
 *
 * These describe the single source of truth for admin theme preferences and
 * brand assets. They are persisted on the `settings` global under the
 * `appearance` and `brand` keys (no rogue/duplicate store) and consumed by:
 *   - the admin shell (theme tokens + sidebar logo),
 *   - the public frontend (logo + favicon via `GET /public/brand`),
 *   - Next.js metadata (favicon icons).
 *
 * Asset references are media asset IDs — never raw file paths — so the Media
 * Center remains the canonical store and URLs can change without rewriting
 * settings.
 */
export type ColorMode = 'light' | 'dark' | 'system';
export type SidebarDensity = 'default' | 'compact';
/** Built-in accent presets. A custom value (hex/oklch string) is also allowed. */
export type AccentColorName = 'purple' | 'blue' | 'teal' | 'pink' | 'orange';
/** Logo shape classification derived from aspect ratio. */
export type LogoShape = 'horizontal' | 'square' | 'vertical' | 'neutral' | 'unknown';
/** How the admin shell sources its brand assets. */
export type AdminBrandingMode = 'inheritPublicBrand' | 'customAdminBrand';
/** Roles a brand asset can fill. Mirrors Media Center usage tagging. */
export type BrandAssetRole = 'publicPrimaryLogo' | 'publicLogoMark' | 'publicDarkLogo' | 'adminPrimaryLogo' | 'adminLogoMark' | 'adminDarkLogo' | 'faviconSource' | 'generatedFavicon';
export interface AppearanceSettings {
    adminColorModeDefault: ColorMode;
    adminAccentColor: AccentColorName | string;
    sidebarDensity: SidebarDensity;
    contentFont: string;
    reduceMotion: boolean;
    updatedAt?: string;
    updatedBy?: string;
}
export interface BrandSettings {
    mode: AdminBrandingMode;
    publicPrimaryLogoAssetId?: string;
    publicLogoMarkAssetId?: string;
    publicDarkLogoAssetId?: string;
    adminPrimaryLogoAssetId?: string;
    adminLogoMarkAssetId?: string;
    adminDarkLogoAssetId?: string;
    faviconSourceAssetId?: string;
    generatedFaviconAssetIds?: string[];
    defaultLogoAltText?: string;
    updatedAt?: string;
    updatedBy?: string;
}
/** Resolved metadata for a single brand asset (after Media Center lookup). */
export interface BrandAssetMetadata {
    assetId: string;
    role: BrandAssetRole;
    fileName: string;
    mimeType: string;
    width?: number;
    height?: number;
    aspectRatio?: number;
    shape: LogoShape;
    sizeBytes: number;
    publicUrl: string;
}
/** A resolved logo URL + alt text + shape, or null when none is configured. */
export interface ResolvedLogo {
    url: string;
    alt: string;
    shape: LogoShape;
    width?: number;
    height?: number;
}
/** What the admin shell needs to paint its sidebar (expanded + collapsed). */
export interface ResolvedAdminBrand {
    /** Full lockup for the expanded sidebar / header. */
    primary: ResolvedLogo | null;
    /** Square mark for the collapsed sidebar. */
    mark: ResolvedLogo | null;
    /** Dark-mode lockup, when supplied. */
    dark: ResolvedLogo | null;
    /** Initials fallback (derived from the site title) when no logo exists. */
    initials: string;
    /** True when admin brand is inherited from the public brand set. */
    inherited: boolean;
}
/** What the public site needs for its header/footer/nav. */
export interface ResolvedPublicBrand {
    primary: ResolvedLogo | null;
    mark: ResolvedLogo | null;
    dark: ResolvedLogo | null;
    initials: string;
}
/** Favicon/app-icon metadata for Next.js `metadata.icons`. */
export interface FaviconMetadata {
    /** Primary icon URL (source favicon), cache-busted. */
    icon: string | null;
    /** Apple touch icon URL (falls back to source). */
    apple: string | null;
    /** MIME type of the source icon, used to set the `type` hint. */
    type: string | null;
    /** Generated bundle URLs, when a favicon bundle has been produced. */
    generated: string[];
}
/** Minimal media-asset view the appearance resolver needs. */
export interface BrandAssetLike {
    id: string;
    publicUrl: string;
    mimeType: string;
    width?: number | null;
    height?: number | null;
    fileName?: string | null;
    sizeBytes?: number | null;
}
//# sourceMappingURL=types.d.ts.map