root = true

[*]
charset = utf-8
end_of_line = lf
insert_final_newline = true
trim_trailing_whitespace = true
indent_style = space
indent_size = 4

[*.{json,js,jsx,ts,tsx,yml,yaml,css,html}]
indent_size = 2

[*.{csproj,props,targets,xml}]
indent_size = 2

[*.md]
trim_trailing_whitespace = false

[*.cs]
# Namespaces
csharp_style_namespace_declarations = file_scoped:warning
# usings
dotnet_sort_system_directives_first = true
csharp_using_directive_placement = outside_namespace:warning
# var / modern C#
csharp_style_var_when_type_is_apparent = true:suggestion
csharp_prefer_braces = true:suggestion
csharp_style_prefer_primary_constructors = true:suggestion
dotnet_style_require_accessibility_modifiers = for_non_interface_members:warning
# Prefer readonly
dotnet_style_readonly_field = true:warning

# Quiet a few analyzer rules that are noisy for a young codebase / skeleton.
# CA1515: types can be internal — intentionally relaxed (public module/contract surface).
dotnet_diagnostic.CA1515.severity = none
# CA1812: internal class never instantiated — false positives on DI-resolved types.
dotnet_diagnostic.CA1812.severity = none
# CA2007: ConfigureAwait — not needed in ASP.NET Core / worker (no sync context).
dotnet_diagnostic.CA2007.severity = none
# CA1848 / CA1873: LoggerMessage-delegate perf rules — opt-in perf, not worth enforcing in V1.
dotnet_diagnostic.CA1848.severity = none
dotnet_diagnostic.CA1873.severity = none

# EF Core migrations are tool-generated — don't style-police them.
[**/Migrations/*.cs]
generated_code = true
