import { CSSProperties } from 'react'; import { ChatBgVariants } from './types'; // crosshatch — fine pen-and-ink engraving, like a banknote guilloché. // Three hatch directions (right-leaning, left-leaning, near-horizontal cross) // are layered at low opacity so the eye reads a woven ink texture rather than // discrete stripes. Each direction uses a slightly different pitch so the // combined pattern never lines up into a coarse moire, and a barely-there // diagonal tonal gradient lends etched depth. // // Seamless tiling: each hatch is a `repeating-linear-gradient`, which repeats // infinitely by definition, so the layers are left at `backgroundSize: auto` // and tile with no visible seam at any element size (constraining a diagonal // repeat to a small square would clip it mid-period and create a seam). The // tonal wash is a single non-repeating gradient stretched to `cover`. // // Opacities are kept in the 0.02–0.05 range so the texture is felt, not read — // crisp message text sits comfortably above it in both themes (WCAG-AA safe). const dark: CSSProperties = { // near-black base with a whisper of cool blue so silver ink reads as engraving backgroundColor: 'oklch(0.16 0.01 255)', backgroundImage: [ // faint tonal gradient — top-left slightly lifted for etched depth 'linear-gradient(135deg, oklch(0.20 0.012 255 / 0.5) 0%, oklch(0.15 0.01 255 / 0) 55%, oklch(0.14 0.008 260 / 0.45) 100%)', // primary hatch, right-leaning fine lines (cool silver ink), ~9px pitch 'repeating-linear-gradient(45deg, oklch(0.75 0.02 250 / 0.05) 0, oklch(0.75 0.02 250 / 0.05) 0.75px, transparent 0.75px, transparent 9px)', // secondary hatch, left-leaning — the cross of the crosshatch 'repeating-linear-gradient(135deg, oklch(0.75 0.02 250 / 0.045) 0, oklch(0.75 0.02 250 / 0.045) 0.75px, transparent 0.75px, transparent 9px)', // tertiary hatch, right-leaning at a denser pitch for engraved richness 'repeating-linear-gradient(45deg, oklch(0.78 0.018 250 / 0.02) 0, oklch(0.78 0.018 250 / 0.02) 0.5px, transparent 0.5px, transparent 4.5px)', // quaternary near-horizontal fill line, very faint, weaves the mesh together 'repeating-linear-gradient(20deg, oklch(0.72 0.015 255 / 0.018) 0, oklch(0.72 0.015 255 / 0.018) 0.5px, transparent 0.5px, transparent 13px)', ].join(','), backgroundSize: 'cover, auto, auto, auto, auto', }; const light: CSSProperties = { // warm paper base — graphite ink on cream stock backgroundColor: 'oklch(0.975 0.006 85)', backgroundImage: [ // faint tonal wash — soft warm depth for aged-paper feel 'linear-gradient(135deg, oklch(0.94 0.008 85 / 0.55) 0%, oklch(0.98 0.005 85 / 0) 55%, oklch(0.93 0.01 80 / 0.5) 100%)', // primary hatch, right-leaning graphite lines, ~9px pitch 'repeating-linear-gradient(45deg, oklch(0.42 0.01 265 / 0.055) 0, oklch(0.42 0.01 265 / 0.055) 0.75px, transparent 0.75px, transparent 9px)', // secondary hatch, left-leaning — the cross 'repeating-linear-gradient(135deg, oklch(0.42 0.01 265 / 0.05) 0, oklch(0.42 0.01 265 / 0.05) 0.75px, transparent 0.75px, transparent 9px)', // tertiary denser right-leaning hatch for engraved fineness 'repeating-linear-gradient(45deg, oklch(0.40 0.012 265 / 0.025) 0, oklch(0.40 0.012 265 / 0.025) 0.5px, transparent 0.5px, transparent 4.5px)', // quaternary near-horizontal weave line, barely-there 'repeating-linear-gradient(20deg, oklch(0.45 0.01 260 / 0.022) 0, oklch(0.45 0.01 260 / 0.022) 0.5px, transparent 0.5px, transparent 13px)', ].join(','), backgroundSize: 'cover, auto, auto, auto, auto', }; export const crosshatch: ChatBgVariants = { dark, light };