import { CSSProperties } from 'react'; import { ChatBgVariants } from './types'; // topographic — an elegant contour / elevation map. // // The motif is a delicate cartographic contour survey: nested rings suggest two // gentle "peaks" and a shallow "valley", drawn with occasional heavier "index // contour" lines for authenticity, all floating over a soft tonal wash. It is // tuned to be *felt, not read* — line opacities sit well under legibility // thresholds so crisp message text stays comfortably WCAG-AA in both themes. // // SEAMLESS TILING // Each contour system is a `repeating-radial-gradient` whose ring period P is a // clean divisor of its `backgroundSize` tile. A repeating-radial-gradient tiles // seamlessly only when the tile edge falls on a whole number of ring periods, so // every layer below uses tile = N * P. Peak A's fine (32px) and index (128px) // layers share one 256px tile (256 = 8*32 = 2*128) AND one center, so the heavy // index lines land exactly on every 4th fine ring — a true index contour, never // drifting out of register. Peak B tiles 288 = 12*24; the valley tiles 384 = // 8*48. The tonal washes/vignette are single non-repeating gradients sized to // the same tiles, so nothing shows a visible seam. const dark: CSSProperties = { backgroundColor: 'oklch(0.205 0.018 235)', backgroundImage: [ // Peak A — fine contour lines (soft teal), 32px period. 'repeating-radial-gradient(circle at 27% 34%, transparent 0, transparent 26px,' + ' oklch(0.62 0.055 190 / 0.09) 27px, oklch(0.62 0.055 190 / 0.09) 28px, transparent 29px, transparent 32px)', // Peak A — index (heavier) contour every 4th ring, 128px period. 'repeating-radial-gradient(circle at 27% 34%, transparent 0, transparent 122px,' + ' oklch(0.66 0.06 190 / 0.10) 123px, oklch(0.66 0.06 190 / 0.10) 125px, transparent 126px, transparent 128px)', // Peak B — fine contour lines (cooler sage-teal), 24px period. 'repeating-radial-gradient(circle at 78% 72%, transparent 0, transparent 19px,' + ' oklch(0.60 0.05 200 / 0.07) 20px, oklch(0.60 0.05 200 / 0.07) 21px, transparent 22px, transparent 24px)', // Valley — broad shallow rings (very faint), 48px period. 'repeating-radial-gradient(circle at 52% 8%, transparent 0, transparent 42px,' + ' oklch(0.58 0.045 195 / 0.05) 43px, oklch(0.58 0.045 195 / 0.05) 44px, transparent 45px, transparent 48px)', // Tonal wash — lifts the "peaks", sinks the corners for depth. 'radial-gradient(circle at 27% 34%, oklch(0.26 0.03 200 / 0.55) 0%, transparent 46%)', 'radial-gradient(circle at 78% 72%, oklch(0.24 0.028 205 / 0.45) 0%, transparent 44%)', // Vignette — soft edge darkening keeps the field calm behind text. 'radial-gradient(ellipse 120% 130% at 50% 42%, transparent 58%, oklch(0.15 0.02 235 / 0.55) 100%)', ].join(','), backgroundSize: '256px 256px, 256px 256px, 288px 288px, 384px 384px, 100% 100%, 100% 100%, 100% 100%', }; const light: CSSProperties = { backgroundColor: 'oklch(0.965 0.008 85)', backgroundImage: [ // Peak A — fine contour lines (warm graphite/sand), 32px period. 'repeating-radial-gradient(circle at 27% 34%, transparent 0, transparent 26px,' + ' oklch(0.45 0.03 70 / 0.08) 27px, oklch(0.45 0.03 70 / 0.08) 28px, transparent 29px, transparent 32px)', // Peak A — index (heavier) contour every 4th ring, 128px period. 'repeating-radial-gradient(circle at 27% 34%, transparent 0, transparent 122px,' + ' oklch(0.40 0.035 68 / 0.10) 123px, oklch(0.40 0.035 68 / 0.10) 125px, transparent 126px, transparent 128px)', // Peak B — fine contour lines (soft sage-graphite), 24px period. 'repeating-radial-gradient(circle at 78% 72%, transparent 0, transparent 19px,' + ' oklch(0.47 0.028 120 / 0.06) 20px, oklch(0.47 0.028 120 / 0.06) 21px, transparent 22px, transparent 24px)', // Valley — broad shallow rings (very faint), 48px period. 'repeating-radial-gradient(circle at 52% 8%, transparent 0, transparent 42px,' + ' oklch(0.46 0.025 75 / 0.045) 43px, oklch(0.46 0.025 75 / 0.045) 44px, transparent 45px, transparent 48px)', // Tonal wash — warm paper highlights over the "peaks". 'radial-gradient(circle at 27% 34%, oklch(0.985 0.012 85 / 0.60) 0%, transparent 46%)', 'radial-gradient(circle at 78% 72%, oklch(0.945 0.014 95 / 0.45) 0%, transparent 44%)', // Vignette — feather the edges to a slightly deeper sand for depth. 'radial-gradient(ellipse 120% 130% at 50% 42%, transparent 58%, oklch(0.90 0.016 80 / 0.45) 100%)', ].join(','), backgroundSize: '256px 256px, 256px 256px, 288px 288px, 384px 384px, 100% 100%, 100% 100%, 100% 100%', }; export const topographic: ChatBgVariants = { dark, light };