diff --git a/.editorconfig b/.editorconfig
index eb93df2..41d5143 100644
--- a/.editorconfig
+++ b/.editorconfig
@@ -1,11 +1,265 @@
+# Remove the line below if you want to inherit .editorconfig settings from higher directories
+root=true
+
+# C# files
[*.cs]
-# IDE0290: Use primary constructor
-dotnet_diagnostic.IDE0290.severity = silent
-insert_final_newline = false
-dotnet_diagnostic.IDE0063.severity = none
+#### Core EditorConfig Options ####
+
+# Indentation and spacing
+indent_size=4
+indent_style=space
+tab_width=4
+
+# New line preferences
+end_of_line=crlf
+insert_final_newline=false
# EF Core migrations are scaffolded and must stay in the generated shape
[**/Migrations/*.cs]
generated_code = true
dotnet_diagnostic.S1192.severity = none
+
+#### .NET Coding Conventions ####
+
+# this. and Me. preferences
+dotnet_style_qualification_for_event=false:error
+dotnet_style_qualification_for_field=false:error
+dotnet_style_qualification_for_method=false:error
+dotnet_style_qualification_for_property=false:error
+
+# Language keywords vs BCL types preferences
+dotnet_style_predefined_type_for_locals_parameters_members=true:error
+dotnet_style_predefined_type_for_member_access=true:error
+
+# Parentheses preferences
+dotnet_style_parentheses_in_arithmetic_binary_operators=always_for_clarity:error
+dotnet_style_parentheses_in_other_binary_operators=always_for_clarity:error
+dotnet_style_parentheses_in_other_operators=always_for_clarity:error
+dotnet_style_parentheses_in_relational_binary_operators=always_for_clarity:error
+
+# Modifier preferences
+dotnet_style_require_accessibility_modifiers=for_non_interface_members:silent
+
+# Expression-level preferences
+csharp_style_deconstructed_variable_declaration=false:error
+csharp_style_inlined_variable_declaration=true:error
+csharp_style_throw_expression= true:error
+dotnet_style_coalesce_expression=true:error
+dotnet_style_collection_initializer=true:error
+dotnet_style_explicit_tuple_names=true:error
+dotnet_style_null_propagation=true:error
+dotnet_style_object_initializer=true:error
+dotnet_style_prefer_auto_properties=true:error
+dotnet_style_prefer_compound_assignment=true:error
+dotnet_style_prefer_conditional_expression_over_assignment=true:suggestion
+dotnet_style_prefer_conditional_expression_over_return=true:error
+dotnet_style_prefer_inferred_anonymous_type_member_names=true:error
+dotnet_style_prefer_inferred_tuple_names=true:error
+dotnet_style_prefer_is_null_check_over_reference_equality_method=true:error
+
+# Field preferences
+dotnet_style_readonly_field=true:error
+
+# Parameter preferences
+dotnet_code_quality_unused_parameters = non_public:none
+
+#### C# Coding Conventions ####
+
+# var preferences
+csharp_style_var_elsewhere=true:hint
+csharp_style_var_for_built_in_types=true:hint
+csharp_style_var_when_type_is_apparent=true:hint
+
+# Expression-bodied members
+csharp_style_expression_bodied_accessors= when_on_single_line:error
+csharp_style_expression_bodied_constructors= false:error
+csharp_style_expression_bodied_indexers= when_on_single_line:error
+csharp_style_expression_bodied_lambdas= when_on_single_line:error
+csharp_style_expression_bodied_local_functions= when_on_single_line:error
+csharp_style_expression_bodied_methods = false:silent
+csharp_style_expression_bodied_operators= when_on_single_line:error
+csharp_style_expression_bodied_properties= when_on_single_line:error
+
+# Pattern matching preferences
+csharp_style_pattern_matching_over_as_with_null_check=true:error
+csharp_style_pattern_matching_over_is_with_cast_check= true:error
+
+# Null-checking preferences
+csharp_style_conditional_delegate_call= true:error
+
+# Modifier preferences
+csharp_preferred_modifier_order=public,private,protected,internal,static,extern,new,virtual,abstract,sealed,override,readonly,unsafe,volatile,async
+
+# IDE0063: Use simple 'using' statement
+dotnet_diagnostic.IDE0063.severity = none
+csharp_prefer_simple_using_statement= false:suggestion
+
+# Code-block preferences
+csharp_prefer_braces= true:error
+
+# Expression-level preferences
+csharp_prefer_simple_default_expression= true:error
+csharp_style_pattern_local_over_anonymous_function=true:error
+csharp_style_prefer_index_operator= true:error
+csharp_style_prefer_range_operator=true:error
+csharp_style_unused_value_assignment_preference=discard_variable:silent
+csharp_style_unused_value_expression_statement_preference=discard_variable:silent
+
+#### C# Formatting Rules ####
+
+# New line preferences
+csharp_new_line_before_catch=true
+csharp_new_line_before_else=true
+csharp_new_line_before_finally=true
+csharp_new_line_before_members_in_anonymous_types=true
+csharp_new_line_before_members_in_object_initializers=true
+csharp_new_line_before_open_brace=all
+csharp_new_line_between_query_expression_clauses=true
+
+# Indentation preferences
+csharp_indent_block_contents=true
+csharp_indent_braces=false
+csharp_indent_case_contents=true
+csharp_indent_case_contents_when_block=true
+csharp_indent_labels= flush_left
+csharp_indent_switch_labels=true
+
+# Space preferences
+csharp_space_after_cast=false
+csharp_space_after_colon_in_inheritance_clause=true
+csharp_space_after_comma=true
+csharp_space_after_dot=false
+csharp_space_after_keywords_in_control_flow_statements=true
+csharp_space_after_semicolon_in_for_statement=true
+csharp_space_around_binary_operators=before_and_after
+csharp_space_around_declaration_statements=false
+csharp_space_before_colon_in_inheritance_clause=true
+csharp_space_before_comma=false
+csharp_space_before_dot=false
+csharp_space_before_open_square_brackets=false
+csharp_space_before_semicolon_in_for_statement=false
+csharp_space_between_empty_square_brackets=false
+csharp_space_between_method_call_empty_parameter_list_parentheses=false
+csharp_space_between_method_call_name_and_opening_parenthesis=false
+csharp_space_between_method_call_parameter_list_parentheses=false
+csharp_space_between_method_declaration_empty_parameter_list_parentheses=false
+csharp_space_between_method_declaration_name_and_open_parenthesis=false
+csharp_space_between_method_declaration_parameter_list_parentheses=false
+csharp_space_between_parentheses=false
+csharp_space_between_square_brackets=false
+
+# Wrapping preferences
+csharp_preserve_single_line_blocks=true
+csharp_preserve_single_line_statements=false
+
+# CS8618: Non-nullable field must contain a non-null value when exiting constructor. Consider declaring as nullable.
+dotnet_diagnostic.CS8618.severity = none
+
+csharp_using_directive_placement = outside_namespace:silent
+csharp_style_namespace_declarations = file_scoped:silent
+csharp_style_prefer_method_group_conversion = true:silent
+csharp_style_prefer_top_level_statements = true:silent
+csharp_style_prefer_null_check_over_type_check = true:suggestion
+csharp_style_prefer_local_over_anonymous_function = true:suggestion
+csharp_prefer_static_local_function = true:suggestion
+
+# IDE0290: Use primary constructor
+dotnet_diagnostic.IDE0290.severity = none
+
+# IDE0076: Invalid or missing target for 'SuppressMessageAttribute'
+# GlobalSuppressions.cs is Compile-linked into every project, so a namespace-scoped suppression
+# resolves only in the assembly that actually contains that namespace and is inert everywhere
+# else. That is the intended design of the shared file, not a mistake in the individual entries,
+# so the rule would fire once per project for every entry that does not belong to it.
+# IDE0077 (legacy target format) stays active - targets must use the ~N:/~M: documentation ID form.
+dotnet_diagnostic.IDE0076.severity = none
+
+[*.{cs,vb}]
+dotnet_diagnostic.CA1822.severity=silent
+
+[*.{cs,vb}]
+#### Naming styles ####
+
+# Naming rules
+
+dotnet_naming_rule.interface_should_be_begins_with_i.severity = suggestion
+dotnet_naming_rule.interface_should_be_begins_with_i.symbols = interface
+dotnet_naming_rule.interface_should_be_begins_with_i.style = begins_with_i
+
+dotnet_naming_rule.types_should_be_pascal_case.severity = suggestion
+dotnet_naming_rule.types_should_be_pascal_case.symbols = types
+dotnet_naming_rule.types_should_be_pascal_case.style = pascal_case
+
+dotnet_naming_rule.non_field_members_should_be_pascal_case.severity = suggestion
+dotnet_naming_rule.non_field_members_should_be_pascal_case.symbols = non_field_members
+dotnet_naming_rule.non_field_members_should_be_pascal_case.style = pascal_case
+
+# Symbol specifications
+
+dotnet_naming_symbols.interface.applicable_kinds = interface
+dotnet_naming_symbols.interface.applicable_accessibilities = public, internal, private, protected, protected_internal, private_protected
+dotnet_naming_symbols.interface.required_modifiers =
+
+dotnet_naming_symbols.types.applicable_kinds = class, struct, interface, enum
+dotnet_naming_symbols.types.applicable_accessibilities = public, internal, private, protected, protected_internal, private_protected
+dotnet_naming_symbols.types.required_modifiers =
+
+dotnet_naming_symbols.non_field_members.applicable_kinds = property, event, method
+dotnet_naming_symbols.non_field_members.applicable_accessibilities = public, internal, private, protected, protected_internal, private_protected
+dotnet_naming_symbols.non_field_members.required_modifiers =
+
+# Naming styles
+
+dotnet_naming_style.begins_with_i.required_prefix = I
+dotnet_naming_style.begins_with_i.required_suffix =
+dotnet_naming_style.begins_with_i.word_separator =
+dotnet_naming_style.begins_with_i.capitalization = pascal_case
+
+dotnet_naming_style.pascal_case.required_prefix =
+dotnet_naming_style.pascal_case.required_suffix =
+dotnet_naming_style.pascal_case.word_separator =
+dotnet_naming_style.pascal_case.capitalization = pascal_case
+
+dotnet_naming_style.pascal_case.required_prefix =
+dotnet_naming_style.pascal_case.required_suffix =
+dotnet_naming_style.pascal_case.word_separator =
+dotnet_naming_style.pascal_case.capitalization = pascal_case
+dotnet_style_coalesce_expression = true:error
+dotnet_style_null_propagation = true:error
+dotnet_style_prefer_is_null_check_over_reference_equality_method = true:error
+dotnet_style_prefer_auto_properties = true:error
+dotnet_style_object_initializer = true:error
+dotnet_style_collection_initializer = true:error
+dotnet_style_prefer_simplified_boolean_expressions = true:suggestion
+dotnet_style_prefer_conditional_expression_over_assignment = true:suggestion
+dotnet_style_prefer_conditional_expression_over_return = true:error
+dotnet_style_explicit_tuple_names = true:error
+dotnet_style_prefer_inferred_tuple_names = true:error
+dotnet_style_prefer_inferred_anonymous_type_member_names = true:error
+dotnet_style_prefer_compound_assignment = true:error
+dotnet_style_prefer_simplified_interpolation = true:suggestion
+dotnet_style_namespace_match_folder = true:suggestion
+dotnet_style_operator_placement_when_wrapping = beginning_of_line
+dotnet_style_predefined_type_for_locals_parameters_members = true:error
+
+dotnet_diagnostic.CA2254.severity = silent
+dotnet_diagnostic.CA1873.severity = warning
+
+# Reihitsu analyzer rule suppressions (replaces the legacy .ruleset files)
+dotnet_diagnostic.RH0396.severity = none
+dotnet_diagnostic.RH0428.severity = none
+dotnet_diagnostic.RH2102.severity = none
+dotnet_diagnostic.RH4119.severity = none
+dotnet_diagnostic.RH4124.severity = none
+dotnet_diagnostic.RH7004.severity = none
+dotnet_diagnostic.RH8027.severity = none
+dotnet_diagnostic.RH8306.severity = none
+
+# MSTEST analyzer rules enforcement
+dotnet_diagnostic.MSTEST0037.severity = error
+dotnet_diagnostic.MSTEST0038.severity = error
+dotnet_diagnostic.MSTEST0039.severity = error
+dotnet_diagnostic.MSTEST0049.severity = error
+dotnet_diagnostic.MSTEST0065.severity = error
+dotnet_diagnostic.MSTEST0068.severity = error
\ No newline at end of file
diff --git a/Directory.Packages.props b/Directory.Packages.props
index 927fd44..9f8a6c8 100644
--- a/Directory.Packages.props
+++ b/Directory.Packages.props
@@ -22,7 +22,7 @@
-
+