import type { LogoSettings, LogoOptions } from './types.js'; export declare const LOGO_SETTINGS: LogoSettings; /** Color SVG logo (white ▼ on transparent) */ export declare function getColorSVG(): string; /** Monochrome SVG logo (outline ▼) */ export declare function getMonoSVG(): string; /** Tightly cropped color SVG */ export declare function getColorSVGCropped(): string; /** White SVG logo (for dark backgrounds) */ export declare function getWhiteSVG(): string; /** Menu bar SVG (uses currentColor for OS theme) */ export declare function getMenuBarSVG(): string; /** * Favicon SVG — the ▼ solid, taking its tone from the tab. No container. * * A favicon does not get to choose what is behind it: browsers paint the active * tab white in light mode and near-black in dark, so a mark fixed at one tone is * invisible on half of them. An SVG can ask which it landed on, and that is the * whole mechanism — near-black ink on a light tab, white on a dark one, one file * for both. The same `ADAPTIVE` sheet the wordmarks use. * * Solid, because the answer to "will it read at 16px" is area. This was shipped * for a while as a one-device-pixel outline, on the theory that a hairline is * crisp at every size. It is crisp and it is not there: at 16px that outline * paints 9% of the ink the solid does, and — the number that decides it — no * pixel of it ever reaches full opacity. Its darkest is 23% of the way to the * ink colour, so what the tab shows is a faint grey wireframe of a triangle, * whichever scheme resolved. * * It used to sit on a black rounded rect, which solved the tone problem by * giving the mark its own ground. The mark is a triangle; a box around it is a * second shape to recognise, and at tab size the box is most of what you see. * * TRIANGLE, not a second copy of it. This function carried its own path on a * 64-box — so the one place the geometry was supposed to live had a rival, and * moving the mark would have moved everything except the favicon. */ export declare function getFaviconSVG(): string; /** * The ▼ in white, keyed in near-black — the favicon for slots that cannot ask. * * Every raster is one of those. A .png and a .ico carry no media query, so the * scheme is decided when they are written and the tab they land on is not known * then. White fill with a dark rim is what survives both: on a light tab the rim * draws the shape, on a dark one the fill does. * * This is the fallback and not the primary. White-fill-plus-rim on a light * ground is a thin dark outline around a white shape the ground already * supplies — legible, but greyer than ink, which is why favicon.svg resolves * its own tone rather than leaning on the rim. * * `stroke-linejoin="round"`, because a mitred join on a sharp vertex shoots a * spike well past the mark. Measured on this triangle at this stroke width: the * bottom point reaches 12.900 units past the vertex mitred against 6.500 * rounded, and the mitred ink lands at y=97.90 in a 100 box — 2.1 units of * clearance, a third of a device pixel at 16px. All three vertices are near 60°, * so all three spike; the mitre limit does not save it, since the limit clips at * a ratio of 4 and these joins ask for 2. * * Stroke under fill, as two paths rather than `paint-order`: favicons are * rasterised by more than browsers (ico pipelines, resvg, librsvg), and a * property one of them ignores would silently paint the keyline over the mark. */ export declare function getFaviconKeyedSVG(): string; /** Get logo as data URL */ export declare function getLogoDataUrl(options?: LogoOptions): string; /** Get logo as base64 string */ export declare function getLogoBase64(options?: LogoOptions): string; /** Get logo in requested format */ export declare function getLogo(options?: LogoOptions): string; /** The wordmark's own proportions. 63:17 ≈ 3.7:1 — it is a stripe, not a square. */ export declare const WORDMARK_BOX: { width: number; height: number; }; /** LUX wordmark SVG — the letters as paths, white for dark grounds */ export declare function getWordmarkSVG(): string; /** LUX wordmark that follows the ground it lands on — dark ink on light, white on dark. */ export declare function getWordmarkAdaptiveSVG(): string; /** * LUX wordmark centred in a square, for icon slots. * * Legible from about 32px up. Below that the letterforms close; a tab icon at * 16px wants two letters, which is what LX is for. */ export declare function getWordmarkSquareSVG(options?: { fill?: string; background?: string; inset?: number; }): string; /** LUX wordmark with metal gradient */ export declare function getWordmarkGradientSVG(): string; /** LX's own proportions. 43:17 ≈ 2.5:1 — squarer than the word, which is why it fits a tab. */ export declare const LX_BOX: { width: number; height: number; }; /** * LX, taking its colour from whatever draws it. * * `currentColor` rather than a fixed white, because the exchange puts this in a * header where the ink is already decided. Inline it into the DOM for that to * work — through an ``, or as a file on disk, there is no colour to take * and it paints black. Those want getLXAdaptiveSVG. */ export declare function getLXSVG(): string; /** LX that follows the ground it lands on — dark ink on light, white on dark. */ export declare function getLXAdaptiveSVG(): string; /** * LX centred in a square, for icon slots. * * Two letters at 2.5:1 clear a 16px tab where the four-letter stripe does not. */ export declare function getLXSquareSVG(options?: { fill?: string; background?: string; inset?: number; }): string; export declare const logo: string; export declare const logoMono: string; export declare const logoWhite: string; export declare const wordmark: string; export declare const wordmarkGradient: string; export declare const favicon: string; export declare const faviconKeyed: string; export declare const lx: string; export declare const logoDataUrl: string; export declare const logoMonoDataUrl: string; export declare const logoWhiteDataUrl: string; export declare const luxLogo: string; export declare const luxLogoMono: string; export declare const luxLogoWhite: string; export declare const luxWordmark: string; export declare const luxWordmarkGradient: string; export declare const luxFavicon: string; export declare const luxFaviconKeyed: string; export declare const luxLogoDataUrl: string; export declare const luxLogoMonoDataUrl: string; export declare const luxLogoWhiteDataUrl: string; /** * Interactive animated mark — load (assemble) → hover (one graceful turn, * returns to rest) → press (squash). Pure CSS, no JS. Inline this SVG into * the DOM (not ) for the hover/press interactions to fire. */ export declare function getAnimatedSVG(): string; /** Animated mark as a data: URL (load animation runs even in ). */ export declare function getAnimatedDataUrl(): string; export declare const luxLogoAnimated = "\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n"; export declare const luxLogoAnimatedDataUrl: string; /** * Favicon in one fixed tone, for the .ico and .png fallbacks a raster * cannot carry a media query into. #7a7f85 is the tone that clears 3:1 * against both a light and a dark tab strip; white would vanish on one, * near-black on the other. */ export declare function getFaviconRasterSVG(): string; //# sourceMappingURL=logos.d.ts.map