Unicode lowercase-fold comparison at char boundaries (find_ci/rfind_ci) instead of str::find — no lowercased buffer copy, whose byte lengths could shift the returned offsets. Prose search shouldn't care about capitalization; deliberately not smartcase (a capital silently flipping to exact-match is a surprise here, not a feature).