@ugurdemirel/landcraft 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.cjs","sources":["../../../node_modules/.pnpm/clsx@2.1.1/node_modules/clsx/dist/clsx.mjs","../../../node_modules/.pnpm/tailwind-merge@2.6.1/node_modules/tailwind-merge/dist/bundle-mjs.mjs","../src/utils/cn.ts","../src/utils/contrast.ts","../src/components/Button.tsx","../src/components/Badge.tsx","../src/components/Card.tsx","../src/components/Container.tsx","../src/components/Section.tsx","../src/utils/useTokenForeground.ts","../src/components/Hero.tsx","../src/icons.tsx","../src/components/Navbar.tsx","../src/components/MegaMenu.tsx","../src/components/LogoCloud.tsx","../src/components/Features.tsx","../src/components/Stats.tsx","../src/components/Pricing.tsx","../src/components/Testimonials.tsx","../src/components/CTA.tsx","../src/components/FAQ.tsx","../src/components/Footer.tsx","../src/components/Newsletter.tsx","../src/components/Prose.tsx","../src/components/Blog.tsx"],"sourcesContent":["function r(e){var t,f,n=\"\";if(\"string\"==typeof e||\"number\"==typeof e)n+=e;else if(\"object\"==typeof e)if(Array.isArray(e)){var o=e.length;for(t=0;t<o;t++)e[t]&&(f=r(e[t]))&&(n&&(n+=\" \"),n+=f)}else for(f in e)e[f]&&(n&&(n+=\" \"),n+=f);return n}export function clsx(){for(var e,t,f=0,n=\"\",o=arguments.length;f<o;f++)(e=arguments[f])&&(t=r(e))&&(n&&(n+=\" \"),n+=t);return n}export default clsx;","const CLASS_PART_SEPARATOR = '-';\nconst createClassGroupUtils = config => {\n const classMap = createClassMap(config);\n const {\n conflictingClassGroups,\n conflictingClassGroupModifiers\n } = config;\n const getClassGroupId = className => {\n const classParts = className.split(CLASS_PART_SEPARATOR);\n // Classes like `-inset-1` produce an empty string as first classPart. We assume that classes for negative values are used correctly and remove it from classParts.\n if (classParts[0] === '' && classParts.length !== 1) {\n classParts.shift();\n }\n return getGroupRecursive(classParts, classMap) || getGroupIdForArbitraryProperty(className);\n };\n const getConflictingClassGroupIds = (classGroupId, hasPostfixModifier) => {\n const conflicts = conflictingClassGroups[classGroupId] || [];\n if (hasPostfixModifier && conflictingClassGroupModifiers[classGroupId]) {\n return [...conflicts, ...conflictingClassGroupModifiers[classGroupId]];\n }\n return conflicts;\n };\n return {\n getClassGroupId,\n getConflictingClassGroupIds\n };\n};\nconst getGroupRecursive = (classParts, classPartObject) => {\n if (classParts.length === 0) {\n return classPartObject.classGroupId;\n }\n const currentClassPart = classParts[0];\n const nextClassPartObject = classPartObject.nextPart.get(currentClassPart);\n const classGroupFromNextClassPart = nextClassPartObject ? getGroupRecursive(classParts.slice(1), nextClassPartObject) : undefined;\n if (classGroupFromNextClassPart) {\n return classGroupFromNextClassPart;\n }\n if (classPartObject.validators.length === 0) {\n return undefined;\n }\n const classRest = classParts.join(CLASS_PART_SEPARATOR);\n return classPartObject.validators.find(({\n validator\n }) => validator(classRest))?.classGroupId;\n};\nconst arbitraryPropertyRegex = /^\\[(.+)\\]$/;\nconst getGroupIdForArbitraryProperty = className => {\n if (arbitraryPropertyRegex.test(className)) {\n const arbitraryPropertyClassName = arbitraryPropertyRegex.exec(className)[1];\n const property = arbitraryPropertyClassName?.substring(0, arbitraryPropertyClassName.indexOf(':'));\n if (property) {\n // I use two dots here because one dot is used as prefix for class groups in plugins\n return 'arbitrary..' + property;\n }\n }\n};\n/**\n * Exported for testing only\n */\nconst createClassMap = config => {\n const {\n theme,\n prefix\n } = config;\n const classMap = {\n nextPart: new Map(),\n validators: []\n };\n const prefixedClassGroupEntries = getPrefixedClassGroupEntries(Object.entries(config.classGroups), prefix);\n prefixedClassGroupEntries.forEach(([classGroupId, classGroup]) => {\n processClassesRecursively(classGroup, classMap, classGroupId, theme);\n });\n return classMap;\n};\nconst processClassesRecursively = (classGroup, classPartObject, classGroupId, theme) => {\n classGroup.forEach(classDefinition => {\n if (typeof classDefinition === 'string') {\n const classPartObjectToEdit = classDefinition === '' ? classPartObject : getPart(classPartObject, classDefinition);\n classPartObjectToEdit.classGroupId = classGroupId;\n return;\n }\n if (typeof classDefinition === 'function') {\n if (isThemeGetter(classDefinition)) {\n processClassesRecursively(classDefinition(theme), classPartObject, classGroupId, theme);\n return;\n }\n classPartObject.validators.push({\n validator: classDefinition,\n classGroupId\n });\n return;\n }\n Object.entries(classDefinition).forEach(([key, classGroup]) => {\n processClassesRecursively(classGroup, getPart(classPartObject, key), classGroupId, theme);\n });\n });\n};\nconst getPart = (classPartObject, path) => {\n let currentClassPartObject = classPartObject;\n path.split(CLASS_PART_SEPARATOR).forEach(pathPart => {\n if (!currentClassPartObject.nextPart.has(pathPart)) {\n currentClassPartObject.nextPart.set(pathPart, {\n nextPart: new Map(),\n validators: []\n });\n }\n currentClassPartObject = currentClassPartObject.nextPart.get(pathPart);\n });\n return currentClassPartObject;\n};\nconst isThemeGetter = func => func.isThemeGetter;\nconst getPrefixedClassGroupEntries = (classGroupEntries, prefix) => {\n if (!prefix) {\n return classGroupEntries;\n }\n return classGroupEntries.map(([classGroupId, classGroup]) => {\n const prefixedClassGroup = classGroup.map(classDefinition => {\n if (typeof classDefinition === 'string') {\n return prefix + classDefinition;\n }\n if (typeof classDefinition === 'object') {\n return Object.fromEntries(Object.entries(classDefinition).map(([key, value]) => [prefix + key, value]));\n }\n return classDefinition;\n });\n return [classGroupId, prefixedClassGroup];\n });\n};\n\n// LRU cache inspired from hashlru (https://github.com/dominictarr/hashlru/blob/v1.0.4/index.js) but object replaced with Map to improve performance\nconst createLruCache = maxCacheSize => {\n if (maxCacheSize < 1) {\n return {\n get: () => undefined,\n set: () => {}\n };\n }\n let cacheSize = 0;\n let cache = new Map();\n let previousCache = new Map();\n const update = (key, value) => {\n cache.set(key, value);\n cacheSize++;\n if (cacheSize > maxCacheSize) {\n cacheSize = 0;\n previousCache = cache;\n cache = new Map();\n }\n };\n return {\n get(key) {\n let value = cache.get(key);\n if (value !== undefined) {\n return value;\n }\n if ((value = previousCache.get(key)) !== undefined) {\n update(key, value);\n return value;\n }\n },\n set(key, value) {\n if (cache.has(key)) {\n cache.set(key, value);\n } else {\n update(key, value);\n }\n }\n };\n};\nconst IMPORTANT_MODIFIER = '!';\nconst createParseClassName = config => {\n const {\n separator,\n experimentalParseClassName\n } = config;\n const isSeparatorSingleCharacter = separator.length === 1;\n const firstSeparatorCharacter = separator[0];\n const separatorLength = separator.length;\n // parseClassName inspired by https://github.com/tailwindlabs/tailwindcss/blob/v3.2.2/src/util/splitAtTopLevelOnly.js\n const parseClassName = className => {\n const modifiers = [];\n let bracketDepth = 0;\n let modifierStart = 0;\n let postfixModifierPosition;\n for (let index = 0; index < className.length; index++) {\n let currentCharacter = className[index];\n if (bracketDepth === 0) {\n if (currentCharacter === firstSeparatorCharacter && (isSeparatorSingleCharacter || className.slice(index, index + separatorLength) === separator)) {\n modifiers.push(className.slice(modifierStart, index));\n modifierStart = index + separatorLength;\n continue;\n }\n if (currentCharacter === '/') {\n postfixModifierPosition = index;\n continue;\n }\n }\n if (currentCharacter === '[') {\n bracketDepth++;\n } else if (currentCharacter === ']') {\n bracketDepth--;\n }\n }\n const baseClassNameWithImportantModifier = modifiers.length === 0 ? className : className.substring(modifierStart);\n const hasImportantModifier = baseClassNameWithImportantModifier.startsWith(IMPORTANT_MODIFIER);\n const baseClassName = hasImportantModifier ? baseClassNameWithImportantModifier.substring(1) : baseClassNameWithImportantModifier;\n const maybePostfixModifierPosition = postfixModifierPosition && postfixModifierPosition > modifierStart ? postfixModifierPosition - modifierStart : undefined;\n return {\n modifiers,\n hasImportantModifier,\n baseClassName,\n maybePostfixModifierPosition\n };\n };\n if (experimentalParseClassName) {\n return className => experimentalParseClassName({\n className,\n parseClassName\n });\n }\n return parseClassName;\n};\n/**\n * Sorts modifiers according to following schema:\n * - Predefined modifiers are sorted alphabetically\n * - When an arbitrary variant appears, it must be preserved which modifiers are before and after it\n */\nconst sortModifiers = modifiers => {\n if (modifiers.length <= 1) {\n return modifiers;\n }\n const sortedModifiers = [];\n let unsortedModifiers = [];\n modifiers.forEach(modifier => {\n const isArbitraryVariant = modifier[0] === '[';\n if (isArbitraryVariant) {\n sortedModifiers.push(...unsortedModifiers.sort(), modifier);\n unsortedModifiers = [];\n } else {\n unsortedModifiers.push(modifier);\n }\n });\n sortedModifiers.push(...unsortedModifiers.sort());\n return sortedModifiers;\n};\nconst createConfigUtils = config => ({\n cache: createLruCache(config.cacheSize),\n parseClassName: createParseClassName(config),\n ...createClassGroupUtils(config)\n});\nconst SPLIT_CLASSES_REGEX = /\\s+/;\nconst mergeClassList = (classList, configUtils) => {\n const {\n parseClassName,\n getClassGroupId,\n getConflictingClassGroupIds\n } = configUtils;\n /**\n * Set of classGroupIds in following format:\n * `{importantModifier}{variantModifiers}{classGroupId}`\n * @example 'float'\n * @example 'hover:focus:bg-color'\n * @example 'md:!pr'\n */\n const classGroupsInConflict = [];\n const classNames = classList.trim().split(SPLIT_CLASSES_REGEX);\n let result = '';\n for (let index = classNames.length - 1; index >= 0; index -= 1) {\n const originalClassName = classNames[index];\n const {\n modifiers,\n hasImportantModifier,\n baseClassName,\n maybePostfixModifierPosition\n } = parseClassName(originalClassName);\n let hasPostfixModifier = Boolean(maybePostfixModifierPosition);\n let classGroupId = getClassGroupId(hasPostfixModifier ? baseClassName.substring(0, maybePostfixModifierPosition) : baseClassName);\n if (!classGroupId) {\n if (!hasPostfixModifier) {\n // Not a Tailwind class\n result = originalClassName + (result.length > 0 ? ' ' + result : result);\n continue;\n }\n classGroupId = getClassGroupId(baseClassName);\n if (!classGroupId) {\n // Not a Tailwind class\n result = originalClassName + (result.length > 0 ? ' ' + result : result);\n continue;\n }\n hasPostfixModifier = false;\n }\n const variantModifier = sortModifiers(modifiers).join(':');\n const modifierId = hasImportantModifier ? variantModifier + IMPORTANT_MODIFIER : variantModifier;\n const classId = modifierId + classGroupId;\n if (classGroupsInConflict.includes(classId)) {\n // Tailwind class omitted due to conflict\n continue;\n }\n classGroupsInConflict.push(classId);\n const conflictGroups = getConflictingClassGroupIds(classGroupId, hasPostfixModifier);\n for (let i = 0; i < conflictGroups.length; ++i) {\n const group = conflictGroups[i];\n classGroupsInConflict.push(modifierId + group);\n }\n // Tailwind class not in conflict\n result = originalClassName + (result.length > 0 ? ' ' + result : result);\n }\n return result;\n};\n\n/**\n * The code in this file is copied from https://github.com/lukeed/clsx and modified to suit the needs of tailwind-merge better.\n *\n * Specifically:\n * - Runtime code from https://github.com/lukeed/clsx/blob/v1.2.1/src/index.js\n * - TypeScript types from https://github.com/lukeed/clsx/blob/v1.2.1/clsx.d.ts\n *\n * Original code has MIT license: Copyright (c) Luke Edwards <luke.edwards05@gmail.com> (lukeed.com)\n */\nfunction twJoin() {\n let index = 0;\n let argument;\n let resolvedValue;\n let string = '';\n while (index < arguments.length) {\n if (argument = arguments[index++]) {\n if (resolvedValue = toValue(argument)) {\n string && (string += ' ');\n string += resolvedValue;\n }\n }\n }\n return string;\n}\nconst toValue = mix => {\n if (typeof mix === 'string') {\n return mix;\n }\n let resolvedValue;\n let string = '';\n for (let k = 0; k < mix.length; k++) {\n if (mix[k]) {\n if (resolvedValue = toValue(mix[k])) {\n string && (string += ' ');\n string += resolvedValue;\n }\n }\n }\n return string;\n};\nfunction createTailwindMerge(createConfigFirst, ...createConfigRest) {\n let configUtils;\n let cacheGet;\n let cacheSet;\n let functionToCall = initTailwindMerge;\n function initTailwindMerge(classList) {\n const config = createConfigRest.reduce((previousConfig, createConfigCurrent) => createConfigCurrent(previousConfig), createConfigFirst());\n configUtils = createConfigUtils(config);\n cacheGet = configUtils.cache.get;\n cacheSet = configUtils.cache.set;\n functionToCall = tailwindMerge;\n return tailwindMerge(classList);\n }\n function tailwindMerge(classList) {\n const cachedResult = cacheGet(classList);\n if (cachedResult) {\n return cachedResult;\n }\n const result = mergeClassList(classList, configUtils);\n cacheSet(classList, result);\n return result;\n }\n return function callTailwindMerge() {\n return functionToCall(twJoin.apply(null, arguments));\n };\n}\nconst fromTheme = key => {\n const themeGetter = theme => theme[key] || [];\n themeGetter.isThemeGetter = true;\n return themeGetter;\n};\nconst arbitraryValueRegex = /^\\[(?:([a-z-]+):)?(.+)\\]$/i;\nconst fractionRegex = /^\\d+\\/\\d+$/;\nconst stringLengths = /*#__PURE__*/new Set(['px', 'full', 'screen']);\nconst tshirtUnitRegex = /^(\\d+(\\.\\d+)?)?(xs|sm|md|lg|xl)$/;\nconst lengthUnitRegex = /\\d+(%|px|r?em|[sdl]?v([hwib]|min|max)|pt|pc|in|cm|mm|cap|ch|ex|r?lh|cq(w|h|i|b|min|max))|\\b(calc|min|max|clamp)\\(.+\\)|^0$/;\nconst colorFunctionRegex = /^(rgba?|hsla?|hwb|(ok)?(lab|lch)|color-mix)\\(.+\\)$/;\n// Shadow always begins with x and y offset separated by underscore optionally prepended by inset\nconst shadowRegex = /^(inset_)?-?((\\d+)?\\.?(\\d+)[a-z]+|0)_-?((\\d+)?\\.?(\\d+)[a-z]+|0)/;\nconst imageRegex = /^(url|image|image-set|cross-fade|element|(repeating-)?(linear|radial|conic)-gradient)\\(.+\\)$/;\nconst isLength = value => isNumber(value) || stringLengths.has(value) || fractionRegex.test(value);\nconst isArbitraryLength = value => getIsArbitraryValue(value, 'length', isLengthOnly);\nconst isNumber = value => Boolean(value) && !Number.isNaN(Number(value));\nconst isArbitraryNumber = value => getIsArbitraryValue(value, 'number', isNumber);\nconst isInteger = value => Boolean(value) && Number.isInteger(Number(value));\nconst isPercent = value => value.endsWith('%') && isNumber(value.slice(0, -1));\nconst isArbitraryValue = value => arbitraryValueRegex.test(value);\nconst isTshirtSize = value => tshirtUnitRegex.test(value);\nconst sizeLabels = /*#__PURE__*/new Set(['length', 'size', 'percentage']);\nconst isArbitrarySize = value => getIsArbitraryValue(value, sizeLabels, isNever);\nconst isArbitraryPosition = value => getIsArbitraryValue(value, 'position', isNever);\nconst imageLabels = /*#__PURE__*/new Set(['image', 'url']);\nconst isArbitraryImage = value => getIsArbitraryValue(value, imageLabels, isImage);\nconst isArbitraryShadow = value => getIsArbitraryValue(value, '', isShadow);\nconst isAny = () => true;\nconst getIsArbitraryValue = (value, label, testValue) => {\n const result = arbitraryValueRegex.exec(value);\n if (result) {\n if (result[1]) {\n return typeof label === 'string' ? result[1] === label : label.has(result[1]);\n }\n return testValue(result[2]);\n }\n return false;\n};\nconst isLengthOnly = value =>\n// `colorFunctionRegex` check is necessary because color functions can have percentages in them which which would be incorrectly classified as lengths.\n// For example, `hsl(0 0% 0%)` would be classified as a length without this check.\n// I could also use lookbehind assertion in `lengthUnitRegex` but that isn't supported widely enough.\nlengthUnitRegex.test(value) && !colorFunctionRegex.test(value);\nconst isNever = () => false;\nconst isShadow = value => shadowRegex.test(value);\nconst isImage = value => imageRegex.test(value);\nconst validators = /*#__PURE__*/Object.defineProperty({\n __proto__: null,\n isAny,\n isArbitraryImage,\n isArbitraryLength,\n isArbitraryNumber,\n isArbitraryPosition,\n isArbitraryShadow,\n isArbitrarySize,\n isArbitraryValue,\n isInteger,\n isLength,\n isNumber,\n isPercent,\n isTshirtSize\n}, Symbol.toStringTag, {\n value: 'Module'\n});\nconst getDefaultConfig = () => {\n const colors = fromTheme('colors');\n const spacing = fromTheme('spacing');\n const blur = fromTheme('blur');\n const brightness = fromTheme('brightness');\n const borderColor = fromTheme('borderColor');\n const borderRadius = fromTheme('borderRadius');\n const borderSpacing = fromTheme('borderSpacing');\n const borderWidth = fromTheme('borderWidth');\n const contrast = fromTheme('contrast');\n const grayscale = fromTheme('grayscale');\n const hueRotate = fromTheme('hueRotate');\n const invert = fromTheme('invert');\n const gap = fromTheme('gap');\n const gradientColorStops = fromTheme('gradientColorStops');\n const gradientColorStopPositions = fromTheme('gradientColorStopPositions');\n const inset = fromTheme('inset');\n const margin = fromTheme('margin');\n const opacity = fromTheme('opacity');\n const padding = fromTheme('padding');\n const saturate = fromTheme('saturate');\n const scale = fromTheme('scale');\n const sepia = fromTheme('sepia');\n const skew = fromTheme('skew');\n const space = fromTheme('space');\n const translate = fromTheme('translate');\n const getOverscroll = () => ['auto', 'contain', 'none'];\n const getOverflow = () => ['auto', 'hidden', 'clip', 'visible', 'scroll'];\n const getSpacingWithAutoAndArbitrary = () => ['auto', isArbitraryValue, spacing];\n const getSpacingWithArbitrary = () => [isArbitraryValue, spacing];\n const getLengthWithEmptyAndArbitrary = () => ['', isLength, isArbitraryLength];\n const getNumberWithAutoAndArbitrary = () => ['auto', isNumber, isArbitraryValue];\n const getPositions = () => ['bottom', 'center', 'left', 'left-bottom', 'left-top', 'right', 'right-bottom', 'right-top', 'top'];\n const getLineStyles = () => ['solid', 'dashed', 'dotted', 'double', 'none'];\n const getBlendModes = () => ['normal', 'multiply', 'screen', 'overlay', 'darken', 'lighten', 'color-dodge', 'color-burn', 'hard-light', 'soft-light', 'difference', 'exclusion', 'hue', 'saturation', 'color', 'luminosity'];\n const getAlign = () => ['start', 'end', 'center', 'between', 'around', 'evenly', 'stretch'];\n const getZeroAndEmpty = () => ['', '0', isArbitraryValue];\n const getBreaks = () => ['auto', 'avoid', 'all', 'avoid-page', 'page', 'left', 'right', 'column'];\n const getNumberAndArbitrary = () => [isNumber, isArbitraryValue];\n return {\n cacheSize: 500,\n separator: ':',\n theme: {\n colors: [isAny],\n spacing: [isLength, isArbitraryLength],\n blur: ['none', '', isTshirtSize, isArbitraryValue],\n brightness: getNumberAndArbitrary(),\n borderColor: [colors],\n borderRadius: ['none', '', 'full', isTshirtSize, isArbitraryValue],\n borderSpacing: getSpacingWithArbitrary(),\n borderWidth: getLengthWithEmptyAndArbitrary(),\n contrast: getNumberAndArbitrary(),\n grayscale: getZeroAndEmpty(),\n hueRotate: getNumberAndArbitrary(),\n invert: getZeroAndEmpty(),\n gap: getSpacingWithArbitrary(),\n gradientColorStops: [colors],\n gradientColorStopPositions: [isPercent, isArbitraryLength],\n inset: getSpacingWithAutoAndArbitrary(),\n margin: getSpacingWithAutoAndArbitrary(),\n opacity: getNumberAndArbitrary(),\n padding: getSpacingWithArbitrary(),\n saturate: getNumberAndArbitrary(),\n scale: getNumberAndArbitrary(),\n sepia: getZeroAndEmpty(),\n skew: getNumberAndArbitrary(),\n space: getSpacingWithArbitrary(),\n translate: getSpacingWithArbitrary()\n },\n classGroups: {\n // Layout\n /**\n * Aspect Ratio\n * @see https://tailwindcss.com/docs/aspect-ratio\n */\n aspect: [{\n aspect: ['auto', 'square', 'video', isArbitraryValue]\n }],\n /**\n * Container\n * @see https://tailwindcss.com/docs/container\n */\n container: ['container'],\n /**\n * Columns\n * @see https://tailwindcss.com/docs/columns\n */\n columns: [{\n columns: [isTshirtSize]\n }],\n /**\n * Break After\n * @see https://tailwindcss.com/docs/break-after\n */\n 'break-after': [{\n 'break-after': getBreaks()\n }],\n /**\n * Break Before\n * @see https://tailwindcss.com/docs/break-before\n */\n 'break-before': [{\n 'break-before': getBreaks()\n }],\n /**\n * Break Inside\n * @see https://tailwindcss.com/docs/break-inside\n */\n 'break-inside': [{\n 'break-inside': ['auto', 'avoid', 'avoid-page', 'avoid-column']\n }],\n /**\n * Box Decoration Break\n * @see https://tailwindcss.com/docs/box-decoration-break\n */\n 'box-decoration': [{\n 'box-decoration': ['slice', 'clone']\n }],\n /**\n * Box Sizing\n * @see https://tailwindcss.com/docs/box-sizing\n */\n box: [{\n box: ['border', 'content']\n }],\n /**\n * Display\n * @see https://tailwindcss.com/docs/display\n */\n display: ['block', 'inline-block', 'inline', 'flex', 'inline-flex', 'table', 'inline-table', 'table-caption', 'table-cell', 'table-column', 'table-column-group', 'table-footer-group', 'table-header-group', 'table-row-group', 'table-row', 'flow-root', 'grid', 'inline-grid', 'contents', 'list-item', 'hidden'],\n /**\n * Floats\n * @see https://tailwindcss.com/docs/float\n */\n float: [{\n float: ['right', 'left', 'none', 'start', 'end']\n }],\n /**\n * Clear\n * @see https://tailwindcss.com/docs/clear\n */\n clear: [{\n clear: ['left', 'right', 'both', 'none', 'start', 'end']\n }],\n /**\n * Isolation\n * @see https://tailwindcss.com/docs/isolation\n */\n isolation: ['isolate', 'isolation-auto'],\n /**\n * Object Fit\n * @see https://tailwindcss.com/docs/object-fit\n */\n 'object-fit': [{\n object: ['contain', 'cover', 'fill', 'none', 'scale-down']\n }],\n /**\n * Object Position\n * @see https://tailwindcss.com/docs/object-position\n */\n 'object-position': [{\n object: [...getPositions(), isArbitraryValue]\n }],\n /**\n * Overflow\n * @see https://tailwindcss.com/docs/overflow\n */\n overflow: [{\n overflow: getOverflow()\n }],\n /**\n * Overflow X\n * @see https://tailwindcss.com/docs/overflow\n */\n 'overflow-x': [{\n 'overflow-x': getOverflow()\n }],\n /**\n * Overflow Y\n * @see https://tailwindcss.com/docs/overflow\n */\n 'overflow-y': [{\n 'overflow-y': getOverflow()\n }],\n /**\n * Overscroll Behavior\n * @see https://tailwindcss.com/docs/overscroll-behavior\n */\n overscroll: [{\n overscroll: getOverscroll()\n }],\n /**\n * Overscroll Behavior X\n * @see https://tailwindcss.com/docs/overscroll-behavior\n */\n 'overscroll-x': [{\n 'overscroll-x': getOverscroll()\n }],\n /**\n * Overscroll Behavior Y\n * @see https://tailwindcss.com/docs/overscroll-behavior\n */\n 'overscroll-y': [{\n 'overscroll-y': getOverscroll()\n }],\n /**\n * Position\n * @see https://tailwindcss.com/docs/position\n */\n position: ['static', 'fixed', 'absolute', 'relative', 'sticky'],\n /**\n * Top / Right / Bottom / Left\n * @see https://tailwindcss.com/docs/top-right-bottom-left\n */\n inset: [{\n inset: [inset]\n }],\n /**\n * Right / Left\n * @see https://tailwindcss.com/docs/top-right-bottom-left\n */\n 'inset-x': [{\n 'inset-x': [inset]\n }],\n /**\n * Top / Bottom\n * @see https://tailwindcss.com/docs/top-right-bottom-left\n */\n 'inset-y': [{\n 'inset-y': [inset]\n }],\n /**\n * Start\n * @see https://tailwindcss.com/docs/top-right-bottom-left\n */\n start: [{\n start: [inset]\n }],\n /**\n * End\n * @see https://tailwindcss.com/docs/top-right-bottom-left\n */\n end: [{\n end: [inset]\n }],\n /**\n * Top\n * @see https://tailwindcss.com/docs/top-right-bottom-left\n */\n top: [{\n top: [inset]\n }],\n /**\n * Right\n * @see https://tailwindcss.com/docs/top-right-bottom-left\n */\n right: [{\n right: [inset]\n }],\n /**\n * Bottom\n * @see https://tailwindcss.com/docs/top-right-bottom-left\n */\n bottom: [{\n bottom: [inset]\n }],\n /**\n * Left\n * @see https://tailwindcss.com/docs/top-right-bottom-left\n */\n left: [{\n left: [inset]\n }],\n /**\n * Visibility\n * @see https://tailwindcss.com/docs/visibility\n */\n visibility: ['visible', 'invisible', 'collapse'],\n /**\n * Z-Index\n * @see https://tailwindcss.com/docs/z-index\n */\n z: [{\n z: ['auto', isInteger, isArbitraryValue]\n }],\n // Flexbox and Grid\n /**\n * Flex Basis\n * @see https://tailwindcss.com/docs/flex-basis\n */\n basis: [{\n basis: getSpacingWithAutoAndArbitrary()\n }],\n /**\n * Flex Direction\n * @see https://tailwindcss.com/docs/flex-direction\n */\n 'flex-direction': [{\n flex: ['row', 'row-reverse', 'col', 'col-reverse']\n }],\n /**\n * Flex Wrap\n * @see https://tailwindcss.com/docs/flex-wrap\n */\n 'flex-wrap': [{\n flex: ['wrap', 'wrap-reverse', 'nowrap']\n }],\n /**\n * Flex\n * @see https://tailwindcss.com/docs/flex\n */\n flex: [{\n flex: ['1', 'auto', 'initial', 'none', isArbitraryValue]\n }],\n /**\n * Flex Grow\n * @see https://tailwindcss.com/docs/flex-grow\n */\n grow: [{\n grow: getZeroAndEmpty()\n }],\n /**\n * Flex Shrink\n * @see https://tailwindcss.com/docs/flex-shrink\n */\n shrink: [{\n shrink: getZeroAndEmpty()\n }],\n /**\n * Order\n * @see https://tailwindcss.com/docs/order\n */\n order: [{\n order: ['first', 'last', 'none', isInteger, isArbitraryValue]\n }],\n /**\n * Grid Template Columns\n * @see https://tailwindcss.com/docs/grid-template-columns\n */\n 'grid-cols': [{\n 'grid-cols': [isAny]\n }],\n /**\n * Grid Column Start / End\n * @see https://tailwindcss.com/docs/grid-column\n */\n 'col-start-end': [{\n col: ['auto', {\n span: ['full', isInteger, isArbitraryValue]\n }, isArbitraryValue]\n }],\n /**\n * Grid Column Start\n * @see https://tailwindcss.com/docs/grid-column\n */\n 'col-start': [{\n 'col-start': getNumberWithAutoAndArbitrary()\n }],\n /**\n * Grid Column End\n * @see https://tailwindcss.com/docs/grid-column\n */\n 'col-end': [{\n 'col-end': getNumberWithAutoAndArbitrary()\n }],\n /**\n * Grid Template Rows\n * @see https://tailwindcss.com/docs/grid-template-rows\n */\n 'grid-rows': [{\n 'grid-rows': [isAny]\n }],\n /**\n * Grid Row Start / End\n * @see https://tailwindcss.com/docs/grid-row\n */\n 'row-start-end': [{\n row: ['auto', {\n span: [isInteger, isArbitraryValue]\n }, isArbitraryValue]\n }],\n /**\n * Grid Row Start\n * @see https://tailwindcss.com/docs/grid-row\n */\n 'row-start': [{\n 'row-start': getNumberWithAutoAndArbitrary()\n }],\n /**\n * Grid Row End\n * @see https://tailwindcss.com/docs/grid-row\n */\n 'row-end': [{\n 'row-end': getNumberWithAutoAndArbitrary()\n }],\n /**\n * Grid Auto Flow\n * @see https://tailwindcss.com/docs/grid-auto-flow\n */\n 'grid-flow': [{\n 'grid-flow': ['row', 'col', 'dense', 'row-dense', 'col-dense']\n }],\n /**\n * Grid Auto Columns\n * @see https://tailwindcss.com/docs/grid-auto-columns\n */\n 'auto-cols': [{\n 'auto-cols': ['auto', 'min', 'max', 'fr', isArbitraryValue]\n }],\n /**\n * Grid Auto Rows\n * @see https://tailwindcss.com/docs/grid-auto-rows\n */\n 'auto-rows': [{\n 'auto-rows': ['auto', 'min', 'max', 'fr', isArbitraryValue]\n }],\n /**\n * Gap\n * @see https://tailwindcss.com/docs/gap\n */\n gap: [{\n gap: [gap]\n }],\n /**\n * Gap X\n * @see https://tailwindcss.com/docs/gap\n */\n 'gap-x': [{\n 'gap-x': [gap]\n }],\n /**\n * Gap Y\n * @see https://tailwindcss.com/docs/gap\n */\n 'gap-y': [{\n 'gap-y': [gap]\n }],\n /**\n * Justify Content\n * @see https://tailwindcss.com/docs/justify-content\n */\n 'justify-content': [{\n justify: ['normal', ...getAlign()]\n }],\n /**\n * Justify Items\n * @see https://tailwindcss.com/docs/justify-items\n */\n 'justify-items': [{\n 'justify-items': ['start', 'end', 'center', 'stretch']\n }],\n /**\n * Justify Self\n * @see https://tailwindcss.com/docs/justify-self\n */\n 'justify-self': [{\n 'justify-self': ['auto', 'start', 'end', 'center', 'stretch']\n }],\n /**\n * Align Content\n * @see https://tailwindcss.com/docs/align-content\n */\n 'align-content': [{\n content: ['normal', ...getAlign(), 'baseline']\n }],\n /**\n * Align Items\n * @see https://tailwindcss.com/docs/align-items\n */\n 'align-items': [{\n items: ['start', 'end', 'center', 'baseline', 'stretch']\n }],\n /**\n * Align Self\n * @see https://tailwindcss.com/docs/align-self\n */\n 'align-self': [{\n self: ['auto', 'start', 'end', 'center', 'stretch', 'baseline']\n }],\n /**\n * Place Content\n * @see https://tailwindcss.com/docs/place-content\n */\n 'place-content': [{\n 'place-content': [...getAlign(), 'baseline']\n }],\n /**\n * Place Items\n * @see https://tailwindcss.com/docs/place-items\n */\n 'place-items': [{\n 'place-items': ['start', 'end', 'center', 'baseline', 'stretch']\n }],\n /**\n * Place Self\n * @see https://tailwindcss.com/docs/place-self\n */\n 'place-self': [{\n 'place-self': ['auto', 'start', 'end', 'center', 'stretch']\n }],\n // Spacing\n /**\n * Padding\n * @see https://tailwindcss.com/docs/padding\n */\n p: [{\n p: [padding]\n }],\n /**\n * Padding X\n * @see https://tailwindcss.com/docs/padding\n */\n px: [{\n px: [padding]\n }],\n /**\n * Padding Y\n * @see https://tailwindcss.com/docs/padding\n */\n py: [{\n py: [padding]\n }],\n /**\n * Padding Start\n * @see https://tailwindcss.com/docs/padding\n */\n ps: [{\n ps: [padding]\n }],\n /**\n * Padding End\n * @see https://tailwindcss.com/docs/padding\n */\n pe: [{\n pe: [padding]\n }],\n /**\n * Padding Top\n * @see https://tailwindcss.com/docs/padding\n */\n pt: [{\n pt: [padding]\n }],\n /**\n * Padding Right\n * @see https://tailwindcss.com/docs/padding\n */\n pr: [{\n pr: [padding]\n }],\n /**\n * Padding Bottom\n * @see https://tailwindcss.com/docs/padding\n */\n pb: [{\n pb: [padding]\n }],\n /**\n * Padding Left\n * @see https://tailwindcss.com/docs/padding\n */\n pl: [{\n pl: [padding]\n }],\n /**\n * Margin\n * @see https://tailwindcss.com/docs/margin\n */\n m: [{\n m: [margin]\n }],\n /**\n * Margin X\n * @see https://tailwindcss.com/docs/margin\n */\n mx: [{\n mx: [margin]\n }],\n /**\n * Margin Y\n * @see https://tailwindcss.com/docs/margin\n */\n my: [{\n my: [margin]\n }],\n /**\n * Margin Start\n * @see https://tailwindcss.com/docs/margin\n */\n ms: [{\n ms: [margin]\n }],\n /**\n * Margin End\n * @see https://tailwindcss.com/docs/margin\n */\n me: [{\n me: [margin]\n }],\n /**\n * Margin Top\n * @see https://tailwindcss.com/docs/margin\n */\n mt: [{\n mt: [margin]\n }],\n /**\n * Margin Right\n * @see https://tailwindcss.com/docs/margin\n */\n mr: [{\n mr: [margin]\n }],\n /**\n * Margin Bottom\n * @see https://tailwindcss.com/docs/margin\n */\n mb: [{\n mb: [margin]\n }],\n /**\n * Margin Left\n * @see https://tailwindcss.com/docs/margin\n */\n ml: [{\n ml: [margin]\n }],\n /**\n * Space Between X\n * @see https://tailwindcss.com/docs/space\n */\n 'space-x': [{\n 'space-x': [space]\n }],\n /**\n * Space Between X Reverse\n * @see https://tailwindcss.com/docs/space\n */\n 'space-x-reverse': ['space-x-reverse'],\n /**\n * Space Between Y\n * @see https://tailwindcss.com/docs/space\n */\n 'space-y': [{\n 'space-y': [space]\n }],\n /**\n * Space Between Y Reverse\n * @see https://tailwindcss.com/docs/space\n */\n 'space-y-reverse': ['space-y-reverse'],\n // Sizing\n /**\n * Width\n * @see https://tailwindcss.com/docs/width\n */\n w: [{\n w: ['auto', 'min', 'max', 'fit', 'svw', 'lvw', 'dvw', isArbitraryValue, spacing]\n }],\n /**\n * Min-Width\n * @see https://tailwindcss.com/docs/min-width\n */\n 'min-w': [{\n 'min-w': [isArbitraryValue, spacing, 'min', 'max', 'fit']\n }],\n /**\n * Max-Width\n * @see https://tailwindcss.com/docs/max-width\n */\n 'max-w': [{\n 'max-w': [isArbitraryValue, spacing, 'none', 'full', 'min', 'max', 'fit', 'prose', {\n screen: [isTshirtSize]\n }, isTshirtSize]\n }],\n /**\n * Height\n * @see https://tailwindcss.com/docs/height\n */\n h: [{\n h: [isArbitraryValue, spacing, 'auto', 'min', 'max', 'fit', 'svh', 'lvh', 'dvh']\n }],\n /**\n * Min-Height\n * @see https://tailwindcss.com/docs/min-height\n */\n 'min-h': [{\n 'min-h': [isArbitraryValue, spacing, 'min', 'max', 'fit', 'svh', 'lvh', 'dvh']\n }],\n /**\n * Max-Height\n * @see https://tailwindcss.com/docs/max-height\n */\n 'max-h': [{\n 'max-h': [isArbitraryValue, spacing, 'min', 'max', 'fit', 'svh', 'lvh', 'dvh']\n }],\n /**\n * Size\n * @see https://tailwindcss.com/docs/size\n */\n size: [{\n size: [isArbitraryValue, spacing, 'auto', 'min', 'max', 'fit']\n }],\n // Typography\n /**\n * Font Size\n * @see https://tailwindcss.com/docs/font-size\n */\n 'font-size': [{\n text: ['base', isTshirtSize, isArbitraryLength]\n }],\n /**\n * Font Smoothing\n * @see https://tailwindcss.com/docs/font-smoothing\n */\n 'font-smoothing': ['antialiased', 'subpixel-antialiased'],\n /**\n * Font Style\n * @see https://tailwindcss.com/docs/font-style\n */\n 'font-style': ['italic', 'not-italic'],\n /**\n * Font Weight\n * @see https://tailwindcss.com/docs/font-weight\n */\n 'font-weight': [{\n font: ['thin', 'extralight', 'light', 'normal', 'medium', 'semibold', 'bold', 'extrabold', 'black', isArbitraryNumber]\n }],\n /**\n * Font Family\n * @see https://tailwindcss.com/docs/font-family\n */\n 'font-family': [{\n font: [isAny]\n }],\n /**\n * Font Variant Numeric\n * @see https://tailwindcss.com/docs/font-variant-numeric\n */\n 'fvn-normal': ['normal-nums'],\n /**\n * Font Variant Numeric\n * @see https://tailwindcss.com/docs/font-variant-numeric\n */\n 'fvn-ordinal': ['ordinal'],\n /**\n * Font Variant Numeric\n * @see https://tailwindcss.com/docs/font-variant-numeric\n */\n 'fvn-slashed-zero': ['slashed-zero'],\n /**\n * Font Variant Numeric\n * @see https://tailwindcss.com/docs/font-variant-numeric\n */\n 'fvn-figure': ['lining-nums', 'oldstyle-nums'],\n /**\n * Font Variant Numeric\n * @see https://tailwindcss.com/docs/font-variant-numeric\n */\n 'fvn-spacing': ['proportional-nums', 'tabular-nums'],\n /**\n * Font Variant Numeric\n * @see https://tailwindcss.com/docs/font-variant-numeric\n */\n 'fvn-fraction': ['diagonal-fractions', 'stacked-fractions'],\n /**\n * Letter Spacing\n * @see https://tailwindcss.com/docs/letter-spacing\n */\n tracking: [{\n tracking: ['tighter', 'tight', 'normal', 'wide', 'wider', 'widest', isArbitraryValue]\n }],\n /**\n * Line Clamp\n * @see https://tailwindcss.com/docs/line-clamp\n */\n 'line-clamp': [{\n 'line-clamp': ['none', isNumber, isArbitraryNumber]\n }],\n /**\n * Line Height\n * @see https://tailwindcss.com/docs/line-height\n */\n leading: [{\n leading: ['none', 'tight', 'snug', 'normal', 'relaxed', 'loose', isLength, isArbitraryValue]\n }],\n /**\n * List Style Image\n * @see https://tailwindcss.com/docs/list-style-image\n */\n 'list-image': [{\n 'list-image': ['none', isArbitraryValue]\n }],\n /**\n * List Style Type\n * @see https://tailwindcss.com/docs/list-style-type\n */\n 'list-style-type': [{\n list: ['none', 'disc', 'decimal', isArbitraryValue]\n }],\n /**\n * List Style Position\n * @see https://tailwindcss.com/docs/list-style-position\n */\n 'list-style-position': [{\n list: ['inside', 'outside']\n }],\n /**\n * Placeholder Color\n * @deprecated since Tailwind CSS v3.0.0\n * @see https://tailwindcss.com/docs/placeholder-color\n */\n 'placeholder-color': [{\n placeholder: [colors]\n }],\n /**\n * Placeholder Opacity\n * @see https://tailwindcss.com/docs/placeholder-opacity\n */\n 'placeholder-opacity': [{\n 'placeholder-opacity': [opacity]\n }],\n /**\n * Text Alignment\n * @see https://tailwindcss.com/docs/text-align\n */\n 'text-alignment': [{\n text: ['left', 'center', 'right', 'justify', 'start', 'end']\n }],\n /**\n * Text Color\n * @see https://tailwindcss.com/docs/text-color\n */\n 'text-color': [{\n text: [colors]\n }],\n /**\n * Text Opacity\n * @see https://tailwindcss.com/docs/text-opacity\n */\n 'text-opacity': [{\n 'text-opacity': [opacity]\n }],\n /**\n * Text Decoration\n * @see https://tailwindcss.com/docs/text-decoration\n */\n 'text-decoration': ['underline', 'overline', 'line-through', 'no-underline'],\n /**\n * Text Decoration Style\n * @see https://tailwindcss.com/docs/text-decoration-style\n */\n 'text-decoration-style': [{\n decoration: [...getLineStyles(), 'wavy']\n }],\n /**\n * Text Decoration Thickness\n * @see https://tailwindcss.com/docs/text-decoration-thickness\n */\n 'text-decoration-thickness': [{\n decoration: ['auto', 'from-font', isLength, isArbitraryLength]\n }],\n /**\n * Text Underline Offset\n * @see https://tailwindcss.com/docs/text-underline-offset\n */\n 'underline-offset': [{\n 'underline-offset': ['auto', isLength, isArbitraryValue]\n }],\n /**\n * Text Decoration Color\n * @see https://tailwindcss.com/docs/text-decoration-color\n */\n 'text-decoration-color': [{\n decoration: [colors]\n }],\n /**\n * Text Transform\n * @see https://tailwindcss.com/docs/text-transform\n */\n 'text-transform': ['uppercase', 'lowercase', 'capitalize', 'normal-case'],\n /**\n * Text Overflow\n * @see https://tailwindcss.com/docs/text-overflow\n */\n 'text-overflow': ['truncate', 'text-ellipsis', 'text-clip'],\n /**\n * Text Wrap\n * @see https://tailwindcss.com/docs/text-wrap\n */\n 'text-wrap': [{\n text: ['wrap', 'nowrap', 'balance', 'pretty']\n }],\n /**\n * Text Indent\n * @see https://tailwindcss.com/docs/text-indent\n */\n indent: [{\n indent: getSpacingWithArbitrary()\n }],\n /**\n * Vertical Alignment\n * @see https://tailwindcss.com/docs/vertical-align\n */\n 'vertical-align': [{\n align: ['baseline', 'top', 'middle', 'bottom', 'text-top', 'text-bottom', 'sub', 'super', isArbitraryValue]\n }],\n /**\n * Whitespace\n * @see https://tailwindcss.com/docs/whitespace\n */\n whitespace: [{\n whitespace: ['normal', 'nowrap', 'pre', 'pre-line', 'pre-wrap', 'break-spaces']\n }],\n /**\n * Word Break\n * @see https://tailwindcss.com/docs/word-break\n */\n break: [{\n break: ['normal', 'words', 'all', 'keep']\n }],\n /**\n * Hyphens\n * @see https://tailwindcss.com/docs/hyphens\n */\n hyphens: [{\n hyphens: ['none', 'manual', 'auto']\n }],\n /**\n * Content\n * @see https://tailwindcss.com/docs/content\n */\n content: [{\n content: ['none', isArbitraryValue]\n }],\n // Backgrounds\n /**\n * Background Attachment\n * @see https://tailwindcss.com/docs/background-attachment\n */\n 'bg-attachment': [{\n bg: ['fixed', 'local', 'scroll']\n }],\n /**\n * Background Clip\n * @see https://tailwindcss.com/docs/background-clip\n */\n 'bg-clip': [{\n 'bg-clip': ['border', 'padding', 'content', 'text']\n }],\n /**\n * Background Opacity\n * @deprecated since Tailwind CSS v3.0.0\n * @see https://tailwindcss.com/docs/background-opacity\n */\n 'bg-opacity': [{\n 'bg-opacity': [opacity]\n }],\n /**\n * Background Origin\n * @see https://tailwindcss.com/docs/background-origin\n */\n 'bg-origin': [{\n 'bg-origin': ['border', 'padding', 'content']\n }],\n /**\n * Background Position\n * @see https://tailwindcss.com/docs/background-position\n */\n 'bg-position': [{\n bg: [...getPositions(), isArbitraryPosition]\n }],\n /**\n * Background Repeat\n * @see https://tailwindcss.com/docs/background-repeat\n */\n 'bg-repeat': [{\n bg: ['no-repeat', {\n repeat: ['', 'x', 'y', 'round', 'space']\n }]\n }],\n /**\n * Background Size\n * @see https://tailwindcss.com/docs/background-size\n */\n 'bg-size': [{\n bg: ['auto', 'cover', 'contain', isArbitrarySize]\n }],\n /**\n * Background Image\n * @see https://tailwindcss.com/docs/background-image\n */\n 'bg-image': [{\n bg: ['none', {\n 'gradient-to': ['t', 'tr', 'r', 'br', 'b', 'bl', 'l', 'tl']\n }, isArbitraryImage]\n }],\n /**\n * Background Color\n * @see https://tailwindcss.com/docs/background-color\n */\n 'bg-color': [{\n bg: [colors]\n }],\n /**\n * Gradient Color Stops From Position\n * @see https://tailwindcss.com/docs/gradient-color-stops\n */\n 'gradient-from-pos': [{\n from: [gradientColorStopPositions]\n }],\n /**\n * Gradient Color Stops Via Position\n * @see https://tailwindcss.com/docs/gradient-color-stops\n */\n 'gradient-via-pos': [{\n via: [gradientColorStopPositions]\n }],\n /**\n * Gradient Color Stops To Position\n * @see https://tailwindcss.com/docs/gradient-color-stops\n */\n 'gradient-to-pos': [{\n to: [gradientColorStopPositions]\n }],\n /**\n * Gradient Color Stops From\n * @see https://tailwindcss.com/docs/gradient-color-stops\n */\n 'gradient-from': [{\n from: [gradientColorStops]\n }],\n /**\n * Gradient Color Stops Via\n * @see https://tailwindcss.com/docs/gradient-color-stops\n */\n 'gradient-via': [{\n via: [gradientColorStops]\n }],\n /**\n * Gradient Color Stops To\n * @see https://tailwindcss.com/docs/gradient-color-stops\n */\n 'gradient-to': [{\n to: [gradientColorStops]\n }],\n // Borders\n /**\n * Border Radius\n * @see https://tailwindcss.com/docs/border-radius\n */\n rounded: [{\n rounded: [borderRadius]\n }],\n /**\n * Border Radius Start\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-s': [{\n 'rounded-s': [borderRadius]\n }],\n /**\n * Border Radius End\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-e': [{\n 'rounded-e': [borderRadius]\n }],\n /**\n * Border Radius Top\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-t': [{\n 'rounded-t': [borderRadius]\n }],\n /**\n * Border Radius Right\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-r': [{\n 'rounded-r': [borderRadius]\n }],\n /**\n * Border Radius Bottom\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-b': [{\n 'rounded-b': [borderRadius]\n }],\n /**\n * Border Radius Left\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-l': [{\n 'rounded-l': [borderRadius]\n }],\n /**\n * Border Radius Start Start\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-ss': [{\n 'rounded-ss': [borderRadius]\n }],\n /**\n * Border Radius Start End\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-se': [{\n 'rounded-se': [borderRadius]\n }],\n /**\n * Border Radius End End\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-ee': [{\n 'rounded-ee': [borderRadius]\n }],\n /**\n * Border Radius End Start\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-es': [{\n 'rounded-es': [borderRadius]\n }],\n /**\n * Border Radius Top Left\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-tl': [{\n 'rounded-tl': [borderRadius]\n }],\n /**\n * Border Radius Top Right\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-tr': [{\n 'rounded-tr': [borderRadius]\n }],\n /**\n * Border Radius Bottom Right\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-br': [{\n 'rounded-br': [borderRadius]\n }],\n /**\n * Border Radius Bottom Left\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-bl': [{\n 'rounded-bl': [borderRadius]\n }],\n /**\n * Border Width\n * @see https://tailwindcss.com/docs/border-width\n */\n 'border-w': [{\n border: [borderWidth]\n }],\n /**\n * Border Width X\n * @see https://tailwindcss.com/docs/border-width\n */\n 'border-w-x': [{\n 'border-x': [borderWidth]\n }],\n /**\n * Border Width Y\n * @see https://tailwindcss.com/docs/border-width\n */\n 'border-w-y': [{\n 'border-y': [borderWidth]\n }],\n /**\n * Border Width Start\n * @see https://tailwindcss.com/docs/border-width\n */\n 'border-w-s': [{\n 'border-s': [borderWidth]\n }],\n /**\n * Border Width End\n * @see https://tailwindcss.com/docs/border-width\n */\n 'border-w-e': [{\n 'border-e': [borderWidth]\n }],\n /**\n * Border Width Top\n * @see https://tailwindcss.com/docs/border-width\n */\n 'border-w-t': [{\n 'border-t': [borderWidth]\n }],\n /**\n * Border Width Right\n * @see https://tailwindcss.com/docs/border-width\n */\n 'border-w-r': [{\n 'border-r': [borderWidth]\n }],\n /**\n * Border Width Bottom\n * @see https://tailwindcss.com/docs/border-width\n */\n 'border-w-b': [{\n 'border-b': [borderWidth]\n }],\n /**\n * Border Width Left\n * @see https://tailwindcss.com/docs/border-width\n */\n 'border-w-l': [{\n 'border-l': [borderWidth]\n }],\n /**\n * Border Opacity\n * @see https://tailwindcss.com/docs/border-opacity\n */\n 'border-opacity': [{\n 'border-opacity': [opacity]\n }],\n /**\n * Border Style\n * @see https://tailwindcss.com/docs/border-style\n */\n 'border-style': [{\n border: [...getLineStyles(), 'hidden']\n }],\n /**\n * Divide Width X\n * @see https://tailwindcss.com/docs/divide-width\n */\n 'divide-x': [{\n 'divide-x': [borderWidth]\n }],\n /**\n * Divide Width X Reverse\n * @see https://tailwindcss.com/docs/divide-width\n */\n 'divide-x-reverse': ['divide-x-reverse'],\n /**\n * Divide Width Y\n * @see https://tailwindcss.com/docs/divide-width\n */\n 'divide-y': [{\n 'divide-y': [borderWidth]\n }],\n /**\n * Divide Width Y Reverse\n * @see https://tailwindcss.com/docs/divide-width\n */\n 'divide-y-reverse': ['divide-y-reverse'],\n /**\n * Divide Opacity\n * @see https://tailwindcss.com/docs/divide-opacity\n */\n 'divide-opacity': [{\n 'divide-opacity': [opacity]\n }],\n /**\n * Divide Style\n * @see https://tailwindcss.com/docs/divide-style\n */\n 'divide-style': [{\n divide: getLineStyles()\n }],\n /**\n * Border Color\n * @see https://tailwindcss.com/docs/border-color\n */\n 'border-color': [{\n border: [borderColor]\n }],\n /**\n * Border Color X\n * @see https://tailwindcss.com/docs/border-color\n */\n 'border-color-x': [{\n 'border-x': [borderColor]\n }],\n /**\n * Border Color Y\n * @see https://tailwindcss.com/docs/border-color\n */\n 'border-color-y': [{\n 'border-y': [borderColor]\n }],\n /**\n * Border Color S\n * @see https://tailwindcss.com/docs/border-color\n */\n 'border-color-s': [{\n 'border-s': [borderColor]\n }],\n /**\n * Border Color E\n * @see https://tailwindcss.com/docs/border-color\n */\n 'border-color-e': [{\n 'border-e': [borderColor]\n }],\n /**\n * Border Color Top\n * @see https://tailwindcss.com/docs/border-color\n */\n 'border-color-t': [{\n 'border-t': [borderColor]\n }],\n /**\n * Border Color Right\n * @see https://tailwindcss.com/docs/border-color\n */\n 'border-color-r': [{\n 'border-r': [borderColor]\n }],\n /**\n * Border Color Bottom\n * @see https://tailwindcss.com/docs/border-color\n */\n 'border-color-b': [{\n 'border-b': [borderColor]\n }],\n /**\n * Border Color Left\n * @see https://tailwindcss.com/docs/border-color\n */\n 'border-color-l': [{\n 'border-l': [borderColor]\n }],\n /**\n * Divide Color\n * @see https://tailwindcss.com/docs/divide-color\n */\n 'divide-color': [{\n divide: [borderColor]\n }],\n /**\n * Outline Style\n * @see https://tailwindcss.com/docs/outline-style\n */\n 'outline-style': [{\n outline: ['', ...getLineStyles()]\n }],\n /**\n * Outline Offset\n * @see https://tailwindcss.com/docs/outline-offset\n */\n 'outline-offset': [{\n 'outline-offset': [isLength, isArbitraryValue]\n }],\n /**\n * Outline Width\n * @see https://tailwindcss.com/docs/outline-width\n */\n 'outline-w': [{\n outline: [isLength, isArbitraryLength]\n }],\n /**\n * Outline Color\n * @see https://tailwindcss.com/docs/outline-color\n */\n 'outline-color': [{\n outline: [colors]\n }],\n /**\n * Ring Width\n * @see https://tailwindcss.com/docs/ring-width\n */\n 'ring-w': [{\n ring: getLengthWithEmptyAndArbitrary()\n }],\n /**\n * Ring Width Inset\n * @see https://tailwindcss.com/docs/ring-width\n */\n 'ring-w-inset': ['ring-inset'],\n /**\n * Ring Color\n * @see https://tailwindcss.com/docs/ring-color\n */\n 'ring-color': [{\n ring: [colors]\n }],\n /**\n * Ring Opacity\n * @see https://tailwindcss.com/docs/ring-opacity\n */\n 'ring-opacity': [{\n 'ring-opacity': [opacity]\n }],\n /**\n * Ring Offset Width\n * @see https://tailwindcss.com/docs/ring-offset-width\n */\n 'ring-offset-w': [{\n 'ring-offset': [isLength, isArbitraryLength]\n }],\n /**\n * Ring Offset Color\n * @see https://tailwindcss.com/docs/ring-offset-color\n */\n 'ring-offset-color': [{\n 'ring-offset': [colors]\n }],\n // Effects\n /**\n * Box Shadow\n * @see https://tailwindcss.com/docs/box-shadow\n */\n shadow: [{\n shadow: ['', 'inner', 'none', isTshirtSize, isArbitraryShadow]\n }],\n /**\n * Box Shadow Color\n * @see https://tailwindcss.com/docs/box-shadow-color\n */\n 'shadow-color': [{\n shadow: [isAny]\n }],\n /**\n * Opacity\n * @see https://tailwindcss.com/docs/opacity\n */\n opacity: [{\n opacity: [opacity]\n }],\n /**\n * Mix Blend Mode\n * @see https://tailwindcss.com/docs/mix-blend-mode\n */\n 'mix-blend': [{\n 'mix-blend': [...getBlendModes(), 'plus-lighter', 'plus-darker']\n }],\n /**\n * Background Blend Mode\n * @see https://tailwindcss.com/docs/background-blend-mode\n */\n 'bg-blend': [{\n 'bg-blend': getBlendModes()\n }],\n // Filters\n /**\n * Filter\n * @deprecated since Tailwind CSS v3.0.0\n * @see https://tailwindcss.com/docs/filter\n */\n filter: [{\n filter: ['', 'none']\n }],\n /**\n * Blur\n * @see https://tailwindcss.com/docs/blur\n */\n blur: [{\n blur: [blur]\n }],\n /**\n * Brightness\n * @see https://tailwindcss.com/docs/brightness\n */\n brightness: [{\n brightness: [brightness]\n }],\n /**\n * Contrast\n * @see https://tailwindcss.com/docs/contrast\n */\n contrast: [{\n contrast: [contrast]\n }],\n /**\n * Drop Shadow\n * @see https://tailwindcss.com/docs/drop-shadow\n */\n 'drop-shadow': [{\n 'drop-shadow': ['', 'none', isTshirtSize, isArbitraryValue]\n }],\n /**\n * Grayscale\n * @see https://tailwindcss.com/docs/grayscale\n */\n grayscale: [{\n grayscale: [grayscale]\n }],\n /**\n * Hue Rotate\n * @see https://tailwindcss.com/docs/hue-rotate\n */\n 'hue-rotate': [{\n 'hue-rotate': [hueRotate]\n }],\n /**\n * Invert\n * @see https://tailwindcss.com/docs/invert\n */\n invert: [{\n invert: [invert]\n }],\n /**\n * Saturate\n * @see https://tailwindcss.com/docs/saturate\n */\n saturate: [{\n saturate: [saturate]\n }],\n /**\n * Sepia\n * @see https://tailwindcss.com/docs/sepia\n */\n sepia: [{\n sepia: [sepia]\n }],\n /**\n * Backdrop Filter\n * @deprecated since Tailwind CSS v3.0.0\n * @see https://tailwindcss.com/docs/backdrop-filter\n */\n 'backdrop-filter': [{\n 'backdrop-filter': ['', 'none']\n }],\n /**\n * Backdrop Blur\n * @see https://tailwindcss.com/docs/backdrop-blur\n */\n 'backdrop-blur': [{\n 'backdrop-blur': [blur]\n }],\n /**\n * Backdrop Brightness\n * @see https://tailwindcss.com/docs/backdrop-brightness\n */\n 'backdrop-brightness': [{\n 'backdrop-brightness': [brightness]\n }],\n /**\n * Backdrop Contrast\n * @see https://tailwindcss.com/docs/backdrop-contrast\n */\n 'backdrop-contrast': [{\n 'backdrop-contrast': [contrast]\n }],\n /**\n * Backdrop Grayscale\n * @see https://tailwindcss.com/docs/backdrop-grayscale\n */\n 'backdrop-grayscale': [{\n 'backdrop-grayscale': [grayscale]\n }],\n /**\n * Backdrop Hue Rotate\n * @see https://tailwindcss.com/docs/backdrop-hue-rotate\n */\n 'backdrop-hue-rotate': [{\n 'backdrop-hue-rotate': [hueRotate]\n }],\n /**\n * Backdrop Invert\n * @see https://tailwindcss.com/docs/backdrop-invert\n */\n 'backdrop-invert': [{\n 'backdrop-invert': [invert]\n }],\n /**\n * Backdrop Opacity\n * @see https://tailwindcss.com/docs/backdrop-opacity\n */\n 'backdrop-opacity': [{\n 'backdrop-opacity': [opacity]\n }],\n /**\n * Backdrop Saturate\n * @see https://tailwindcss.com/docs/backdrop-saturate\n */\n 'backdrop-saturate': [{\n 'backdrop-saturate': [saturate]\n }],\n /**\n * Backdrop Sepia\n * @see https://tailwindcss.com/docs/backdrop-sepia\n */\n 'backdrop-sepia': [{\n 'backdrop-sepia': [sepia]\n }],\n // Tables\n /**\n * Border Collapse\n * @see https://tailwindcss.com/docs/border-collapse\n */\n 'border-collapse': [{\n border: ['collapse', 'separate']\n }],\n /**\n * Border Spacing\n * @see https://tailwindcss.com/docs/border-spacing\n */\n 'border-spacing': [{\n 'border-spacing': [borderSpacing]\n }],\n /**\n * Border Spacing X\n * @see https://tailwindcss.com/docs/border-spacing\n */\n 'border-spacing-x': [{\n 'border-spacing-x': [borderSpacing]\n }],\n /**\n * Border Spacing Y\n * @see https://tailwindcss.com/docs/border-spacing\n */\n 'border-spacing-y': [{\n 'border-spacing-y': [borderSpacing]\n }],\n /**\n * Table Layout\n * @see https://tailwindcss.com/docs/table-layout\n */\n 'table-layout': [{\n table: ['auto', 'fixed']\n }],\n /**\n * Caption Side\n * @see https://tailwindcss.com/docs/caption-side\n */\n caption: [{\n caption: ['top', 'bottom']\n }],\n // Transitions and Animation\n /**\n * Tranisition Property\n * @see https://tailwindcss.com/docs/transition-property\n */\n transition: [{\n transition: ['none', 'all', '', 'colors', 'opacity', 'shadow', 'transform', isArbitraryValue]\n }],\n /**\n * Transition Duration\n * @see https://tailwindcss.com/docs/transition-duration\n */\n duration: [{\n duration: getNumberAndArbitrary()\n }],\n /**\n * Transition Timing Function\n * @see https://tailwindcss.com/docs/transition-timing-function\n */\n ease: [{\n ease: ['linear', 'in', 'out', 'in-out', isArbitraryValue]\n }],\n /**\n * Transition Delay\n * @see https://tailwindcss.com/docs/transition-delay\n */\n delay: [{\n delay: getNumberAndArbitrary()\n }],\n /**\n * Animation\n * @see https://tailwindcss.com/docs/animation\n */\n animate: [{\n animate: ['none', 'spin', 'ping', 'pulse', 'bounce', isArbitraryValue]\n }],\n // Transforms\n /**\n * Transform\n * @see https://tailwindcss.com/docs/transform\n */\n transform: [{\n transform: ['', 'gpu', 'none']\n }],\n /**\n * Scale\n * @see https://tailwindcss.com/docs/scale\n */\n scale: [{\n scale: [scale]\n }],\n /**\n * Scale X\n * @see https://tailwindcss.com/docs/scale\n */\n 'scale-x': [{\n 'scale-x': [scale]\n }],\n /**\n * Scale Y\n * @see https://tailwindcss.com/docs/scale\n */\n 'scale-y': [{\n 'scale-y': [scale]\n }],\n /**\n * Rotate\n * @see https://tailwindcss.com/docs/rotate\n */\n rotate: [{\n rotate: [isInteger, isArbitraryValue]\n }],\n /**\n * Translate X\n * @see https://tailwindcss.com/docs/translate\n */\n 'translate-x': [{\n 'translate-x': [translate]\n }],\n /**\n * Translate Y\n * @see https://tailwindcss.com/docs/translate\n */\n 'translate-y': [{\n 'translate-y': [translate]\n }],\n /**\n * Skew X\n * @see https://tailwindcss.com/docs/skew\n */\n 'skew-x': [{\n 'skew-x': [skew]\n }],\n /**\n * Skew Y\n * @see https://tailwindcss.com/docs/skew\n */\n 'skew-y': [{\n 'skew-y': [skew]\n }],\n /**\n * Transform Origin\n * @see https://tailwindcss.com/docs/transform-origin\n */\n 'transform-origin': [{\n origin: ['center', 'top', 'top-right', 'right', 'bottom-right', 'bottom', 'bottom-left', 'left', 'top-left', isArbitraryValue]\n }],\n // Interactivity\n /**\n * Accent Color\n * @see https://tailwindcss.com/docs/accent-color\n */\n accent: [{\n accent: ['auto', colors]\n }],\n /**\n * Appearance\n * @see https://tailwindcss.com/docs/appearance\n */\n appearance: [{\n appearance: ['none', 'auto']\n }],\n /**\n * Cursor\n * @see https://tailwindcss.com/docs/cursor\n */\n cursor: [{\n cursor: ['auto', 'default', 'pointer', 'wait', 'text', 'move', 'help', 'not-allowed', 'none', 'context-menu', 'progress', 'cell', 'crosshair', 'vertical-text', 'alias', 'copy', 'no-drop', 'grab', 'grabbing', 'all-scroll', 'col-resize', 'row-resize', 'n-resize', 'e-resize', 's-resize', 'w-resize', 'ne-resize', 'nw-resize', 'se-resize', 'sw-resize', 'ew-resize', 'ns-resize', 'nesw-resize', 'nwse-resize', 'zoom-in', 'zoom-out', isArbitraryValue]\n }],\n /**\n * Caret Color\n * @see https://tailwindcss.com/docs/just-in-time-mode#caret-color-utilities\n */\n 'caret-color': [{\n caret: [colors]\n }],\n /**\n * Pointer Events\n * @see https://tailwindcss.com/docs/pointer-events\n */\n 'pointer-events': [{\n 'pointer-events': ['none', 'auto']\n }],\n /**\n * Resize\n * @see https://tailwindcss.com/docs/resize\n */\n resize: [{\n resize: ['none', 'y', 'x', '']\n }],\n /**\n * Scroll Behavior\n * @see https://tailwindcss.com/docs/scroll-behavior\n */\n 'scroll-behavior': [{\n scroll: ['auto', 'smooth']\n }],\n /**\n * Scroll Margin\n * @see https://tailwindcss.com/docs/scroll-margin\n */\n 'scroll-m': [{\n 'scroll-m': getSpacingWithArbitrary()\n }],\n /**\n * Scroll Margin X\n * @see https://tailwindcss.com/docs/scroll-margin\n */\n 'scroll-mx': [{\n 'scroll-mx': getSpacingWithArbitrary()\n }],\n /**\n * Scroll Margin Y\n * @see https://tailwindcss.com/docs/scroll-margin\n */\n 'scroll-my': [{\n 'scroll-my': getSpacingWithArbitrary()\n }],\n /**\n * Scroll Margin Start\n * @see https://tailwindcss.com/docs/scroll-margin\n */\n 'scroll-ms': [{\n 'scroll-ms': getSpacingWithArbitrary()\n }],\n /**\n * Scroll Margin End\n * @see https://tailwindcss.com/docs/scroll-margin\n */\n 'scroll-me': [{\n 'scroll-me': getSpacingWithArbitrary()\n }],\n /**\n * Scroll Margin Top\n * @see https://tailwindcss.com/docs/scroll-margin\n */\n 'scroll-mt': [{\n 'scroll-mt': getSpacingWithArbitrary()\n }],\n /**\n * Scroll Margin Right\n * @see https://tailwindcss.com/docs/scroll-margin\n */\n 'scroll-mr': [{\n 'scroll-mr': getSpacingWithArbitrary()\n }],\n /**\n * Scroll Margin Bottom\n * @see https://tailwindcss.com/docs/scroll-margin\n */\n 'scroll-mb': [{\n 'scroll-mb': getSpacingWithArbitrary()\n }],\n /**\n * Scroll Margin Left\n * @see https://tailwindcss.com/docs/scroll-margin\n */\n 'scroll-ml': [{\n 'scroll-ml': getSpacingWithArbitrary()\n }],\n /**\n * Scroll Padding\n * @see https://tailwindcss.com/docs/scroll-padding\n */\n 'scroll-p': [{\n 'scroll-p': getSpacingWithArbitrary()\n }],\n /**\n * Scroll Padding X\n * @see https://tailwindcss.com/docs/scroll-padding\n */\n 'scroll-px': [{\n 'scroll-px': getSpacingWithArbitrary()\n }],\n /**\n * Scroll Padding Y\n * @see https://tailwindcss.com/docs/scroll-padding\n */\n 'scroll-py': [{\n 'scroll-py': getSpacingWithArbitrary()\n }],\n /**\n * Scroll Padding Start\n * @see https://tailwindcss.com/docs/scroll-padding\n */\n 'scroll-ps': [{\n 'scroll-ps': getSpacingWithArbitrary()\n }],\n /**\n * Scroll Padding End\n * @see https://tailwindcss.com/docs/scroll-padding\n */\n 'scroll-pe': [{\n 'scroll-pe': getSpacingWithArbitrary()\n }],\n /**\n * Scroll Padding Top\n * @see https://tailwindcss.com/docs/scroll-padding\n */\n 'scroll-pt': [{\n 'scroll-pt': getSpacingWithArbitrary()\n }],\n /**\n * Scroll Padding Right\n * @see https://tailwindcss.com/docs/scroll-padding\n */\n 'scroll-pr': [{\n 'scroll-pr': getSpacingWithArbitrary()\n }],\n /**\n * Scroll Padding Bottom\n * @see https://tailwindcss.com/docs/scroll-padding\n */\n 'scroll-pb': [{\n 'scroll-pb': getSpacingWithArbitrary()\n }],\n /**\n * Scroll Padding Left\n * @see https://tailwindcss.com/docs/scroll-padding\n */\n 'scroll-pl': [{\n 'scroll-pl': getSpacingWithArbitrary()\n }],\n /**\n * Scroll Snap Align\n * @see https://tailwindcss.com/docs/scroll-snap-align\n */\n 'snap-align': [{\n snap: ['start', 'end', 'center', 'align-none']\n }],\n /**\n * Scroll Snap Stop\n * @see https://tailwindcss.com/docs/scroll-snap-stop\n */\n 'snap-stop': [{\n snap: ['normal', 'always']\n }],\n /**\n * Scroll Snap Type\n * @see https://tailwindcss.com/docs/scroll-snap-type\n */\n 'snap-type': [{\n snap: ['none', 'x', 'y', 'both']\n }],\n /**\n * Scroll Snap Type Strictness\n * @see https://tailwindcss.com/docs/scroll-snap-type\n */\n 'snap-strictness': [{\n snap: ['mandatory', 'proximity']\n }],\n /**\n * Touch Action\n * @see https://tailwindcss.com/docs/touch-action\n */\n touch: [{\n touch: ['auto', 'none', 'manipulation']\n }],\n /**\n * Touch Action X\n * @see https://tailwindcss.com/docs/touch-action\n */\n 'touch-x': [{\n 'touch-pan': ['x', 'left', 'right']\n }],\n /**\n * Touch Action Y\n * @see https://tailwindcss.com/docs/touch-action\n */\n 'touch-y': [{\n 'touch-pan': ['y', 'up', 'down']\n }],\n /**\n * Touch Action Pinch Zoom\n * @see https://tailwindcss.com/docs/touch-action\n */\n 'touch-pz': ['touch-pinch-zoom'],\n /**\n * User Select\n * @see https://tailwindcss.com/docs/user-select\n */\n select: [{\n select: ['none', 'text', 'all', 'auto']\n }],\n /**\n * Will Change\n * @see https://tailwindcss.com/docs/will-change\n */\n 'will-change': [{\n 'will-change': ['auto', 'scroll', 'contents', 'transform', isArbitraryValue]\n }],\n // SVG\n /**\n * Fill\n * @see https://tailwindcss.com/docs/fill\n */\n fill: [{\n fill: [colors, 'none']\n }],\n /**\n * Stroke Width\n * @see https://tailwindcss.com/docs/stroke-width\n */\n 'stroke-w': [{\n stroke: [isLength, isArbitraryLength, isArbitraryNumber]\n }],\n /**\n * Stroke\n * @see https://tailwindcss.com/docs/stroke\n */\n stroke: [{\n stroke: [colors, 'none']\n }],\n // Accessibility\n /**\n * Screen Readers\n * @see https://tailwindcss.com/docs/screen-readers\n */\n sr: ['sr-only', 'not-sr-only'],\n /**\n * Forced Color Adjust\n * @see https://tailwindcss.com/docs/forced-color-adjust\n */\n 'forced-color-adjust': [{\n 'forced-color-adjust': ['auto', 'none']\n }]\n },\n conflictingClassGroups: {\n overflow: ['overflow-x', 'overflow-y'],\n overscroll: ['overscroll-x', 'overscroll-y'],\n inset: ['inset-x', 'inset-y', 'start', 'end', 'top', 'right', 'bottom', 'left'],\n 'inset-x': ['right', 'left'],\n 'inset-y': ['top', 'bottom'],\n flex: ['basis', 'grow', 'shrink'],\n gap: ['gap-x', 'gap-y'],\n p: ['px', 'py', 'ps', 'pe', 'pt', 'pr', 'pb', 'pl'],\n px: ['pr', 'pl'],\n py: ['pt', 'pb'],\n m: ['mx', 'my', 'ms', 'me', 'mt', 'mr', 'mb', 'ml'],\n mx: ['mr', 'ml'],\n my: ['mt', 'mb'],\n size: ['w', 'h'],\n 'font-size': ['leading'],\n 'fvn-normal': ['fvn-ordinal', 'fvn-slashed-zero', 'fvn-figure', 'fvn-spacing', 'fvn-fraction'],\n 'fvn-ordinal': ['fvn-normal'],\n 'fvn-slashed-zero': ['fvn-normal'],\n 'fvn-figure': ['fvn-normal'],\n 'fvn-spacing': ['fvn-normal'],\n 'fvn-fraction': ['fvn-normal'],\n 'line-clamp': ['display', 'overflow'],\n rounded: ['rounded-s', 'rounded-e', 'rounded-t', 'rounded-r', 'rounded-b', 'rounded-l', 'rounded-ss', 'rounded-se', 'rounded-ee', 'rounded-es', 'rounded-tl', 'rounded-tr', 'rounded-br', 'rounded-bl'],\n 'rounded-s': ['rounded-ss', 'rounded-es'],\n 'rounded-e': ['rounded-se', 'rounded-ee'],\n 'rounded-t': ['rounded-tl', 'rounded-tr'],\n 'rounded-r': ['rounded-tr', 'rounded-br'],\n 'rounded-b': ['rounded-br', 'rounded-bl'],\n 'rounded-l': ['rounded-tl', 'rounded-bl'],\n 'border-spacing': ['border-spacing-x', 'border-spacing-y'],\n 'border-w': ['border-w-s', 'border-w-e', 'border-w-t', 'border-w-r', 'border-w-b', 'border-w-l'],\n 'border-w-x': ['border-w-r', 'border-w-l'],\n 'border-w-y': ['border-w-t', 'border-w-b'],\n 'border-color': ['border-color-s', 'border-color-e', 'border-color-t', 'border-color-r', 'border-color-b', 'border-color-l'],\n 'border-color-x': ['border-color-r', 'border-color-l'],\n 'border-color-y': ['border-color-t', 'border-color-b'],\n 'scroll-m': ['scroll-mx', 'scroll-my', 'scroll-ms', 'scroll-me', 'scroll-mt', 'scroll-mr', 'scroll-mb', 'scroll-ml'],\n 'scroll-mx': ['scroll-mr', 'scroll-ml'],\n 'scroll-my': ['scroll-mt', 'scroll-mb'],\n 'scroll-p': ['scroll-px', 'scroll-py', 'scroll-ps', 'scroll-pe', 'scroll-pt', 'scroll-pr', 'scroll-pb', 'scroll-pl'],\n 'scroll-px': ['scroll-pr', 'scroll-pl'],\n 'scroll-py': ['scroll-pt', 'scroll-pb'],\n touch: ['touch-x', 'touch-y', 'touch-pz'],\n 'touch-x': ['touch'],\n 'touch-y': ['touch'],\n 'touch-pz': ['touch']\n },\n conflictingClassGroupModifiers: {\n 'font-size': ['leading']\n }\n };\n};\n\n/**\n * @param baseConfig Config where other config will be merged into. This object will be mutated.\n * @param configExtension Partial config to merge into the `baseConfig`.\n */\nconst mergeConfigs = (baseConfig, {\n cacheSize,\n prefix,\n separator,\n experimentalParseClassName,\n extend = {},\n override = {}\n}) => {\n overrideProperty(baseConfig, 'cacheSize', cacheSize);\n overrideProperty(baseConfig, 'prefix', prefix);\n overrideProperty(baseConfig, 'separator', separator);\n overrideProperty(baseConfig, 'experimentalParseClassName', experimentalParseClassName);\n for (const configKey in override) {\n overrideConfigProperties(baseConfig[configKey], override[configKey]);\n }\n for (const key in extend) {\n mergeConfigProperties(baseConfig[key], extend[key]);\n }\n return baseConfig;\n};\nconst overrideProperty = (baseObject, overrideKey, overrideValue) => {\n if (overrideValue !== undefined) {\n baseObject[overrideKey] = overrideValue;\n }\n};\nconst overrideConfigProperties = (baseObject, overrideObject) => {\n if (overrideObject) {\n for (const key in overrideObject) {\n overrideProperty(baseObject, key, overrideObject[key]);\n }\n }\n};\nconst mergeConfigProperties = (baseObject, mergeObject) => {\n if (mergeObject) {\n for (const key in mergeObject) {\n const mergeValue = mergeObject[key];\n if (mergeValue !== undefined) {\n baseObject[key] = (baseObject[key] || []).concat(mergeValue);\n }\n }\n }\n};\nconst extendTailwindMerge = (configExtension, ...createConfig) => typeof configExtension === 'function' ? createTailwindMerge(getDefaultConfig, configExtension, ...createConfig) : createTailwindMerge(() => mergeConfigs(getDefaultConfig(), configExtension), ...createConfig);\nconst twMerge = /*#__PURE__*/createTailwindMerge(getDefaultConfig);\nexport { createTailwindMerge, extendTailwindMerge, fromTheme, getDefaultConfig, mergeConfigs, twJoin, twMerge, validators };\n//# sourceMappingURL=bundle-mjs.mjs.map\n","import { clsx, type ClassValue } from \"clsx\";\nimport { twMerge } from \"tailwind-merge\";\n\nexport function cn(...inputs: ClassValue[]) {\n return twMerge(clsx(inputs));\n}","/**\n * Contrast utilities.\n *\n * The library ships paired semantic tokens (e.g. --color-primary /\n * --color-on-primary) so explicit pairings stay safe. For the few places where\n * a *dynamic* color paints a background (a `customColor` prop, a token-based\n * highlight card...) we pick the text color that yields the **best WCAG\n * contrast ratio** at runtime.\n *\n * Inputs may be hex colors, bare RGB channels (\"21 128 61\"), rgb() functions\n * (`rgb(21 128 61 / 0.95)`) or CSS variable references\n * (`rgb(var(--color-primary) / 0.85)`). Variable references are resolved\n * against the live stylesheet before computing luminance, so a re-themed\n * palette never produces a low-contrast combination.\n */\n\nexport type ColorInput = string;\n\nfunction readVariable(name: string): string {\n if (typeof window === \"undefined\") return \"\";\n return window\n .getComputedStyle(document.documentElement)\n .getPropertyValue(name)\n .trim();\n}\n\n/** Resolve `var(--x)` references against the live stylesheet. */\nfunction resolveVars(input: string): string {\n let str = input;\n const refs = str.match(/var\\(--[\\w-]+/g) ?? [];\n for (const ref of refs) {\n const name = ref.replace(/^var\\(/, \"\");\n const resolved = readVariable(name);\n if (resolved) str = str.split(ref).join(resolved);\n }\n return str;\n}\n\ninterface RGB {\n r: number;\n g: number;\n b: number;\n}\n\nfunction channels(color: ColorInput): RGB | null {\n let str = color.trim();\n\n if (/^#([0-9a-f]{3}){1,2}$/i.test(str)) {\n if (str.length === 4) {\n str =\n \"#\" +\n str\n .slice(1)\n .split(\"\")\n .map((c) => c + c)\n .join(\"\");\n }\n return {\n r: parseInt(str.slice(1, 3), 16),\n g: parseInt(str.slice(3, 5), 16),\n b: parseInt(str.slice(5, 7), 16),\n };\n }\n\n const resolved = resolveVars(str);\n\n // Normalize rgb()/rgba() separators (\"r g b / a\", \"r, g, b\") and bare channels.\n const normalized = resolved.replace(/[()/;,]/g, \" \");\n const parts = normalized.match(/-?\\d+(\\.\\d+)?/g)?.map(Number) ?? [];\n if (parts.length < 3) return null;\n // Alpha (4th component) is ignored: these colors paint opaque surfaces and\n // mixing against an unknown backdrop can't be modelled reliably.\n const [r, g, b] = parts;\n return {\n r: Math.max(0, Math.min(255, Math.round(r))),\n g: Math.max(0, Math.min(255, Math.round(g))),\n b: Math.max(0, Math.min(255, Math.round(b))),\n };\n}\n\nfunction relativeLuminance(color: ColorInput): number {\n const c = channels(color);\n if (!c) return 0;\n const lin = [c.r, c.g, c.b]\n .map((v) => v / 255)\n .map((v) => (v <= 0.03928 ? v / 12.92 : Math.pow((v + 0.055) / 1.055, 2.4)));\n return 0.2126 * lin[0] + 0.7152 * lin[1] + 0.0722 * lin[2];\n}\n\nfunction contrastRatio(lumA: number, lumB: number): number {\n const [hi, lo] = lumA > lumB ? [lumA, lumB] : [lumB, lumA];\n return (hi + 0.05) / (lo + 0.05);\n}\n\n/**\n * Returns the more readable of the two candidate text colors for a given\n * background. Both candidates are evaluated with the WCAG contrast formula and\n * the winning (highest ratio) color is returned — not a fixed luminance\n * breakpoint — so mid-luminance backgrounds (amber, pastels, light violet…)\n * always fall on the correct side.\n */\nexport function getContrastText(bg: ColorInput, light = \"#ffffff\", dark = \"#0f172a\"): string {\n const lumBg = relativeLuminance(bg);\n const lumLight = relativeLuminance(light);\n const lumDark = relativeLuminance(dark);\n return contrastRatio(lumBg, lumLight) >= contrastRatio(lumBg, lumDark) ? light : dark;\n}","import { forwardRef, type ButtonHTMLAttributes, type CSSProperties, type ReactNode } from \"react\";\nimport { cn } from \"../utils/cn\";\nimport { getContrastText } from \"../utils/contrast\";\n\nexport type ButtonVariant = \"primary\" | \"dark\" | \"outline\" | \"ghost\" | \"link\";\nexport type ButtonSize = \"sm\" | \"md\" | \"lg\";\n\nexport interface ButtonProps extends ButtonHTMLAttributes<HTMLButtonElement> {\n variant?: ButtonVariant;\n size?: ButtonSize;\n iconLeft?: ReactNode;\n iconRight?: ReactNode;\n /** Paints the button with an arbitrary CSS color; text color is computed for contrast. */\n customColor?: string;\n fullWidth?: boolean;\n}\n\nconst variants: Record<ButtonVariant, string> = {\n primary: \"bg-primary text-on-primary hover:bg-primary-hover\",\n dark: \"bg-secondary text-on-secondary hover:bg-secondary-hover\",\n outline:\n \"border border-border bg-transparent text-foreground hover:border-foreground/30 hover:bg-surface\",\n ghost: \"text-foreground hover:bg-surface\",\n link: \"px-0 h-auto text-primary hover:text-primary-hover\",\n};\n\nconst sizes: Record<ButtonSize, string> = {\n sm: \"h-9 px-4 text-[13px] gap-1.5\",\n md: \"h-11 px-5 text-sm gap-2\",\n lg: \"h-12 px-7 text-[15px] gap-2\",\n};\n\nconst base =\n \"group inline-flex select-none items-center justify-center rounded-lg font-medium tracking-tight transition-[background-color,border-color,color,box-shadow] duration-200 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 focus-visible:ring-offset-background disabled:pointer-events-none disabled:opacity-50 cursor-pointer\";\n\nexport const Button = forwardRef<HTMLButtonElement, ButtonProps>(\n (\n {\n className,\n variant = \"primary\",\n size = \"md\",\n iconLeft,\n iconRight,\n customColor,\n fullWidth,\n style,\n type = \"button\",\n children,\n ...props\n },\n ref,\n ) => {\n const customStyle: CSSProperties | undefined = customColor\n ? {\n ...style,\n backgroundColor: customColor,\n color: getContrastText(customColor),\n }\n : style;\n\n const isLink = variant === \"link\";\n\n return (\n <button\n ref={ref}\n type={type}\n style={customStyle}\n className={cn(\n base,\n sizes[size],\n customColor ? \"hover:brightness-95\" : variants[variant],\n isLink && \"underline-offset-4 hover:underline\",\n fullWidth && \"w-full\",\n className,\n )}\n {...props}\n >\n {iconLeft ? <span className={cn(\"shrink-0\", !isLink && \"opacity-70\")}>{iconLeft}</span> : null}\n {children}\n {iconRight ? (\n <span\n className={cn(\n \"shrink-0 transition-transform duration-200\",\n !isLink && \"opacity-70 group-hover:translate-x-0.5\",\n )}\n >\n {iconRight}\n </span>\n ) : null}\n </button>\n );\n },\n);\nButton.displayName = \"Button\";","import { forwardRef, type HTMLAttributes, type ReactNode } from \"react\";\nimport { cn } from \"../utils/cn\";\nimport { getContrastText } from \"../utils/contrast\";\n\nexport type BadgeVariant = \"solid\" | \"soft\" | \"outline\" | \"dot\";\nexport type BadgeSize = \"sm\" | \"md\";\n\nexport interface BadgeProps extends HTMLAttributes<HTMLSpanElement> {\n variant?: BadgeVariant;\n size?: BadgeSize;\n icon?: ReactNode;\n /** Paints the chip with an arbitrary CSS color; text color is computed for contrast. */\n customColor?: string;\n}\n\nconst base =\n \"inline-flex items-center rounded-full font-medium tracking-tight transition-colors duration-200\";\n\nconst sizes: Record<BadgeSize, string> = {\n sm: \"px-2.5 py-0.5 text-xs gap-1\",\n md: \"px-3 py-1 text-[13px] gap-1.5\",\n};\n\nconst variants: Record<BadgeVariant, string> = {\n solid: \"bg-primary text-on-primary\",\n soft: \"bg-primary-soft text-primary\",\n outline: \"text-muted-foreground ring-1 ring-inset ring-border\",\n dot: \"text-foreground ring-1 ring-inset ring-border bg-surface\",\n};\n\nexport const Badge = forwardRef<HTMLSpanElement, BadgeProps>(\n (\n { className, variant = \"soft\", size = \"md\", icon, customColor, style, children, ...props },\n ref,\n ) => {\n const customStyle = customColor\n ? { ...style, backgroundColor: customColor, color: getContrastText(customColor, \"#111111\", \"#ffffff\") }\n : style;\n\n return (\n <span\n ref={ref}\n style={customStyle}\n className={cn(\n base,\n sizes[size],\n customColor ? undefined : variants[variant],\n className,\n )}\n {...props}\n >\n {variant === \"dot\" ? (\n <span\n aria-hidden\n className={cn(\n \"h-1.5 w-1.5 shrink-0 rounded-full\",\n customColor ? \"currentColor\" : \"bg-primary\",\n )}\n style={customColor ? { backgroundColor: customColor } : undefined}\n />\n ) : null}\n {icon ? <span className=\"shrink-0 opacity-70\">{icon}</span> : null}\n {children}\n </span>\n );\n },\n);\nBadge.displayName = \"Badge\";","import { forwardRef, type HTMLAttributes, type ReactNode } from \"react\";\nimport { cn } from \"../utils/cn\";\n\nexport type CardVariant = \"outlined\" | \"elevated\" | \"inset\";\n\nexport interface CardProps extends HTMLAttributes<HTMLDivElement> {\n variant?: CardVariant;\n /** Softens the whole card with hover lift + border tint. */\n interactive?: boolean;\n}\n\nconst variants: Record<CardVariant, string> = {\n outlined: \"border border-border bg-surface\",\n elevated: \"border border-border bg-surface shadow-soft\",\n inset: \"bg-surface-strong\",\n};\n\nexport const Card = forwardRef<HTMLDivElement, CardProps>(\n ({ className, variant = \"outlined\", interactive = false, ...props }, ref) => (\n <div\n ref={ref}\n className={cn(\n \"rounded-xl transition-[border-color,box-shadow,transform] duration-200\",\n variants[variant],\n interactive &&\n \"cursor-pointer hover:-translate-y-0.5 hover:border-foreground/20 hover:shadow-raised\",\n \"focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 focus-visible:ring-offset-background\",\n className,\n )}\n {...props}\n />\n ),\n);\nCard.displayName = \"Card\";\n\nexport interface CardHeaderProps extends HTMLAttributes<HTMLDivElement> {\n icon?: ReactNode;\n}\n\nexport const CardHeader = forwardRef<HTMLDivElement, CardHeaderProps>(\n ({ className, icon, children, ...props }, ref) => (\n <div ref={ref} className={cn(\"flex flex-col gap-2 p-6 pb-0\", className)} {...props}>\n {icon ? <div className=\"mb-1.5\">{icon}</div> : null}\n {children}\n </div>\n ),\n);\nCardHeader.displayName = \"CardHeader\";\n\nexport const CardTitle = forwardRef<HTMLHeadingElement, HTMLAttributes<HTMLHeadingElement>>(\n ({ className, ...props }, ref) => (\n <h3\n ref={ref}\n className={cn(\"font-display text-lg font-semibold tracking-tight text-foreground\", className)}\n {...props}\n />\n ),\n);\nCardTitle.displayName = \"CardTitle\";\n\nexport const CardDescription = forwardRef<HTMLParagraphElement, HTMLAttributes<HTMLParagraphElement>>(\n ({ className, ...props }, ref) => (\n <p ref={ref} className={cn(\"text-sm leading-6 text-muted-foreground\", className)} {...props} />\n ),\n);\nCardDescription.displayName = \"CardDescription\";\n\nexport const CardContent = forwardRef<HTMLDivElement, HTMLAttributes<HTMLDivElement>>(\n ({ className, ...props }, ref) => (\n <div ref={ref} className={cn(\"p-6 pt-5\", className)} {...props} />\n ),\n);\nCardContent.displayName = \"CardContent\";\n\nexport const CardFooter = forwardRef<HTMLDivElement, HTMLAttributes<HTMLDivElement>>(\n ({ className, ...props }, ref) => (\n <div ref={ref} className={cn(\"flex items-center gap-3 border-t border-border/70 p-6 pt-5\", className)} {...props} />\n ),\n);\nCardFooter.displayName = \"CardFooter\";","import { forwardRef, type ElementType, type HTMLAttributes } from \"react\";\nimport { cn } from \"../utils/cn\";\n\nexport type ContainerSize = \"sm\" | \"md\" | \"lg\" | \"xl\" | \"full\";\n\nexport interface ContainerProps extends HTMLAttributes<HTMLElement> {\n /** Render as a specific element (section, header, …). */\n as?: ElementType;\n /**\n * Maximum content width:\n * `sm` → prose · `md` → reading · `lg` → plans/splits ·\n * `xl` → default marketing page · `full` → edge-to-edge.\n */\n size?: ContainerSize;\n /** Responsive gutters (px-5 / sm:px-8). Disable for flush content. */\n gutters?: boolean;\n}\n\nconst sizes: Record<Exclude<ContainerSize, \"full\">, string> = {\n sm: \"max-w-xl\",\n md: \"max-w-3xl\",\n lg: \"max-w-5xl\",\n xl: \"max-w-6xl\",\n};\n\n/**\n * Shared layout wrapper — the single source of the container + gutter rules\n * used across Section, Footer, CTA, templates…\n */\nexport const Container = forwardRef<HTMLElement, ContainerProps>(\n ({ className, as, size = \"xl\", gutters = true, ...props }, ref) => {\n const Tag = (as ?? \"div\") as ElementType;\n return (\n <Tag\n ref={ref as never}\n className={cn(\n \"mx-auto w-full\",\n size !== \"full\" && sizes[size],\n gutters && \"px-5 sm:px-8\",\n className,\n )}\n {...props}\n />\n );\n },\n);\nContainer.displayName = \"Container\";\n\nexport type StackGap = 0 | 1 | 2 | 3 | 4 | 5 | 6 | 8 | 10 | 12 | 16 | 20;\n\nconst gaps: Record<StackGap, string> = {\n 0: \"gap-0\",\n 1: \"gap-1\",\n 2: \"gap-2\",\n 3: \"gap-3\",\n 4: \"gap-4\",\n 5: \"gap-5\",\n 6: \"gap-6\",\n 8: \"gap-8\",\n 10: \"gap-10\",\n 12: \"gap-12\",\n 16: \"gap-16\",\n 20: \"gap-20\",\n};\n\nexport interface StackProps extends HTMLAttributes<HTMLDivElement> {\n gap?: StackGap;\n horizontal?: boolean;\n}\n\n/** Vertical (or horizontal) rhythm helper using flex gaps. */\nexport const Stack = forwardRef<HTMLDivElement, StackProps>(\n ({ className, gap = 4, horizontal = false, ...props }, ref) => (\n <div\n ref={ref}\n className={cn(\n \"flex\",\n horizontal ? \"flex-row flex-wrap items-center\" : \"flex-col\",\n gaps[gap],\n className,\n )}\n {...props}\n />\n ),\n);\nStack.displayName = \"Stack\";","import { forwardRef, type HTMLAttributes, type ReactNode } from \"react\";\nimport { cn } from \"../utils/cn\";\nimport { Container } from \"./Container\";\n\nexport type EyebrowStyle = \"caps\" | \"soft\" | \"plain\";\n\nexport interface SectionHeaderProps extends Omit<HTMLAttributes<HTMLDivElement>, \"title\"> {\n eyebrow?: ReactNode;\n eyebrowStyle?: EyebrowStyle;\n title?: ReactNode;\n description?: ReactNode;\n align?: \"left\" | \"center\";\n}\n\nconst eyebrowBase = \"inline-flex items-center gap-2 text-xs font-semibold tracking-[0.18em] uppercase\";\n\nconst eyebrowStyles: Record<EyebrowStyle, string> = {\n caps: cn(eyebrowBase, \"text-foreground/50\"),\n soft: cn(\n eyebrowBase,\n \"rounded-full px-3 py-1 text-primary tracking-widest bg-primary-soft uppercase\",\n ),\n plain: cn(eyebrowBase, \"text-primary\"),\n};\n\nexport const SectionHeader = forwardRef<HTMLDivElement, SectionHeaderProps>(\n (\n { className, eyebrow, eyebrowStyle = \"caps\", title, description, align = \"center\", children, ...props },\n ref,\n ) => (\n <div\n ref={ref}\n className={cn(\n \"mb-14 max-w-2xl\",\n align === \"center\" && \"mx-auto text-center\",\n className,\n )}\n {...props}\n >\n {eyebrow ? <p className={eyebrowStyles[eyebrowStyle]}>{eyebrow}</p> : null}\n {title ? (\n <h2 className=\"mt-5 font-display text-balance text-[1.9rem] font-semibold leading-[1.08] tracking-tight text-foreground sm:text-4xl\">\n {title}\n </h2>\n ) : null}\n {description ? (\n <p className=\"mt-4 text-pretty text-base leading-7 text-muted-foreground sm:text-lg\">\n {description}\n </p>\n ) : null}\n {children}\n </div>\n ),\n);\nSectionHeader.displayName = \"SectionHeader\";\n\nexport interface SectionProps extends Omit<HTMLAttributes<HTMLElement>, \"title\"> {\n size?: \"sm\" | \"md\" | \"lg\";\n eyebrow?: ReactNode;\n eyebrowStyle?: EyebrowStyle;\n title?: ReactNode;\n description?: ReactNode;\n align?: \"left\" | \"center\";\n containerClassName?: string;\n}\n\nconst paddings: Record<NonNullable<SectionProps[\"size\"]>, string> = {\n sm: \"py-14\",\n md: \"py-20 sm:py-24\",\n lg: \"py-24 sm:py-32\",\n};\n\nexport const Section = forwardRef<HTMLElement, SectionProps>(\n (\n {\n className,\n containerClassName,\n size = \"md\",\n eyebrow,\n eyebrowStyle,\n title,\n description,\n align = \"center\",\n children,\n id,\n ...props\n },\n ref,\n ) => (\n <section ref={ref} id={id} className={cn(\"w-full\", paddings[size], className)} {...props}>\n <Container className={containerClassName}>\n {eyebrow || title || description ? (\n <SectionHeader\n eyebrow={eyebrow}\n eyebrowStyle={eyebrowStyle}\n title={title}\n description={description}\n align={align}\n />\n ) : null}\n {children}\n </Container>\n </section>\n ),\n);\nSection.displayName = \"Section\";","import { useEffect, useState } from \"react\";\nimport { getContrastText } from \"./contrast\";\n\nfunction readChannel(variable: string): string {\n if (typeof window === \"undefined\") return \"\";\n return window\n .getComputedStyle(document.documentElement)\n .getPropertyValue(variable)\n .trim();\n}\n\n/**\n * Reads a `--color-*` token from the live stylesheet and returns a text color\n * that is always readable against it. Recomputes whenever the palette changes\n * at runtime (e.g. the Storybook theme switcher or an app-level theme swap).\n */\nexport function useTokenForeground(variable: string, fallback = \"#ffffff\"): string {\n const [text, setText] = useState<string>(() => {\n const value = readChannel(variable);\n return value ? getContrastText(value) : fallback;\n });\n\n useEffect(() => {\n const update = () => {\n const value = readChannel(variable);\n setText(value ? getContrastText(value) : fallback);\n };\n update();\n const observer = new MutationObserver(update);\n observer.observe(document.documentElement, {\n attributes: true,\n attributeFilter: [\"style\", \"class\"],\n });\n return () => observer.disconnect();\n }, [variable, fallback]);\n\n return text;\n}","import { forwardRef, type HTMLAttributes, type ReactNode } from \"react\";\nimport { cn } from \"../utils/cn\";\nimport { useTokenForeground } from \"../utils/useTokenForeground\";\n\nexport interface HeroMeta {\n label: string;\n icon?: ReactNode;\n}\n\nexport interface HeroProps extends Omit<HTMLAttributes<HTMLElement>, \"title\"> {\n variant?: \"split\" | \"centered\" | \"statement\";\n eyebrow?: ReactNode;\n title: ReactNode;\n description?: ReactNode;\n primaryAction?: ReactNode;\n secondaryAction?: ReactNode;\n media?: ReactNode;\n /** Small trust/status row shown under the copy or CTAs. */\n meta?: HeroMeta[];\n}\n\nconst titleBase =\n \"font-display font-semibold tracking-[-0.03em] text-balance text-foreground\";\n\nexport const Hero = forwardRef<HTMLElement, HeroProps>(\n (\n { className, variant = \"split\", eyebrow, title, description, primaryAction, secondaryAction, media, meta, id, ...props },\n ref,\n ) => {\n const isCentered = variant === \"centered\";\n const isStatement = variant === \"statement\";\n // Statement paints its own background from --color-secondary, so the\n // readable text color must be derived from THAT token, not the brand.\n const fg = useTokenForeground(isStatement ? \"--color-secondary\" : \"--color-primary\");\n\n const container =\n \"relative mx-auto flex w-full max-w-6xl flex-col items-center px-5 sm:px-8\";\n\n const eyebrowNode =\n typeof eyebrow === \"string\" ? (\n <p className=\"text-xs font-semibold uppercase tracking-[0.2em] text-primary\">{eyebrow}</p>\n ) : eyebrow ? (\n <div>{eyebrow}</div>\n ) : null;\n\n const actionsNode = primaryAction || secondaryAction ? (\n <div className=\"flex flex-wrap items-center gap-4\">{primaryAction}{secondaryAction}</div>\n ) : null;\n\n /** Split — editorial grid: huge type left, media right, meta rule under. */\n if (variant === \"split\") {\n return (\n <section\n ref={ref}\n id={id}\n className={cn(\"relative w-full border-b border-border bg-background\", className)}\n {...props}\n >\n <div className={cn(container, \"items-start gap-14 pt-20 pb-20 sm:pt-28 sm:pb-28 lg:grid lg:grid-cols-[1.05fr_0.95fr] lg:gap-20\")}>\n <div className=\"max-w-xl\">\n {eyebrowNode}\n <h1 className={cn(titleBase, \"mt-6 text-5xl leading-[1.03] sm:text-6xl lg:text-7xl\")}>\n {title}\n </h1>\n {description ? (\n <p className=\"mt-7 max-w-md text-pretty leading-relaxed text-muted-foreground sm:text-lg\">\n {description}\n </p>\n ) : null}\n {actionsNode ? <div className=\"mt-10\">{actionsNode}</div> : null}\n {meta ? (\n <ul className=\"mt-14 flex flex-wrap items-center gap-x-8 gap-y-3 border-t border-border pt-6\">\n {meta.map((m) => (\n <li key={m.label} className=\"flex items-center gap-2 text-sm text-muted-foreground\">\n {m.icon ? <span className=\"text-foreground/35\">{m.icon}</span> : null}\n {m.label}\n </li>\n ))}\n </ul>\n ) : null}\n </div>\n {media ? <div className=\"w-full self-center\">{media}</div> : null}\n </div>\n </section>\n );\n }\n\n /** Centered — understated, one statement, generous white space. */\n if (isCentered) {\n return (\n <section\n ref={ref}\n id={id}\n className={cn(\"relative w-full border-b border-border bg-background\", className)}\n {...props}\n >\n <div className={cn(container, \"pt-24 pb-20 text-center sm:pt-32 sm:pb-24\")}>\n {eyebrowNode}\n <h1 className={cn(titleBase, \"mt-7 max-w-4xl text-5xl leading-[1.04] sm:text-6xl lg:text-7xl\")}>\n {title}\n </h1>\n {description ? (\n <p className=\"mx-auto mt-7 max-w-xl text-pretty leading-relaxed text-muted-foreground sm:text-lg\">\n {description}\n </p>\n ) : null}\n {actionsNode ? <div className=\"mt-10 justify-center\">{actionsNode}</div> : null}\n {meta ? (\n <ul className=\"mt-14 flex flex-wrap items-center justify-center gap-x-9 gap-y-3\">\n {meta.map((m, i) => (\n <li\n key={m.label}\n className={cn(\n \"flex items-center gap-2 text-sm text-muted-foreground\",\n i > 0 && \"sm:border-l sm:border-border sm:pl-9\",\n )}\n >\n {m.icon ? <span className=\"text-foreground/35\">{m.icon}</span> : null}\n {m.label}\n </li>\n ))}\n </ul>\n ) : null}\n {media ? <div className=\"mt-16 w-full\">{media}</div> : null}\n </div>\n </section>\n );\n }\n\n /** Statement — full-bleed ink band. No eyebrow, pure message. */\n return (\n <section\n ref={ref}\n id={id}\n className={cn(\"relative w-full overflow-hidden bg-secondary\", className)}\n style={{ color: fg }}\n {...props}\n >\n <div aria-hidden className=\"pointer-events-none absolute inset-0 grain opacity-[0.07] mix-blend-overlay\" />\n <div aria-hidden className=\"pointer-events-none absolute inset-x-0 top-0 h-px bg-white/10\" />\n <div className={cn(container, \"pt-28 pb-24 text-center sm:pt-36 sm:pb-32\")}>\n <h1\n className=\"max-w-5xl font-display text-[2.9rem] font-semibold leading-[1.02] tracking-[-0.04em] text-balance sm:text-7xl lg:text-8xl\"\n style={{ color: fg }}\n >\n {title}\n </h1>\n {description ? (\n <p className=\"mx-auto mt-8 max-w-xl text-pretty leading-relaxed sm:text-lg\" style={{ color: fg, opacity: 0.72 }}>\n {description}\n </p>\n ) : null}\n {actionsNode ? <div className=\"mt-11 justify-center\">{actionsNode}</div> : null}\n {meta ? (\n <ul className=\"mt-16 flex flex-wrap items-center justify-center gap-x-10 gap-y-3\">\n {meta.map((m) => (\n <li key={m.label} className=\"flex items-center gap-2 text-sm font-medium\" style={{ color: fg, opacity: 0.72 }}>\n {m.icon ? <span>{m.icon}</span> : null}\n {m.label}\n </li>\n ))}\n </ul>\n ) : null}\n </div>\n </section>\n );\n },\n);\nHero.displayName = \"Hero\";","import type { SVGProps } from \"react\";\n\n/**\n * Minimal 1.5px stroke icon set (Lucide/Heroicons inspired).\n * No emojis — the library ships a single, consistent icon vocabulary.\n *\n * Usage:\n * <ArrowRight className=\"h-4 w-4\" />\n */\n\ntype IconProps = SVGProps<SVGSVGElement>;\n\nconst base: IconProps = {\n xmlns: \"http://www.w3.org/2000/svg\",\n viewBox: \"0 0 24 24\",\n fill: \"none\",\n stroke: \"currentColor\",\n strokeWidth: 1.5,\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\",\n \"aria-hidden\": true as never,\n};\n\nexport const ArrowRight = (props: IconProps) => (\n <svg {...base} {...props}>\n <path d=\"M5 12h14\" />\n <path d=\"m13 6 6 6-6 6\" />\n </svg>\n);\n\nexport const ArrowUpRight = (props: IconProps) => (\n <svg {...base} {...props}>\n <path d=\"M7 17 17 7\" />\n <path d=\"M8 7h9v9\" />\n </svg>\n);\n\nexport const ArrowDown = (props: IconProps) => (\n <svg {...base} {...props}>\n <path d=\"M12 5v14\" />\n <path d=\"m6 13 6 6 6-6\" />\n </svg>\n);\n\nexport const ArrowUp = (props: IconProps) => (\n <svg {...base} {...props}>\n <path d=\"M12 19V5\" />\n <path d=\"m6 11 6-6 6 6\" />\n </svg>\n);\n\nexport const Check = (props: IconProps) => (\n <svg {...base} {...props}>\n <path d=\"M20 6 9 17l-5-5\" />\n </svg>\n);\n\nexport const Plus = (props: IconProps) => (\n <svg {...base} {...props}>\n <path d=\"M12 5v14\" />\n <path d=\"M5 12h14\" />\n </svg>\n);\n\nexport const X = (props: IconProps) => (\n <svg {...base} {...props}>\n <path d=\"M18 6 6 18\" />\n <path d=\"m6 6 12 12\" />\n </svg>\n);\n\nexport const Menu = (props: IconProps) => (\n <svg {...base} {...props}>\n <path d=\"M4 7h16\" />\n <path d=\"M4 12h16\" />\n <path d=\"M4 17h16\" />\n </svg>\n);\n\nexport const ChevronDown = (props: IconProps) => (\n <svg {...base} {...props}>\n <path d=\"m6 9 6 6 6-6\" />\n </svg>\n);\n\nexport const ChevronRight = (props: IconProps) => (\n <svg {...base} {...props}>\n <path d=\"m9 6 6 6-6 6\" />\n </svg>\n);\n\nexport const ChevronLeft = (props: IconProps) => (\n <svg {...base} {...props}>\n <path d=\"m15 6-6 6 6 6\" />\n </svg>\n);\n\nexport const Zap = (props: IconProps) => (\n <svg {...base} {...props}>\n <path d=\"M13 2 3 14h7l-1 8 10-12h-7l1-8z\" />\n </svg>\n);\n\nexport const ShieldCheck = (props: IconProps) => (\n <svg {...base} {...props}>\n <path d=\"M12 3 5 6v5c0 4.5 3 7.5 7 9 4-1.5 7-4.5 7-9V6l-7-3z\" />\n <path d=\"m9 12 2 2 4-4\" />\n </svg>\n);\n\nexport const Layers = (props: IconProps) => (\n <svg {...base} {...props}>\n <path d=\"m12 2 9 5-9 5-9-5 9-5z\" />\n <path d=\"m3 12 9 5 9-5\" />\n <path d=\"m3 17 9 5 9-5\" />\n </svg>\n);\n\nexport const Smartphone = (props: IconProps) => (\n <svg {...base} {...props}>\n <rect width=\"14\" height=\"20\" x=\"5\" y=\"2\" rx=\"2.5\" />\n <path d=\"M12 18h.01\" />\n </svg>\n);\n\nexport const Gauge = (props: IconProps) => (\n <svg {...base} {...props}>\n <path d=\"M12 20a8 8 0 1 0 0-16 8 8 0 0 0 0 16z\" />\n <path d=\"m12 14 4-4\" />\n <path d=\"M12 10.5 9 13.5\" />\n </svg>\n);\n\nexport const BarChart = (props: IconProps) => (\n <svg {...base} {...props}>\n <path d=\"M3 20h18\" />\n <path d=\"M7 20V8\" />\n <path d=\"M12 20V4\" />\n <path d=\"M17 20v-7\" />\n </svg>\n);\n\nexport const Users = (props: IconProps) => (\n <svg {...base} {...props}>\n <path d=\"M16 21v-2a4 4 0 0 0-4-4H7a4 4 0 0 0-4 4v2\" />\n <circle cx=\"9\" cy=\"7\" r=\"4\" />\n <path d=\"M22 21v-2a4 4 0 0 0-3-3.87\" />\n <path d=\"M16 3.13a4 4 0 0 1 0 7.75\" />\n </svg>\n);\n\nexport const Star = (props: IconProps) => (\n <svg viewBox=\"0 0 24 24\" fill=\"currentColor\" aria-hidden {...props}>\n <path d=\"M12 2.5c.33 0 .63.19.77.5l1.98 4.01 4.42.64c.62.09.87.85.42 1.29l-3.2 3.12.76 4.4c.11.62-.55 1.1-1.1.8L12 15.13l-3.95 2.08c-.56.29-1.21-.18-1.1-.8l.76-4.4-3.2-3.12a.78.78 0 0 1 .42-1.29l4.42-.64L11.23 3c.14-.31.44-.5.77-.5z\" />\n </svg>\n);\n\nexport const Quote = (props: IconProps) => (\n <svg viewBox=\"0 0 24 24\" fill=\"currentColor\" aria-hidden {...props}>\n <path d=\"M10.5 5C7 5 4.5 7.5 4.5 11c0 3.3 2.2 5.5 5.2 5.5.2 0 .4 0 .5-.1-.2 1.5-1.3 2.6-2.9 3.2a.75.75 0 1 0 .4 1.4c3.6-1 5.8-3.8 5.8-7.7V7.5C13 6.1 11.9 5 10.5 5zm9 0C16 5 13.5 7.5 13.5 11c0 3.3 2.2 5.5 5.2 5.5.2 0 .4 0 .5-.1-.2 1.5-1.3 2.6-2.9 3.2a.75.75 0 1 0 .4 1.4c3.6-1 5.8-3.8 5.8-7.7V7.5C22 6.1 20.9 5 19.5 5z\" />\n </svg>\n);\n\nexport const Globe = (props: IconProps) => (\n <svg {...base} {...props}>\n <circle cx=\"12\" cy=\"12\" r=\"9\" />\n <path d=\"M3 12h18\" />\n <path d=\"M12 3a14 14 0 0 1 0 18 14 14 0 0 1 0-18z\" />\n </svg>\n);\n\nexport const Mail = (props: IconProps) => (\n <svg {...base} {...props}>\n <rect width=\"18\" height=\"14\" x=\"3\" y=\"5\" rx=\"2\" />\n <path d=\"m3 7 9 6 9-6\" />\n </svg>\n);\n\nexport const Lock = (props: IconProps) => (\n <svg {...base} {...props}>\n <rect width=\"18\" height=\"11\" x=\"3\" y=\"11\" rx=\"2\" />\n <path d=\"M7 11V7a5 5 0 0 1 10 0v4\" />\n </svg>\n);\n\nexport const Clock = (props: IconProps) => (\n <svg {...base} {...props}>\n <circle cx=\"12\" cy=\"12\" r=\"9\" />\n <path d=\"M12 7v5l3 2\" />\n </svg>\n);\n\nexport const DollarSign = (props: IconProps) => (\n <svg {...base} {...props}>\n <path d=\"M12 2v20\" />\n <path d=\"M17 5.5H9.5a3.5 3.5 0 0 0 0 7h5a3.5 3.5 0 0 1 0 7H6\" />\n </svg>\n);\n\nexport const Code = (props: IconProps) => (\n <svg {...base} {...props}>\n <path d=\"m16 18 6-6-6-6\" />\n <path d=\"m8 6-6 6 6 6\" />\n </svg>\n);\n\nexport const Terminal = (props: IconProps) => (\n <svg {...base} {...props}>\n <path d=\"m5 17 5-5-5-5\" />\n <path d=\"M13 19h6\" />\n </svg>\n);\n\nexport const Send = (props: IconProps) => (\n <svg {...base} {...props}>\n <path d=\"m3 11 18-8-7 18-3-7-8-3z\" />\n <path d=\"M11 14 21 3\" />\n </svg>\n);\n\nexport const Play = (props: IconProps) => (\n <svg {...base} {...props}>\n <path d=\"m8 5 11 7-11 7V5z\" />\n </svg>\n);\n\nexport const ExternalLink = (props: IconProps) => (\n <svg {...base} {...props}>\n <path d=\"M15 3h6v6\" />\n <path d=\"M10 14 21 3\" />\n <path d=\"M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6\" />\n </svg>\n);\n\nexport const Sliders = (props: IconProps) => (\n <svg {...base} {...props}>\n <path d=\"M4 6h10\" />\n <path d=\"M18 6h2\" />\n <circle cx=\"16\" cy=\"6\" r=\"2\" />\n <path d=\"M4 12h2\" />\n <path d=\"M10 12h10\" />\n <circle cx=\"8\" cy=\"12\" r=\"2\" />\n <path d=\"M4 18h10\" />\n <path d=\"M18 18h2\" />\n <circle cx=\"16\" cy=\"18\" r=\"2\" />\n </svg>\n);\n\nexport const Database = (props: IconProps) => (\n <svg {...base} {...props}>\n <ellipse cx=\"12\" cy=\"5\" rx=\"8\" ry=\"3\" />\n <path d=\"M4 5v7c0 1.66 3.58 3 8 3s8-1.34 8-3V5\" />\n <path d=\"M4 12v7c0 1.66 3.58 3 8 3s8-1.34 8-3v-7\" />\n </svg>\n);\n\nexport const Box = (props: IconProps) => (\n <svg {...base} {...props}>\n <path d=\"M21 8 12 3 3 8v8l9 5 9-5V8z\" />\n <path d=\"m3 8 9 5 9-5\" />\n <path d=\"M12 13v8\" />\n </svg>\n);\n\nexport const Cpu = (props: IconProps) => (\n <svg {...base} {...props}>\n <rect width=\"16\" height=\"16\" x=\"4\" y=\"4\" rx=\"2\" />\n <rect width=\"8\" height=\"8\" x=\"8\" y=\"8\" rx=\"1\" />\n <path d=\"M9 2v2M15 2v2M9 20v2M15 20v2M2 9h2M2 15h2M20 9h2M20 15h2\" />\n </svg>\n);\n\nexport const Palette = (props: IconProps) => (\n <svg {...base} {...props}>\n <path d=\"M12 3a9 9 0 1 0 0 18c1.66 0 2-1.34 2-2 0-.66-.27-1.16-.58-1.66-.3-.48-.42-.84-.42-1.34 0-.83.67-1.5 1.5-1.5h3.2A4.3 4.3 0 0 0 21 10 9 9 0 0 0 12 3z\" />\n <circle cx=\"7.5\" cy=\"10.5\" r=\"0.8\" fill=\"currentColor\" stroke=\"none\" />\n <circle cx=\"12\" cy=\"7.5\" r=\"0.8\" fill=\"currentColor\" stroke=\"none\" />\n <circle cx=\"16.5\" cy=\"10.5\" r=\"0.8\" fill=\"currentColor\" stroke=\"none\" />\n </svg>\n);\n\nexport const Rocket = (props: IconProps) => (\n <svg {...base} {...props}>\n <path d=\"M4.5 16.5c-1.5 1.26-2 5-2 5s3.74-.5 5-2c.71-.84.7-2.13-.09-2.91a2.18 2.18 0 0 0-2.91-.09z\" />\n <path d=\"m12 15-3-3a22 22 0 0 1 2-3.95A12.88 12.88 0 0 1 22 2c0 2.72-.78 7.5-6 11a22.35 22.35 0 0 1-4 2z\" />\n <path d=\"M9 12H4s.55-3.03 2-4c1.62-1.08 5 0 5 0\" />\n <path d=\"M12 15v5s3.03-.55 4-2c1.08-1.62 0-5 0-5\" />\n <circle cx=\"15.5\" cy=\"8.5\" r=\"1.5\" fill=\"currentColor\" stroke=\"none\" />\n </svg>\n);","import { useState, type HTMLAttributes, type ReactNode } from \"react\";\nimport { cn } from \"../utils/cn\";\nimport { Menu, X } from \"../icons\";\n\nexport interface NavLink {\n label: string;\n href: string;\n}\n\nexport interface NavbarProps extends Omit<HTMLAttributes<HTMLElement>, \"title\"> {\n variant?: \"classic\" | \"floating\" | \"inverse\";\n /** Wordmark or fallback text rendered when no logo is supplied. */\n brand?: ReactNode;\n /** Custom logo node (component, <img>, inline SVG…). Replaces the wordmark. */\n logo?: ReactNode;\n /** Quick logo image source. */\n logoSrc?: string;\n logoAlt?: string;\n /** Size / position tuning for logo images. Defaults to `h-7 w-auto`. */\n logoClassName?: string;\n brandHref?: string;\n links: NavLink[];\n actions?: ReactNode;\n sticky?: boolean;\n cta?: ReactNode;\n}\n\nconst linkStyles = {\n classic: \"text-muted-foreground hover:text-foreground\",\n floating: \"text-muted-foreground hover:text-foreground\",\n inverse: \"text-on-secondary/60 hover:text-on-secondary\",\n};\n\nexport const Navbar = ({\n className,\n variant = \"classic\",\n brand,\n logo,\n logoSrc,\n logoAlt,\n logoClassName,\n brandHref = \"#\",\n links,\n actions,\n cta,\n sticky = true,\n ...props\n}: NavbarProps) => {\n const [open, setOpen] = useState(false);\n const inverse = variant === \"inverse\";\n\n const shell = cn(\n \"w-full transition-colors duration-200\",\n sticky && \"sticky top-0 z-50\",\n variant === \"classic\" &&\n \"border-b border-border bg-background/85 backdrop-blur-md supports-[backdrop-filter]:bg-background/75\",\n variant === \"floating\" && \"px-0\",\n variant === \"inverse\" && \"border-b border-white/10 bg-[#101010]/85 backdrop-blur-md\",\n );\n\n const bar = cn(\n \"flex h-16 w-full items-center justify-between gap-4 transition-colors duration-200\",\n variant === \"floating\" &&\n \"mx-auto mt-3 max-w-5xl rounded-xl border border-border bg-surface/90 px-5 shadow-soft backdrop-blur-md supports-[backdrop-filter]:bg-surface/70\",\n variant === \"classic\" && \"mx-auto max-w-6xl px-5 sm:px-8\",\n variant === \"inverse\" && \"mx-auto max-w-6xl px-5 sm:px-8\",\n );\n\n const logoNode =\n logo ??\n (logoSrc ? (\n <img\n src={logoSrc}\n alt={logoAlt ?? (typeof brand === \"string\" ? brand : \"Logo\")}\n className={cn(\"h-7 w-auto\", logoClassName)}\n />\n ) : null);\n\n const brandNode = logoNode ? (\n <span className=\"flex items-center\">{logoNode}</span>\n ) : (\n <span\n className={cn(\n \"flex items-center gap-2 font-display text-[17px] font-bold tracking-tight\",\n inverse ? \"text-on-secondary\" : \"text-foreground\",\n )}\n >\n <span\n aria-hidden\n className={cn(\n \"inline-block h-2.5 w-2.5 rounded-sm\",\n inverse ? \"bg-on-secondary\" : \"bg-foreground\",\n )}\n />\n {brand}\n </span>\n );\n\n return (\n <header className={cn(shell, variant === \"floating\" && \"px-3 sm:px-6\", className)} {...props}>\n <nav className={bar} aria-label=\"Main navigation\">\n <a href={brandHref} className=\"shrink-0\">\n {brandNode}\n </a>\n\n <ul className=\"hidden items-center gap-7 md:flex\">\n {links.map((link) => (\n <li key={link.href}>\n <a\n href={link.href}\n className={cn(\n \"text-sm font-medium transition-colors duration-150\",\n linkStyles[variant],\n )}\n >\n {link.label}\n </a>\n </li>\n ))}\n </ul>\n\n <div className=\"hidden items-center gap-3 md:flex\">\n {actions}\n {cta}\n </div>\n\n <button\n type=\"button\"\n aria-label={open ? \"Close menu\" : \"Open menu\"}\n aria-expanded={open}\n onClick={() => setOpen((o) => !o)}\n className={cn(\n \"inline-flex h-10 w-10 shrink-0 cursor-pointer items-center justify-center rounded-md md:hidden\",\n \"transition-colors duration-150 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring\",\n inverse ? \"text-on-secondary hover:bg-white/10\" : \"text-foreground hover:bg-surface\",\n )}\n >\n {open ? <X className=\"h-5 w-5\" /> : <Menu className=\"h-5 w-5\" />}\n </button>\n </nav>\n\n {/* Mobile panel */}\n <div\n className={cn(\n \"grid transition-[grid-template-rows,opacity] duration-200 md:hidden\",\n open ? \"grid-rows-[1fr] opacity-100\" : \"grid-rows-[0fr] opacity-0\",\n inverse\n ? \"border-t border-white/10 bg-[#101010]\"\n : variant === \"floating\"\n ? \"mx-3 mb-3 max-w-5xl overflow-hidden rounded-b-xl border border-border bg-surface\"\n : \"border-t border-border bg-background\",\n )}\n >\n <div className=\"min-h-0 overflow-hidden\">\n <ul className={cn(\"flex flex-col py-4\", variant !== \"floating\" && \"px-5\")}>\n {links.map((link) => (\n <li key={link.href}>\n <a\n href={link.href}\n onClick={() => setOpen(false)}\n className={cn(\n \"block rounded-md px-2 py-2.5 text-sm font-medium transition-colors duration-150\",\n inverse\n ? \"text-on-secondary/70 hover:bg-white/10 hover:text-on-secondary\"\n : \"text-muted-foreground hover:bg-surface hover:text-foreground\",\n )}\n >\n {link.label}\n </a>\n </li>\n ))}\n {cta ? (\n <li className=\"mt-3 px-2 pb-2\">{cta}</li>\n ) : actions ? (\n <li className=\"mt-3 flex flex-wrap gap-3 px-2 pb-2\">{actions}</li>\n ) : null}\n </ul>\n </div>\n </div>\n </header>\n );\n};\nNavbar.displayName = \"Navbar\";","import { useId, useState, type HTMLAttributes, type ReactNode } from \"react\";\nimport { cn } from \"../utils/cn\";\nimport { getContrastText } from \"../utils/contrast\";\nimport { ChevronDown, Menu, X } from \"../icons\";\n\nexport interface MegaMenuLink {\n label: string;\n href: string;\n description?: string;\n}\n\nexport interface MegaMenuColumn {\n title?: string;\n links: MegaMenuLink[];\n}\n\nexport interface MegaMenuFeatured {\n title: string;\n description?: string;\n href: string;\n cta?: string;\n /** Background color for the card; glyph text color is computed for contrast. */\n accent?: string;\n}\n\nexport interface MegaMenuItem {\n label: string;\n href?: string;\n /** When set, the item becomes a trigger that opens a mega panel. */\n columns?: MegaMenuColumn[];\n /** Optional highlighted card pinned to the right side of the panel. */\n featured?: MegaMenuFeatured;\n /** Small pill rendered next to the trigger label. */\n badge?: string;\n}\n\nexport interface MegaMenuProps extends Omit<HTMLAttributes<HTMLElement>, \"title\"> {\n variant?: \"classic\" | \"floating\" | \"inverse\";\n /** Wordmark rendered when no logo is supplied. */\n brand?: ReactNode;\n /** Custom logo node (component, <img>, inline SVG…). Replaces the wordmark. */\n logo?: ReactNode;\n /** Quick logo image source. */\n logoSrc?: string;\n logoAlt?: string;\n logoClassName?: string;\n brandHref?: string;\n items: MegaMenuItem[];\n /** Rendered at the right side of the bar (desktop) and inside the mobile panel. */\n actions?: ReactNode;\n cta?: ReactNode;\n sticky?: boolean;\n}\n\nconst triggerStyles = {\n classic: \"text-muted-foreground hover:text-foreground hover:bg-surface\",\n floating: \"text-muted-foreground hover:text-foreground hover:bg-surface\",\n inverse: \"text-on-secondary/60 hover:text-on-secondary hover:bg-white/10\",\n};\n\nexport const MegaMenu = ({\n className,\n variant = \"classic\",\n brand,\n logo,\n logoSrc,\n logoAlt,\n logoClassName,\n brandHref = \"#\",\n items,\n actions,\n cta,\n sticky = true,\n onKeyDown,\n ...props\n}: MegaMenuProps) => {\n const ids = useId();\n const [openIndex, setOpenIndex] = useState<number | null>(null);\n const [mobileOpen, setMobileOpen] = useState(false);\n const [mobileExpanded, setMobileExpanded] = useState<number | null>(null);\n\n const inverse = variant === \"inverse\";\n\n const closePanels = () => setOpenIndex(null);\n const closeAll = () => {\n setOpenIndex(null);\n setMobileOpen(false);\n setMobileExpanded(null);\n };\n\n const panelBackground = inverse\n ? \"border-white/10 bg-[#161616]\"\n : \"border-border bg-surface shadow-raised\";\n\n const panelId = (i: number) => `${ids}-panel-${i}`;\n\n const shell = cn(\n \"relative w-full transition-colors duration-200\",\n sticky && \"sticky top-0 z-50\",\n variant === \"classic\" &&\n \"border-b border-border bg-background/85 backdrop-blur-md supports-[backdrop-filter]:bg-background/75\",\n variant === \"inverse\" && \"border-b border-white/10 bg-[#101010]/85 backdrop-blur-md\",\n );\n\n const bar = cn(\n \"relative flex h-16 w-full items-center justify-between gap-4 transition-colors duration-200\",\n variant === \"floating\" &&\n \"mx-auto mt-3 max-w-5xl rounded-xl border border-border bg-surface/90 px-5 shadow-soft backdrop-blur-md supports-[backdrop-filter]:bg-surface/70\",\n variant !== \"floating\" && \"mx-auto max-w-6xl px-5 sm:px-8\",\n );\n\n const logoNode =\n logo ??\n (logoSrc ? (\n <img\n src={logoSrc}\n alt={logoAlt ?? (typeof brand === \"string\" ? brand : \"Logo\")}\n className={cn(\"h-7 w-auto\", logoClassName)}\n />\n ) : null);\n\n const brandNode = logoNode ? (\n <span className=\"flex items-center\">{logoNode}</span>\n ) : (\n <span\n className={cn(\n \"flex items-center gap-2 font-display text-[17px] font-bold tracking-tight\",\n inverse ? \"text-on-secondary\" : \"text-foreground\",\n )}\n >\n <span\n aria-hidden\n className={cn(\n \"inline-block h-2.5 w-2.5 rounded-sm\",\n inverse ? \"bg-on-secondary\" : \"bg-foreground\",\n )}\n />\n {brand}\n </span>\n );\n\n const triggerClasses = cn(\n \"flex items-center gap-1.5 rounded-md px-3 py-2 text-sm font-medium transition-colors duration-150\",\n triggerStyles[variant],\n );\n\n const renderColumns = (item: MegaMenuItem) => (\n <div\n className={cn(\n \"grid gap-x-10 gap-y-8 sm:grid-cols-2\",\n item.featured ? \"\" : \"lg:grid-cols-3\",\n )}\n >\n {item.columns?.map((column, ci) => (\n <div key={column.title ?? ci}>\n {column.title ? (\n <h4\n className={cn(\n \"text-xs font-semibold uppercase tracking-[0.14em]\",\n inverse ? \"text-on-secondary/45\" : \"text-muted-foreground/70\",\n )}\n >\n {column.title}\n </h4>\n ) : null}\n <ul className={cn(column.title && \"mt-3\", \"space-y-0.5\")}>\n {column.links.map((link) => (\n <li key={link.href}>\n <a\n href={link.href}\n onClick={closeAll}\n className={cn(\n \"-mx-2 block rounded-md px-2 py-2 transition-colors duration-150\",\n inverse\n ? \"hover:bg-white/10\"\n : \"hover:bg-surface-strong\",\n )}\n >\n <span className=\"block text-sm font-medium text-foreground\">\n {link.label}\n </span>\n {link.description ? (\n <span\n className={cn(\n \"mt-0.5 block text-[13px] leading-snug\",\n inverse ? \"text-on-secondary/50\" : \"text-muted-foreground\",\n )}\n >\n {link.description}\n </span>\n ) : null}\n </a>\n </li>\n ))}\n </ul>\n </div>\n ))}\n </div>\n );\n\n const renderFeatured = (item: MegaMenuItem, mobile = false) => {\n const featured = item.featured;\n if (!featured) return null;\n const featuredStyle = featured.accent\n ? { backgroundColor: featured.accent, color: getContrastText(featured.accent) }\n : undefined;\n\n return (\n <a\n href={featured.href}\n onClick={closeAll}\n className={cn(\n \"group relative block overflow-hidden rounded-lg p-6 transition-transform duration-150 hover:-translate-y-0.5\",\n mobile && \"mt-8\",\n !featured.accent && \"bg-primary text-on-primary\",\n )}\n style={featuredStyle}\n >\n <div className=\"flex h-full flex-col justify-between gap-4\">\n <div>\n <h4 className=\"font-display text-base font-semibold tracking-tight\">\n {featured.title}\n </h4>\n {featured.description ? (\n <p className=\"mt-1.5 text-[13px] leading-relaxed opacity-80\">\n {featured.description}\n </p>\n ) : null}\n </div>\n {featured.cta ? (\n <span className=\"text-sm font-semibold underline decoration-1 underline-offset-4\">\n {featured.cta} →\n </span>\n ) : null}\n </div>\n <div\n aria-hidden\n className=\"pointer-events-none absolute -right-8 -top-8 h-28 w-28 rounded-full opacity-20 blur-2xl bg-black/40\"\n />\n </a>\n );\n };\n\n const handleKeyDown = (event: React.KeyboardEvent<HTMLElement>) => {\n if (event.key === \"Escape\") {\n closeAll();\n }\n onKeyDown?.(event);\n };\n\n return (\n <header\n className={cn(shell, variant === \"floating\" && \"px-3 sm:px-6\", className)}\n onKeyDown={handleKeyDown}\n {...props}\n >\n <nav className={bar} onMouseLeave={closePanels} aria-label=\"Mega menu\">\n <a href={brandHref} className=\"shrink-0\">\n {brandNode}\n </a>\n\n <ul className=\"hidden items-center gap-1 lg:flex\">\n {items.map((item, i) => {\n const hasPanel = Boolean(item.columns?.length || item.featured);\n const open = openIndex === i;\n return (\n <li key={item.label} className=\"relative\">\n {hasPanel ? (\n <button\n type=\"button\"\n aria-haspopup=\"true\"\n aria-expanded={open}\n aria-controls={panelId(i)}\n onClick={() => setOpenIndex(open ? null : i)}\n onMouseEnter={() => setOpenIndex(i)}\n className={cn(\n triggerClasses,\n open &&\n (inverse\n ? \"bg-white/10 text-on-secondary\"\n : \"bg-surface text-foreground\"),\n )}\n >\n <span className=\"flex items-center gap-1.5\">\n {item.label}\n {item.badge ? (\n <span\n className={cn(\n \"rounded-full px-1.5 py-0.5 text-[10px] font-semibold tracking-wide\",\n inverse\n ? \"bg-white/15 text-on-secondary\"\n : \"bg-primary-soft text-primary\",\n )}\n >\n {item.badge}\n </span>\n ) : null}\n </span>\n <ChevronDown\n className={cn(\n \"h-4 w-4 shrink-0 transition-transform duration-150\",\n open && \"rotate-180\",\n )}\n />\n </button>\n ) : (\n <a href={item.href ?? \"#\"} className={triggerClasses}>\n {item.label}\n {item.badge ? (\n <span className=\"rounded-full bg-primary-soft px-1.5 py-0.5 text-[10px] font-semibold tracking-wide text-primary\">\n {item.badge}\n </span>\n ) : null}\n </a>\n )}\n </li>\n );\n })}\n </ul>\n\n <div className=\"hidden items-center gap-3 lg:flex\">\n {actions}\n {cta}\n </div>\n\n <button\n type=\"button\"\n aria-label={mobileOpen ? \"Close menu\" : \"Open menu\"}\n aria-expanded={mobileOpen}\n onClick={() => setMobileOpen((o) => !o)}\n className={cn(\n \"inline-flex h-10 w-10 shrink-0 cursor-pointer items-center justify-center rounded-md lg:hidden\",\n \"transition-colors duration-150 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring\",\n inverse ? \"text-on-secondary hover:bg-white/10\" : \"text-foreground hover:bg-surface\",\n )}\n >\n {mobileOpen ? <X className=\"h-5 w-5\" /> : <Menu className=\"h-5 w-5\" />}\n </button>\n </nav>\n\n {/* Desktop mega panels */}\n {items.map((item, i) => {\n if (!item.columns?.length && !item.featured) return null;\n const open = openIndex === i;\n return (\n <div\n key={item.label}\n id={panelId(i)}\n role=\"region\"\n aria-label={`${item.label} menu`}\n onMouseEnter={() => setOpenIndex(i)}\n className={cn(\n \"absolute inset-x-0 top-full z-50 pt-2 transition-all duration-150\",\n open\n ? \"visible translate-y-0 opacity-100\"\n : \"pointer-events-none invisible -translate-y-1 opacity-0\",\n )}\n >\n <div\n className={cn(\n \"overflow-hidden rounded-xl border p-6 md:p-8\",\n panelBackground,\n item.featured ? \"lg:grid lg:grid-cols-[minmax(0,1fr)_auto] lg:gap-12\" : \"\",\n )}\n >\n {renderColumns(item)}\n {item.featured && (\n <div className={cn(\"mt-8 max-w-sm lg:mt-0 lg:w-64\")}>\n {renderFeatured(item)}\n </div>\n )}\n </div>\n </div>\n );\n })}\n\n {/* Mobile accordion panel */}\n <div\n className={cn(\n \"grid transition-[grid-template-rows,opacity] duration-200 lg:hidden\",\n mobileOpen ? \"grid-rows-[1fr] opacity-100\" : \"grid-rows-[0fr] opacity-0\",\n inverse\n ? \"border-t border-white/10 bg-[#101010]\"\n : variant === \"floating\"\n ? \"mx-3 mb-3 max-w-5xl overflow-hidden rounded-b-xl border border-border bg-surface\"\n : \"border-t border-border bg-background\",\n )}\n >\n <div className=\"min-h-0 overflow-hidden\">\n <ul className=\"flex flex-col py-4\">\n {items.map((item, i) =>\n item.columns?.length || item.featured ? (\n <li key={item.label} className=\"px-5\">\n <button\n type=\"button\"\n aria-expanded={mobileExpanded === i}\n onClick={() =>\n setMobileExpanded((prev) => (prev === i ? null : i))\n }\n className={cn(\n \"flex w-full items-center justify-between rounded-md px-2 py-2.5 text-sm font-medium transition-colors duration-150\",\n inverse\n ? \"text-on-secondary hover:bg-white/10\"\n : \"text-foreground hover:bg-surface\",\n )}\n >\n <span className=\"flex items-center gap-2\">\n {item.label}\n {item.badge ? (\n <span className=\"rounded-full bg-primary-soft px-1.5 py-0.5 text-[10px] font-semibold tracking-wide text-primary\">\n {item.badge}\n </span>\n ) : null}\n </span>\n <ChevronDown\n className={cn(\n \"h-4 w-4 shrink-0 transition-transform duration-150\",\n mobileExpanded === i && \"rotate-180\",\n )}\n />\n </button>\n <div\n className={cn(\n \"grid transition-[grid-template-rows,opacity] duration-200\",\n mobileExpanded === i\n ? \"grid-rows-[1fr] opacity-100\"\n : \"grid-rows-[0fr] opacity-0\",\n )}\n >\n <div className=\"min-h-0 overflow-hidden\">\n <div className=\"py-2 pl-1\">\n {renderColumns(item)}\n {item.featured ? (\n <div className=\"max-w-sm\">{renderFeatured(item, true)}</div>\n ) : null}\n </div>\n </div>\n </div>\n </li>\n ) : (\n <li key={item.label} className=\"px-5\">\n <a\n href={item.href ?? \"#\"}\n onClick={() => setMobileOpen(false)}\n className={cn(\n \"block rounded-md px-2 py-2.5 text-sm font-medium transition-colors duration-150\",\n inverse\n ? \"text-on-secondary/70 hover:bg-white/10 hover:text-on-secondary\"\n : \"text-muted-foreground hover:bg-surface hover:text-foreground\",\n )}\n >\n {item.label}\n </a>\n </li>\n ),\n )}\n {cta ? (\n <li className=\"px-8 pb-2 pt-3\">{cta}</li>\n ) : actions ? (\n <li className=\"mt-3 flex flex-wrap gap-3 px-8 pb-2\">{actions}</li>\n ) : null}\n </ul>\n </div>\n </div>\n </header>\n );\n};\nMegaMenu.displayName = \"MegaMenu\";","import { forwardRef, type HTMLAttributes } from \"react\";\nimport { cn } from \"../utils/cn\";\n\nexport interface LogoItem {\n name: string;\n src?: string;\n href?: string;\n}\n\nexport interface LogoCloudProps extends HTMLAttributes<HTMLDivElement> {\n logos: LogoItem[];\n title?: string;\n /** Visual option: quiet list · infinite marquee · hairline strip */\n option?: \"quiet\" | \"marquee\" | \"strip\";\n}\n\nconst LogoText = ({ name }: { name: string }) => (\n <span className=\"text-lg font-semibold tracking-tight text-foreground/45 transition-colors duration-200 group-hover:text-foreground\">\n {name}\n </span>\n);\n\nconst LogoMark = ({ logo }: { logo: LogoItem }) =>\n logo.src ? (\n <img\n src={logo.src}\n alt={logo.name}\n loading=\"lazy\"\n className={cn(\n \"max-h-7 w-auto opacity-50 grayscale transition-all duration-200 group-hover:opacity-90 group-hover:grayscale-0\",\n \"h-7\",\n )}\n />\n ) : (\n <LogoText name={logo.name} />\n );\n\nexport const LogoCloud = forwardRef<HTMLDivElement, LogoCloudProps>(\n ({ className, logos, title, option = \"quiet\", ...props }, ref) => {\n if (option === \"marquee\") {\n const doubled = [...logos, ...logos];\n return (\n <div ref={ref} className={cn(\"w-full overflow-hidden\", className)} {...props}>\n {title ? (\n <p className=\"mb-8 text-center text-xs font-semibold uppercase tracking-[0.18em] text-muted-foreground\">\n {title}\n </p>\n ) : null}\n <div className=\"mask-fade-x\">\n <div className=\"flex w-max animate-marquee gap-14 pr-14 motion-reduce:animate-none\">\n {doubled.map((logo, i) => (\n <div key={`${logo.name}-${i}`} className=\"group shrink-0\">\n <LogoMark logo={logo} />\n </div>\n ))}\n </div>\n </div>\n </div>\n );\n }\n\n if (option === \"strip\") {\n return (\n <div ref={ref} className={cn(\"w-full\", className)} {...props}>\n {title ? (\n <p className=\"mb-8 text-center text-xs font-semibold uppercase tracking-[0.18em] text-muted-foreground\">\n {title}\n </p>\n ) : null}\n <ul className=\"flex flex-wrap items-center justify-center gap-x-10 gap-y-4 rounded-2xl border border-border bg-surface px-6 py-7 sm:gap-x-14\">\n {logos.map((logo) => (\n <li key={logo.name} className=\"group\">\n <LogoMark logo={logo} />\n </li>\n ))}\n </ul>\n </div>\n );\n }\n\n // quiet — unbounded spread of wordmarks.\n return (\n <div ref={ref} className={cn(\"w-full\", className)} {...props}>\n {title ? (\n <p className=\"mb-8 text-center text-xs font-semibold uppercase tracking-[0.18em] text-muted-foreground\">\n {title}\n </p>\n ) : null}\n <ul className=\"flex flex-wrap items-center justify-center gap-x-12 gap-y-6\">\n {logos.map((logo) => (\n <li key={logo.name} className=\"group\">\n <LogoMark logo={logo} />\n </li>\n ))}\n </ul>\n </div>\n );\n },\n);\nLogoCloud.displayName = \"LogoCloud\";","import { forwardRef, type HTMLAttributes, type ReactNode } from \"react\";\nimport { cn } from \"../utils/cn\";\nimport { getContrastText } from \"../utils/contrast\";\n\nexport interface FeatureItem {\n icon?: ReactNode;\n title: string;\n description?: string;\n accent?: string;\n}\n\nexport interface FeatureCardProps extends Omit<HTMLAttributes<HTMLDivElement>, \"title\"> {\n icon?: ReactNode;\n title: ReactNode;\n description?: ReactNode;\n /** Arbitrary CSS color for the icon chip; glyph color computed for contrast. */\n accent?: string;\n large?: boolean;\n}\n\nexport const FeatureCard = forwardRef<HTMLDivElement, FeatureCardProps>(\n ({ className, icon, title, description, accent, large = false, ...props }, ref) => {\n const chipStyle = accent\n ? { backgroundColor: accent, color: getContrastText(accent, \"#111111\", \"#ffffff\") }\n : undefined;\n\n return (\n <div\n ref={ref}\n className={cn(\n \"group relative flex h-full flex-col rounded-xl border border-border bg-surface p-7 transition-colors duration-200 hover:border-foreground/15\",\n className,\n )}\n {...props}\n >\n {icon ? (\n <div\n className={cn(\n \"mb-5 inline-flex h-10 w-10 items-center justify-center rounded-lg text-[1.05rem]\",\n !accent && \"bg-primary-soft text-primary\",\n )}\n style={chipStyle}\n >\n {icon}\n </div>\n ) : null}\n <h3 className={cn(\"font-display font-semibold tracking-tight text-foreground\", large ? \"text-2xl\" : \"text-lg\")}>\n {title}\n </h3>\n {description ? (\n <p className={cn(\"mt-2.5 text-pretty leading-relaxed text-muted-foreground\", large ? \"text-[15px]\" : \"text-sm\")}>\n {description}\n </p>\n ) : null}\n </div>\n );\n },\n);\nFeatureCard.displayName = \"FeatureCard\";\n\nexport interface FeatureGridProps extends Omit<HTMLAttributes<HTMLDivElement>, \"title\"> {\n features: FeatureItem[];\n option?: \"columns\" | \"bento\" | \"editorialRows\";\n columns?: 2 | 3 | 4;\n}\n\nconst gridCols: Record<NonNullable<FeatureGridProps[\"columns\"]>, string> = {\n 2: \"sm:grid-cols-2\",\n 3: \"sm:grid-cols-2 lg:grid-cols-3\",\n 4: \"sm:grid-cols-2 lg:grid-cols-4\",\n};\n\n/** Asymmetric bento layout for up to 6 features. */\nconst bentoSpans: string[] = [\n \"sm:col-span-2 lg:row-span-2\",\n \"\",\n \"\",\n \"lg:col-span-2\",\n \"\",\n \"lg:col-span-2\",\n];\n\nexport const FeatureGrid = forwardRef<HTMLDivElement, FeatureGridProps>(\n ({ className, features, option = \"columns\", columns = 3, ...props }, ref) => {\n if (option === \"editorialRows\") {\n return (\n <div ref={ref} className={cn(\"w-full\", className)} {...props}>\n <div className=\"divide-y divide-border border-t border-b border-border\">\n {features.map((feature, i) => (\n <div\n key={i}\n className=\"group flex flex-col gap-3 py-6 transition-colors duration-200 sm:flex-row sm:items-baseline sm:gap-10\"\n >\n <span className=\"text-sm font-medium tabular-nums text-muted-foreground/60 sm:w-12\">\n {String(i + 1).padStart(2, \"0\")}\n </span>\n <div className=\"flex-1 sm:flex sm:items-baseline sm:justify-between sm:gap-10\">\n <h3 className=\"font-display text-xl font-semibold tracking-tight text-foreground sm:w-2/5\">\n {feature.title}\n </h3>\n <p className=\"mt-1.5 text-sm leading-7 text-muted-foreground sm:mt-0 sm:w-1/2\">\n {feature.description}\n </p>\n </div>\n {feature.icon ? (\n <span className=\"hidden text-foreground/30 sm:inline-flex\">{feature.icon}</span>\n ) : null}\n </div>\n ))}\n </div>\n </div>\n );\n }\n\n if (option === \"bento\") {\n return (\n <div\n ref={ref}\n className={cn(\n \"grid grid-cols-1 gap-4 sm:grid-cols-2 lg:grid-cols-4 lg:auto-rows-[minmax(9rem,auto)]\",\n className,\n )}\n {...props}\n >\n {features.map((feature, i) =>\n feature ? (\n <div key={i} className={cn(i < bentoSpans.length && bentoSpans[i])}>\n <FeatureCard {...feature} large={i === 0} className=\"h-full\" />\n </div>\n ) : null,\n )}\n </div>\n );\n }\n\n return (\n <div\n ref={ref}\n className={cn(\n \"grid grid-cols-1 gap-4\",\n gridCols[columns],\n className,\n )}\n {...props}\n >\n {features.map((feature, i) => (\n <FeatureCard key={i} {...feature} className=\"h-full\" />\n ))}\n </div>\n );\n },\n);\nFeatureGrid.displayName = \"FeatureGrid\";","import { forwardRef, type HTMLAttributes, type ReactNode } from \"react\";\nimport { cn } from \"../utils/cn\";\nimport { ArrowUp, ArrowDown } from \"../icons\";\n\nexport interface Stat {\n value: string;\n label: string;\n /** Small unit rendered inline with the value, e.g. \"ms\" or \"₺\". */\n suffix?: string;\n /** Trend change in percent — renders an up/down badge. */\n delta?: number;\n /** Optional supporting copy. */\n sub?: string;\n icon?: ReactNode;\n /** Highlights the value with the primary token. */\n accent?: boolean;\n}\n\nexport interface StatsProps extends HTMLAttributes<HTMLDListElement> {\n stats: Stat[];\n option?: \"editorial\" | \"hairline\" | \"cells\" | \"ticker\";\n columns?: 2 | 3 | 4;\n}\n\nconst valueBase =\n \"font-display font-semibold tabular-nums tracking-[-0.02em] text-foreground\";\n\nconst suffixBase = \"ml-1 font-sans text-sm font-normal tracking-normal text-muted-foreground\";\n\nconst gridCols: Record<NonNullable<StatsProps[\"columns\"]>, string> = {\n 2: \"sm:grid-cols-2\",\n 3: \"sm:grid-cols-2 lg:grid-cols-3\",\n 4: \"sm:grid-cols-2 lg:grid-cols-4\",\n};\n\nfunction DeltaBadge({ delta }: { delta: number }) {\n const isUp = delta >= 0;\n const Icon = isUp ? ArrowUp : ArrowDown;\n return (\n <span\n className={cn(\n \"inline-flex items-center gap-1 rounded-full px-2 py-0.5 text-xs font-semibold tabular-nums\",\n isUp ? \"bg-accent/10 text-accent\" : \"bg-danger-soft text-danger\",\n )}\n >\n <Icon className=\"h-3 w-3\" />\n {Math.abs(delta)}%\n </span>\n );\n}\n\nexport const Stats = forwardRef<HTMLDListElement, StatsProps>(\n ({ className, stats, option = \"editorial\", columns = 4, ...props }, ref) => {\n if (option === \"ticker\") {\n return (\n <dl\n ref={ref}\n className={cn(\n \"flex w-full items-stretch overflow-x-auto rounded-2xl border border-border bg-surface\",\n className,\n )}\n {...props}\n >\n {stats.map((stat, i) => (\n <div\n key={stat.label}\n className={cn(\n \"flex min-w-[11rem] flex-1 flex-col gap-3 p-6\",\n i > 0 && \"border-l border-border\",\n )}\n >\n <div className=\"flex items-center justify-between gap-3\">\n <dt className=\"text-xs font-semibold uppercase tracking-[0.14em] text-muted-foreground\">\n {stat.label}\n </dt>\n {typeof stat.delta === \"number\" ? <DeltaBadge delta={stat.delta} /> : null}\n </div>\n <dd className={cn(valueBase, \"text-3xl\", stat.accent ? \"text-primary\" : undefined)}>\n {stat.value}\n {stat.suffix ? <span className={suffixBase}>{stat.suffix}</span> : null}\n </dd>\n {stat.sub ? (\n <p className=\"text-[13px] leading-5 text-muted-foreground\">{stat.sub}</p>\n ) : null}\n </div>\n ))}\n </dl>\n );\n }\n\n if (option === \"cells\") {\n return (\n <dl\n ref={ref}\n className={cn(\"grid grid-cols-1 gap-4\", gridCols[columns], className)}\n {...props}\n >\n {stats.map((stat) => (\n <div\n key={stat.label}\n className=\"flex min-h-[8.5rem] flex-col justify-between rounded-xl border border-border bg-surface p-6\"\n >\n <dd className={cn(valueBase, \"text-3xl\", stat.accent ? \"text-primary\" : undefined)}>\n {stat.value}\n {stat.suffix ? <span className={suffixBase}>{stat.suffix}</span> : null}\n </dd>\n <div className=\"mt-5 flex items-center justify-between gap-3\">\n <dt className=\"text-sm text-muted-foreground\">{stat.label}</dt>\n {stat.icon ? (\n <span className=\"text-foreground/30\">{stat.icon}</span>\n ) : null}\n </div>\n </div>\n ))}\n </dl>\n );\n }\n\n if (option === \"hairline\") {\n return (\n <dl\n ref={ref}\n className={cn(\"grid grid-cols-1 gap-y-10\", gridCols[columns], className)}\n {...props}\n >\n {stats.map((stat, i) => (\n <div\n key={stat.label}\n className={cn(\n \"text-center\",\n columns > 1 && i > 0 && \"sm:border-l sm:border-border\",\n )}\n >\n <dd className={cn(valueBase, \"text-5xl\", stat.accent ? \"text-primary\" : undefined)}>\n {stat.value}\n {stat.suffix ? <span className={suffixBase}>{stat.suffix}</span> : null}\n </dd>\n <dt className=\"mt-3 text-xs font-semibold uppercase tracking-[0.16em] text-muted-foreground\">\n {stat.label}\n </dt>\n </div>\n ))}\n </dl>\n );\n }\n\n // editorial — label above, oversized number, hairline rule under.\n return (\n <dl\n ref={ref}\n className={cn(\"grid grid-cols-1 gap-x-10 gap-y-12\", gridCols[columns], className)}\n {...props}\n >\n {stats.map((stat) => (\n <div key={stat.label} className=\"border-t border-border pt-6\">\n <div className=\"flex items-center justify-between gap-3\">\n <dt className=\"text-xs font-semibold uppercase tracking-[0.18em] text-muted-foreground\">\n {stat.label}\n </dt>\n {typeof stat.delta === \"number\" ? <DeltaBadge delta={stat.delta} /> : null}\n </div>\n <dd\n className={cn(\n valueBase,\n \"mt-4 text-5xl sm:text-6xl\",\n stat.accent ? \"text-primary\" : undefined,\n )}\n >\n {stat.value}\n {stat.suffix ? <span className={suffixBase}>{stat.suffix}</span> : null}\n </dd>\n {stat.sub ? (\n <p className=\"mt-3 max-w-xs text-[13px] leading-5 text-muted-foreground\">{stat.sub}</p>\n ) : null}\n </div>\n ))}\n </dl>\n );\n },\n);\nStats.displayName = \"Stats\";","import { useState, type HTMLAttributes } from \"react\";\nimport { cn } from \"../utils/cn\";\nimport { getContrastText } from \"../utils/contrast\";\nimport { useTokenForeground } from \"../utils/useTokenForeground\";\nimport { ArrowRight, Check } from \"../icons\";\n\nexport interface Plan {\n name: string;\n description?: string;\n monthly: number | null;\n yearly: number | null;\n features: string[];\n cta?: string;\n href?: string;\n highlighted?: boolean;\n customColor?: string;\n}\n\nexport interface PricingProps extends Omit<HTMLAttributes<HTMLDivElement>, \"onSelect\"> {\n plans: Plan[];\n option?: \"cards\" | \"bento\" | \"compact\";\n defaultBilling?: \"monthly\" | \"yearly\";\n onSelect?: (plan: Plan, billing: \"monthly\" | \"yearly\") => void;\n}\n\nfunction PriceValue({\n value,\n billing,\n dim,\n}: {\n value: number | null;\n billing: \"monthly\" | \"yearly\";\n /** False when rendered on a colored background where opacity would kill contrast. */\n dim?: boolean;\n}) {\n if (value === null) {\n return <span>Custom</span>;\n }\n return (\n <>\n <span className=\"text-[2.6rem] font-semibold tracking-tight sm:text-[3rem]\">${value}</span>\n <span className={cn(\"text-sm font-normal\", dim && \"opacity-60\")}>\n /{billing === \"monthly\" ? \"mo\" : \"yr\"}\n </span>\n </>\n );\n}\n\nfunction BillingToggle({\n billing,\n onChange,\n dark,\n}: {\n billing: \"monthly\" | \"yearly\";\n onChange: (b: \"monthly\" | \"yearly\") => void;\n dark?: boolean;\n}) {\n // The accent token is a background color, but its shipped \"on-accent\"\n // pairing isn't guaranteed to be contrast-safe (e.g. white on amber).\n // Derive the badge text color from the actual accent value instead.\n const accentText = useTokenForeground(\"--color-accent\");\n return (\n <div className=\"mb-10 flex items-center justify-center gap-4\">\n <span\n className={cn(\n \"text-sm font-medium transition-colors\",\n billing === \"monthly\" ? (dark ? \"text-white\" : \"text-foreground\") : \"text-muted-foreground\",\n )}\n >\n Monthly\n </span>\n <button\n type=\"button\"\n role=\"switch\"\n aria-checked={billing === \"yearly\"}\n aria-label=\"Billing period\"\n onClick={() => onChange(billing === \"monthly\" ? \"yearly\" : \"monthly\")}\n className={cn(\n \"relative inline-flex h-6 w-11 shrink-0 cursor-pointer items-center rounded-full transition-colors duration-200\",\n \"focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 focus-visible:ring-offset-background\",\n billing === \"yearly\" ? \"bg-primary\" : \"bg-border\",\n )}\n >\n <span\n className={cn(\n \"inline-block h-4 w-4 transform rounded-full bg-white shadow transition-transform duration-200\",\n billing === \"yearly\" ? \"translate-x-6\" : \"translate-x-1\",\n )}\n />\n </button>\n <span\n className={cn(\n \"flex items-center gap-2 text-sm font-medium transition-colors\",\n billing === \"yearly\" ? (dark ? \"text-white\" : \"text-foreground\") : \"text-muted-foreground\",\n )}\n >\n Yearly\n <span\n className=\"rounded-full bg-accent px-2 py-0.5 text-xs font-semibold\"\n style={{ color: accentText }}\n >\n −2 ay\n </span>\n </span>\n </div>\n );\n}\n\nexport const Pricing = ({\n className,\n plans,\n option = \"cards\",\n defaultBilling = \"monthly\",\n onSelect,\n ...props\n}: PricingProps) => {\n const [billing, setBilling] = useState<\"monthly\" | \"yearly\">(defaultBilling);\n\n const price = (plan: Plan) => (billing === \"monthly\" ? plan.monthly : plan.yearly);\n const priceLabel = (v: number | null) => (v === null ? \"Custom\" : `$${v}`);\n\n const planButton = (plan: Plan, dark?: boolean) => {\n const isHighlighted = plan.highlighted && !plan.customColor;\n const fg = plan.customColor ? getContrastText(plan.customColor, \"#111111\", \"#ffffff\") : undefined;\n return (\n <button\n type=\"button\"\n onClick={() => onSelect?.(plan, billing)}\n className={cn(\n \"inline-flex h-11 cursor-pointer items-center justify-center gap-2 rounded-lg px-5 text-sm font-semibold transition-colors duration-200\",\n \"focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2\",\n isHighlighted || plan.customColor\n ? \"hover:brightness-95\"\n : dark\n ? \"bg-white text-black hover:bg-white/90\"\n : \"border border-border text-foreground hover:bg-surface\",\n )}\n style={\n plan.customColor\n ? { backgroundColor: plan.customColor, color: fg }\n : isHighlighted\n ? {\n backgroundColor: \"rgb(var(--color-primary))\",\n color: \"rgb(var(--color-on-primary))\",\n }\n : undefined\n }\n >\n {plan.cta || \"Start\"}\n <ArrowRight className=\"h-4 w-4 opacity-60\" />\n </button>\n );\n };\n\n if (option === \"compact\") {\n return (\n <div className={cn(\"w-full\", className)} {...props}>\n <div className=\"divide-y divide-border overflow-hidden rounded-xl border border-border bg-surface\">\n {plans.map((plan) => {\n const isHighlighted = plan.highlighted && !plan.customColor;\n const bg = plan.customColor ? \"rgb(var(--color-surface))\" : isHighlighted ? \"rgb(var(--color-primary-soft))\" : undefined;\n const fg = plan.customColor ? plan.customColor : isHighlighted ? \"rgb(var(--color-primary))\" : undefined;\n return (\n <div\n key={plan.name}\n className={cn(\n \"group flex flex-col gap-5 p-5 transition-colors duration-200 hover:bg-surface-strong sm:flex-row sm:items-center sm:justify-between\",\n isHighlighted && \"bg-primary-soft/60\",\n )}\n style={bg ? { backgroundColor: bg } : undefined}\n >\n <div className=\"min-w-0\">\n <div className=\"flex items-center gap-2.5\">\n <h3 className=\"font-display text-lg font-semibold tracking-tight text-foreground\">\n {plan.name}\n </h3>\n {isHighlighted ? (\n <span className=\"rounded-full bg-primary px-2.5 py-0.5 text-[11px] font-semibold text-on-primary uppercase tracking-wider\">\n Popular\n </span>\n ) : null}\n </div>\n {plan.description ? (\n <p className=\"mt-1 truncate text-sm text-muted-foreground\">{plan.description}</p>\n ) : null}\n </div>\n <div className=\"flex items-center gap-6\">\n <ul className=\"hidden items-center gap-4 lg:flex\">\n {plan.features.slice(0, 3).map((f) => (\n <li key={f} className=\"flex items-center gap-1.5 text-sm text-muted-foreground\" style={{ color: fg }}>\n <Check className=\"h-3.5 w-3.5 text-current\" />\n {f}\n </li>\n ))}\n </ul>\n <div className=\"font-display text-2xl font-semibold tracking-tight text-foreground\">\n {priceLabel(price(plan))}\n {price(plan) !== null ? (\n <span className=\"text-sm font-normal text-muted-foreground\">/{billing === \"monthly\" ? \"mo\" : \"yr\"}</span>\n ) : null}\n </div>\n {planButton(plan)}\n </div>\n </div>\n );\n })}\n </div>\n </div>\n );\n }\n\n if (option === \"bento\") {\n return (\n <div className={cn(\"w-full\", className)} {...props}>\n <div className=\"grid grid-cols-1 gap-4 lg:grid-cols-2\">\n {plans.map((plan) => {\n const isHighlighted = plan.highlighted && !plan.customColor;\n const bg = plan.customColor || (isHighlighted ? \"rgb(var(--color-primary))\" : undefined);\n const fg = plan.customColor\n ? getContrastText(plan.customColor, \"#111111\", \"#ffffff\")\n : isHighlighted\n ? \"rgb(var(--color-on-primary))\"\n : undefined;\n return (\n <div\n key={plan.name}\n className={cn(\n \"flex h-full flex-col rounded-xl p-8\",\n bg\n ? \"lg:col-span-2\"\n : \"border border-border bg-surface\",\n )}\n style={bg ? { backgroundColor: bg, color: fg } : undefined}\n >\n <div className=\"flex flex-wrap items-start justify-between gap-4\">\n <div>\n <h3 className={cn(\"font-display text-xl font-semibold tracking-tight\", bg ? \"text-current\" : \"text-foreground\")}>\n {plan.name}\n </h3>\n {plan.description ? (\n <p className={cn(\"mt-1.5 text-sm\", bg ? undefined : \"text-muted-foreground\")}>\n {plan.description}\n </p>\n ) : null}\n </div>\n <div className={cn(\"font-display\", bg ? \"text-current\" : \"text-foreground\")}>\n <PriceValue value={price(plan)} billing={billing} dim={!bg} />\n </div>\n </div>\n <ul\n className={cn(\n \"mt-7 grid grid-cols-1 gap-x-8 gap-y-2.5 text-sm sm:grid-cols-2\",\n bg ? \"lg:max-w-2xl\" : undefined,\n )}\n >\n {plan.features.map((feature) => (\n <li key={feature} className={cn(\"flex items-start gap-2.5\", bg ? \"text-current\" : \"text-muted-foreground\")}>\n <Check className={cn(\"mt-0.5 h-4 w-4 shrink-0\", bg ? \"text-current\" : \"text-primary\")} />\n {feature}\n </li>\n ))}\n </ul>\n <div className=\"mt-8\">{planButton(plan, !bg)}</div>\n </div>\n );\n })}\n </div>\n </div>\n );\n }\n\n return (\n <div className={cn(\"w-full\", className)} {...props}>\n <BillingToggle billing={billing} onChange={setBilling} />\n <div className=\"grid grid-cols-1 gap-5 md:grid-cols-2 lg:grid-cols-3\">\n {plans.map((plan) => {\n const isHighlighted = plan.highlighted && !plan.customColor;\n const bg = plan.customColor || (isHighlighted ? \"rgb(var(--color-primary))\" : undefined);\n const fg = plan.customColor\n ? getContrastText(plan.customColor, \"#111111\", \"#ffffff\")\n : isHighlighted\n ? \"rgb(var(--color-on-primary))\"\n : undefined;\n return (\n <div\n key={plan.name}\n className={cn(\n \"relative flex flex-col rounded-xl p-7\",\n bg ? \"shadow-raised\" : \"border border-border bg-surface\",\n !bg && isHighlighted && \"border-primary\",\n )}\n style={bg ? { backgroundColor: bg, color: fg } : undefined}\n >\n {isHighlighted ? (\n <span\n className={cn(\n \"absolute -top-3 left-7 rounded-full px-2.5 py-1 text-[11px] font-semibold uppercase tracking-wider\",\n !bg && \"bg-primary text-on-primary\",\n )}\n style={\n bg\n ? { backgroundColor: \"rgb(var(--color-on-primary))\", color: \"rgb(var(--color-primary))\" }\n : undefined\n }\n >\n Most popular\n </span>\n ) : null}\n <h3 className={cn(\"font-display text-lg font-semibold tracking-tight\", bg ? \"text-current\" : \"text-foreground\")}>\n {plan.name}\n </h3>\n {plan.description ? (\n <p className={cn(\"mt-1.5 text-sm\", bg ? undefined : \"text-muted-foreground\")}>\n {plan.description}\n </p>\n ) : null}\n <div className={cn(\"mt-6 flex items-baseline font-display\", bg ? \"text-current\" : \"text-foreground\")}>\n <PriceValue value={price(plan)} billing={billing} dim={!bg} />\n </div>\n <ul className={cn(\"mt-7 flex-1 space-y-2.5 text-sm\", bg ? \"text-current\" : \"text-muted-foreground\")}>\n {plan.features.map((feature) => (\n <li key={feature} className=\"flex items-start gap-2.5\">\n <Check className={cn(\"mt-0.5 h-4 w-4 shrink-0\", bg ? \"text-current\" : \"text-primary\")} />\n {feature}\n </li>\n ))}\n </ul>\n <div className=\"mt-8\">{planButton(plan, !bg)}</div>\n </div>\n );\n })}\n </div>\n </div>\n );\n};\nPricing.displayName = \"Pricing\";","import { forwardRef, useState, type HTMLAttributes, type ReactNode } from \"react\";\nimport { cn } from \"../utils/cn\";\nimport { getContrastText } from \"../utils/contrast\";\nimport { ChevronLeft, ChevronRight, Quote, Star } from \"../icons\";\n\nexport interface Testimonial {\n quote: string;\n author: string;\n role?: string;\n company?: string;\n avatar?: ReactNode;\n /** Arbitrary CSS color for the initials avatar. */\n accent?: string;\n rating?: number;\n}\n\nexport interface TestimonialCardProps extends HTMLAttributes<HTMLElement> {\n testimonial: Testimonial;\n}\n\nconst initials = (name: string) =>\n name\n .split(\" \")\n .map((p) => p[0])\n .join(\"\")\n .slice(0, 2)\n .toUpperCase();\n\nexport const TestimonialCard = forwardRef<HTMLElement, TestimonialCardProps>(\n function TestimonialCard({ className, testimonial, ...props }, ref) {\n const { quote, author, role, company, avatar, accent, rating } = testimonial;\n const badgeStyle = accent\n ? { backgroundColor: accent, color: getContrastText(accent, \"#111111\", \"#ffffff\") }\n : undefined;\n\n return (\n <figure\n ref={ref}\n className={cn(\n \"mb-4 flex flex-col break-inside-avoid rounded-2xl border border-border bg-surface p-7\",\n className,\n )}\n {...props}\n >\n <div className=\"mb-5 flex items-center justify-between\">\n <Quote className={cn(\"h-6 w-6\", accent ? undefined : \"text-primary/30\")} style={accent ? { color: accent } : undefined} />\n {rating ? (\n <span className=\"flex items-center gap-0.5 text-amber-500\" aria-label={`${rating} / 5`}>\n {Array.from({ length: 5 }).map((_, i) => (\n <Star key={i} className=\"h-3.5 w-3.5\" />\n ))}\n </span>\n ) : null}\n </div>\n <blockquote className=\"flex-1 text-[15px] leading-7 text-foreground/85\">{quote}</blockquote>\n <figcaption className=\"mt-6 flex items-center gap-3\">\n {avatar ? (\n avatar\n ) : (\n <span\n style={badgeStyle}\n className={cn(\n \"inline-flex h-10 w-10 shrink-0 items-center justify-center rounded-full text-xs font-bold\",\n !accent && \"bg-primary-soft text-primary\",\n )}\n >\n {initials(author)}\n </span>\n )}\n <div>\n <div className=\"text-sm font-semibold text-foreground\">{author}</div>\n {(role || company) && (\n <div className=\"text-xs text-muted-foreground\">\n {[role, company].filter(Boolean).join(\" · \")}\n </div>\n )}\n </div>\n </figcaption>\n </figure>\n );\n },\n);\n\n/** Holds per-option rendering + controls together. */\nexport interface TestimonialsProps extends HTMLAttributes<HTMLDivElement> {\n items: Testimonial[];\n option?: \"grid\" | \"carousel\" | \"marquee\";\n title?: string;\n}\n\nexport const Testimonials = ({ className, items, option = \"grid\", ...props }: TestimonialsProps) => {\n if (option === \"carousel\") {\n return <Carousel items={items} className={className} {...props} />;\n }\n\n if (option === \"marquee\") {\n const doubled = [...items, ...items];\n return (\n <div className={cn(\"w-full overflow-hidden\", className)} {...props}>\n <div className=\"mask-fade-x\">\n <div className=\"flex w-max animate-marquee gap-4 pr-4 motion-reduce:animate-none\">\n {doubled.map((item, i) => (\n <div key={i} className=\"w-[19rem] shrink-0 sm:w-[24rem]\">\n <TestimonialCard testimonial={item} className=\"m-0\" />\n </div>\n ))}\n </div>\n </div>\n </div>\n );\n }\n\n return (\n <div className={cn(\"columns-1 gap-4 md:columns-2 lg:columns-3\", className)} {...props}>\n {items.map((item, i) => (\n <TestimonialCard key={i} testimonial={item} />\n ))}\n </div>\n );\n};\nTestimonials.displayName = \"Testimonials\";\n\nfunction Carousel({\n items,\n className,\n ...props\n}: HTMLAttributes<HTMLDivElement> & { items: Testimonial[] }) {\n const [index, setIndex] = useState(0);\n const item = items[index % items.length];\n const badgeStyle = item.accent\n ? { backgroundColor: item.accent, color: getContrastText(item.accent, \"#111111\", \"#ffffff\") }\n : undefined;\n\n const go = (dir: 1 | -1) => setIndex((i) => (i + dir + items.length) % items.length);\n\n return (\n <div className={cn(\"mx-auto w-full max-w-3xl\", className)} {...props}>\n <figure className=\"relative rounded-2xl border border-border bg-surface p-10 text-center sm:p-14\">\n <Quote\n className={cn(\"mx-auto mb-6 h-8 w-8\", item.accent ? undefined : \"text-primary/25\")}\n style={item.accent ? { color: item.accent } : undefined}\n aria-hidden\n />\n <blockquote className=\"font-display text-balance text-xl font-medium leading-relaxed tracking-tight text-foreground sm:text-2xl\">\n {item.quote}\n </blockquote>\n <figcaption className=\"mt-8 flex items-center justify-center gap-3\">\n {item.avatar ? (\n item.avatar\n ) : (\n <span\n style={badgeStyle}\n className={cn(\n \"inline-flex h-11 w-11 items-center justify-center rounded-full text-xs font-bold\",\n !item.accent && \"bg-foreground text-background\",\n )}\n >\n {initials(item.author)}\n </span>\n )}\n <div className=\"text-left\">\n <div className=\"text-sm font-semibold text-foreground\">{item.author}</div>\n <div className=\"text-xs text-muted-foreground\">\n {[item.role, item.company].filter(Boolean).join(\" · \")}\n </div>\n </div>\n </figcaption>\n </figure>\n\n <div className=\"mt-6 flex items-center justify-center gap-4\">\n <button\n type=\"button\"\n aria-label=\"Previous testimonial\"\n onClick={() => go(-1)}\n className=\"inline-flex h-10 w-10 cursor-pointer items-center justify-center rounded-full border border-border bg-surface text-foreground transition-colors duration-150 hover:border-foreground/25 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring\"\n >\n <ChevronLeft className=\"h-4 w-4\" />\n </button>\n <div className=\"flex items-center gap-1.5\">\n {items.map((_, i) => (\n <button\n key={i}\n type=\"button\"\n aria-label={`Testimonial ${i + 1}`}\n aria-current={i === index}\n onClick={() => setIndex(i)}\n className={cn(\n \"h-1.5 cursor-pointer rounded-full transition-all duration-200\",\n i === index ? \"w-6 bg-foreground\" : \"w-1.5 bg-foreground/25 hover:bg-foreground/50\",\n )}\n />\n ))}\n </div>\n <button\n type=\"button\"\n aria-label=\"Next testimonial\"\n onClick={() => go(1)}\n className=\"inline-flex h-10 w-10 cursor-pointer items-center justify-center rounded-full border border-border bg-surface text-foreground transition-colors duration-150 hover:border-foreground/25 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring\"\n >\n <ChevronRight className=\"h-4 w-4\" />\n </button>\n </div>\n </div>\n );\n}","import { forwardRef, type HTMLAttributes, type ReactNode } from \"react\";\nimport { cn } from \"../utils/cn\";\nimport { useTokenForeground } from \"../utils/useTokenForeground\";\nimport { Container } from \"./Container\";\n\nexport interface CTAProps extends Omit<HTMLAttributes<HTMLElement>, \"title\"> {\n title: ReactNode;\n description?: ReactNode;\n action?: ReactNode;\n secondaryAction?: ReactNode;\n option?: \"panel\" | \"surface\" | \"inverse\";\n align?: \"left\" | \"center\";\n}\n\nexport const CTA = forwardRef<HTMLElement, CTAProps>(\n (\n { className, title, description, action, secondaryAction, option = \"panel\", align = \"left\", id, ...props },\n ref,\n ) => {\n const isPanel = option === \"panel\";\n const isInverse = option === \"inverse\";\n // panel → brand gradient; inverse → ink. Readable text must be derived from\n // the actual painting token so contrast survives any palette.\n const fg = useTokenForeground(isInverse ? \"--color-secondary\" : \"--color-primary\");\n\n /** surface — quiet paper band: hairline rule, big display type, actions right. */\n if (option === \"surface\") {\n return (\n <section ref={ref} id={id} className={cn(\"w-full\", className)} {...props}>\n <Container className=\"py-20 sm:py-24\">\n <div\n className={cn(\n \"flex flex-col gap-10 border-t border-border pt-14 sm:flex-row sm:items-end sm:justify-between sm:pt-16\",\n align === \"center\" && \"items-center text-center sm:flex-col sm:items-center\",\n )}\n >\n <div className={cn(\"max-w-3xl\", align === \"center\" && \"mx-auto\")}>\n <h2 className=\"font-display text-4xl font-semibold leading-[1.03] tracking-[-0.03em] text-balance text-foreground sm:text-6xl\">\n {title}\n </h2>\n {description ? (\n <p className={cn(\"mt-5 max-w-xl text-pretty text-base leading-7 text-muted-foreground sm:text-lg\", align === \"center\" && \"mx-auto\")}>\n {description}\n </p>\n ) : null}\n </div>\n <div\n className={cn(\n \"flex flex-wrap items-center gap-4\",\n align === \"center\" && \"justify-center\",\n )}\n >\n {action}\n {secondaryAction}\n </div>\n </div>\n </Container>\n </section>\n );\n }\n\n return (\n <section ref={ref} id={id} className={cn(\"w-full py-6 pb-20\", className)} {...props}>\n <Container>\n {isPanel ? (\n <div\n className=\"relative overflow-hidden rounded-[1.75rem] px-7 py-14 sm:px-14 sm:py-20\"\n style={{\n background:\n \"radial-gradient(120% 160% at 0% 0%, rgb(var(--color-primary)), rgb(var(--color-primary-hover)) 55%, rgb(var(--color-primary) / 0.85))\",\n color: fg,\n }}\n >\n <div aria-hidden className=\"pointer-events-none absolute inset-0 grain opacity-[0.07] mix-blend-overlay\" />\n <div\n aria-hidden\n className=\"pointer-events-none absolute -right-24 -top-24 h-72 w-72 rounded-full\"\n style={{ background: \"rgb(var(--color-accent))\", opacity: 0.35, filter: \"blur(60px)\" }}\n />\n <div\n className={cn(\n \"relative flex flex-col gap-9\",\n align === \"center\" ? \"items-center text-center\" : \"items-start\",\n )}\n >\n <div className={cn(\"max-w-2xl\", align === \"center\" && \"mx-auto\")}>\n <h2 className=\"font-display text-balance text-3xl font-semibold leading-[1.06] tracking-[-0.02em] sm:text-5xl\">\n {title}\n </h2>\n {description ? (\n <p\n className={cn(\n \"mt-4 text-pretty text-base leading-7 sm:text-lg\",\n align === \"center\" && \"mx-auto max-w-xl\",\n )}\n >\n {description}\n </p>\n ) : null}\n </div>\n <div\n className={cn(\n \"flex flex-wrap items-center gap-4\",\n align === \"center\" && \"justify-center\",\n )}\n >\n {action}\n {secondaryAction}\n </div>\n </div>\n </div>\n ) : (\n <div\n className=\"relative overflow-hidden rounded-[1.75rem] px-7 py-16 sm:px-16 sm:py-20\"\n style={{\n backgroundColor: \"rgb(var(--color-secondary))\",\n color: fg,\n }}\n >\n <div aria-hidden className=\"pointer-events-none absolute inset-0 grain opacity-[0.09] mix-blend-overlay\" />\n <div\n className={cn(\n \"relative flex flex-col items-start gap-10\",\n align === \"center\" && \"items-center text-center\",\n \"lg:flex-row lg:items-end lg:justify-between\",\n )}\n >\n <div className={cn(\"max-w-3xl\", align === \"center\" && \"mx-auto\")}>\n <h2 className=\"font-display text-balance text-4xl font-semibold leading-[1.02] tracking-[-0.03em] sm:text-6xl\">\n {title}\n </h2>\n {description ? (\n <p className={cn(\"mt-5 max-w-xl text-pretty text-base leading-7 sm:text-lg\", align === \"center\" && \"mx-auto\")}>\n {description}\n </p>\n ) : null}\n </div>\n <div\n className={cn(\n \"flex flex-wrap items-center gap-4\",\n align === \"center\" && \"justify-center\",\n )}\n >\n {action}\n {secondaryAction}\n </div>\n </div>\n </div>\n )}\n </Container>\n </section>\n );\n },\n);\nCTA.displayName = \"CTA\";","import { useState, type HTMLAttributes, type ReactNode } from \"react\";\nimport { cn } from \"../utils/cn\";\nimport { Plus } from \"../icons\";\n\nexport interface FaqItem {\n question: string;\n answer: string;\n}\n\nexport interface FAQProps extends Omit<HTMLAttributes<HTMLDivElement>, \"title\"> {\n items: FaqItem[];\n option?: \"accordion\" | \"split\" | \"cards\";\n allowMultiple?: boolean;\n defaultOpen?: number[];\n eyebrow?: ReactNode;\n title?: ReactNode;\n description?: ReactNode;\n}\n\nexport const FAQ = ({\n className,\n items,\n option = \"accordion\",\n allowMultiple = false,\n defaultOpen = [],\n eyebrow,\n title,\n description,\n ...props\n}: FAQProps) => {\n const [openSet, setOpenSet] = useState<Set<number>>(\n () => new Set(allowMultiple ? defaultOpen : defaultOpen.slice(0, 1)),\n );\n\n const toggle = (index: number) => {\n setOpenSet((prev) => {\n const next = new Set(prev);\n if (next.has(index)) {\n next.delete(index);\n } else {\n if (!allowMultiple) next.clear();\n next.add(index);\n }\n return next;\n });\n };\n\n const headerRow = (label: string) => (\n <p className=\"text-xs font-semibold uppercase tracking-[0.18em] text-primary\">{label}</p>\n );\n\n /** cards — always-open pairs in a quiet hairline grid. */\n if (option === \"cards\") {\n return (\n <div className={cn(\"w-full\", className)} {...props}>\n {eyebrow ? <div className=\"mb-10\">{headerRow(String(eyebrow))}</div> : null}\n <div className=\"grid grid-cols-1 gap-4 md:grid-cols-2\">\n {items.map((item, i) => (\n <div\n key={item.question}\n className=\"flex flex-col rounded-xl border border-border bg-surface p-7\"\n >\n <div className=\"flex items-baseline gap-4\">\n <span className=\"font-display text-sm font-semibold tabular-nums text-foreground/35\">\n {String(i + 1).padStart(2, \"0\")}\n </span>\n <h3 className=\"font-display text-lg font-semibold tracking-tight text-foreground\">\n {item.question}\n </h3>\n </div>\n <p className=\"mt-4 border-t border-border pt-4 text-sm leading-6 text-muted-foreground\">\n {item.answer}\n </p>\n </div>\n ))}\n </div>\n </div>\n );\n }\n\n /** accordion — single-column, hairline divided. */\n const accordion = (\n <div className=\"divide-y divide-border rounded-2xl border border-border bg-surface\">\n {items.map((item, index) => {\n const open = openSet.has(index);\n return (\n <div key={item.question}>\n <h3>\n <button\n type=\"button\"\n aria-expanded={open}\n onClick={() => toggle(index)}\n className=\"flex w-full cursor-pointer items-center justify-between gap-4 px-6 py-5 text-left text-[15px] font-medium text-foreground transition-colors duration-150 hover:bg-surface-strong/60 focus-visible:outline-none\"\n >\n {item.question}\n <Plus\n className={cn(\n \"h-4.5 w-4.5 shrink-0 text-foreground/45 transition-transform duration-200 sm:h-5 sm:w-5\",\n open && \"rotate-45 text-primary\",\n )}\n />\n </button>\n </h3>\n {open ? (\n <p className=\"px-6 pb-6 text-sm leading-7 text-muted-foreground\">{item.answer}</p>\n ) : null}\n </div>\n );\n })}\n </div>\n );\n\n if (option === \"split\") {\n return (\n <div className={cn(\"grid w-full gap-10 lg:grid-cols-[0.9fr_1.1fr] lg:gap-20\", className)} {...props}>\n <div className=\"lg:sticky lg:top-24 lg:self-start\">\n {eyebrow ? headerRow(String(eyebrow)) : null}\n {title ? (\n <h2 className=\"mt-4 font-display text-3xl font-semibold leading-[1.08] tracking-tight text-foreground sm:text-4xl\">\n {title}\n </h2>\n ) : null}\n {description ? (\n <p className=\"mt-4 text-pretty text-base leading-7 text-muted-foreground\">{description}</p>\n ) : null}\n </div>\n <div className=\"divide-y divide-border\">\n {items.map((item, index) => {\n const open = openSet.has(index);\n return (\n <div key={item.question}>\n <h3>\n <button\n type=\"button\"\n aria-expanded={open}\n onClick={() => toggle(index)}\n className=\"flex w-full cursor-pointer items-center justify-between gap-4 py-5 text-left text-base font-semibold text-foreground transition-colors duration-150 focus-visible:outline-none\"\n >\n {item.question}\n <Plus\n className={cn(\n \"h-4.5 w-4.5 shrink-0 text-foreground/45 transition-transform duration-200 sm:h-5 sm:w-5\",\n open && \"rotate-45 text-primary\",\n )}\n />\n </button>\n </h3>\n {open ? <p className=\"pb-6 text-sm leading-7 text-muted-foreground\">{item.answer}</p> : null}\n </div>\n );\n })}\n </div>\n </div>\n );\n }\n\n return (\n <div className={cn(\"mx-auto w-full max-w-3xl\", className)} {...props}>\n {accordion}\n </div>\n );\n};\nFAQ.displayName = \"FAQ\";","import { type HTMLAttributes, type ReactNode } from \"react\";\nimport { cn } from \"../utils/cn\";\nimport { Container } from \"./Container\";\n\nexport interface FooterLink {\n label: string;\n href: string;\n}\n\nexport interface FooterColumn {\n title: string;\n links: FooterLink[];\n}\n\nexport interface FooterProps extends HTMLAttributes<HTMLElement> {\n brand?: ReactNode;\n description?: string;\n columns: FooterColumn[];\n socials?: ReactNode;\n bottom?: ReactNode;\n option?: \"classic\" | \"minimal\" | \"editorial\";\n badge?: ReactNode;\n}\n\nexport const Footer = ({\n className,\n brand,\n description,\n columns,\n socials,\n bottom,\n option = \"classic\",\n badge,\n ...props\n}: FooterProps) => {\n const brandNode = (\n <span className=\"flex items-center gap-2 font-display text-lg font-bold tracking-tight\">\n <span aria-hidden className=\"inline-block h-2.5 w-2.5 rounded-sm bg-current\" />\n {brand}\n </span>\n );\n\n if (option === \"minimal\") {\n return (\n <footer className={cn(\"w-full border-t border-border bg-background\", className)} {...props}>\n <Container className=\"flex flex-col items-center justify-between gap-6 py-10 sm:flex-row\">\n {brandNode}\n <ul className=\"flex flex-wrap items-center justify-center gap-x-8 gap-y-3\">\n {columns.flatMap((c) => c.links).slice(0, 6).map((link) => (\n <li key={link.href}>\n <a href={link.href} className=\"text-sm text-muted-foreground transition-colors duration-150 hover:text-foreground\">\n {link.label}\n </a>\n </li>\n ))}\n </ul>\n <div className=\"text-sm text-muted-foreground\">{bottom}</div>\n </Container>\n </footer>\n );\n }\n\n if (option === \"editorial\") {\n return (\n <footer className={cn(\"w-full border-t border-border bg-background\", className)} {...props}>\n <Container className=\"py-16 sm:py-20\">\n <div className=\"mb-14 flex flex-col justify-between gap-8 sm:flex-row sm:items-end\">\n <div>\n <span className=\"font-display text-5xl font-bold tracking-[-0.03em] text-foreground sm:text-7xl\">\n {brand}\n </span>\n {description ? (\n <p className=\"mt-3 max-w-sm text-sm leading-6 text-muted-foreground\">{description}</p>\n ) : null}\n </div>\n {socials ? <div className=\"flex items-center gap-3\">{socials}</div> : null}\n </div>\n <div className=\"grid grid-cols-2 gap-8 border-t border-border pt-12 md:grid-cols-4\">\n {columns.map((column) => (\n <div key={column.title}>\n <h3 className=\"text-xs font-semibold uppercase tracking-[0.16em] text-muted-foreground\">\n {column.title}\n </h3>\n <ul className=\"mt-4 space-y-2.5\">\n {column.links.map((link) => (\n <li key={link.href}>\n <a href={link.href} className=\"text-[15px] text-foreground/80 transition-colors duration-150 hover:text-foreground\">\n {link.label}\n </a>\n </li>\n ))}\n </ul>\n </div>\n ))}\n </div>\n <div className=\"mt-12 flex flex-col items-center justify-between gap-4 border-t border-border pt-8 text-sm text-muted-foreground sm:flex-row\">\n <span>{bottom}</span>\n <span>© {new Date().getFullYear()} {brand}. All rights reserved.</span>\n </div>\n </Container>\n </footer>\n );\n }\n\n return (\n <footer className={cn(\"w-full bg-secondary text-on-secondary\", className)} {...props}>\n <Container className=\"py-16\">\n <div className=\"grid grid-cols-2 gap-10 md:grid-cols-4 lg:grid-cols-6\">\n <div className=\"col-span-2\">\n <span style={{ color: \"rgb(var(--color-on-secondary))\" }}>{brandNode}</span>\n {description ? (\n <p className=\"mt-4 max-w-xs text-sm leading-6 text-on-secondary/60\">{description}</p>\n ) : null}\n {socials ? <div className=\"mt-6 flex items-center gap-3\">{socials}</div> : null}\n {badge ? <div className=\"mt-6\">{badge}</div> : null}\n </div>\n {columns.map((column) => (\n <div key={column.title}>\n <h3 className=\"text-xs font-semibold uppercase tracking-[0.16em] text-on-secondary/50\">\n {column.title}\n </h3>\n <ul className=\"mt-4 space-y-2.5\">\n {column.links.map((link) => (\n <li key={link.href}>\n <a\n href={link.href}\n className=\"text-sm text-on-secondary/70 transition-colors duration-150 hover:text-on-secondary\"\n >\n {link.label}\n </a>\n </li>\n ))}\n </ul>\n </div>\n ))}\n </div>\n <div className=\"mt-14 flex flex-col items-center justify-between gap-4 border-t border-white/10 pt-8 text-sm text-on-secondary/50 sm:flex-row\">\n <span>{bottom}</span>\n <span>© {new Date().getFullYear()} {brand}. All rights reserved.</span>\n </div>\n </Container>\n </footer>\n );\n};\nFooter.displayName = \"Footer\";","import { useState, type FormEvent, type HTMLAttributes } from \"react\";\nimport { cn } from \"../utils/cn\";\nimport { ArrowRight, Check, Mail } from \"../icons\";\n\nexport interface NewsletterProps extends Omit<HTMLAttributes<HTMLFormElement>, \"onSubmit\"> {\n option?: \"inline\" | \"card\" | \"underline\";\n placeholder?: string;\n buttonLabel?: string;\n successMessage?: string;\n note?: string;\n onSubmit?: (email: string) => void;\n}\n\nconst inputBase =\n \"w-full rounded-lg border border-border bg-surface px-4 text-sm text-foreground placeholder:text-muted-foreground focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2 focus:ring-offset-background\";\n\nexport const Newsletter = ({\n className,\n option = \"inline\",\n placeholder = \"you@company.com\",\n buttonLabel = \"Join\",\n successMessage = \"You’re on the list!\",\n note,\n onSubmit,\n ...props\n}: NewsletterProps) => {\n const [email, setEmail] = useState(\"\");\n const [done, setDone] = useState(false);\n const [error, setError] = useState<string | null>(null);\n\n const handleSubmit = (event: FormEvent) => {\n event.preventDefault();\n const value = email.trim();\n if (!/^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/.test(value)) {\n setError(\"Please enter a valid email.\");\n return;\n }\n setError(null);\n setDone(true);\n onSubmit?.(value);\n };\n\n const success = (\n <p className=\"flex items-center gap-2 rounded-lg border border-accent/40 bg-accent/10 px-4 py-3.5 text-sm font-medium text-accent\" role=\"status\">\n <Check className=\"h-4 w-4\" />\n {successMessage}\n </p>\n );\n\n if (option === \"card\") {\n return (\n <form onSubmit={handleSubmit} className={cn(\"w-full\", className)} {...props}>\n {done ? (\n success\n ) : (\n <div className=\"rounded-xl border border-border bg-surface p-7\">\n <div className=\"mb-5 flex items-center gap-3\">\n <span className=\"inline-flex h-9 w-9 items-center justify-center rounded-lg bg-primary-soft text-primary\">\n <Mail className=\"h-4 w-4\" />\n </span>\n <p className=\"font-display text-lg font-semibold tracking-tight text-foreground\">\n Monthly digest\n </p>\n </div>\n <label htmlFor=\"newsletter-email\" className=\"sr-only\">\n Your email address\n </label>\n <div className=\"flex flex-col gap-3 sm:flex-row\">\n <input\n id=\"newsletter-email\"\n type=\"email\"\n autoComplete=\"email\"\n value={email}\n onChange={(e) => {\n setEmail(e.target.value);\n if (error) setError(null);\n }}\n placeholder={placeholder}\n className={cn(inputBase, \"h-11\")}\n />\n <button\n type=\"submit\"\n className=\"inline-flex h-11 shrink-0 cursor-pointer items-center justify-center gap-2 rounded-lg bg-primary px-5 text-sm font-semibold text-on-primary transition-colors duration-200 hover:bg-primary-hover focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 focus-visible:ring-offset-background\"\n >\n {buttonLabel}\n <ArrowRight className=\"h-4 w-4 opacity-60\" />\n </button>\n </div>\n {error ? (\n <p className=\"mt-2 text-sm font-medium text-red-500\" role=\"alert\">{error}</p>\n ) : note ? (\n <p className=\"mt-3 text-xs leading-5 text-muted-foreground\">{note}</p>\n ) : null}\n </div>\n )}\n </form>\n );\n }\n\n if (option === \"underline\") {\n return (\n <form onSubmit={handleSubmit} className={cn(\"w-full\", className)} {...props}>\n {done ? (\n success\n ) : (\n <div className=\"flex items-end gap-3 border-b border-foreground/20 pb-3 transition-colors duration-200 focus-within:border-foreground\">\n <label htmlFor=\"newsletter-email\" className=\"sr-only\">\n Your email address\n </label>\n <input\n id=\"newsletter-email\"\n type=\"email\"\n autoComplete=\"email\"\n value={email}\n onChange={(e) => {\n setEmail(e.target.value);\n if (error) setError(null);\n }}\n placeholder={placeholder}\n className=\"w-full bg-transparent text-sm text-foreground placeholder:text-muted-foreground focus:outline-none\"\n />\n <button\n type=\"submit\"\n className=\"inline-flex shrink-0 cursor-pointer items-center gap-1.5 text-sm font-semibold text-foreground transition-colors duration-150 hover:text-primary\"\n >\n {buttonLabel}\n <ArrowRight className=\"h-4 w-4 transition-transform duration-200 group-hover:translate-x-0.5\" />\n </button>\n </div>\n )}\n {error ? (\n <p className=\"mt-2 text-sm font-medium text-red-500\" role=\"alert\">{error}</p>\n ) : note ? (\n <p className=\"mt-2 text-xs leading-5 text-muted-foreground\">{note}</p>\n ) : null}\n </form>\n );\n }\n\n return (\n <form onSubmit={handleSubmit} className={cn(\"w-full\", className)} {...props}>\n {done ? (\n success\n ) : (\n <>\n <label htmlFor=\"newsletter-email\" className=\"sr-only\">\n Your email address\n </label>\n <div className=\"flex flex-col gap-3 sm:flex-row\">\n <input\n id=\"newsletter-email\"\n type=\"email\"\n autoComplete=\"email\"\n value={email}\n onChange={(e) => {\n setEmail(e.target.value);\n if (error) setError(null);\n }}\n placeholder={placeholder}\n className={cn(inputBase, \"h-11\")}\n />\n <button\n type=\"submit\"\n className=\"inline-flex h-11 shrink-0 cursor-pointer items-center justify-center gap-2 rounded-lg bg-primary px-5 text-sm font-semibold text-on-primary transition-colors duration-200 hover:bg-primary-hover focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 focus-visible:ring-offset-background\"\n >\n {buttonLabel}\n <ArrowRight className=\"h-4 w-4 opacity-60\" />\n </button>\n </div>\n {error ? (\n <p className=\"mt-2 text-sm font-medium text-red-500\" role=\"alert\">{error}</p>\n ) : note ? (\n <p className=\"mt-2 text-xs leading-5 text-muted-foreground\">{note}</p>\n ) : null}\n </>\n )}\n </form>\n );\n};\nNewsletter.displayName = \"Newsletter\";","import { forwardRef, type HTMLAttributes } from \"react\";\nimport { cn } from \"../utils/cn\";\n\nexport type ProseSize = \"sm\" | \"md\" | \"lg\" | \"xl\" | \"2xl\";\n\nexport interface ProseProps extends HTMLAttributes<HTMLElement> {\n /** Content scale. `lg` (prose-lg) is the comfortable blog default. */\n size?: ProseSize;\n /** Renders raw HTML (CMS / MDX output). Mutually exclusive with children. */\n html?: string;\n /** When true, removes the reading-width cap. */\n wide?: boolean;\n}\n\nconst sizes: Record<ProseSize, string> = {\n sm: \"prose-sm\",\n md: \"prose\",\n lg: \"prose-lg\",\n xl: \"prose-xl\",\n \"2xl\": \"prose-2xl\",\n};\n\n/**\n * Blog / article / documentation body text.\n *\n * Wraps Tailwind Typography (`@tailwindcss/typography`) and re-skins its\n * colors, type scale and code blocks through the same design tokens as every\n * other component, so dark palettes and font swaps work out of the box.\n */\nexport const Prose = forwardRef<HTMLElement, ProseProps>(\n ({ className, size = \"lg\", html, wide = false, children, ...props }, ref) => (\n <article\n ref={ref}\n className={cn(\n \"prose prose-neutral\",\n sizes[size],\n !wide && \"max-w-3xl\",\n className,\n )}\n {...(html ? { dangerouslySetInnerHTML: { __html: html } } : null)}\n {...props}\n >\n {html ? null : children}\n </article>\n ),\n);\nProse.displayName = \"Prose\";\n\n/** Intro / stand-first paragraph styled with the `prose` lead class. */\nexport const ProseLead = forwardRef<HTMLParagraphElement, HTMLAttributes<HTMLParagraphElement>>(\n ({ className, ...props }, ref) => (\n <p ref={ref} className={cn(\"lead\", className)} {...props} />\n ),\n);\nProseLead.displayName = \"ProseLead\";","import { forwardRef, type HTMLAttributes, type ReactNode } from \"react\";\nimport { cn } from \"../utils/cn\";\nimport { ArrowRight, ArrowUpRight } from \"../icons\";\nimport { Badge } from \"./Badge\";\nimport { Container } from \"./Container\";\n\nexport interface BlogAuthor {\n name: string;\n avatar?: ReactNode;\n}\n\nexport interface BlogPost {\n title: string;\n excerpt?: string;\n /** Display date, e.g. \"12 Aug 2026\". */\n date: string;\n readTime?: string;\n category?: string;\n cover?: string;\n /** Arbitrary CSS color for the cover placeholder accent. */\n accent?: string;\n href?: string;\n author?: BlogAuthor;\n}\n\nfunction AuthorMark({ name, avatar }: { name: string; avatar?: ReactNode }) {\n if (avatar) return avatar;\n const initials = name\n .split(\" \")\n .map((p) => p[0])\n .join(\"\")\n .slice(0, 2)\n .toUpperCase();\n return (\n <span className=\"grid h-8 w-8 shrink-0 place-items-center rounded-full bg-primary-soft text-[11px] font-bold text-primary\">\n {initials}\n </span>\n );\n}\n\nexport interface BlogCardProps extends HTMLAttributes<HTMLAnchorElement> {\n post: BlogPost;\n option?: \"card\" | \"row\";\n}\n\nconst Cover = ({ post }: { post: BlogPost }) =>\n post.cover ? (\n <img src={post.cover} alt=\"\" loading=\"lazy\" className=\"aspect-[16/10] w-full object-cover\" />\n ) : (\n <div\n className=\"grid aspect-[16/10] w-full place-items-center bg-surface-strong\"\n style={\n post.accent\n ? { background: `linear-gradient(135deg, ${post.accent}22, ${post.accent}11)` }\n : undefined\n }\n >\n <span\n className=\"font-display text-4xl font-bold tracking-[-0.04em]\"\n style={{ color: post.accent ?? \"rgb(var(--color-foreground) / 0.12)\" }}\n >\n {post.category?.[0]?.toUpperCase()}\n </span>\n </div>\n );\n\nexport const BlogCard = forwardRef<HTMLAnchorElement, BlogCardProps>(\n ({ className, post, option = \"card\", ...props }, ref) => {\n if (option === \"row\") {\n return (\n <a\n ref={ref}\n href={post.href ?? \"#\"}\n className={cn(\"group flex cursor-pointer items-baseline gap-5 py-6\", className)}\n {...props}\n >\n <div className=\"min-w-0 flex-1\">\n <div className=\"flex items-center gap-3\">\n {post.category ? <Badge variant=\"soft\" size=\"sm\">{post.category}</Badge> : null}\n <span className=\"text-xs tabular-nums text-muted-foreground\">\n {post.date}\n {post.readTime ? ` · ${post.readTime}` : \"\"}\n </span>\n </div>\n <h3 className=\"mt-2.5 font-display text-xl font-semibold tracking-tight text-foreground transition-transform duration-200 group-hover:translate-x-1 sm:text-2xl\">\n {post.title}\n </h3>\n </div>\n <span className=\"text-foreground/30 transition-all duration-200 group-hover:translate-x-0.5 group-hover:text-foreground\">\n <ArrowUpRight className=\"h-5 w-5\" />\n </span>\n </a>\n );\n }\n\n const author = post.author;\n return (\n <a\n ref={ref}\n href={post.href ?? \"#\"}\n className={cn(\n \"group flex h-full cursor-pointer flex-col overflow-hidden rounded-xl border border-border bg-surface transition-colors duration-200 hover:border-foreground/20\",\n className,\n )}\n {...props}\n >\n <div className=\"overflow-hidden\">\n <Cover post={post} />\n </div>\n <div className=\"flex flex-1 flex-col p-6\">\n <div className=\"flex items-center justify-between gap-3\">\n {post.category ? <Badge variant=\"soft\" size=\"sm\">{post.category}</Badge> : <span />}\n {post.readTime ? (\n <span className=\"text-xs text-muted-foreground\">{post.readTime}</span>\n ) : null}\n </div>\n <h3 className=\"mt-4 font-display text-lg font-semibold leading-snug tracking-tight text-foreground sm:text-xl\">\n {post.title}\n </h3>\n {post.excerpt ? (\n <p className=\"mt-2.5 line-clamp-2 text-sm leading-6 text-muted-foreground\">\n {post.excerpt}\n </p>\n ) : null}\n <div className=\"mt-5 flex items-center justify-between gap-3 border-t border-border pt-4\">\n {author ? (\n <span className=\"flex min-w-0 items-center gap-2.5\">\n <AuthorMark name={author.name} avatar={author.avatar} />\n <span className=\"truncate text-xs font-medium text-foreground\">{author.name}</span>\n </span>\n ) : (\n <span className=\"text-xs tabular-nums text-muted-foreground\">{post.date}</span>\n )}\n <ArrowRight className=\"h-4 w-4 text-foreground/35 transition-all duration-200 group-hover:translate-x-0.5 group-hover:text-foreground\" />\n </div>\n </div>\n </a>\n );\n },\n);\nBlogCard.displayName = \"BlogCard\";\n\nexport interface BlogSectionProps\n extends Omit<HTMLAttributes<HTMLElement>, \"title\"> {\n posts: BlogPost[];\n /** Show only the first N posts. */\n limit?: number;\n columns?: 2 | 3;\n option?: \"card\" | \"row\";\n eyebrow?: ReactNode;\n eyebrowStyle?: \"caps\" | \"soft\" | \"plain\";\n title?: ReactNode;\n description?: ReactNode;\n showAllLabel?: string;\n showAllHref?: string;\n}\n\nconst gridCols: Record<NonNullable<BlogSectionProps[\"columns\"]>, string> = {\n 2: \"sm:grid-cols-2\",\n 3: \"sm:grid-cols-2 lg:grid-cols-3\",\n};\n\nexport const BlogSection = forwardRef<HTMLElement, BlogSectionProps>(\n (\n {\n className,\n posts,\n limit,\n columns = 3,\n option = \"card\",\n eyebrow,\n eyebrowStyle = \"caps\",\n title,\n description,\n showAllLabel,\n showAllHref,\n ...props\n },\n ref,\n ) => {\n const visible = limit ? posts.slice(0, limit) : posts;\n\n return (\n <section ref={ref} className={cn(\"w-full py-20 sm:py-24\", className)} {...props}>\n <Container>\n {(eyebrow || title || description || showAllHref) && (\n <div className=\"mb-12 flex flex-col gap-6 sm:flex-row sm:items-end sm:justify-between\">\n <div className=\"max-w-2xl\">\n {eyebrow ? (\n <p\n className={cn(\n \"text-xs font-semibold uppercase tracking-[0.18em]\",\n eyebrowStyle === \"caps\" && \"text-foreground/50\",\n eyebrowStyle === \"soft\" &&\n \"inline-flex items-center rounded-full bg-primary-soft px-3 py-1.5 text-primary\",\n eyebrowStyle === \"plain\" && \"text-primary\",\n )}\n >\n {eyebrow}\n </p>\n ) : null}\n {title ? (\n <h2 className=\"mt-4 font-display text-balance text-3xl font-semibold leading-[1.08] tracking-tight text-foreground sm:text-4xl\">\n {title}\n </h2>\n ) : null}\n {description ? (\n <p className=\"mt-4 text-pretty text-base leading-7 text-muted-foreground\">\n {description}\n </p>\n ) : null}\n </div>\n {showAllHref ? (\n <a\n href={showAllHref}\n className=\"group inline-flex shrink-0 cursor-pointer items-center gap-1.5 text-sm font-semibold text-foreground transition-colors duration-150 hover:text-primary\"\n >\n {showAllLabel ?? \"All posts\"}\n <ArrowRight className=\"h-4 w-4 transition-transform duration-200 group-hover:translate-x-0.5\" />\n </a>\n ) : null}\n </div>\n )}\n\n {option === \"row\" ? (\n <div className=\"divide-y divide-border border-t border-border\">\n {visible.map((post) => (\n <BlogCard key={post.title} post={post} option=\"row\" />\n ))}\n </div>\n ) : (\n <div className={cn(\"grid grid-cols-1 gap-4\", gridCols[columns])}>\n {visible.map((post) => (\n <BlogCard key={post.title} post={post} option=\"card\" />\n ))}\n </div>\n )}\n </Container>\n </section>\n );\n },\n);\nBlogSection.displayName = \"BlogSection\";"],"names":["r","e","f","n","o","clsx","CLASS_PART_SEPARATOR","createClassGroupUtils","config","classMap","createClassMap","conflictingClassGroups","conflictingClassGroupModifiers","className","classParts","getGroupRecursive","getGroupIdForArbitraryProperty","classGroupId","hasPostfixModifier","conflicts","classPartObject","currentClassPart","nextClassPartObject","classGroupFromNextClassPart","classRest","_a","validator","arbitraryPropertyRegex","arbitraryPropertyClassName","property","theme","prefix","getPrefixedClassGroupEntries","classGroup","processClassesRecursively","classDefinition","classPartObjectToEdit","getPart","isThemeGetter","key","path","currentClassPartObject","pathPart","func","classGroupEntries","prefixedClassGroup","value","createLruCache","maxCacheSize","cacheSize","cache","previousCache","update","IMPORTANT_MODIFIER","createParseClassName","separator","experimentalParseClassName","isSeparatorSingleCharacter","firstSeparatorCharacter","separatorLength","parseClassName","modifiers","bracketDepth","modifierStart","postfixModifierPosition","index","currentCharacter","baseClassNameWithImportantModifier","hasImportantModifier","baseClassName","maybePostfixModifierPosition","sortModifiers","sortedModifiers","unsortedModifiers","modifier","createConfigUtils","SPLIT_CLASSES_REGEX","mergeClassList","classList","configUtils","getClassGroupId","getConflictingClassGroupIds","classGroupsInConflict","classNames","result","originalClassName","variantModifier","modifierId","classId","conflictGroups","i","group","twJoin","argument","resolvedValue","string","toValue","mix","k","createTailwindMerge","createConfigFirst","createConfigRest","cacheGet","cacheSet","functionToCall","initTailwindMerge","previousConfig","createConfigCurrent","tailwindMerge","cachedResult","fromTheme","themeGetter","arbitraryValueRegex","fractionRegex","stringLengths","tshirtUnitRegex","lengthUnitRegex","colorFunctionRegex","shadowRegex","imageRegex","isLength","isNumber","isArbitraryLength","getIsArbitraryValue","isLengthOnly","isArbitraryNumber","isInteger","isPercent","isArbitraryValue","isTshirtSize","sizeLabels","isArbitrarySize","isNever","isArbitraryPosition","imageLabels","isArbitraryImage","isImage","isArbitraryShadow","isShadow","isAny","label","testValue","getDefaultConfig","colors","spacing","blur","brightness","borderColor","borderRadius","borderSpacing","borderWidth","contrast","grayscale","hueRotate","invert","gap","gradientColorStops","gradientColorStopPositions","inset","margin","opacity","padding","saturate","scale","sepia","skew","space","translate","getOverscroll","getOverflow","getSpacingWithAutoAndArbitrary","getSpacingWithArbitrary","getLengthWithEmptyAndArbitrary","getNumberWithAutoAndArbitrary","getPositions","getLineStyles","getBlendModes","getAlign","getZeroAndEmpty","getBreaks","getNumberAndArbitrary","twMerge","cn","inputs","readVariable","name","resolveVars","input","str","refs","ref","resolved","channels","color","c","parts","g","b","relativeLuminance","lin","v","contrastRatio","lumA","lumB","hi","lo","getContrastText","bg","light","dark","lumBg","lumLight","lumDark","variants","sizes","base","Button","forwardRef","variant","size","iconLeft","iconRight","customColor","fullWidth","style","type","children","props","customStyle","isLink","jsxs","jsx","Badge","icon","Card","interactive","CardHeader","CardTitle","CardDescription","CardContent","CardFooter","Container","as","gutters","Tag","gaps","Stack","horizontal","eyebrowBase","eyebrowStyles","SectionHeader","eyebrow","eyebrowStyle","title","description","align","paddings","Section","containerClassName","id","readChannel","variable","useTokenForeground","fallback","text","setText","useState","useEffect","observer","titleBase","Hero","primaryAction","secondaryAction","media","meta","isCentered","fg","container","eyebrowNode","actionsNode","m","ArrowRight","ArrowUpRight","ArrowDown","ArrowUp","Check","Plus","X","Menu","ChevronDown","ChevronRight","ChevronLeft","Zap","ShieldCheck","Layers","Smartphone","Gauge","BarChart","Users","Star","Quote","Globe","Mail","Lock","Clock","DollarSign","Code","Terminal","Send","Play","ExternalLink","Sliders","Database","Box","Cpu","Palette","Rocket","linkStyles","Navbar","brand","logo","logoSrc","logoAlt","logoClassName","brandHref","links","actions","cta","sticky","open","setOpen","inverse","shell","bar","logoNode","brandNode","link","triggerStyles","MegaMenu","items","onKeyDown","ids","useId","openIndex","setOpenIndex","mobileOpen","setMobileOpen","mobileExpanded","setMobileExpanded","closePanels","closeAll","panelBackground","panelId","triggerClasses","renderColumns","item","column","ci","renderFeatured","mobile","featured","featuredStyle","handleKeyDown","event","hasPanel","prev","LogoText","LogoMark","LogoCloud","logos","option","doubled","FeatureCard","accent","large","chipStyle","gridCols","bentoSpans","FeatureGrid","features","columns","feature","valueBase","suffixBase","DeltaBadge","delta","isUp","Icon","Stats","stats","stat","PriceValue","billing","dim","Fragment","BillingToggle","onChange","accentText","Pricing","plans","defaultBilling","onSelect","setBilling","price","plan","priceLabel","planButton","isHighlighted","initials","p","TestimonialCard","testimonial","quote","author","role","company","avatar","rating","badgeStyle","_","Testimonials","Carousel","setIndex","go","dir","CTA","action","isPanel","FAQ","allowMultiple","defaultOpen","openSet","setOpenSet","toggle","next","headerRow","accordion","Footer","socials","bottom","badge","inputBase","Newsletter","placeholder","buttonLabel","successMessage","note","onSubmit","email","setEmail","done","setDone","error","setError","handleSubmit","success","Prose","html","wide","ProseLead","AuthorMark","Cover","post","_b","BlogCard","BlogSection","posts","limit","showAllLabel","showAllHref","visible"],"mappings":"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","x_google_ignoreList":[0,1]}