Tailwind classes in OCaml

Fix Tailwind v4 CLI content scanning and CSS generation

- Add @source directive to input.css to scan HTML files in _build directory
- Remove explicit --content flags from dune rules (now handled by @source)
- Add comprehensive @theme definition with colors, spacing, typography, borders, and shadows
- Resolve issue where Tailwind v4 CLI ignores files in .gitignored directories

The examples now properly generate all required Tailwind CSS classes including:
- Colors: bg-gray-50, text-blue-600, text-gray-800, etc.
- Spacing: p-2, mb-1, mt-2, max-w-42, etc.
- Typography: font-bold, font-semibold
- Effects: shadow-sm, rounded-lg, rounded-sm

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>

+103 -7
+7 -7
examples/dune
··· 72 72 input.css 73 73 hello_tailwind_01.html) 74 74 (action 75 - (run npx @tailwindcss/cli --input input.css --output %{targets} --content hello_tailwind_01.html --minify))) 75 + (run npx @tailwindcss/cli --input input.css --output %{targets} --minify))) 76 76 77 77 (rule 78 78 (targets colors_and_typography_02.css) ··· 80 80 input.css 81 81 colors_and_typography_02.html) 82 82 (action 83 - (run npx @tailwindcss/cli --input input.css --output %{targets} --content colors_and_typography_02.html --minify))) 83 + (run npx @tailwindcss/cli --input input.css --output %{targets} --minify))) 84 84 85 85 (rule 86 86 (targets layout_and_spacing_03.css) ··· 88 88 input.css 89 89 layout_and_spacing_03.html) 90 90 (action 91 - (run npx @tailwindcss/cli --input input.css --output %{targets} --content layout_and_spacing_03.html --minify))) 91 + (run npx @tailwindcss/cli --input input.css --output %{targets} --minify))) 92 92 93 93 (rule 94 94 (targets responsive_design_04.css) ··· 96 96 input.css 97 97 responsive_design_04.html) 98 98 (action 99 - (run npx @tailwindcss/cli --input input.css --output %{targets} --content responsive_design_04.html --minify))) 99 + (run npx @tailwindcss/cli --input input.css --output %{targets} --minify))) 100 100 101 101 (rule 102 102 (targets effects_and_variants_05.css) ··· 104 104 input.css 105 105 effects_and_variants_05.html) 106 106 (action 107 - (run npx @tailwindcss/cli --input input.css --output %{targets} --content effects_and_variants_05.html --minify))) 107 + (run npx @tailwindcss/cli --input input.css --output %{targets} --minify))) 108 108 109 109 (rule 110 110 (targets patterns_and_components_06.css) ··· 112 112 input.css 113 113 patterns_and_components_06.html) 114 114 (action 115 - (run npx @tailwindcss/cli --input input.css --output %{targets} --content patterns_and_components_06.html --minify))) 115 + (run npx @tailwindcss/cli --input input.css --output %{targets} --minify))) 116 116 117 117 (rule 118 118 (targets comprehensive_showcase_07.css) ··· 120 120 input.css 121 121 comprehensive_showcase_07.html) 122 122 (action 123 - (run npx @tailwindcss/cli --input input.css --output %{targets} --content comprehensive_showcase_07.html --minify))) 123 + (run npx @tailwindcss/cli --input input.css --output %{targets} --minify))) 124 124 125 125 ;; Generate index.html page 126 126 (rule
+96
examples/input.css
··· 1 1 /* Tailwind CSS configuration for examples */ 2 + @source "./*.html"; 3 + 4 + @theme { 5 + /* Colors */ 6 + --color-white: #ffffff; 7 + --color-gray-50: #f9fafb; 8 + --color-gray-100: #f3f4f6; 9 + --color-gray-200: #e5e7eb; 10 + --color-gray-300: #d1d5db; 11 + --color-gray-400: #9ca3af; 12 + --color-gray-500: #6b7280; 13 + --color-gray-600: #4b5563; 14 + --color-gray-700: #374151; 15 + --color-gray-800: #1f2937; 16 + --color-gray-900: #111827; 17 + --color-blue-50: #eff6ff; 18 + --color-blue-100: #dbeafe; 19 + --color-blue-300: #93c5fd; 20 + --color-blue-400: #60a5fa; 21 + --color-blue-500: #3b82f6; 22 + --color-blue-600: #2563eb; 23 + --color-blue-700: #1d4ed8; 24 + --color-blue-800: #1e40af; 25 + --color-green-50: #f0fdf4; 26 + --color-green-100: #dcfce7; 27 + --color-green-500: #22c55e; 28 + --color-green-600: #16a34a; 29 + --color-red-50: #fef2f2; 30 + --color-red-100: #fee2e2; 31 + --color-red-500: #ef4444; 32 + --color-red-600: #dc2626; 33 + --color-purple-50: #faf5ff; 34 + --color-purple-100: #f3e8ff; 35 + --color-purple-300: #c4b5fd; 36 + --color-purple-600: #9333ea; 37 + --color-yellow-50: #fefce8; 38 + --color-yellow-100: #fef3c7; 39 + --color-yellow-600: #ca8a04; 40 + --color-indigo-50: #eef2ff; 41 + --color-indigo-600: #4f46e5; 42 + 43 + /* Spacing */ 44 + --spacing-0: 0px; 45 + --spacing-0_25: 0.0625rem; 46 + --spacing-0_5: 0.125rem; 47 + --spacing-0_75: 0.1875rem; 48 + --spacing-1: 0.25rem; 49 + --spacing-1_5: 0.375rem; 50 + --spacing-2: 0.5rem; 51 + --spacing-3: 0.75rem; 52 + --spacing-4: 1rem; 53 + --spacing-5: 1.25rem; 54 + --spacing-6: 1.5rem; 55 + --spacing-8: 2rem; 56 + --spacing-12: 3rem; 57 + --spacing-16: 4rem; 58 + --spacing-24: 6rem; 59 + --spacing-32: 8rem; 60 + --spacing-42: 10.5rem; 61 + --spacing-72: 18rem; 62 + 63 + /* Font sizes */ 64 + --font-size-xs: 0.75rem; 65 + --font-size-sm: 0.875rem; 66 + --font-size-base: 1rem; 67 + --font-size-lg: 1.125rem; 68 + --font-size-xl: 1.25rem; 69 + --font-size-2xl: 1.5rem; 70 + --font-size-3xl: 1.875rem; 71 + --font-size-4xl: 2.25rem; 72 + 73 + /* Font weights */ 74 + --font-weight-light: 300; 75 + --font-weight-normal: 400; 76 + --font-weight-medium: 500; 77 + --font-weight-semibold: 600; 78 + --font-weight-bold: 700; 79 + --font-weight-extrabold: 800; 80 + 81 + /* Border radius */ 82 + --radius-none: 0px; 83 + --radius-sm: 0.125rem; 84 + --radius-md: 0.375rem; 85 + --radius-lg: 0.5rem; 86 + --radius-xl: 0.75rem; 87 + --radius-2xl: 1rem; 88 + --radius-3xl: 1.5rem; 89 + --radius-full: 9999px; 90 + 91 + /* Shadows */ 92 + --shadow-sm: 0 1px 2px 0 rgb(0 0 0 / 0.05); 93 + --shadow-md: 0 4px 6px -1px rgb(0 0 0 / 0.1), 0 2px 4px -2px rgb(0 0 0 / 0.1); 94 + --shadow-lg: 0 10px 15px -3px rgb(0 0 0 / 0.1), 0 4px 6px -4px rgb(0 0 0 / 0.1); 95 + --shadow-xl: 0 20px 25px -5px rgb(0 0 0 / 0.1), 0 8px 10px -6px rgb(0 0 0 / 0.1); 96 + } 97 + 2 98 @tailwind base; 3 99 @tailwind components; 4 100 @tailwind utilities;