From be444f63f181f8aeed246903dd522700d8a5aa15 Mon Sep 17 00:00:00 2001 From: ariannedee Date: Tue, 11 Aug 2020 17:47:40 -0700 Subject: [PATCH 01/21] Add required field errors to your children table --- edivorce/apps/core/static/js/main.js | 23 ++++-- .../core/templates/partials/required.html | 2 +- .../question/06_children_your_children.html | 18 +++-- .../apps/core/utils/question_step_mapping.py | 78 +++++++++++++++++++ edivorce/apps/core/utils/user_response.py | 7 +- 5 files changed, 112 insertions(+), 16 deletions(-) diff --git a/edivorce/apps/core/static/js/main.js b/edivorce/apps/core/static/js/main.js index 2892995c..bf71d5df 100755 --- a/edivorce/apps/core/static/js/main.js +++ b/edivorce/apps/core/static/js/main.js @@ -478,12 +478,12 @@ $(function () { } }; - var returnToParent = function(options) { + var returnToParent = function(save) { $('.children-questions').hide(); $('.children-list').show(); - clearQuestionWellError(); + clearQuestionWellError(save); enableChildrenFooterNav({page:'review'}); - saveChildQuestions(options); + saveChildQuestions({persist: save}); populateChildrenFactSheets(); }; @@ -494,10 +494,15 @@ $(function () { } }; - var clearQuestionWellError = function() { + var clearQuestionWellError = function(removeTableError) { $('.children-questions .question-well').each(function () { $(this).removeClass('error'); }); + if (removeTableError) { + var $childrenTable = $('.children-list.question-well'); + $childrenTable.removeClass('error'); + $childrenTable.find('.warning').remove(); + } }; var checkNoEmptyField = function() { @@ -508,14 +513,19 @@ $(function () { var questionWell = $(this); questionWell.removeClass('error'); questionWell.find('input').each(function (index, inputField) { + questionWell.find('.required').hide(); + $(inputField).removeClass('error'); if (inputField.type === 'text') { if (inputField.value === '') { isNotEmpty = false; + $(inputField).addClass('error'); questionWell.addClass('error'); + questionWell.find('.required').show(); } else if (inputField.id === 'childs_birth_date') { if (!moment(inputField.value, "MMM D, YYYY").isValid()) { isNotEmpty = false; questionWell.addClass('error'); + questionWell.find('.required').show(); } } else if (inputField.id === 'childs_name') { // check for digits in the name @@ -528,6 +538,7 @@ $(function () { if (questionWell.find('input:radio:checked').length === 0) { isNotEmpty = false; questionWell.addClass('error'); + questionWell.find('.required').show(); } return false; } @@ -542,7 +553,7 @@ $(function () { $('#btn_save_child').on('click', function(e) { e.preventDefault(); if (checkNoEmptyField() === true) { - returnToParent({persist: true}); + returnToParent(true); } else { scrollToFirstError(); } @@ -557,7 +568,7 @@ $(function () { $('#btn_revert_child').on('click', function(e) { e.preventDefault(); - returnToParent({persist: false}); + returnToParent(false); // Delete the empty row added to the children table when adding new child. // Empty row will always be the last row of the table. diff --git a/edivorce/apps/core/templates/partials/required.html b/edivorce/apps/core/templates/partials/required.html index 396cb4e5..c9419155 100644 --- a/edivorce/apps/core/templates/partials/required.html +++ b/edivorce/apps/core/templates/partials/required.html @@ -1 +1 @@ -* Required \ No newline at end of file + \ No newline at end of file diff --git a/edivorce/apps/core/templates/question/06_children_your_children.html b/edivorce/apps/core/templates/question/06_children_your_children.html index 6ae07ebf..464701d9 100644 --- a/edivorce/apps/core/templates/question/06_children_your_children.html +++ b/edivorce/apps/core/templates/question/06_children_your_children.html @@ -52,7 +52,9 @@ and how they will spend time with each parent.

{% endif %} -
+
+

* You have indicated that you have children of the marriage. This includes children under and over the age of 19. Their details + must be added below.

@@ -82,7 +84,9 @@ @@ -92,7 +96,7 @@
- Add Child + Add Child{% if claimant_children_error %} + {% include 'partials/required.html' with hidden=True %}{% endif %} +
@@ -513,9 +517,9 @@
- -
-

Please describe the order you are asking for regarding Special and Extraordinary Expenses

+
+

Please describe the order you are asking for regarding Special and Extraordinary Expenses{% if describe_order_special_extra_expenses_error %} + {% include 'partials/required.html' %}{% endif %}

If you're not sure how to write what you are asking for, you can refer to section "G" of the diff --git a/edivorce/apps/core/utils/derived.py b/edivorce/apps/core/utils/derived.py index b42944a8..8cc601f9 100644 --- a/edivorce/apps/core/utils/derived.py +++ b/edivorce/apps/core/utils/derived.py @@ -71,6 +71,7 @@ DERIVED_DATA = [ 'child_support_acts', 'pursuant_parenting_arrangement', 'pursuant_child_support', + 'sole_custody', ] @@ -710,3 +711,14 @@ def pursuant_child_support(responses, derived): if len(arrangement.strip()) > 0] except ValueError: return [] + + +def sole_custody(responses, derived): + """ + Return True if either parent has sole custody of the children + """ + you_have_sole_custody = all([child['child_live_with'] == 'Lives with you' + for child in derived['children']]) + spouse_has_sole_custody = all([child['child_live_with'] == 'Lives with spouse' + for child in derived['children']]) + return you_have_sole_custody or spouse_has_sole_custody From 30c081547ed2bf1bf5607b83a4c97dac60bddb71 Mon Sep 17 00:00:00 2001 From: ariannedee Date: Fri, 21 Aug 2020 12:01:32 -0700 Subject: [PATCH 04/21] Reimplement all logic for getting data and checking step completeness --- edivorce/apps/core/tests.py | 530 +++++------------- edivorce/apps/core/utils/conditional_logic.py | 69 +++ edivorce/apps/core/utils/derived.py | 62 +- .../apps/core/utils/question_step_mapping.py | 4 + edivorce/apps/core/utils/step_completeness.py | 119 +--- edivorce/apps/core/utils/user_response.py | 208 +++---- edivorce/apps/core/views/main.py | 55 +- edivorce/apps/core/views/pdf.py | 4 +- edivorce/fixtures/Question.json | 69 +-- 9 files changed, 429 insertions(+), 691 deletions(-) create mode 100644 edivorce/apps/core/utils/conditional_logic.py diff --git a/edivorce/apps/core/tests.py b/edivorce/apps/core/tests.py index a6d52905..f7503626 100644 --- a/edivorce/apps/core/tests.py +++ b/edivorce/apps/core/tests.py @@ -3,592 +3,346 @@ from edivorce.apps.core.models import UserResponse, Question, BceidUser from edivorce.apps.core.utils.step_completeness import is_complete from edivorce.apps.core.utils.question_step_mapping import question_step_mapping - # Create your tests here. +from edivorce.apps.core.utils.user_response import get_data_for_user, get_step_responses + + class UserResponseTestCase(TestCase): fixtures = ['Question.json'] def setUp(self): - BceidUser.objects.create(user_guid='1234') + self.user = BceidUser.objects.create(user_guid='1234') + + def check_completeness(self, step): + responses_dict = get_data_for_user(self.user) + responses_dict_by_step = get_step_responses(responses_dict) + return is_complete(responses_dict_by_step[step])[0] + + def create_response(self, question, value): + UserResponse.objects.create(bceid_user=self.user, question=Question.objects.get(key=question), value=value) def test_which_order(self): step = 'which_orders' - questions = question_step_mapping[step] - user = BceidUser.objects.get(user_guid='1234') # No response should be False - lst = UserResponse.objects.filter(question_id__in=questions).values('question_id', 'value', 'question__conditional_target', 'question__reveal_response', 'question__required') - self.assertEqual(is_complete(step, lst)[0], False) + self.assertEqual(self.check_completeness(step), False) # All required question - create_response(user, 'want_which_orders', '["nothing"]') - - lst = UserResponse.objects.filter(question_id__in=questions).values('question_id', 'value', 'question__conditional_target', 'question__reveal_response', 'question__required') - self.assertEqual(is_complete(step, lst)[0], True) + self.create_response('want_which_orders', '["nothing"]') + self.assertEqual(self.check_completeness(step), True) # Put empty response UserResponse.objects.filter(question_id='want_which_orders').update(value="[]") - - lst = UserResponse.objects.filter(question_id__in=questions).values('question_id', 'value', 'question__conditional_target', 'question__reveal_response', 'question__required') - self.assertEqual(is_complete(step, lst)[0], False) + self.assertEqual(self.check_completeness(step), False) def test_your_info(self): step = 'your_information' - questions = question_step_mapping[step] - user = BceidUser.objects.get(user_guid='1234') # No response should be False - lst = UserResponse.objects.filter(question_id__in=questions).values('question_id', 'value', 'question__conditional_target', 'question__reveal_response', 'question__required') - self.assertEqual(is_complete(step, lst)[0], False) + self.assertEqual(self.check_completeness(step), False) # Testing required questions # Missing few required questions - create_response(user, 'name_you', 'John Doe') - create_response(user, 'last_name_before_married_you', 'Jackson') - create_response(user, 'birthday_you', '11/11/1111') - create_response(user, 'occupation_you', 'Plumber') + self.create_response('name_you', 'John Doe') + self.create_response('last_name_before_married_you', 'Jackson') + self.create_response('birthday_you', '11/11/1111') + self.create_response('occupation_you', 'Plumber') - lst = UserResponse.objects.filter(question_id__in=questions).values('question_id', 'value', 'question__conditional_target', 'question__reveal_response', 'question__required') - self.assertEqual(is_complete(step, lst)[0], False) + self.assertEqual(self.check_completeness(step), False) # Few required questions with one checking question with hidden question not shown - create_response(user, 'lived_in_bc_you', '11/11/1111') - - lst = UserResponse.objects.filter(question_id__in=questions).values('question_id', 'value', 'question__conditional_target', 'question__reveal_response', 'question__required') - self.assertEqual(is_complete(step, lst)[0], False) + self.create_response('lived_in_bc_you', '11/11/1111') + self.assertEqual(self.check_completeness(step), False) # All required questions with one checking question with hidden question not shown - create_response(user, 'last_name_born_you', 'Jackson') - - lst = UserResponse.objects.filter(question_id__in=questions).values('question_id', 'value', 'question__conditional_target', 'question__reveal_response', 'question__required') - self.assertEqual(is_complete(step, lst)[0], False) + self.create_response('last_name_born_you', 'Jackson') + self.assertEqual(self.check_completeness(step), False) - # All required questions with one checking question with hidden question missing UserResponse.objects.filter(question_id='lived_in_bc_you').update(value="Moved to B.C. on") - - lst = UserResponse.objects.filter(question_id__in=questions).values('question_id', 'value', 'question__conditional_target', 'question__reveal_response', 'question__required') - self.assertEqual(is_complete(step, lst)[0], False) + self.assertEqual(self.check_completeness(step), False) # All required questions with one checking question with hidden question - create_response(user, 'moved_to_bc_date_you', '12/12/1212') - - lst = UserResponse.objects.filter(question_id__in=questions).values('question_id', 'value', 'question__conditional_target', 'question__reveal_response', 'question__required') - self.assertEqual(is_complete(step, lst)[0], False) + self.create_response('moved_to_bc_date_you', '12/12/1212') + self.assertEqual(self.check_completeness(step), False) # All required questions with two checking question with one hidden and one shown - create_response(user, 'any_other_name_you', 'NO') - - lst = UserResponse.objects.filter(question_id__in=questions).values('question_id', 'value', 'question__conditional_target', 'question__reveal_response', 'question__required') - self.assertEqual(is_complete(step, lst)[0], True) + self.create_response('any_other_name_you', 'NO') + self.assertEqual(self.check_completeness(step), True) # All required questions with two checking question with one hidden question missing UserResponse.objects.filter(question_id='any_other_name_you').update(value="YES") - - lst = UserResponse.objects.filter(question_id__in=questions).values('question_id', 'value', 'question__conditional_target', 'question__reveal_response', 'question__required') - self.assertEqual(is_complete(step, lst)[0], False) + self.assertEqual(self.check_completeness(step), False) # All required questions with all checking question with all hidden questions - create_response(user, 'other_name_you', '[["also known as","Smith"]]') - - lst = UserResponse.objects.filter(question_id__in=questions).values('question_id', 'value', 'question__conditional_target', 'question__reveal_response', 'question__required') - self.assertEqual(is_complete(step, lst)[0], True) + self.create_response('other_name_you', '[["also known as","Smith"]]') + self.assertEqual(self.check_completeness(step), True) # Put empty response UserResponse.objects.filter(question_id='other_name_you').update(value='[["",""]]') - - lst = UserResponse.objects.filter(question_id__in=questions).values('question_id', 'value', 'question__conditional_target', 'question__reveal_response', 'question__required') - self.assertEqual(is_complete(step, lst)[0], False) + self.assertEqual(self.check_completeness(step), False) def test_your_spouse(self): step = 'your_spouse' - questions = question_step_mapping[step] - user = BceidUser.objects.get(user_guid='1234') # No response should be False - lst = UserResponse.objects.filter(question_id__in=questions).values('question_id', 'value', 'question__conditional_target', 'question__reveal_response', 'question__required') - self.assertEqual(is_complete(step, lst)[0], False) + self.assertEqual(self.check_completeness(step), False) # Testing required questions # Missing few required questions - create_response(user, 'name_spouse', 'John Doe') - create_response(user, 'last_name_before_married_spouse', 'Jackson') - create_response(user, 'birthday_spouse', '11/11/1111') - create_response(user, 'occupation_spouse', 'Electrician') + self.create_response('name_spouse', 'John Doe') + self.create_response('last_name_before_married_spouse', 'Jackson') + self.create_response('birthday_spouse', '11/11/1111') + self.create_response('occupation_spouse', 'Electrician') - lst = UserResponse.objects.filter(question_id__in=questions).values('question_id', 'value', 'question__conditional_target', 'question__reveal_response', 'question__required') - self.assertEqual(is_complete(step, lst)[0], False) + self.assertEqual(self.check_completeness(step), False) # Few required questions with one checking question with hidden question not shown - create_response(user, 'any_other_name_spouse', 'NO') - - lst = UserResponse.objects.filter(question_id__in=questions).values('question_id', 'value', 'question__conditional_target', 'question__reveal_response', 'question__required') - self.assertEqual(is_complete(step, lst)[0], False) + self.create_response('any_other_name_spouse', 'NO') + self.assertEqual(self.check_completeness(step), False) # All required questions with one checking question with hidden question not shown - create_response(user, 'last_name_born_spouse', 'Jackson') - - lst = UserResponse.objects.filter(question_id__in=questions).values('question_id', 'value', 'question__conditional_target', 'question__reveal_response', 'question__required') - self.assertEqual(is_complete(step, lst)[0], False) + self.create_response('last_name_born_spouse', 'Jackson') + self.assertEqual(self.check_completeness(step), False) # All required questions with one checking question with hidden question missing UserResponse.objects.filter(question_id='any_other_name_spouse').update(value="YES") - - lst = UserResponse.objects.filter(question_id__in=questions).values('question_id', 'value', 'question__conditional_target', 'question__reveal_response', 'question__required') - self.assertEqual(is_complete(step, lst)[0], False) + self.assertEqual(self.check_completeness(step), False) # All required questions with one checking question with hidden question - create_response(user, 'lived_in_bc_spouse', 'Since birth') - - lst = UserResponse.objects.filter(question_id__in=questions).values('question_id', 'value', 'question__conditional_target', 'question__reveal_response', 'question__required') - self.assertEqual(is_complete(step, lst)[0], False) + self.create_response('lived_in_bc_spouse', 'Since birth') + self.assertEqual(self.check_completeness(step), False) # All required questions with two checking question with one hidden and one shown - create_response(user, 'other_name_spouse', '[["also known as","Smith"]]') - - lst = UserResponse.objects.filter(question_id__in=questions).values('question_id', 'value', 'question__conditional_target', 'question__reveal_response', 'question__required') - self.assertEqual(is_complete(step, lst)[0], True) + self.create_response('other_name_spouse', '[["also known as","Smith"]]') + self.assertEqual(self.check_completeness(step), True) # All required questions with two checking question with one hidden question missing UserResponse.objects.filter(question_id='lived_in_bc_spouse').update(value="Moved to B.C. on") - - lst = UserResponse.objects.filter(question_id__in=questions).values('question_id', 'value', 'question__conditional_target', 'question__reveal_response', 'question__required') - self.assertEqual(is_complete(step, lst)[0], False) + self.assertEqual(self.check_completeness(step), False) # All required questions with all checking question with all hidden questions - create_response(user, 'moved_to_bc_date_spouse', '12/12/1212') - - lst = UserResponse.objects.filter(question_id__in=questions).values('question_id', 'value', 'question__conditional_target', 'question__reveal_response', 'question__required') - self.assertEqual(is_complete(step, lst)[0], True) + self.create_response('moved_to_bc_date_spouse', '12/12/1212') + self.assertEqual(self.check_completeness(step), True) # Put empty response UserResponse.objects.filter(question_id='name_spouse').update(value="") - - lst = UserResponse.objects.filter(question_id__in=questions).values('question_id', 'value', 'question__conditional_target', 'question__reveal_response', 'question__required') - self.assertEqual(is_complete(step, lst)[0], False) + self.assertEqual(self.check_completeness(step), False) # Put empty response UserResponse.objects.filter(question_id='other_name_spouse').update(value='[["",""]]') - - lst = UserResponse.objects.filter(question_id__in=questions).values('question_id', 'value', 'question__conditional_target', 'question__reveal_response', 'question__required') - self.assertEqual(is_complete(step, lst)[0], False) + self.assertEqual(self.check_completeness(step), False) def test_your_marriage(self): step = 'your_marriage' - questions = question_step_mapping[step] - user = BceidUser.objects.get(user_guid='1234') # No response should be False - lst = UserResponse.objects.filter(question_id__in=questions).values('question_id', 'value', - 'question__conditional_target', - 'question__reveal_response', - 'question__required') - self.assertEqual(is_complete(step, lst)[0], False) - - # Some required questions - create_response(user, 'when_were_you_live_married_like', '12/12/2007') - - lst = UserResponse.objects.filter(question_id__in=questions).values('question_id', 'value', - 'question__conditional_target', - 'question__reveal_response', - 'question__required') - self.assertEqual(is_complete(step, lst)[0], False) + self.assertEqual(self.check_completeness(step), False) # Some required questions - create_response(user, 'when_were_you_married', '12/12/2008') - - lst = UserResponse.objects.filter(question_id__in=questions).values('question_id', 'value', - 'question__conditional_target', - 'question__reveal_response', - 'question__required') - self.assertEqual(is_complete(step, lst)[0], False) + self.create_response('when_were_you_live_married_like', '12/12/2007') + self.assertEqual(self.check_completeness(step), False) - # Some required questions - create_response(user, 'marital_status_before_you', 'Never married') + self.create_response('when_were_you_married', '12/12/2008') + self.assertEqual(self.check_completeness(step), False) - lst = UserResponse.objects.filter(question_id__in=questions).values('question_id', 'value', - 'question__conditional_target', - 'question__reveal_response', - 'question__required') - self.assertEqual(is_complete(step, lst)[0], False) - - # Some required questions - create_response(user, 'marital_status_before_spouse', 'Widowed') + self.create_response('marital_status_before_you', 'Never married') + self.assertEqual(self.check_completeness(step), False) - lst = UserResponse.objects.filter(question_id__in=questions).values('question_id', 'value', - 'question__conditional_target', - 'question__reveal_response', - 'question__required') - self.assertEqual(is_complete(step, lst)[0], False) + self.create_response('marital_status_before_spouse', 'Widowed') + self.assertEqual(self.check_completeness(step), False) - # Some required questions - create_response(user, 'where_were_you_married_city', 'Vancouver') - - lst = UserResponse.objects.filter(question_id__in=questions).values('question_id', 'value', - 'question__conditional_target', - 'question__reveal_response', - 'question__required') - self.assertEqual(is_complete(step, lst)[0], False) - - # Some required questions - create_response(user, 'where_were_you_married_prov', 'BC') + self.create_response('where_were_you_married_city', 'Vancouver') + self.assertEqual(self.check_completeness(step), False) - lst = UserResponse.objects.filter(question_id__in=questions).values('question_id', 'value', - 'question__conditional_target', - 'question__reveal_response', - 'question__required') - self.assertEqual(is_complete(step, lst)[0], False) + self.create_response('where_were_you_married_prov', 'BC') + self.assertEqual(self.check_completeness(step), False) # All required questions - create_response(user, 'where_were_you_married_country', 'Canada') - - lst = UserResponse.objects.filter(question_id__in=questions).values('question_id', 'value', - 'question__conditional_target', - 'question__reveal_response', - 'question__required') - self.assertEqual(is_complete(step, lst)[0], True) + self.create_response('where_were_you_married_country', 'Canada') + self.assertEqual(self.check_completeness(step), True) # All required questions but missing conditional question UserResponse.objects.filter(question_id='where_were_you_married_country').update(value="Other") - - lst = UserResponse.objects.filter(question_id__in=questions).values('question_id', 'value', - 'question__conditional_target', - 'question__reveal_response', - 'question__required') - self.assertEqual(is_complete(step, lst)[0], False) + self.assertEqual(self.check_completeness(step), False) # All required questions - create_response(user, 'where_were_you_married_other_country', 'Peru') - - lst = UserResponse.objects.filter(question_id__in=questions).values('question_id', 'value', - 'question__conditional_target', - 'question__reveal_response', - 'question__required') - self.assertEqual(is_complete(step, lst)[0], True) + self.create_response('where_were_you_married_other_country', 'Peru') + self.assertEqual(self.check_completeness(step), True) def test_your_separation(self): step = 'your_separation' - questions = question_step_mapping[step] - user = BceidUser.objects.get(user_guid='1234') - # No response should be False - lst = UserResponse.objects.filter(question_id__in=questions).values('question_id', 'value', 'question__conditional_target', 'question__reveal_response', 'question__required') - self.assertEqual(is_complete(step, lst)[0], False) + self.assertEqual(self.check_completeness(step), False) # All required question - create_response(user, 'no_reconciliation_possible', 'I agree') - - lst = UserResponse.objects.filter(question_id__in=questions).values('question_id', 'value', 'question__conditional_target', 'question__reveal_response', 'question__required') - self.assertEqual(is_complete(step, lst)[0], False) + self.create_response('no_reconciliation_possible', 'I agree') + self.assertEqual(self.check_completeness(step), False) # Put empty response UserResponse.objects.filter(question_id='no_reconciliation_possible').update(value="") - - lst = UserResponse.objects.filter(question_id__in=questions).values('question_id', 'value', 'question__conditional_target', 'question__reveal_response', 'question__required') - self.assertEqual(is_complete(step, lst)[0], False) + self.assertEqual(self.check_completeness(step), False) def test_spousal_support(self): step = 'spousal_support' - questions = question_step_mapping[step] - user = BceidUser.objects.get(user_guid='1234') # No response should be False - lst = UserResponse.objects.filter(question_id__in=questions).values('question_id', 'value', 'question__conditional_target', 'question__reveal_response', 'question__required') - self.assertEqual(is_complete(step, lst)[0], False) + self.assertEqual(self.check_completeness(step), False) # One required question - create_response(user, 'spouse_support_details', 'I will support you') - - lst = UserResponse.objects.filter(question_id__in=questions).values('question_id', 'value', 'question__conditional_target', 'question__reveal_response', 'question__required') - self.assertEqual(is_complete(step, lst)[0], False) + self.create_response('spouse_support_details', 'I will support you') + self.assertEqual(self.check_completeness(step), False) # Two required questions - create_response(user, 'spouse_support_act', 'Family Law') - - lst = UserResponse.objects.filter(question_id__in=questions).values('question_id', 'value', 'question__conditional_target', 'question__reveal_response', 'question__required') - self.assertEqual(is_complete(step, lst)[0], True) + self.create_response('spouse_support_act', 'Family Law') + self.assertEqual(self.check_completeness(step), True) # Remove first added required response to test the second required question UserResponse.objects.get(question_id='spouse_support_details').delete() - lst = UserResponse.objects.filter(question_id__in=questions).values('question_id', 'value', 'question__conditional_target', 'question__reveal_response', 'question__required') - self.assertEqual(is_complete(step, lst)[0], False) + self.assertEqual(self.check_completeness(step), False) # Put empty response UserResponse.objects.filter(question_id='spouse_support_details').update(value="") - lst = UserResponse.objects.filter(question_id__in=questions).values('question_id', 'value', 'question__conditional_target', 'question__reveal_response', 'question__required') - self.assertEqual(is_complete(step, lst)[0], False) + self.assertEqual(self.check_completeness(step), False) def test_property_and_debt(self): step = 'property_and_debt' - questions = question_step_mapping[step] - user = BceidUser.objects.get(user_guid='1234') # No response should be False - lst = UserResponse.objects.filter(question_id__in=questions).values('question_id', 'value', 'question__conditional_target', 'question__reveal_response', 'question__required') - self.assertEqual(is_complete(step, lst)[0], False) + self.assertEqual(self.check_completeness(step), False) # All required question with no hidden shown - create_response(user, 'deal_with_property_debt', 'Equal division') + self.create_response('deal_with_property_debt', 'Equal division') - lst = UserResponse.objects.filter(question_id__in=questions).values('question_id', 'value', 'question__conditional_target', 'question__reveal_response', 'question__required') - self.assertEqual(is_complete(step, lst)[0], True) + self.assertEqual(self.check_completeness(step), True) # All required question with hidden shown but no response UserResponse.objects.filter(question_id='deal_with_property_debt').update(value="Unequal division") - lst = UserResponse.objects.filter(question_id__in=questions).values('question_id', 'value', 'question__conditional_target', 'question__reveal_response', 'question__required') - self.assertEqual(is_complete(step, lst)[0], False) + self.assertEqual(self.check_completeness(step), False) # Only one required question with hidden shown and answered - create_response(user, 'how_to_divide_property_debt', 'Do not divide them') - - lst = UserResponse.objects.filter(question_id__in=questions).values('question_id', 'value', 'question__conditional_target', 'question__reveal_response', 'question__required') - self.assertEqual(is_complete(step, lst)[0], True) + self.create_response('how_to_divide_property_debt', 'Do not divide them') - # Only two required question with hidden shown and answered - # NOTE: want_other_property_claims not in use anymore - # create_response(user, 'want_other_property_claims', '["Ask for other property claims"]') - # - # lst = UserResponse.objects.filter(question_id__in=questions).values('question_id', 'value', 'question__conditional_target', 'question__reveal_response', 'question__required') - # self.assertEqual(is_complete(step, lst)[0], False) + self.assertEqual(self.check_completeness(step), True) - # All required question with hidden shown and answered - create_response(user, 'other_property_claims', 'Want these property claims') - - lst = UserResponse.objects.filter(question_id__in=questions).values('question_id', 'value', 'question__conditional_target', 'question__reveal_response', 'question__required') - self.assertEqual(is_complete(step, lst)[0], True) + # All required question with optional fields + self.create_response('other_property_claims', 'Want these property claims') + self.assertEqual(self.check_completeness(step), True) # Put empty response - # UserResponse.objects.filter(question_id='want_other_property_claims').update(value="") - - lst = UserResponse.objects.filter(question_id__in=questions).values('question_id', 'value', 'question__conditional_target', 'question__reveal_response', 'question__required') - self.assertEqual(is_complete(step, lst)[0], True) + UserResponse.objects.filter(question_id='want_other_property_claims').update(value="") + self.assertEqual(self.check_completeness(step), True) def test_other_orders(self): step = 'other_orders' - questions = question_step_mapping[step] - user = BceidUser.objects.get(user_guid='1234') # No response should be False - lst = UserResponse.objects.filter(question_id__in=questions).values('question_id', 'value', 'question__conditional_target', 'question__reveal_response', 'question__required') - self.assertEqual(is_complete(step, lst)[0], False) + self.assertEqual(self.check_completeness(step), False) # All required question + self.create_response('name_change_you', 'NO') + self.assertEqual(self.check_completeness(step), False) - create_response(user, 'name_change_you', 'NO') - self.assertEqual(is_complete(step, lst)[0], False) - - create_response(user, 'name_change_spouse', 'NO') - create_response(user, 'other_orders_detail', 'I want more orders') + self.create_response('name_change_spouse', 'NO') + self.create_response('other_orders_detail', 'I want more orders') - lst = UserResponse.objects.filter(question_id__in=questions).values('question_id', 'value', 'question__conditional_target', 'question__reveal_response', 'question__required') - self.assertEqual(is_complete(step, lst)[0], True) + self.assertEqual(self.check_completeness(step), True) # make incomplete UserResponse.objects.filter(question_id='name_change_spouse').update(value="YES") + self.assertEqual(self.check_completeness(step), False) - lst = UserResponse.objects.filter(question_id__in=questions).values('question_id', 'value', 'question__conditional_target', 'question__reveal_response', 'question__required') - self.assertEqual(is_complete(step, lst)[0], False) - - create_response(user, 'name_change_spouse_fullname', 'new name') - - lst = UserResponse.objects.filter(question_id__in=questions).values('question_id', 'value', 'question__conditional_target', 'question__reveal_response', 'question__required') - self.assertEqual(is_complete(step, lst)[0], True) + self.create_response('name_change_spouse_fullname', 'new name') + self.assertEqual(self.check_completeness(step), True) # Put empty response UserResponse.objects.filter(question_id='other_orders_detail').update(value="") - - lst = UserResponse.objects.filter(question_id__in=questions).values('question_id', 'value', 'question__conditional_target', 'question__reveal_response', 'question__required') - self.assertEqual(is_complete(step, lst)[0], True) + self.assertEqual(self.check_completeness(step), True) def test_other_questions(self): step = 'other_questions' - questions = question_step_mapping[step] - user = BceidUser.objects.get(user_guid='1234') # No response should be False - lst = UserResponse.objects.filter(question_id__in=questions).values('question_id', 'value', - 'question__conditional_target', - 'question__reveal_response', - 'question__required') - self.assertEqual(is_complete(step, lst)[0], False) - - # One required question - create_response(user, 'address_to_send_official_document_street_you', '123 Cambie st') - - lst = UserResponse.objects.filter(question_id__in=questions).values('question_id', 'value', - 'question__conditional_target', - 'question__reveal_response', - 'question__required') - self.assertEqual(is_complete(step, lst)[0], False) + self.assertEqual(self.check_completeness(step), False) - # Two required question - create_response(user, 'address_to_send_official_document_city_you', 'Vancouver') + # Some required question + self.create_response('address_to_send_official_document_street_you', '123 Cambie st') + self.assertEqual(self.check_completeness(step), False) - lst = UserResponse.objects.filter(question_id__in=questions).values('question_id', 'value', - 'question__conditional_target', - 'question__reveal_response', - 'question__required') - self.assertEqual(is_complete(step, lst)[0], False) + self.create_response('address_to_send_official_document_city_you', 'Vancouver') + self.assertEqual(self.check_completeness(step), False) - # Three required question - create_response(user, 'address_to_send_official_document_prov_you', 'BC') + self.create_response('address_to_send_official_document_prov_you', 'BC') + self.assertEqual(self.check_completeness(step), False) - lst = UserResponse.objects.filter(question_id__in=questions).values('question_id', 'value', - 'question__conditional_target', - 'question__reveal_response', - 'question__required') - self.assertEqual(is_complete(step, lst)[0], False) - - # Four required question - create_response(user, 'address_to_send_official_document_country_you', 'Canada') - - lst = UserResponse.objects.filter(question_id__in=questions).values('question_id', 'value', - 'question__conditional_target', - 'question__reveal_response', - 'question__required') - self.assertEqual(is_complete(step, lst)[0], False) + self.create_response('address_to_send_official_document_country_you', 'Canada') + self.assertEqual(self.check_completeness(step), False) # All required questions for you - create_response(user, 'address_to_send_official_document_postal_code_you', 'Canada') - - lst = UserResponse.objects.filter(question_id__in=questions).values('question_id', 'value', - 'question__conditional_target', - 'question__reveal_response', - 'question__required') - self.assertEqual(is_complete(step, lst)[0], False) + self.create_response('address_to_send_official_document_postal_code_you', 'Canada') + self.assertEqual(self.check_completeness(step), False) # One required question for spouse - create_response(user, 'address_to_send_official_document_street_spouse', '123 Cambie st') - - lst = UserResponse.objects.filter(question_id__in=questions).values('question_id', 'value', - 'question__conditional_target', - 'question__reveal_response', - 'question__required') - self.assertEqual(is_complete(step, lst)[0], False) + self.create_response('address_to_send_official_document_street_spouse', '123 Cambie st') + self.assertEqual(self.check_completeness(step), False) # Two required question for spouse - create_response(user, 'address_to_send_official_document_city_spouse', 'Vancouver') - - lst = UserResponse.objects.filter(question_id__in=questions).values('question_id', 'value', - 'question__conditional_target', - 'question__reveal_response', - 'question__required') - self.assertEqual(is_complete(step, lst)[0], False) + self.create_response('address_to_send_official_document_city_spouse', 'Vancouver') + self.assertEqual(self.check_completeness(step), False) # Three required question for spouse - create_response(user, 'address_to_send_official_document_prov_spouse', 'BC') - - lst = UserResponse.objects.filter(question_id__in=questions).values('question_id', 'value', - 'question__conditional_target', - 'question__reveal_response', - 'question__required') - self.assertEqual(is_complete(step, lst)[0], False) + self.create_response('address_to_send_official_document_prov_spouse', 'BC') + self.assertEqual(self.check_completeness(step), False) # Four required question for spouse - create_response(user, 'address_to_send_official_document_country_spouse', 'Canada') - - lst = UserResponse.objects.filter(question_id__in=questions).values('question_id', 'value', - 'question__conditional_target', - 'question__reveal_response', - 'question__required') - self.assertEqual(is_complete(step, lst)[0], False) + self.create_response('address_to_send_official_document_country_spouse', 'Canada') + self.assertEqual(self.check_completeness(step), False) # All required questions - create_response(user, 'divorce_take_effect_on', 'the 31st day after the date of this order') - - lst = UserResponse.objects.filter(question_id__in=questions).values('question_id', 'value', - 'question__conditional_target', - 'question__reveal_response', - 'question__required') - self.assertEqual(is_complete(step, lst)[0], True) + self.create_response('divorce_take_effect_on', 'the 31st day after the date of this order') + self.assertEqual(self.check_completeness(step), True) # Missing conditional required question UserResponse.objects.filter(question_id='divorce_take_effect_on').update(value="specific date") - - lst = UserResponse.objects.filter(question_id__in=questions).values('question_id', 'value', - 'question__conditional_target', - 'question__reveal_response', - 'question__required') - self.assertEqual(is_complete(step, lst)[0], False) + self.assertEqual(self.check_completeness(step), False) # All required questions - create_response(user, 'divorce_take_effect_on_specific_date', '12/12/2018') - - lst = UserResponse.objects.filter(question_id__in=questions).values('question_id', 'value', - 'question__conditional_target', - 'question__reveal_response', - 'question__required') - self.assertEqual(is_complete(step, lst)[0], True) + self.create_response('divorce_take_effect_on_specific_date', '12/12/2018') + self.assertEqual(self.check_completeness(step), True) # All required questions for spouse and you - create_response(user, 'address_to_send_official_document_postal_code_spouse', 'Canada') + self.create_response('address_to_send_official_document_postal_code_spouse', 'Canada') - lst = UserResponse.objects.filter(question_id__in=questions).values('question_id', 'value', - 'question__conditional_target', - 'question__reveal_response', - 'question__required') - self.assertEqual(is_complete(step, lst)[0], True) + self.assertEqual(self.check_completeness(step), True) # All required questions for spouse and you with empty email(optional so still true) - create_response(user, 'address_to_send_official_document_email_you', 'a@example.com') - - lst = UserResponse.objects.filter(question_id__in=questions).values('question_id', 'value', - 'question__conditional_target', - 'question__reveal_response', - 'question__required') - self.assertEqual(is_complete(step, lst)[0], True) + self.create_response('address_to_send_official_document_email_you', 'a@example.com') + self.assertEqual(self.check_completeness(step), True) # Testing other country missing UserResponse.objects.filter(question_id='address_to_send_official_document_country_spouse').update(value="Other") - - lst = UserResponse.objects.filter(question_id__in=questions).values('question_id', 'value', - 'question__conditional_target', - 'question__reveal_response', - 'question__required') - self.assertEqual(is_complete(step, lst)[0], False) + self.assertEqual(self.check_completeness(step), False) # All required questions - create_response(user, 'address_to_send_official_document_other_country_spouse', 'Mexico') - - lst = UserResponse.objects.filter(question_id__in=questions).values('question_id', 'value', - 'question__conditional_target', - 'question__reveal_response', - 'question__required') - self.assertEqual(is_complete(step, lst)[0], True) + self.create_response('address_to_send_official_document_other_country_spouse', 'Mexico') + self.assertEqual(self.check_completeness(step), True) # Set Specific date on to empty UserResponse.objects.filter(question_id='divorce_take_effect_on_specific_date').update(value="") - - lst = UserResponse.objects.filter(question_id__in=questions).values('question_id', 'value', - 'question__conditional_target', - 'question__reveal_response', - 'question__required') - self.assertEqual(is_complete(step, lst)[0], False) + self.assertEqual(self.check_completeness(step), False) def test_filing_locations(self): step = 'filing_locations' - questions = question_step_mapping[step] - user = BceidUser.objects.get(user_guid='1234') # No response should be False - lst = UserResponse.objects.filter(question_id__in=questions).values('question_id', 'value', 'question__conditional_target', 'question__reveal_response', 'question__required') - self.assertEqual(is_complete(step, lst)[0], False) + self.assertEqual(self.check_completeness(step), False) # All required question - create_response(user, 'court_registry_for_filing', 'Vancouver') - - lst = UserResponse.objects.filter(question_id__in=questions).values('question_id', 'value', 'question__conditional_target', 'question__reveal_response', 'question__required') - self.assertEqual(is_complete(step, lst)[0], True) + self.create_response('court_registry_for_filing', 'Vancouver') + self.assertEqual(self.check_completeness(step), True) # Put empty response UserResponse.objects.filter(question_id='court_registry_for_filing').update(value="") - - lst = UserResponse.objects.filter(question_id__in=questions).values('question_id', 'value', 'question__conditional_target', 'question__reveal_response', 'question__required') - self.assertEqual(is_complete(step, lst)[0], False) - - -# Helper functions -def create_response(user, question, value): - UserResponse.objects.create(bceid_user=user, question=Question.objects.get(key=question), value=value) + self.assertEqual(self.check_completeness(step), False) diff --git a/edivorce/apps/core/utils/conditional_logic.py b/edivorce/apps/core/utils/conditional_logic.py new file mode 100644 index 00000000..cc55daa9 --- /dev/null +++ b/edivorce/apps/core/utils/conditional_logic.py @@ -0,0 +1,69 @@ +import json + + +def get_children(questions_dict): + children_json = questions_dict.get('claimant_children', '[]') + if isinstance(children_json, dict): + children_json = children_json.get('value', '[]') + return json.loads(children_json) + + +def determine_sole_custody(questions_dict): + child_list = get_children(questions_dict) + return (all([child['child_live_with'] == 'Lives with you' for child in child_list]) or + all([child['child_live_with'] == 'Lives with spouse' for child in child_list])) + + +def determine_shared_custody(questions_dict): + child_list = get_children(questions_dict) + return any([child['child_live_with'] == 'Lives with both' + for child in child_list]) + + +def determine_split_custody(questions_dict): + child_list = get_children(questions_dict) + with_you = 0 + with_spouse = 0 + with_both = 0 + for child in child_list: + if child['child_live_with'] == 'Lives with you': + with_you += 1 + elif child['child_live_with'] == 'Lives with spouse': + with_spouse += 1 + elif child['child_live_with'] == 'Lives with both': + with_both += 1 + return (with_you > 0 and (with_spouse + with_both > 0) or + with_spouse > 0 and (with_you + with_both > 0)) + + +def determine_child_over_19_supported(questions_dict): + try: + children_over_19 = float(questions_dict.get('number_children_over_19', 0)) + except ValueError: + children_over_19 = 0 + + support = json.loads(questions_dict.get('children_financial_support', '[]')) + has_children_of_marriage = questions_dict.get('children_of_marriage', '') == 'YES' + return (len(support) > 0 and children_over_19 > 0 and + 'NO' not in support and has_children_of_marriage) + + +def determine_missing_undue_hardship_reasons(questions_dict): + claiming_undue_hardship = questions_dict.get('claiming_undue_hardship', '') == 'YES' + if claiming_undue_hardship: + at_least_one_of = ["claimant_debts", "claimant_expenses", "supporting_non_dependents", "supporting_dependents", + "supporting_disabled", "undue_hardship"] + for question in at_least_one_of: + value = questions_dict.get(question) + if value: + try: + items = json.loads(value) + for item in items: + for key in item: + if item[key]: + return False + except json.JSONDecodeError: + if value: + return False + + return True diff --git a/edivorce/apps/core/utils/derived.py b/edivorce/apps/core/utils/derived.py index 8cc601f9..6b0e57c9 100644 --- a/edivorce/apps/core/utils/derived.py +++ b/edivorce/apps/core/utils/derived.py @@ -13,6 +13,8 @@ under the _derived_ key. import json +from edivorce.apps.core.utils import conditional_logic + # This array is order sensitive: later functions may depend on values from # earlier ones DERIVED_DATA = [ @@ -72,6 +74,7 @@ DERIVED_DATA = [ 'pursuant_parenting_arrangement', 'pursuant_child_support', 'sole_custody', + 'missing_undue_hardship_details', ] @@ -150,9 +153,7 @@ def show_fact_sheet_b(responses, derived): If any child lives with both parents, custody is shared, so Fact Sheet B is indicated. """ - - return any([child['child_live_with'] == 'Lives with both' - for child in derived['children']]) + return conditional_logic.determine_shared_custody(responses) def show_fact_sheet_c(responses, derived): @@ -160,19 +161,7 @@ def show_fact_sheet_c(responses, derived): If any child lives with one parent and there's another child who lives with the other parent or is shared, Fact Sheet C is indicated. """ - - with_you = 0 - with_spouse = 0 - with_both = 0 - for child in derived['children']: - if child['child_live_with'] == 'Lives with you': - with_you += 1 - elif child['child_live_with'] == 'Lives with spouse': - with_spouse += 1 - elif child['child_live_with'] == 'Lives with both': - with_both += 1 - return (with_you > 0 and (with_spouse + with_both > 0) or - with_spouse > 0 and (with_you + with_both > 0)) + return conditional_logic.determine_split_custody(responses) def show_fact_sheet_d(responses, derived): @@ -180,15 +169,7 @@ def show_fact_sheet_d(responses, derived): If a claimaint is claiming financial support for a child of the marriage over 19, Fact Sheet D is indicated. """ - - try: - children_over_19 = float(responses.get('number_children_over_19', 0)) - except ValueError: - children_over_19 = 0 - - support = json.loads(responses.get('children_financial_support', '[]')) - return (len(support) > 0 and children_over_19 > 0 and - 'NO' not in support and has_children_of_marriage(responses, derived)) + return conditional_logic.determine_child_over_19_supported(responses) def show_fact_sheet_e(responses, derived): @@ -242,11 +223,11 @@ def show_fact_sheet_f_spouse(responses, derived): def has_fact_sheets(responses, derived): """ Return whether or not the user is submitting fact sheets """ - return any([derived['show_fact_sheet_b'], derived['show_fact_sheet_c'], derived['show_fact_sheet_d'], derived['show_fact_sheet_e'], derived['show_fact_sheet_f'], ]) + def child_support_payor_b(responses, derived): """ Return who the payor is depends on the monthly amount from Factsheet B """ try: @@ -264,10 +245,11 @@ def child_support_payor_b(responses, derived): elif amount_1 < amount_2: payor = 'spouse' else: - payor = 'both' + payor = 'both' return payor + def child_support_payor_c(responses, derived): """ Return who the payor is depends on the monthly amount from Factsheet C """ try: @@ -285,10 +267,11 @@ def child_support_payor_c(responses, derived): elif amount_1 < amount_2: payor = 'spouse' else: - payor = 'both' + payor = 'both' return payor + def guideline_amounts_difference_b(responses, derived): """ Return the difference between the guideline amounts to be paid by @@ -307,6 +290,7 @@ def guideline_amounts_difference_b(responses, derived): return abs(amount_1 - amount_2) + def guideline_amounts_difference_c(responses, derived): """ Return the difference between the guideline amounts to be paid by @@ -325,6 +309,7 @@ def guideline_amounts_difference_c(responses, derived): return abs(amount_1 - amount_2) + def guideline_amounts_difference_total(responses, derived): """ Return the sum of the guideline amounts B and C @@ -339,14 +324,15 @@ def guideline_amounts_difference_total(responses, derived): if payor_b == payor_c: return amount_b + amount_c else: - return abs(amount_b - amount_c) + return abs(amount_b - amount_c) + def schedule_1_amount(responses, derived): """ Return the amount as defined in schedule 1 for child support """ try: if derived['show_fact_sheet_b'] or derived['show_fact_sheet_c']: - return derived['guideline_amounts_difference_total'] + return derived['guideline_amounts_difference_total'] else: return float(responses.get('payor_monthly_child_support_amount', 0)) except ValueError: @@ -540,13 +526,11 @@ def total_monthly_support_1_and_a(responses, derived): total += derived['total_section_seven_expenses'] return total + def total_child_support_payment_a(response, derived): """ Return the total monthly child support payable by the payor for Fact Sheet A """ total = 0 - sole_custody = (all([child['child_live_with'] == 'Lives with you' for child in derived['children']]) or - all([child['child_live_with'] == 'Lives with spouse' for child in derived['children']])) - - if sole_custody: + if sole_custody(response, derived): total += derived['schedule_1_amount'] else: if derived['show_fact_sheet_b']: @@ -717,8 +701,8 @@ def sole_custody(responses, derived): """ Return True if either parent has sole custody of the children """ - you_have_sole_custody = all([child['child_live_with'] == 'Lives with you' - for child in derived['children']]) - spouse_has_sole_custody = all([child['child_live_with'] == 'Lives with spouse' - for child in derived['children']]) - return you_have_sole_custody or spouse_has_sole_custody + return conditional_logic.determine_sole_custody(responses) + + +def missing_undue_hardship_details(responses, derived): + return conditional_logic.determine_missing_undue_hardship_reasons(responses) diff --git a/edivorce/apps/core/utils/question_step_mapping.py b/edivorce/apps/core/utils/question_step_mapping.py index 53a09e21..d34bf108 100644 --- a/edivorce/apps/core/utils/question_step_mapping.py +++ b/edivorce/apps/core/utils/question_step_mapping.py @@ -128,6 +128,9 @@ question_step_mapping = { 'your_spouse_child_support_paid_b', 'your_child_support_paid_c', 'your_spouse_child_support_paid_c', + 'agree_to_guideline_child_support_amount', + 'appropriate_spouse_paid_child_support', + 'suggested_child_support', 'extra_ordinary_expenses_you', 'extra_ordinary_expenses_spouse', 'additional_relevant_spouse_children_info', @@ -184,6 +187,7 @@ page_step_mapping = { 'property': 'property_and_debt', 'other_orders': 'other_orders', 'other_questions': 'other_questions', + 'filing_locations': 'filing_locations', } diff --git a/edivorce/apps/core/utils/step_completeness.py b/edivorce/apps/core/utils/step_completeness.py index af388074..1142c6ab 100644 --- a/edivorce/apps/core/utils/step_completeness.py +++ b/edivorce/apps/core/utils/step_completeness.py @@ -1,8 +1,7 @@ -import ast from django.urls import reverse from edivorce.apps.core.models import Question -from edivorce.apps.core.utils.question_step_mapping import question_step_mapping, pre_qual_step_question_mapping +from edivorce.apps.core.utils.question_step_mapping import pre_qual_step_question_mapping def evaluate_numeric_condition(target, reveal_response): @@ -32,14 +31,14 @@ def evaluate_numeric_condition(target, reveal_response): return None -def get_step_status(responses_by_step): +def get_step_completeness(responses_by_step): status_dict = {} missing_response_dict = {} - for step, lst in responses_by_step.items(): - if not lst: + for step, responses_list in responses_by_step.items(): + if len(responses_list) == 0: status_dict[step] = "Not started" else: - complete, missing_responses = is_complete(step, lst) + complete, missing_responses = is_complete(responses_list) if complete: status_dict[step] = "Complete" else: @@ -48,69 +47,12 @@ def get_step_status(responses_by_step): return status_dict, missing_response_dict -def is_complete(step, lst): - """ - Check required field of question for complete state - Required: question is always require user response to be complete - Conditional: Optional question needed depends on reveal_response value of conditional_target. - """ - if not lst: - return False, [] - question_list = Question.objects.filter(key__in=question_step_mapping[step]) - required_list = list(question_list.filter(required='Required').values_list("key", flat=True)) - conditional_list = list(question_list.filter(required='Conditional')) - - complete = True +def is_complete(response_list): missing_responses = [] - - for question_key in required_list: - # everything in the required_list is required - if not __has_value(question_key, lst): - complete = False - missing_responses += [question_key] - elif question_key == "special_extraordinary_expenses": - has_extraordinary_expenses = __get_value("special_extraordinary_expenses", lst) - if has_extraordinary_expenses.lower() == 'yes': - # validate at least one item is > 0 - special_expenses_keys = ["child_care_expenses", "annual_child_care_expenses", "children_healthcare_premiums", - "annual_children_healthcare_premiums", "health_related_expenses", "annual_health_related_expenses", - "extraordinary_educational_expenses", "annual_extraordinary_educational_expenses", - "post_secondary_expenses", "annual_post_secondary_expenses", "extraordinary_extracurricular_expenses", - "annual_extraordinary_extracurricular_expenses"] - for expense in special_expenses_keys: - value = __get_value(expense, lst) - if value and float(value) > 0: - break - else: - missing_responses.append('special_extraordinary_expenses_details') - - for question in conditional_list: - # check condition for payor_monthly_child_support_amount - # which needs sole_custody to be computed separately - # payor_monthly_child_support_ammount is required only if sole_custody is True - if question.key == "payor_monthly_child_support_amount": - for target in lst: - if target["question_id"] == "claimant_children": - child_list = ast.literal_eval(target['value']) - sole_custody = (all([child['child_live_with'] == 'Lives with you' for child in child_list]) or - all([child['child_live_with'] == 'Lives with spouse' for child in child_list])) - if sole_custody: - if not __has_value(question.key, lst): - complete = False - missing_responses += [question.key] - break - else: - # find the response to the conditional target - for target in lst: - if target["question_id"] == question.conditional_target: - if __condition_met(question.reveal_response, target, lst): - # the condition was met then the question is required. - # ... so check if it has a value - if not __has_value(question.key, lst): - complete = False - missing_responses += [question.key] - - return complete, missing_responses + for question_dict in response_list: + if question_dict['error']: + missing_responses.append(question_dict) + return len(missing_responses) == 0, missing_responses def get_formatted_incomplete_list(missed_question_keys): @@ -131,44 +73,3 @@ def get_formatted_incomplete_list(missed_question_keys): 'step_url': reverse('prequalification', kwargs={'step': step}) }) return missed_questions - - -def __condition_met(reveal_response, target, lst): - # check whether using a numeric condition - numeric_condition_met = evaluate_numeric_condition(target["value"], reveal_response) - if numeric_condition_met is None: - # handle special negation options. ex) '!NO' matches anything but 'NO' - if reveal_response.startswith('!'): - if target["value"] == "" or target["value"] == reveal_response[1:]: - return False - elif target["value"] != reveal_response: - return False - elif numeric_condition_met is False: - return False - - # return true if the target is not Conditional - if target['question__required'] != 'Conditional': - return True - else: - # if the target is Conditional and the condition was met, check the target next - reveal_response = target["question__reveal_response"] - conditional_target = target["question__conditional_target"] - for new_target in lst: - if new_target["question_id"] == conditional_target: - # recursively search up the tree - return __condition_met(reveal_response, new_target, lst) - - # if the for loop above didn't find the target, then the target question - # is unanswered and the condition was not met - return False - - -def __get_value(key, lst): - for user_response in lst: - if user_response["question_id"] == key: - return user_response["value"] - - -def __has_value(key, lst): - value = __get_value(key, lst) - return value and value != "" and value != "[]" and value != '[["",""]]' and value != "\n" diff --git a/edivorce/apps/core/utils/user_response.py b/edivorce/apps/core/utils/user_response.py index c1d9933f..ee1749a2 100644 --- a/edivorce/apps/core/utils/user_response.py +++ b/edivorce/apps/core/utils/user_response.py @@ -1,90 +1,128 @@ from edivorce.apps.core.models import UserResponse, Question -from edivorce.apps.core.utils.question_step_mapping import question_step_mapping +from edivorce.apps.core.utils import conditional_logic +from edivorce.apps.core.utils.question_step_mapping import page_step_mapping, question_step_mapping from edivorce.apps.core.utils.step_completeness import evaluate_numeric_condition from collections import OrderedDict -def get_responses_from_db(bceid_user): - """ Get UserResponses from the database for a user.""" - married, married_questions, responses = __get_data(bceid_user) - responses_dict = {} - for answer in responses: - if not married and answer.question_id in married_questions: - responses_dict[answer.question.key] = '' - elif answer.value.strip('[').strip(']'): - responses_dict[answer.question.key] = answer.value - return responses_dict - - -def get_responses_from_db_grouped_by_steps(bceid_user, hide_failed_conditionals=False): +def get_data_for_user(bceid_user): """ - Group questions and responses by steps to which they belong - - `hide_failed_conditionals` goes through the responses after grouping and - tests their conditionality. If they fail, the response is blanked (this is - to hide conditional responses that are no longer applicable but haven't been - erased, mainly for the question review page). + Return a dictionary of {question_key: user_response_value} """ - married, married_questions, responses = __get_data(bceid_user) + responses = UserResponse.objects.filter(bceid_user=bceid_user) responses_dict = {} + for response in responses: + if response.value.strip('[').strip(']'): + responses_dict[response.question_id] = response.value - for step, questions in question_step_mapping.items(): + return responses_dict - lst = [] - step_responses = responses.filter(question_id__in=questions).exclude( - value__in=['', '[]', '[["",""]]']).order_by('question') - for answer in step_responses: - if not married and answer.question_id in married_questions: - value = '' +def get_step_responses(responses_by_key): + """ + Accepts a dictionary of {question_key: user_response_value} (from get_data_for_user) + Returns a dictionary of {step: {question_id: {question__name, question_id, value, error}}} + """ + responses_by_step = {} + for step in page_step_mapping.values(): + questions_dict = _get_questions_dict_set_for_step(step) + step_responses = [] + for question in questions_dict: + question_details = _get_question_details(question, questions_dict, responses_by_key) + if question_details['show']: + question_dict = questions_dict[question] + question_dict['value'] = question_details['value'] + question_dict['error'] = question_details['error'] + + step_responses.append(question_dict) + responses_by_step[step] = step_responses + return responses_by_step + + +def _get_questions_dict_set_for_step(step): + questions = Question.objects.filter(key__in=question_step_mapping[step]) + questions_dict = {} + for question in questions: + question_dict = { + 'question__conditional_target': question.conditional_target, + 'question__reveal_response': question.reveal_response, + 'question__name': question.name, + 'question__required': question.required, + 'question_id': question.key, + } + questions_dict[question.pk] = question_dict + return questions_dict + + +def _cleaned_response_value(response): + ignore_values = [None, '', '[]', '[["",""]]', '[["also known as",""]]'] + if response not in ignore_values: + return response + return None + + +def _condition_met(target_response, reveal_response): + # check whether using a numeric condition + numeric_condition_met = evaluate_numeric_condition(target_response, reveal_response) + if numeric_condition_met is None: + # handle special negation options. ex) '!NO' matches anything but 'NO' + if reveal_response.startswith('!'): + if target_response == "" or target_response.lower() == reveal_response[1:].lower(): + return False + elif str(target_response) != reveal_response: + return False + elif numeric_condition_met is False: + return False + return True + + +def _get_question_details(question, questions_dict, responses_by_key): + """ + Return details for a question given the set of question details and user responses. + value: The user's response to a question (or None if unanswered) + error: True if the question has an error (e.g. required but not answered) + show: False if the response shouldn't be displayed (e.g. don't show 'Also known as' name, but 'Does your spouse go by any other names' is NO) + """ + question_dict = questions_dict[question] + required = False + show = True + if question_dict["question__required"] == 'Required': + required = True + elif question_dict["question__required"] == 'Conditional': + target = question_dict["question__conditional_target"] + if target.startswith('determine_'): + # Look for the right function to evaluate conditional logic + derived_condition = getattr(conditional_logic, target) + if not derived_condition: + raise NotImplemented(target) + result = derived_condition(responses_by_key) + if result and _condition_met(result, question_dict["question__reveal_response"]): + required = True + else: + show = False + elif question in questions_dict: + target_response = responses_by_key.get(target) + if target_response and _condition_met(target_response, question_dict["question__reveal_response"]): + required = True else: - value = answer.value - - lst += [{'question__conditional_target': answer.question.conditional_target, - 'question__reveal_response': answer.question.reveal_response, - 'value': value, - 'question__name': answer.question.name, - 'question__required': answer.question.required, - 'question_id': answer.question.pk}] - - # This was added for DIV-514, where the user entered a name change for - # their spouse but then said 'no', they won't be changing their name. - # Since we don't blank related answers, we need to hide it dynamically. - # This only works for questions in the same step. - if hide_failed_conditionals: - values = {q['question_id']: q['value'] for q in lst} - for q in lst: - if q['question__required'] != 'Conditional': - continue - target = q['question__conditional_target'] - if target.startswith('['): - targets = target.strip('[]').split(',') - filtered_targets = [t for t in targets if t not in values] - # filtered_targets = list(filter(lambda t: t not in values, targets)) - if len(filtered_targets): - continue - - reveal_responses = dict(zip(targets, q['question__reveal_response'].strip('[]').split(','))) - present = [val for key, val in reveal_responses.items() if val != values[key]] - if len(present): - q['value'] = '' - continue - - if target not in values: - continue - numeric_condition = evaluate_numeric_condition(values[target], q['question__reveal_response']) - if numeric_condition is None: - if q['question__reveal_response'].startswith('!'): - if values[target] == "" or values[target] == q['question__reveal_response'][1:]: - q['value'] = '' - elif q['question__reveal_response'] and q['question__reveal_response'] != values[target]: - q['value'] = '' - elif numeric_condition is False: - q['value'] = '' - - responses_dict[step] = lst + show = False + + if show: + value = None + response = responses_by_key.get(question) + if response: + value = _cleaned_response_value(response) + error = required and not value + else: + value = None + error = None - return responses_dict + details = { + 'value': value, + 'error': error, + 'show': show + } + return details def get_responses_from_session(request): @@ -139,25 +177,3 @@ def copy_session_to_db(request, bceid_user): # clear the response from the session request.session[q.key] = None - - -def __get_data(bceid_user): - """ - Gets UserResponses from the database for a user, plus a boolean indicating - if the user is married or common-law, and a list of questions that only apply to - married couples - """ - COMMON_LAW = 'Living together in a marriage like relationship' - MARRIED = 'Legally married' - - responses = UserResponse.objects.filter(bceid_user=bceid_user).select_related('question') - married_status = responses.filter(question_id='married_marriage_like') - - if married_status.count() > 0: - married = married_status[0].value != COMMON_LAW - else: - married = False - - married_questions = list( - Question.objects.filter(reveal_response=MARRIED).values_list("key", flat=True)) - return married, married_questions, responses diff --git a/edivorce/apps/core/views/main.py b/edivorce/apps/core/views/main.py index 31c2b457..b9584461 100644 --- a/edivorce/apps/core/views/main.py +++ b/edivorce/apps/core/views/main.py @@ -1,4 +1,5 @@ import datetime +from copy import deepcopy from django.conf import settings from django.shortcuts import render, redirect @@ -7,11 +8,15 @@ from django.utils import timezone from edivorce.apps.core.utils.derived import get_derived_data from ..decorators import bceid_required, intercept from ..utils.question_step_mapping import list_of_registries, page_step_mapping -from ..utils.step_completeness import get_step_status, is_complete, get_formatted_incomplete_list +from ..utils.step_completeness import get_step_completeness, is_complete, get_formatted_incomplete_list from ..utils.template_step_order import template_step_order -from ..utils.user_response import get_responses_from_db, copy_session_to_db, \ - get_responses_from_db_grouped_by_steps, get_responses_from_session, \ - get_responses_from_session_grouped_by_steps +from ..utils.user_response import ( + get_data_for_user, + copy_session_to_db, + get_step_responses, + get_responses_from_session, + get_responses_from_session_grouped_by_steps, +) def home(request): @@ -40,10 +45,10 @@ def prequalification(request, step): if not request.user.is_authenticated: responses_dict = get_responses_from_session(request) else: - responses_dict = get_responses_from_db(request.user) + responses_dict = get_data_for_user(request.user) responses_dict['active_page'] = 'prequalification' - responses_by_step = get_responses_from_db_grouped_by_steps(request.user) - step_status, _ = get_step_status(responses_by_step) + responses_by_step = get_step_responses(responses_dict) + step_status, _ = get_step_completeness(responses_by_step) responses_dict['step_status'] = step_status return render(request, template_name=template, context=responses_dict) @@ -154,13 +159,14 @@ def overview(request): """ Dashboard: Process overview page. """ - responses_dict_by_step = get_responses_from_db_grouped_by_steps(request.user) + responses_dict = get_data_for_user(request.user) + responses_dict_by_step = get_step_responses(responses_dict) # Add step status dictionary - step_status, _ = get_step_status(responses_dict_by_step) + step_status, _ = get_step_completeness(responses_dict_by_step) responses_dict_by_step['step_status'] = step_status responses_dict_by_step['active_page'] = 'overview' - responses_dict_by_step['derived'] = get_derived_data(get_responses_from_db(request.user)) + responses_dict_by_step['derived'] = get_derived_data(responses_dict) response = render(request, 'overview.html', context=responses_dict_by_step) @@ -175,7 +181,7 @@ def dashboard_nav(request, nav_step): """ Dashboard: All other pages """ - responses_dict = get_responses_from_db(request.user) + responses_dict = get_data_for_user(request.user) responses_dict['active_page'] = nav_step template_name = 'dashboard/%s.html' % nav_step return render(request, template_name=template_name, context=responses_dict) @@ -189,19 +195,30 @@ def question(request, step, sub_step=None): sub_page_template = '_{}'.format(sub_step) if sub_step else '' template = 'question/%02d_%s%s.html' % (template_step_order[step], step, sub_page_template) - responses_dict_by_step = get_responses_from_db_grouped_by_steps(request.user, True) - step_status, missing_questions = get_step_status(responses_dict_by_step) if step == "review": - responses_dict = responses_dict_by_step - derived = get_derived_data(get_responses_from_db(request.user)) + responses_dict = get_data_for_user(request.user) + responses_dict_by_step = get_step_responses(responses_dict) + step_status, missing_questions = get_step_completeness(responses_dict_by_step) + derived = get_derived_data(responses_dict) + responses_dict = {} + + # Just for now (until showing missing questions in review is implemented) remove unanswered questions + for step, question_list in responses_dict_by_step.items(): + copy = deepcopy(question_list) + for question_dict in question_list: + if question_dict['value'] is None: + copy.remove(question_dict) + responses_dict[step] = copy else: + responses_dict = get_data_for_user(request.user) + responses_dict_by_step = get_step_responses(responses_dict) + step_status, missing_questions = get_step_completeness(responses_dict_by_step) question_step = page_step_mapping.get(step, step) show_errors = step_status.get(question_step) == 'Started' - responses_dict = get_responses_from_db(request.user) derived = get_derived_data(responses_dict) if show_errors: - for key in missing_questions.get(question_step): - responses_dict[key + '_error'] = True + for question_dict in missing_questions.get(question_step): + responses_dict[question_dict['question_id'] + '_error'] = True # Add step status dictionary responses_dict['step_status'] = step_status @@ -258,7 +275,7 @@ def intercept_page(request): input. """ template = 'question/%02d_%s.html' % (template_step_order['orders'], 'orders') - responses_dict = get_responses_from_db(request.user) + responses_dict = get_data_for_user(request.user) responses_dict['intercepted'] = True return render(request, template_name=template, context=responses_dict) diff --git a/edivorce/apps/core/views/pdf.py b/edivorce/apps/core/views/pdf.py index ab6acbe3..2ab62751 100644 --- a/edivorce/apps/core/views/pdf.py +++ b/edivorce/apps/core/views/pdf.py @@ -10,7 +10,7 @@ import requests from ..decorators import bceid_required from ..utils.derived import get_derived_data -from ..utils.user_response import get_responses_from_db +from ..utils.user_response import get_data_for_user EXHIBITS = list('ABCDEFGHIJKLMNOPQRSTUVWXYZ'[::-1]) @@ -19,7 +19,7 @@ EXHIBITS = list('ABCDEFGHIJKLMNOPQRSTUVWXYZ'[::-1]) def form(request, form_number): """ View for rendering PDF's and previews """ - responses = get_responses_from_db(request.user) + responses = get_data_for_user(request.user) if (form_number == '1' or form_number.startswith('37') or form_number.startswith('38') or diff --git a/edivorce/fixtures/Question.json b/edivorce/fixtures/Question.json index 223cadc4..3f8a4d26 100644 --- a/edivorce/fixtures/Question.json +++ b/edivorce/fixtures/Question.json @@ -395,7 +395,7 @@ "name": "Where were you married? Prov", "description": "For step 4, Form 1 2. Divorce section A, Form 52 Court orders that section", "summary_order": 38, - "required": "Required" + "required": "" }, "model": "core.question", "pk": "where_were_you_married_prov" @@ -504,15 +504,6 @@ "model": "core.question", "pk": "how_to_divide_property_debt" }, -{ - "fields": { - "name": "Claimant 1 and Claimant 2 ask for an order respecting an interest in property or for compensation instead of an interest in that property, as follows", - "description": "For step 7, Form 1 6. Property and debt", - "summary_order": 49 - }, - "model": "core.question", - "pk": "want_other_property_claims" -}, { "fields": { "name": "Please list any other property claims.", @@ -1219,8 +1210,8 @@ "description": "For Step 6, Your children - Income & expenses - Spouse Fact Sheet F", "summary_order": 0, "required": "Conditional", - "conditional_target": "claiming_undue_hardship", - "reveal_response": "YES" + "conditional_target": "determine_missing_undue_hardship_reasons", + "reveal_response": "True" }, "model": "core.question", "pk": "claimant_debts" @@ -1231,8 +1222,8 @@ "description": "For Step 6, Your children - Income & expenses - Spouse Fact Sheet F", "summary_order": 0, "required": "Conditional", - "conditional_target": "claiming_undue_hardship", - "reveal_response": "YES" + "conditional_target": "determine_missing_undue_hardship_reasons", + "reveal_response": "True" }, "model": "core.question", "pk": "claimant_expenses" @@ -1243,8 +1234,8 @@ "description": "For Step 6, Your children - Income & expenses - Spouse Fact Sheet F", "summary_order": 0, "required": "Conditional", - "conditional_target": "claiming_undue_hardship", - "reveal_response": "YES" + "conditional_target": "determine_missing_undue_hardship_reasons", + "reveal_response": "True" }, "model": "core.question", "pk": "supporting_non_dependents" @@ -1255,8 +1246,8 @@ "description": "For Step 6, Your children - Income & expenses - Spouse Fact Sheet F", "summary_order": 0, "required": "Conditional", - "conditional_target": "claiming_undue_hardship", - "reveal_response": "YES" + "conditional_target": "determine_missing_undue_hardship_reasons", + "reveal_response": "True" }, "model": "core.question", "pk": "supporting_dependents" @@ -1267,8 +1258,8 @@ "description": "For Step 6, Your children - Income & expenses - Spouse Fact Sheet F", "summary_order": 0, "required": "Conditional", - "conditional_target": "claiming_undue_hardship", - "reveal_response": "YES" + "conditional_target": "determine_missing_undue_hardship_reasons", + "reveal_response": "True" }, "model": "core.question", "pk": "supporting_disabled" @@ -1279,8 +1270,8 @@ "description": "For Step 6, Your children - Income & expenses - Spouse Fact Sheet F", "summary_order": 0, "required": "Conditional", - "conditional_target": "claiming_undue_hardship", - "reveal_response": "YES" + "conditional_target": "determine_missing_undue_hardship_reasons", + "reveal_response": "True" }, "model": "core.question", "pk": "undue_hardship" @@ -1290,9 +1281,7 @@ "name": "Income of Other Persons in Household", "description": "For Step 6, Your children - Income & expenses - Spouse Fact Sheet F", "summary_order": 0, - "required": "Conditional", - "conditional_target": "claiming_undue_hardship", - "reveal_response": "YES" + "required": "" }, "model": "core.question", "pk": "income_others" @@ -1540,7 +1529,8 @@ "summary_order": 0, "required": "Conditional", "conditional_target": "claimant_children", - "reveal_response": "" + "conditional_target": "determine_shared_custody", + "reveal_response": "True" }, "model": "core.question", "pk": "number_of_children" @@ -1551,8 +1541,8 @@ "description": "For Step 6, Your children - Your children - Fact Sheet B Shared Custody", "summary_order": 0, "required": "Conditional", - "conditional_target": "claimant_children", - "reveal_response": "" + "conditional_target": "determine_shared_custody", + "reveal_response": "True" }, "model": "core.question", "pk": "time_spent_with_you" @@ -1563,8 +1553,8 @@ "description": "For Step 6, Your children - Your children - Fact Sheet B Shared Custody", "summary_order": 0, "required": "Conditional", - "conditional_target": "claimant_children", - "reveal_response": "" + "conditional_target": "determine_shared_custody", + "reveal_response": "True" }, "model": "core.question", "pk": "time_spent_with_spouse" @@ -1575,8 +1565,8 @@ "description": "For Step 6, Your children - Your children - Fact Sheet B Shared Custody", "summary_order": 0, "required": "Conditional", - "conditional_target": "claimant_children", - "reveal_response": "" + "conditional_target": "determine_shared_custody", + "reveal_response": "True" }, "model": "core.question", "pk": "your_child_support_paid_b" @@ -1587,8 +1577,8 @@ "description": "For Step 6, Your children - Your children - Fact Sheet B Shared Custody", "summary_order": 0, "required": "Conditional", - "conditional_target": "claimant_children", - "reveal_response": "" + "conditional_target": "determine_shared_custody", + "reveal_response": "True" }, "model": "core.question", "pk": "your_spouse_child_support_paid_b" @@ -1779,7 +1769,8 @@ "description": "For Step 6, Your children - Income & expenses - Fact Sheet D Child(ren) 19 Years or Older", "summary_order": 0, "required": "Conditional", - "reveal_response": "" + "conditional_target": "determine_child_over_19_supported", + "reveal_response": "True" }, "model": "core.question", "pk": "agree_to_guideline_child_support_amount" @@ -1790,7 +1781,8 @@ "description": "For Step 6, Your children - Income & expenses - Fact Sheet D Child(ren) 19 Years or Older", "summary_order": 0, "required": "Conditional", - "reveal_response": "" + "conditional_target": "agree_to_guideline_child_support_amount", + "reveal_response": "NO" }, "model": "core.question", "pk": "appropriate_spouse_paid_child_support" @@ -1802,7 +1794,7 @@ "summary_order": 0, "required": "Conditional", "conditional_target": "agree_to_guideline_child_support_amount", - "reveal_response": "YES" + "reveal_response": "NO" }, "model": "core.question", "pk": "suggested_child_support" @@ -1823,7 +1815,8 @@ "description": "For Step 6, Your children - Income & expenses", "summary_order": 0, "required": "Conditional", - "reveal_response": "" + "conditional_target": "determine_sole_custody", + "reveal_response": "True" }, "model": "core.question", "pk": "payor_monthly_child_support_amount" From c18c6e84d254b5574ac0ee29b0736fd408f609c3 Mon Sep 17 00:00:00 2001 From: ariannedee Date: Fri, 21 Aug 2020 12:06:52 -0700 Subject: [PATCH 05/21] Add required fields to children fact sheets --- edivorce/apps/core/static/css/main.css | 2 +- edivorce/apps/core/static/css/main.scss | 8 +++ .../templates/question/06_children_facts.html | 64 +++++++++++-------- .../apps/core/templatetags/input_field.py | 12 +++- 4 files changed, 56 insertions(+), 30 deletions(-) diff --git a/edivorce/apps/core/static/css/main.css b/edivorce/apps/core/static/css/main.css index 3a97fdca..e22d9aa7 100644 --- a/edivorce/apps/core/static/css/main.css +++ b/edivorce/apps/core/static/css/main.css @@ -1,3 +1,3 @@ -@font-face{font-family:'Myriad-Pro';src:url("../fonts/MyriadWebPro.ttf");font-weight:normal;font-style:normal}@font-face{font-family:'Myriad-Pro-Bold';src:url("../fonts/MyriadPro-Bold.otf");font-weight:bold;font-style:normal}body{font-family:Myriad-Pro,Calibri,Arial,Sans Serif;font-size:16px;line-height:24px;color:#494949;background:#042553;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;min-width:768px}@media (min-width: 1920px){body{font-size:18px;line-height:1.5}}h1,h2,h3,h4{margin-top:0;margin-bottom:10px}h1 i.fa,h2 i.fa,h3 i.fa,h4 i.fa{font-size:24px;margin-right:6px}h1{font-weight:600;line-height:54px;color:#042553;margin-bottom:20px}h1 small{font-size:14px;font-weight:700;text-transform:uppercase;color:#042553;display:block;letter-spacing:0.1em}h2{font-weight:600;font-size:24px;line-height:36px;color:#494949;margin-bottom:20px}h3{font-weight:400;font-size:28px;line-height:42px;color:#19355b;margin-top:15px}h4{font-weight:600;font-size:18px;line-height:27px;color:#19355b;text-transform:uppercase}a{color:#365ebe;text-decoration:none;-webkit-transition:all 0.1s ease-in-out;transition:all 0.1s ease-in-out}a:focus,a:hover{color:#2b4a96;text-decoration:underline;-webkit-transition:all 0.1s eease-in-out;transition:all 0.1s eease-in-out}.intro{font-size:18px;line-height:28px}img{max-width:100%;height:auto}input.border-less-heading[type='text']{border:none;color:#19355b}input.border-less-heading[type='text']:focus{box-shadow:none;outline:none}input[type=number]{-moz-appearance:textfield}input.number-spinner[type=number]{-moz-appearance:spinner;text-align:right}input[type=number]::-webkit-inner-spin-button,input[type=number]::-webkit-outer-spin-button{-webkit-appearance:none;margin:0}input.number-spinner[type=number]::-webkit-inner-spin-button,input.number-spinner[type=number]::-webkit-outer-spin-button{-moz-appearance:spinner}.table>tbody>tr>td,.list-builder>tbody>tr>td,.table>tbody>tr>th,.list-builder>tbody>tr>th,.table>tfoot>tr>td,.list-builder>tfoot>tr>td,.table>tfoot>tr>th,.list-builder>tfoot>tr>th,.table>thead>tr>td,.list-builder>thead>tr>td,.table>thead>tr>th,.list-builder>thead>tr>th{padding:12px 16px;vertical-align:top}.fact-sheet-question{width:50%}.fact-sheet-answer{width:25%}.fact-sheet-answer[readonly]{color:#8c8c8c;background:#f2f2f2}.fact-sheet-answer input,.fact-sheet-answer textarea{height:25px;width:100%;display:table-cell;border:none;resize:none;padding:2px 2px}.fact-sheet-answer input:focus,.fact-sheet-answer textarea:focus{box-shadow:none;outline:none}.fact-sheet-answer input[readonly],.fact-sheet-answer textarea[readonly]{color:#8c8c8c;background:#f2f2f2}.fact-sheet-answer input{text-align:left}.fact-sheet-control{border-bottom:1px solid #ddd;border-right:1px solid #ddd;border-left:1px solid #ddd;font-size:16px}.fact-sheet-control[readonly]{color:#8c8c8c;background:#f2f2f2}.fact-sheet-control a{color:#494949}.fact-sheet-control a i{color:#494949}.fact-sheet-control a:hover{text-decoration:none}.fact-sheet-control:hover{background:#d4dce5}.fact-sheet-button a{padding-right:6px;color:#494949}.fact-sheet-button a i{color:#494949}.fact-sheet-button a i:hover{color:#385dbc}.fact-sheet-input[readonly]{background:#f2f2f2}.table-cell-active{border:1px solid #66afe9;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 8px rgba(102,175,233,0.6);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 8px rgba(102,175,233,0.6)}.table>tbody>tr>td.list-builder-button,.list-builder>tbody>tr>td.list-builder-button{border:none}.table>thead>tr.list-builder-header>th:last-child,.list-builder>thead>tr.list-builder-header>th:last-child,.table>tbody>tr>td:last-child not:first-child,.list-builder>tbody>tr>td:last-child not:first-child{width:1px;white-space:nowrap}#claimant_children>thead>tr>th:nth-last-child(-n+2),#claimant_children>tbody>tr>td:nth-last-child(-n+2){width:1px;white-space:nowrap}.list-builder{border-collapse:initial;width:100%;table-layout:fixed;margin-bottom:48px}.list-builder-compact{margin-bottom:25px}.list-builder-hide-column{display:none;border:none}.child-item-row{height:50px}.child-item-row:hover td:not(:nth-last-child(-n+2)){background:#d4dce5}.child-support-amount[readonly]{background:#f2f2f2}div.dollar-prefix{position:relative}div.dollar-prefix:before{content:'$ ';top:0;height:100%;padding-left:5px;position:absolute;display:flex;flex-direction:row;align-items:center;justify-content:center}div.dollar-prefix input{text-align:right}div.percent-suffix{border:none;width:100%}div.percent-suffix input{border:none;padding:0px;outline:none;width:85%;text-align:right;display:inline}div.percent-suffix label{width:10%;display:inline;font-weight:normal}.money{text-align:right}.container-wrapper{padding:40px 0}.container-wrapper:nth-child(odd){background:#fdfdfd}.container-wrapper:nth-child(odd) input{background:#ffffff}.bg-danger{position:relative;padding:30px 30px 30px 75px;border-radius:10px;margin-bottom:20px;background-color:#fcf8e3}.bg-danger:after{content:"\f071";font-family:FontAwesome;font-style:normal;font-weight:normal;text-decoration:inherit;position:absolute;font-size:24px;color:#f0ad4e;top:30px;left:27px}.bg-danger.add-top-margin{margin-top:20px}.bg-danger.hard-stop{background-color:#faebe9}.bg-danger.hard-stop:after{content:"\f05e";font-family:FontAwesome;font-style:normal;font-weight:normal;text-decoration:inherit;position:absolute;font-size:24px;color:#d9534f;top:30px;left:27px}.bg-danger h2{line-height:initial;margin-bottom:10px}.bg-danger p+h2{margin-top:20px}.bg-danger #unselected_spouse_alert{margin-bottom:20px}.checkmark{background:#7ac289;position:relative;padding:22px 20px 20px 90px;color:#ffffff;border-radius:10px;font-size:32px}.checkmark:before{content:"\f00c";font-family:FontAwesome;font-style:normal;font-weight:normal;text-decoration:inherit;position:absolute;top:0;bottom:0;margin-top:auto;margin-bottom:auto;left:24px;font-size:42px;color:#ffffff;height:60px}@media (max-width: 991px){.container{width:100%;min-width:750px}}.tooltip.in{opacity:1}.tooltip-inner{text-align:left;background-color:#365ebe;padding:20px;font-size:16px;line-height:24px;max-width:300px;border-radius:10px;font-family:Myriad-Pro,Calibri,Arial,Sans Serif}.tooltip-innerb{font-size:18px}.tooltip-inner a{color:#ffffff;text-decoration:underline}.tooltip-inner a:focus,.tooltip-inner a:hover{color:#d5d5d5}.tooltip-arrow{pointer-events:none;border-color:rgba(255,255,255,0);border-width:12px !important}.tooltip.top .tooltip-arrow{border-top-color:#365ebe;margin-bottom:-16px}.tooltip.right{margin-left:10px}.tooltip.right .tooltip-arrow{border-right-color:#365ebe;margin-left:-12px;margin-top:-14px}.tooltip.bottom .tooltip-arrow{border-bottom-color:#365ebe;margin-top:-12px}.tooltip.left{margin-left:-10px}.tooltip.left .tooltip-arrow{border-left-color:#365ebe;margin-right:-12px;margin-top:-14px}.tooltip-link,.tooltip-no-link{color:#365ebe;border-bottom:dotted 1px #365ebe;cursor:pointer}.tooltip-link:hover,.tooltip-no-link:hover{color:#042553;border-bottom-color:#365ebe}.tooltip-no-link{border-bottom:none}.collapse-trigger{margin-bottom:12px}.collapse-trigger>div{color:#365ebe;border-bottom:solid 1px #365ebe;display:inline;cursor:pointer}.collapse-trigger>div .tooltip-link,.collapse-trigger>div .tooltip-no-link{border:0}.collapse-trigger>div .tooltip-link:hover,.collapse-trigger>div .tooltip-no-link:hover{color:inherit}.collapse-trigger>div:after{font-family:FontAwesome;font-weight:normal;font-style:normal;display:inline-block;text-decoration:inherit;padding-left:10px;content:"\f077";-webkit-transform-origin:65% 50%;transform-origin:65% 50%;-webkit-transition:all 0.1s ease-in-out;transition:all 0.1s ease-in-out}.collapse-trigger>div:focus,.collapse-trigger>div:hover{color:#2b4a96;border-bottom:solid 1px #2b4a96;-webkit-transition:all 0.1s ease-in-out;transition:all 0.1s ease-in-out}.collapse-trigger.collapsed div:after{-webkit-transform:rotate(-180deg);transform:rotate(-180deg);-webkit-transform-style:preserve-3D;transform-style:preserve-3D;-webkit-transform-origin:65% 50%;transform-origin:65% 50%}.collapse>div,.collapsing>div{margin-bottom:25px}select.form-control{font-size:16px;height:42px}.form-group input.form-control,.input-group input.form-control:first-child{margin-top:12px;border-radius:4px;border-top-right-radius:4px;border-bottom-right-radius:4px;height:inherit;width:inherit;float:inherit;font-size:inherit;padding:12px 15px;line-height:1em;display:inline}.form-group input.form-control.input-wide,.input-group input.form-control.input-wide:first-child{width:70%}.btn{line-height:initial;padding:12px 15px}.btn-primary{background:#365ebe}.btn-primary:hover{background-color:#1f376f}i.fa{color:#365ebe}i.fa.circle{border-radius:50%;padding:10px;border:solid 1px #365ebe}i.fa.fa-question-circle{margin-left:5px}.form-buttons{margin:30px 0}.form-buttons .btn{font-size:18px;border:none;border-radius:10px;padding:12px 15px;background-color:#365ebe;color:#ffffff;margin-bottom:12px;-webkit-transition:all 0.1s ease-in-out;transition:all 0.1s ease-in-out}.form-buttons .btn:hover{background-color:#1f376f;-webkit-transition:all 0.1s ease-in-out;transition:all 0.1s ease-in-out}.form-buttons .btn i.fa{color:#ffffff}.form-buttons .btn.btn-success{background-color:#57b26a;margin-left:12px;-webkit-transition:all 0.1s ease-in-out;transition:all 0.1s ease-in-out}.form-buttons .btn.btn-success:hover{background-color:#337040;-webkit-transition:all 0.1s ease-in-out;transition:all 0.1s ease-in-out}.error{border:2px solid #D8292F !important;-webkit-transition:0.1s ease-in-out all;transition:0.1s ease-in-out all}.error .warning{color:#D8292F;font-size:16px;font-weight:bolder}.btn-radio{color:#19355b;background-color:#d4dce5;font-size:16px;text-transform:uppercase;letter-spacing:0.08em;font-weight:600;padding:20px 0;width:60px;height:60px;border-radius:30px;border:3px solid #d4dce5;-webkit-transition:all 0.1s ease-in-out;transition:all 0.1s ease-in-out}.btn-radio.active,.btn-radio:active,.btn-radio:focus,.btn-radio:hover,.open .dropdown-toggle.btn-radio{color:#FFFFFF;background-color:#365ebe;-webkit-transition:all 0.1s ease-in-out;transition:all 0.1s ease-in-out}.btn-radio.active,.btn-radio:active,.open .dropdown-toggle.btn-radio{background-image:none}.btn-radio.disabled,.btn-radio.disabled.active,.btn-radio.disabled:active,.btn-radio.disabled:focus,.btn-radio.disabled:hover,.btn-radio[disabled],.btn-radio.active[disabled],.btn-radio[disabled]:active,.btn-radio[disabled]:focus,.btn-radio[disabled]:hover,fieldset[disabled] .btn-radio,fieldset[disabled] .btn-radio.active,fieldset[disabled] .btn-radio:active,fieldset[disabled] .btn-radio:focus,fieldset[disabled] .btn-radio:hover{background-color:#365ebe;border-color:#365ebe;-webkit-transition:all 0.1s ease-in-out;transition:all 0.1s ease-in-out}.btn-radio+.btn-radio{margin-left:15px}.btn-radio-group{margin-bottom:20px}.btn-radio-group .btn.active.focus,.btn-radio-group .btn.active:focus,.btn-radio-group .btn.focus,.btn-radio-group .btn.focus:active,.btn-radio-group .btn:active:focus,.btn-radio-group .btn:focus{outline:none}.btn-radio-group .btn-radio-long{width:auto;white-space:normal;text-transform:none;-webkit-box-align:center;-ms-flex-align:center;align-items:center;line-height:1em;max-width:500px;display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;text-align:left;padding:0 20px}input{border-radius:4px;color:#494949;padding:12px 15px;border:solid 1px #d5d5d5;line-height:1em}input:focus{outline:0;box-shadow:inset 0 1px 1px rgba(73,73,73,0.075),0 0 4px rgba(157,157,157,0.5)}input+i.fa{margin-left:10px}input.form-block{display:block;margin-bottom:16px}input.input-wide{width:70%}input.input-narrow{max-width:100px}input.input-inline{padding:5px 20px;border-radius:5px;margin-left:5px}input.radio-centered{margin-top:15px}.checkbox label,.radio label{margin-bottom:8px;font-weight:700}.checkbox label.tight-spacing,.radio label.tight-spacing{margin-bottom:2px}.radio p,.checkbox p{margin-bottom:8px;margin-left:21px}.radio .radio-with-textbox{display:flex;align-items:baseline;margin-bottom:16px}.radio .radio-with-textbox input.form-block{margin-bottom:0;margin-right:8px}textarea{width:100%;border-radius:10px;color:#494949;padding:12px 15px;border:solid 1px #d5d5d5;line-height:24px;resize:none}#top_banner{background-color:#042553;border-bottom:2px solid #dea61b;padding:5px 20px 10px}#top_banner .top_banner-logo img{width:148px;height:auto;float:left}#top_banner p{color:#ffffff;font-size:16px;line-height:1em;margin-top:20px;margin-left:35px;float:left}#top_banner p .beta{border:solid 1px #ffffff;padding:4px 8px 3px;margin-left:10px;font-size:12px;text-transform:uppercase}#top_banner p .beta.environment-type{background-color:#B200FF}#top_banner .top_banner-user{color:#fff;font-size:14px;float:right;margin-top:16px}#top_banner .top_banner-user a{color:#ffffff}#top_banner .top_banner-user a:active,#top_banner .top_banner-user a:hover{color:#fcfcfc}#mid_banner{background-color:#2b5580;font-size:14px;font-weight:600}#mid_banner .mid_banner-dash{float:left;margin-left:-20px}#mid_banner .mid_banner-dash a,#mid_banner .mid_banner-link a,#mid_banner .more_information-link a{padding:10px 16px;float:right;margin-left:6px}#mid_banner .mid_banner-dash a.active,#mid_banner .mid_banner-dash a:hover,#mid_banner .mid_banner-link a.active,#mid_banner .mid_banner-link a:hover,#mid_banner .more_information-link a.active,#mid_banner .more_information-link a:hover{color:#fff;background-color:#dea61b;text-decoration:none}#mid_banner .mid_banner-dash a.active i,#mid_banner .mid_banner-dash a:hover i,#mid_banner .mid_banner-link a.active i,#mid_banner .mid_banner-link a:hover i,#mid_banner .more_information-link a.active i,#mid_banner .more_information-link a:hover i{color:#fff}#mid_banner .mid_banner-dash a{margin-left:24px}#mid_banner i{color:#ffffff;padding:0 10px 0 0}#mid_banner a{color:#ffffff;text-decoration:none}#form_navigation{display:-webkit-box;display:-ms-flexbox;display:flex}#form_navigation form{margin-right:10px}.success-buttons{text-align:center;display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-line-pack:justify;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between}.success-buttons .flex-row{width:45%}#other_names_fields .form-inline,#reconciliation_period_fields .form-inline{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;margin-bottom:10px;padding:10px;background:#efefef;border-radius:5px}#other_names_fields .form-inline .form-group,#reconciliation_period_fields .form-inline .form-group{display:block;width:100%;margin-bottom:5px}@media (min-width: 992px){#other_names_fields .form-inline .form-group,#reconciliation_period_fields .form-inline .form-group{-webkit-box-flex:1;-ms-flex:1;flex:1}}#other_names_fields .form-inline .form-control,#reconciliation_period_fields .form-inline .form-control{display:inline-block;width:auto;vertical-align:middle;height:34px;margin-top:0;padding:8px 15px}#other_names_fields .form-inline label,#reconciliation_period_fields .form-inline label{min-width:45px;margin-right:10px;text-align:right}#other_names_fields .form-inline:before,#reconciliation_period_fields .form-inline:before{display:table;content:" "}#other_names_fields .form-inline select.response-dropdown,#reconciliation_period_fields .form-inline select.response-dropdown{margin-right:5px;-webkit-box-flex:0;-ms-flex:0 0 180px;flex:0 0 180px}@media (min-width: 1px) and (max-width: 1199px){#other_names_fields .form-inline select.response-dropdown,#reconciliation_period_fields .form-inline select.response-dropdown{margin-bottom:5px;-webkit-box-flex:0;-ms-flex:0 0 100%;flex:0 0 100%}}#other_names_fields .form-inline input.response-textbox,#reconciliation_period_fields .form-inline input.response-textbox{margin-right:5px;-webkit-box-flex:1;-ms-flex:1;flex:1;width:99%}#other_names_fields .form-inline input.btn,#reconciliation_period_fields .form-inline input.btn{padding:8px 15px}@media (min-width: 992px){#other_names_fields .form-inline input.btn,#reconciliation_period_fields .form-inline input.btn{-webkit-box-flex:0;-ms-flex:0 0 70px;flex:0 0 70px}}.footer{background-color:#042553;border-top:3px solid #dea61b;padding:15px}.footer .footer-container ul{list-style-type:none}.footer .footer-container ul li{float:left;padding:2px 10px;position:relative}.footer .footer-container ul li a{display:block;text-align:center;color:#ffffff;font-size:13px;font-weight:600}.footer .footer-container ul li+li{border-left:1px solid #4b5e73}.question-well{min-height:20px;padding:25px;margin-top:25px;border:1px solid #d5d5d5;border-radius:10px;background:#ffffff}.question-well.hasFocus{border:1px solid #365ebe;-webkit-transition:0.1s ease-in-out all;transition:0.1s ease-in-out all}.question-well h3{margin-top:0}.question-well p{max-width:90%;margin-bottom:20px}.question-well .fact-sheet-table-inline-question{margin-bottom:48px}.question-well .required,.question-well .optional{font-size:14px;font-family:Myriad-Pro-Bold,Calibri,Arial,Sans Serif;font-weight:bold;text-transform:uppercase;padding:4px 6px;margin-left:16px;white-space:nowrap}.question-well .required{color:#D8292F;border:#D8292F 2px solid}.question-well .optional{color:#19355b;border:#19355b 1px solid}.question-well-border-less{min-height:20px;padding:25px 25px 0 0;margin-top:25px;background:#ffffff}.question-well-border-less h3{margin-top:20px}.question-well-border-less p{max-width:90%}.review-well{border-radius:10px;min-height:20px;margin-bottom:10px;border:1px solid #d5d5d5;background:#ffffff}.review-well .review-well{margin:0 40px 5px}.review-well .collapse-trigger{padding:20px 15px}.review-well .collapse,.review-well .collapsing{border-top:1px solid #d5d5d5;padding:24px 47px}.review-well .collapse>div,.review-well .collapsing>div{margin-bottom:0}.review-well .review-buttons{float:left;padding:0 15px 20px;margin:0 0 0 32px}@media (min-width: 991px){.review-well .review-buttons{float:right;padding:10px 15px;margin:0}}.review-well .review-buttons .fa{color:white;margin-right:6px}.review-well .collapse-trigger{margin-bottom:0;display:inline-block;width:100%}@media (min-width: 991px){.review-well .collapse-trigger{width:initial}}.review-well .collapse-trigger>div{border-bottom:none;font-size:18px;font-weight:600;padding-left:8px;position:relative}.review-well .collapse-trigger>div:before{font-family:FontAwesome;font-weight:normal;font-style:normal;position:absolute;text-decoration:inherit;left:0;content:"\f077";-webkit-transform-origin:50%;transform-origin:50%;-webkit-transition:all 0.1s ease-in-out;transition:all 0.1s ease-in-out}.review-well .collapse-trigger>div span{display:inline-block;margin-left:24px}.review-well .collapse-trigger>div:after{display:none}.review-well .collapse-trigger.empty{display:block;border-top:1px solid #d5d5d5}.review-well .collapse-trigger.empty div:before{display:none}.review-well .collapse-trigger.collapsed div:before{-webkit-transform:rotate(-180deg);transform:rotate(-180deg);-webkit-transform-style:preserve-3D;transform-style:preserve-3D;-webkit-transform-origin:50%;transform-origin:50%}.review-well .collapse.empty{display:inline-block;border-top:none}.review-well-no-icon{padding-left:47px}.review-well-child{display:inline-block;width:100%}.review-well-child .review-buttons{margin:0;padding-left:8px}@media (min-width: 991px){.review-well-child .review-buttons{margin:initial;padding-left:initial}}.review-well-child .collapse-trigger{padding-left:0}.review-well-child .collapse-trigger>div{color:#494949;font-weight:normal}.review-child-heading{background-color:#D4DCE5}.review-table-spacer::before{content:'';display:block;height:25px}.print-form-action{display:inline-block;float:right}.print-form-action a{text-decoration:none}.print-form-action:after{display:none}.step-review .collapse-trigger{font-size:24px;display:inline-block}.step-review .collapse-trigger.collapsed{margin-bottom:0;-webkit-transition:0.5s ease-out all;transition:0.5s ease-out all}.step-review table{margin-bottom:0}.step-review table thead tr{background-color:#042553;color:#fff}.step-review .collapse>div,.step-review .collapsing>div{margin-bottom:0}.step-review .review-buttons{float:right;padding:0 15px 10px;margin:0}.row-flex{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-ms-flex-wrap:wrap;flex-wrap:wrap;height:100%;overflow:hidden;background:#fdfdfd;position:relative}.row-flex .col{-webkit-box-flex:1;-ms-flex:1;flex:1;box-sizing:border-box;-webkit-box-ordinal-group:4;-ms-flex-order:3;order:3}.row-flex .col.shroud:before{content:"";position:absolute;width:100%;display:block;height:100%;background:linear-gradient(to top, rgba(0,0,0,0.35) 0%, transparent 90%)}.row-flex .content-column{max-width:1280px;padding:36px 6% 50px;position:relative}.row-flex .progress-column{-webkit-box-flex:0;-ms-flex:0 0 280px;flex:0 0 280px;background-color:#efefef;-webkit-box-ordinal-group:3;-ms-flex-order:2;order:2}.row-flex .dashnav-column{-webkit-box-flex:0;-ms-flex:0 0 280px;flex:0 0 280px;background-color:#19355b;-webkit-box-ordinal-group:3;-ms-flex-order:2;order:2}.row-flex .more_information-column{background-color:#efefef;box-shadow:inset 0 0 10px 0 rgba(0,0,0,0.1);padding:20px 45px;font-size:14px;line-height:21px;-webkit-box-ordinal-group:2;-ms-flex-order:1;order:1;height:auto}@media (min-width: 1920px){.row-flex .more_information-column{font-size:16px;line-height:1.5}}.row-flex .more_information-column .more_information-close{float:right;font-size:24px;margin-top:3px}.row-flex .more_information-column .more_information-close i.fa{color:#042553}.row-flex .more_information-column h2{color:#042553;padding-right:25px}.row-flex .more_information-column h3{font-size:21px;line-height:28px}@media (min-width: 992px){.row-flex .more_information-column{padding:45px 20px;-webkit-box-ordinal-group:5;-ms-flex-order:4;order:4;-webkit-box-flex:0;-ms-flex:0 0 306px;flex:0 0 306px}}.row-flex.intro-page{background:#2b5580 url("../img/bg-edivorce__landing.jpg") no-repeat top center fixed;background-size:cover}.row-flex.intro-page .content-column{margin:54px auto 100px;max-width:840px;padding:0 20px;text-align:center;color:#ffffff;position:relative}.row-flex.intro-page .content-column h1,.row-flex.intro-page .content-column h2,.row-flex.intro-page .content-column h3{color:#ffffff}.row-flex.intro-page .content-column h2{font-size:30px;font-weight:600;margin:42px 0 0}.row-flex.intro-page .content-column h2.shaded-box{padding-top:28px;border-top-left-radius:8px;border-top-right-radius:8px}.row-flex.intro-page .content-column .intro{font-size:24px;line-height:36px;margin:0 100px}.row-flex.intro-page .content-column a{color:#ffffff;text-decoration:none}.row-flex.intro-page .content-column a:focus,.row-flex.intro-page .content-column a:hover{text-decoration:underline}.row-flex.intro-page .content-column a.btn:focus,.row-flex.intro-page .content-column a.btn:hover{text-decoration:none}.row-flex.intro-page .content-column .btn-group-lg>.btn,.row-flex.intro-page .content-column .btn-lg{padding:12px 40px;margin:10px}.row-flex.intro-page .content-column .flex-wrapper{display:-webkit-box;display:-ms-flexbox;display:flex;margin:20px 0;text-align:left;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;font-size:18px}.row-flex.intro-page .content-column .flex-wrapper .flex-column{width:45%}.row-flex.intro-page .content-column .flex-wrapper.shaded-box{padding-top:22px;padding-bottom:50px;margin-top:0;border-bottom-left-radius:8px;border-bottom-right-radius:8px}.row-flex.intro-page .content-column .flex-wrapper.shaded-box .flex-column.left{padding-left:30px}.row-flex.intro-page .content-column .flex-wrapper.shaded-box .flex-column.right{padding-right:30px}.row-flex.intro-page .content-column .flex-wrapper span.number-circle{border:solid 2px white;padding:0;border-radius:40px;width:40px;height:40px;display:inline-block;text-align:center;margin-right:10px;font-size:21px}.dashnav-column h4,.overview-progress h4,.progress-column h4{color:#494949;padding:0 18px;margin-top:36px;font-size:14px;letter-spacing:0.1em}.dashnav-column .progress-question,.overview-progress .progress-question,.progress-column .progress-question{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;height:72px;margin-bottom:12px;padding:0 18px}.dashnav-column .progress-question .progress-icon,.overview-progress .progress-question .progress-icon,.progress-column .progress-question .progress-icon{-webkit-box-flex:0;-ms-flex:0 0 46px;flex:0 0 46px}.dashnav-column .progress-question .progress-icon i,.overview-progress .progress-question .progress-icon i,.progress-column .progress-question .progress-icon i{font-size:20px;border:solid 1px #494949;padding:8px;border-radius:36px}.dashnav-column .progress-question .progress-icon i.fa:before,.overview-progress .progress-question .progress-icon i.fa:before,.progress-column .progress-question .progress-icon i.fa:before{width:20px;text-align:center;display:block;height:20px}.dashnav-column .progress-question .progress-content,.overview-progress .progress-question .progress-content,.progress-column .progress-question .progress-content{width:190px;font-size:14px;line-height:1.3;color:#494949}@media (min-width: 1920px){.dashnav-column .progress-question .progress-content,.overview-progress .progress-question .progress-content,.progress-column .progress-question .progress-content{font-size:16px;width:190px}}.dashnav-column .progress-question .progress-content small,.overview-progress .progress-question .progress-content small,.progress-column .progress-question .progress-content small{font-size:11px;text-transform:uppercase;font-weight:700;letter-spacing:0.1em}.dashnav-column .progress-question .progress-status,.overview-progress .progress-question .progress-status,.progress-column .progress-question .progress-status{width:28px;text-align:right}.dashnav-column .progress-question .progress-status i,.overview-progress .progress-question .progress-status i,.progress-column .progress-question .progress-status i{float:right}.dashnav-column .progress-question i,.overview-progress .progress-question i,.progress-column .progress-question i{color:#494949}.dashnav-column .progress-question.complete i,.dashnav-column .progress-question.complete span,.overview-progress .progress-question.complete i,.overview-progress .progress-question.complete span,.progress-column .progress-question.complete i,.progress-column .progress-question.complete span{color:#57b26a;border-color:#57b26a}.dashnav-column .progress-question:focus,.dashnav-column .progress-question:hover,.overview-progress .progress-question:focus,.overview-progress .progress-question:hover,.progress-column .progress-question:focus,.progress-column .progress-question:hover{background-color:#e6ca85;text-decoration:none}.dashnav-column .progress-question:focus i,.dashnav-column .progress-question:focus span,.dashnav-column .progress-question:hover i,.dashnav-column .progress-question:hover span,.overview-progress .progress-question:focus i,.overview-progress .progress-question:focus span,.overview-progress .progress-question:hover i,.overview-progress .progress-question:hover span,.progress-column .progress-question:focus i,.progress-column .progress-question:focus span,.progress-column .progress-question:hover i,.progress-column .progress-question:hover span{color:#ffffff;border-color:#ffffff}.dashnav-column .progress-question.active,.overview-progress .progress-question.active,.progress-column .progress-question.active{background-color:#dea61b;text-decoration:none}.dashnav-column .progress-question.active i,.dashnav-column .progress-question.active span,.overview-progress .progress-question.active i,.overview-progress .progress-question.active span,.progress-column .progress-question.active i,.progress-column .progress-question.active span{color:#ffffff;border-color:#ffffff}.dashnav-column .progress-sub-menu,.overview-progress .progress-sub-menu,.progress-column .progress-sub-menu{list-style-type:none}.dashnav-column .progress-sub-menu li,.overview-progress .progress-sub-menu li,.progress-column .progress-sub-menu li{display:inline-block;padding:5px 10px 5px 22px;border-left:2px solid #dea61b;width:100%}.dashnav-column .progress-sub-menu .progress-sub-question,.overview-progress .progress-sub-menu .progress-sub-question,.progress-column .progress-sub-menu .progress-sub-question{width:190px;font-size:14px;line-height:1.3;color:#494949}@media (min-width: 1920px){.dashnav-column .progress-sub-menu .progress-sub-question,.overview-progress .progress-sub-menu .progress-sub-question,.progress-column .progress-sub-menu .progress-sub-question{font-size:16px;width:190px}}.dashnav-column .progress-sub-menu .progress-sub-question .progress-content,.overview-progress .progress-sub-menu .progress-sub-question .progress-content,.progress-column .progress-sub-menu .progress-sub-question .progress-content{width:190px;font-size:14px;line-height:1.3}@media (min-width: 1920px){.dashnav-column .progress-sub-menu .progress-sub-question .progress-content,.overview-progress .progress-sub-menu .progress-sub-question .progress-content,.progress-column .progress-sub-menu .progress-sub-question .progress-content{font-size:16px;width:190px}}.dashnav-column .progress-sub-menu .progress-sub-question:focus,.dashnav-column .progress-sub-menu .progress-sub-question:hover,.overview-progress .progress-sub-menu .progress-sub-question:focus,.overview-progress .progress-sub-menu .progress-sub-question:hover,.progress-column .progress-sub-menu .progress-sub-question:focus,.progress-column .progress-sub-menu .progress-sub-question:hover{color:#dea61b;text-decoration:none;font-weight:700}.dashnav-column .progress-sub-menu .progress-sub-question.active,.overview-progress .progress-sub-menu .progress-sub-question.active,.progress-column .progress-sub-menu .progress-sub-question.active{color:#dea61b;text-decoration:none;font-weight:700}.dashnav-column .progress-question{height:60px}.overview-progress{border:solid 1px #efefef;border-radius:10px;background:#ffffff}.overview-progress .progress-question{margin-bottom:0;border-bottom:solid 1px #efefef}.overview-progress .progress-question:last-of-type{border-bottom:none}.overview-progress .progress-question .progress-icon{-webkit-box-flex:0;-ms-flex:0 0 52px;flex:0 0 52px}.overview-progress .progress-question .progress-content{font-size:16px;font-weight:600;-webkit-box-flex:2;-ms-flex:2;flex:2}.overview-progress .progress-question .progress-status{font-size:14px;font-weight:600;-webkit-box-flex:1;-ms-flex:1;flex:1}.overview-progress .progress-question .progress-status i{float:none;margin-right:5px}.overview-progress .progress-question.complete{background-color:rgba(87,178,106,0.2)}.overview-progress .progress-question.complete .progress-content,.overview-progress .progress-question.complete .progress-icon i,.overview-progress .progress-question.complete .progress-icon i:before,.overview-progress .progress-question.complete .progress-status,.overview-progress .progress-question.complete .progress-status i{color:#57b26a}.overview-progress .progress-question.complete .progress-icon i{border:solid 1px #57b26a}.overview-progress .progress-question .progress-content,.overview-progress .progress-question .progress-icon i,.overview-progress .progress-question .progress-icon i::before,.overview-progress .progress-question .progress-status,.overview-progress .progress-question .progress-status i{color:#042553}.overview-progress .progress-question .progress-icon i{border:solid 1px #042553}.overview-progress .progress-question:focus,.overview-progress .progress-question:hover{background-color:rgba(4,37,83,0.3);text-decoration:none}.overview-progress .progress-question:focus .progress-content,.overview-progress .progress-question:focus .progress-icon i,.overview-progress .progress-question:focus .progress-icon i::before,.overview-progress .progress-question:focus .progress-status,.overview-progress .progress-question:focus .progress-status i,.overview-progress .progress-question:hover .progress-content,.overview-progress .progress-question:hover .progress-icon i,.overview-progress .progress-question:hover .progress-icon i::before,.overview-progress .progress-question:hover .progress-status,.overview-progress .progress-question:hover .progress-status i{color:#042553;border-color:#042553}.overview-progress .progress-question:first-child:hover{border-top-left-radius:7px;border-top-right-radius:7px}.overview-progress .progress-question:last-child:hover{border-bottom-left-radius:7px;border-bottom-right-radius:7px}.overview-progress .progress-question a{transition:0.1s background ease-in-out;-webkit-transition:0.1s background ease-in-out}.dashnav-column h4{color:#ffffff}.dashnav-column .progress-question .progress-icon{-webkit-box-flex:0;-ms-flex:0 0 36px;flex:0 0 36px}.dashnav-column .progress-question .progress-icon i{font-size:20px;border:none;padding:0}.dashnav-column .progress-question .progress-content{width:180px;color:#ffffff;font-weight:600}.dashnav-column .progress-question i{color:#ffffff}.dashnav-column .progress-question:focus,.dashnav-column .progress-question:hover{background-color:#dea61b}.has-warning-box{border:3px solid #D8292F;padding-top:8px;padding-left:8px}.has-warning-box #terms_warning{color:#D8292F}.modal-dialog{width:780px}.modal-header{border:0;padding-bottom:0;padding-top:24px}.modal-title{font-size:32px;font-weight:normal}.modal-body{padding:0 64px 36px}.modal-body p{font-size:18px;margin-top:12px}.modal-footer{background:#f5f5f5;border-bottom-left-radius:10px;border-bottom-right-radius:10px}.footnote-marker{font-size:18px;top:-10px;position:relative;display:inline-block;left:1px;margin-right:1px}.footnote{margin-top:40px;margin-bottom:52px;font-size:16px}.footnote h5{font-size:30px;margin-bottom:20px}.footnote.shaded-box{border-radius:8px;padding:25px 80px 25px 80px}.shaded-box{background-color:rgba(0,0,0,0.35)}#delete_child_modal,#info_modal,#questions_modal,#terms_modal{margin-top:112px;font-size:18px}#delete_child_modal .modal-header,#info_modal .modal-header,#questions_modal .modal-header,#terms_modal .modal-header{text-align:center}#delete_child_modal .modal-header i,#info_modal .modal-header i,#questions_modal .modal-header i,#terms_modal .modal-header i{background-color:#365ebe;color:#ffffff;height:80px;width:80px;border-radius:40px;font-size:40px;padding:20px;margin-bottom:15px}#delete_child_modal .modal-body,#info_modal .modal-body,#questions_modal .modal-body,#terms_modal .modal-body{padding:36px 64px}#delete_child_modal .modal-body p,#info_modal .modal-body p,#questions_modal .modal-body p,#terms_modal .modal-body p{font-size:18px;margin-top:12px}#delete_child_modal .modal-footer,#info_modal .modal-footer,#questions_modal .modal-footer,#terms_modal .modal-footer{text-align:center;border:none;padding-bottom:18px}#delete_child_modal{text-align:center;vertical-align:middle;margin-top:112px;font-size:18px}#delete_child_modal .modal-footer{text-align:center;border:none;padding-bottom:18px}div#progress-overlay{position:fixed;top:0;bottom:0;left:0;right:0;z-index:10000;background:rgba(0,0,0,0.35)}div#progress-overlay-spinner{position:fixed;top:0;bottom:0;left:0;right:0;z-index:5000}span.hard-stop{font-size:2.8em;display:inline-block;float:left;margin:3px 10px 0 0}.date-picker-group .input-group-addon{display:inline-block;background-color:inherit;border:none}@media (min-width: 1px) and (max-width: 991px){.on-canvas{display:block}}@media (min-width: 992px){.on-canvas{-webkit-transition:0.2s ease-out all;transition:0.2s ease-out all;-webkit-transform:translateX(0);transform:translateX(0)}}@media (min-width: 1px) and (max-width: 991px){.off-canvas{display:none}}@media (min-width: 992px){.off-canvas{-webkit-transition:0.2s ease-out all;transition:0.2s ease-out all;-webkit-transform:translateX(306px);transform:translateX(306px)}}@media (min-width: 1px) and (max-width: 991px){.margin-right{margin-right:0}}@media (min-width: 992px){.margin-right{-webkit-transition:0.2s ease-out all;transition:0.2s ease-out all;margin-right:-306px}}@media (min-width: 1px) and (max-width: 991px){.no-margin-right{margin-right:0}}@media (min-width: 992px){.no-margin-right{-webkit-transition:0.2s ease-out all;transition:0.2s ease-out all;margin-right:0}} +@font-face{font-family:'Myriad-Pro';src:url("../fonts/MyriadWebPro.ttf");font-weight:normal;font-style:normal}@font-face{font-family:'Myriad-Pro-Bold';src:url("../fonts/MyriadPro-Bold.otf");font-weight:bold;font-style:normal}body{font-family:Myriad-Pro,Calibri,Arial,Sans Serif;font-size:16px;line-height:24px;color:#494949;background:#042553;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;min-width:768px}@media (min-width: 1920px){body{font-size:18px;line-height:1.5}}h1,h2,h3,h4{margin-top:0;margin-bottom:10px}h1 i.fa,h2 i.fa,h3 i.fa,h4 i.fa{font-size:24px;margin-right:6px}h1{font-weight:600;line-height:54px;color:#042553;margin-bottom:20px}h1 small{font-size:14px;font-weight:700;text-transform:uppercase;color:#042553;display:block;letter-spacing:0.1em}h2{font-weight:600;font-size:24px;line-height:36px;color:#494949;margin-bottom:20px}h3{font-weight:400;font-size:28px;line-height:42px;color:#19355b;margin-top:15px}h4{font-weight:600;font-size:18px;line-height:27px;color:#19355b;text-transform:uppercase}a{color:#365ebe;text-decoration:none;-webkit-transition:all 0.1s ease-in-out;transition:all 0.1s ease-in-out}a:focus,a:hover{color:#2b4a96;text-decoration:underline;-webkit-transition:all 0.1s eease-in-out;transition:all 0.1s eease-in-out}.intro{font-size:18px;line-height:28px}img{max-width:100%;height:auto}input.border-less-heading[type='text']{border:none;color:#19355b}input.border-less-heading[type='text']:focus{box-shadow:none;outline:none}input[type=number]{-moz-appearance:textfield}input.number-spinner[type=number]{-moz-appearance:spinner;text-align:right}input[type=number]::-webkit-inner-spin-button,input[type=number]::-webkit-outer-spin-button{-webkit-appearance:none;margin:0}input.number-spinner[type=number]::-webkit-inner-spin-button,input.number-spinner[type=number]::-webkit-outer-spin-button{-moz-appearance:spinner}.table>tbody>tr>td,.list-builder>tbody>tr>td,.table>tbody>tr>th,.list-builder>tbody>tr>th,.table>tfoot>tr>td,.list-builder>tfoot>tr>td,.table>tfoot>tr>th,.list-builder>tfoot>tr>th,.table>thead>tr>td,.list-builder>thead>tr>td,.table>thead>tr>th,.list-builder>thead>tr>th{padding:12px 16px;vertical-align:top}.fact-sheet-question{width:50%}.fact-sheet-answer{width:25%}.fact-sheet-answer[readonly]{color:#8c8c8c;background:#f2f2f2}.fact-sheet-answer input,.fact-sheet-answer textarea{height:25px;width:100%;display:table-cell;border:none;resize:none;padding:2px 2px}.fact-sheet-answer input:focus,.fact-sheet-answer textarea:focus{box-shadow:none;outline:none}.fact-sheet-answer input[readonly],.fact-sheet-answer textarea[readonly]{color:#8c8c8c;background:#f2f2f2}.fact-sheet-answer input{text-align:left}.fact-sheet-control{border-bottom:1px solid #ddd;border-right:1px solid #ddd;border-left:1px solid #ddd;font-size:16px}.fact-sheet-control[readonly]{color:#8c8c8c;background:#f2f2f2}.fact-sheet-control a{color:#494949}.fact-sheet-control a i{color:#494949}.fact-sheet-control a:hover{text-decoration:none}.fact-sheet-control:hover{background:#d4dce5}.fact-sheet-button a{padding-right:6px;color:#494949}.fact-sheet-button a i{color:#494949}.fact-sheet-button a i:hover{color:#385dbc}.fact-sheet-input[readonly]{background:#f2f2f2}.table-cell-active{border:1px solid #66afe9;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 8px rgba(102,175,233,0.6);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 8px rgba(102,175,233,0.6)}.table>tbody>tr>td.list-builder-button,.list-builder>tbody>tr>td.list-builder-button{border:none}.table>thead>tr.list-builder-header>th:last-child,.list-builder>thead>tr.list-builder-header>th:last-child,.table>tbody>tr>td:last-child not:first-child,.list-builder>tbody>tr>td:last-child not:first-child{width:1px;white-space:nowrap}#claimant_children>thead>tr>th:nth-last-child(-n+2),#claimant_children>tbody>tr>td:nth-last-child(-n+2){width:1px;white-space:nowrap}.list-builder{border-collapse:initial;width:100%;table-layout:fixed;margin-bottom:48px}.list-builder-compact{margin-bottom:25px}.list-builder-hide-column{display:none;border:none}.child-item-row{height:50px}.child-item-row:hover td:not(:nth-last-child(-n+2)){background:#d4dce5}.child-support-amount[readonly]{background:#f2f2f2}div.dollar-prefix{position:relative}div.dollar-prefix:before{content:'$ ';top:0;height:100%;padding-left:5px;position:absolute;display:flex;flex-direction:row;align-items:center;justify-content:center}div.dollar-prefix input{text-align:right}div.percent-suffix{border:none;width:100%}div.percent-suffix input{border:none;padding:0px;outline:none;width:85%;text-align:right;display:inline}div.percent-suffix label{width:10%;display:inline;font-weight:normal}.money{text-align:right}.container-wrapper{padding:40px 0}.container-wrapper:nth-child(odd){background:#fdfdfd}.container-wrapper:nth-child(odd) input{background:#ffffff}.bg-danger{position:relative;padding:30px 30px 30px 75px;border-radius:10px;margin-bottom:20px;background-color:#fcf8e3}.bg-danger:after{content:"\f071";font-family:FontAwesome;font-style:normal;font-weight:normal;text-decoration:inherit;position:absolute;font-size:24px;color:#f0ad4e;top:30px;left:27px}.bg-danger.add-top-margin{margin-top:20px}.bg-danger.hard-stop{background-color:#faebe9}.bg-danger.hard-stop:after{content:"\f05e";font-family:FontAwesome;font-style:normal;font-weight:normal;text-decoration:inherit;position:absolute;font-size:24px;color:#d9534f;top:30px;left:27px}.bg-danger h2{line-height:initial;margin-bottom:10px}.bg-danger p+h2{margin-top:20px}.bg-danger #unselected_spouse_alert{margin-bottom:20px}.checkmark{background:#7ac289;position:relative;padding:22px 20px 20px 90px;color:#ffffff;border-radius:10px;font-size:32px}.checkmark:before{content:"\f00c";font-family:FontAwesome;font-style:normal;font-weight:normal;text-decoration:inherit;position:absolute;top:0;bottom:0;margin-top:auto;margin-bottom:auto;left:24px;font-size:42px;color:#ffffff;height:60px}@media (max-width: 991px){.container{width:100%;min-width:750px}}.tooltip.in{opacity:1}.tooltip-inner{text-align:left;background-color:#365ebe;padding:20px;font-size:16px;line-height:24px;max-width:300px;border-radius:10px;font-family:Myriad-Pro,Calibri,Arial,Sans Serif}.tooltip-innerb{font-size:18px}.tooltip-inner a{color:#ffffff;text-decoration:underline}.tooltip-inner a:focus,.tooltip-inner a:hover{color:#d5d5d5}.tooltip-arrow{pointer-events:none;border-color:rgba(255,255,255,0);border-width:12px !important}.tooltip.top .tooltip-arrow{border-top-color:#365ebe;margin-bottom:-16px}.tooltip.right{margin-left:10px}.tooltip.right .tooltip-arrow{border-right-color:#365ebe;margin-left:-12px;margin-top:-14px}.tooltip.bottom .tooltip-arrow{border-bottom-color:#365ebe;margin-top:-12px}.tooltip.left{margin-left:-10px}.tooltip.left .tooltip-arrow{border-left-color:#365ebe;margin-right:-12px;margin-top:-14px}.tooltip-link,.tooltip-no-link{color:#365ebe;border-bottom:dotted 1px #365ebe;cursor:pointer}.tooltip-link:hover,.tooltip-no-link:hover{color:#042553;border-bottom-color:#365ebe}.tooltip-no-link{border-bottom:none}.collapse-trigger{margin-bottom:12px}.collapse-trigger>div{color:#365ebe;border-bottom:solid 1px #365ebe;display:inline;cursor:pointer}.collapse-trigger>div .tooltip-link,.collapse-trigger>div .tooltip-no-link{border:0}.collapse-trigger>div .tooltip-link:hover,.collapse-trigger>div .tooltip-no-link:hover{color:inherit}.collapse-trigger>div:after{font-family:FontAwesome;font-weight:normal;font-style:normal;display:inline-block;text-decoration:inherit;padding-left:10px;content:"\f077";-webkit-transform-origin:65% 50%;transform-origin:65% 50%;-webkit-transition:all 0.1s ease-in-out;transition:all 0.1s ease-in-out}.collapse-trigger>div:focus,.collapse-trigger>div:hover{color:#2b4a96;border-bottom:solid 1px #2b4a96;-webkit-transition:all 0.1s ease-in-out;transition:all 0.1s ease-in-out}.collapse-trigger.collapsed div:after{-webkit-transform:rotate(-180deg);transform:rotate(-180deg);-webkit-transform-style:preserve-3D;transform-style:preserve-3D;-webkit-transform-origin:65% 50%;transform-origin:65% 50%}.collapse>div,.collapsing>div{margin-bottom:25px}select.form-control{font-size:16px;height:42px}.form-group input.form-control,.input-group input.form-control:first-child{margin-top:12px;border-radius:4px;border-top-right-radius:4px;border-bottom-right-radius:4px;height:inherit;width:inherit;float:inherit;font-size:inherit;padding:12px 15px;line-height:1em;display:inline}.form-group input.form-control.input-wide,.input-group input.form-control.input-wide:first-child{width:70%}.btn{line-height:initial;padding:12px 15px}.btn-primary{background:#365ebe}.btn-primary:hover{background-color:#1f376f}i.fa{color:#365ebe}i.fa.circle{border-radius:50%;padding:10px;border:solid 1px #365ebe}i.fa.fa-question-circle{margin-left:5px}.form-buttons{margin:30px 0}.form-buttons .btn{font-size:18px;border:none;border-radius:10px;padding:12px 15px;background-color:#365ebe;color:#ffffff;margin-bottom:12px;-webkit-transition:all 0.1s ease-in-out;transition:all 0.1s ease-in-out}.form-buttons .btn:hover{background-color:#1f376f;-webkit-transition:all 0.1s ease-in-out;transition:all 0.1s ease-in-out}.form-buttons .btn i.fa{color:#ffffff}.form-buttons .btn.btn-success{background-color:#57b26a;margin-left:12px;-webkit-transition:all 0.1s ease-in-out;transition:all 0.1s ease-in-out}.form-buttons .btn.btn-success:hover{background-color:#337040;-webkit-transition:all 0.1s ease-in-out;transition:all 0.1s ease-in-out}.error{border:2px solid #D8292F !important;-webkit-transition:0.1s ease-in-out all;transition:0.1s ease-in-out all}.error .warning{color:#D8292F;font-size:16px;font-weight:bolder}.table-error{border:2px solid #D8292F !important;-webkit-transition:0.1s ease-in-out all;transition:0.1s ease-in-out all;margin:-5px -10px;padding:12px 16px}.btn-radio{color:#19355b;background-color:#d4dce5;font-size:16px;text-transform:uppercase;letter-spacing:0.08em;font-weight:600;padding:20px 0;width:60px;height:60px;border-radius:30px;border:3px solid #d4dce5;-webkit-transition:all 0.1s ease-in-out;transition:all 0.1s ease-in-out}.btn-radio.active,.btn-radio:active,.btn-radio:focus,.btn-radio:hover,.open .dropdown-toggle.btn-radio{color:#FFFFFF;background-color:#365ebe;-webkit-transition:all 0.1s ease-in-out;transition:all 0.1s ease-in-out}.btn-radio.active,.btn-radio:active,.open .dropdown-toggle.btn-radio{background-image:none}.btn-radio.disabled,.btn-radio.disabled.active,.btn-radio.disabled:active,.btn-radio.disabled:focus,.btn-radio.disabled:hover,.btn-radio[disabled],.btn-radio.active[disabled],.btn-radio[disabled]:active,.btn-radio[disabled]:focus,.btn-radio[disabled]:hover,fieldset[disabled] .btn-radio,fieldset[disabled] .btn-radio.active,fieldset[disabled] .btn-radio:active,fieldset[disabled] .btn-radio:focus,fieldset[disabled] .btn-radio:hover{background-color:#365ebe;border-color:#365ebe;-webkit-transition:all 0.1s ease-in-out;transition:all 0.1s ease-in-out}.btn-radio+.btn-radio{margin-left:15px}.btn-radio-group{margin-bottom:20px}.btn-radio-group .btn.active.focus,.btn-radio-group .btn.active:focus,.btn-radio-group .btn.focus,.btn-radio-group .btn.focus:active,.btn-radio-group .btn:active:focus,.btn-radio-group .btn:focus{outline:none}.btn-radio-group .btn-radio-long{width:auto;white-space:normal;text-transform:none;-webkit-box-align:center;-ms-flex-align:center;align-items:center;line-height:1em;max-width:500px;display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;text-align:left;padding:0 20px}input{border-radius:4px;color:#494949;padding:12px 15px;border:solid 1px #d5d5d5;line-height:1em}input:focus{outline:0;box-shadow:inset 0 1px 1px rgba(73,73,73,0.075),0 0 4px rgba(157,157,157,0.5)}input+i.fa{margin-left:10px}input.form-block{display:block;margin-bottom:16px}input.input-wide{width:70%}input.input-narrow{max-width:100px}input.input-inline{padding:5px 20px;border-radius:5px;margin-left:5px}input.radio-centered{margin-top:15px}.checkbox label,.radio label{margin-bottom:8px;font-weight:700}.checkbox label.tight-spacing,.radio label.tight-spacing{margin-bottom:2px}.radio p,.checkbox p{margin-bottom:8px;margin-left:21px}.radio .radio-with-textbox{display:flex;align-items:baseline;margin-bottom:16px}.radio .radio-with-textbox input.form-block{margin-bottom:0;margin-right:8px}textarea{width:100%;border-radius:10px;color:#494949;padding:12px 15px;border:solid 1px #d5d5d5;line-height:24px;resize:none}#top_banner{background-color:#042553;border-bottom:2px solid #dea61b;padding:5px 20px 10px}#top_banner .top_banner-logo img{width:148px;height:auto;float:left}#top_banner p{color:#ffffff;font-size:16px;line-height:1em;margin-top:20px;margin-left:35px;float:left}#top_banner p .beta{border:solid 1px #ffffff;padding:4px 8px 3px;margin-left:10px;font-size:12px;text-transform:uppercase}#top_banner p .beta.environment-type{background-color:#B200FF}#top_banner .top_banner-user{color:#fff;font-size:14px;float:right;margin-top:16px}#top_banner .top_banner-user a{color:#ffffff}#top_banner .top_banner-user a:active,#top_banner .top_banner-user a:hover{color:#fcfcfc}#mid_banner{background-color:#2b5580;font-size:14px;font-weight:600}#mid_banner .mid_banner-dash{float:left;margin-left:-20px}#mid_banner .mid_banner-dash a,#mid_banner .mid_banner-link a,#mid_banner .more_information-link a{padding:10px 16px;float:right;margin-left:6px}#mid_banner .mid_banner-dash a.active,#mid_banner .mid_banner-dash a:hover,#mid_banner .mid_banner-link a.active,#mid_banner .mid_banner-link a:hover,#mid_banner .more_information-link a.active,#mid_banner .more_information-link a:hover{color:#fff;background-color:#dea61b;text-decoration:none}#mid_banner .mid_banner-dash a.active i,#mid_banner .mid_banner-dash a:hover i,#mid_banner .mid_banner-link a.active i,#mid_banner .mid_banner-link a:hover i,#mid_banner .more_information-link a.active i,#mid_banner .more_information-link a:hover i{color:#fff}#mid_banner .mid_banner-dash a{margin-left:24px}#mid_banner i{color:#ffffff;padding:0 10px 0 0}#mid_banner a{color:#ffffff;text-decoration:none}#form_navigation{display:-webkit-box;display:-ms-flexbox;display:flex}#form_navigation form{margin-right:10px}.success-buttons{text-align:center;display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-line-pack:justify;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between}.success-buttons .flex-row{width:45%}#other_names_fields .form-inline,#reconciliation_period_fields .form-inline{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;margin-bottom:10px;padding:10px;background:#efefef;border-radius:5px}#other_names_fields .form-inline .form-group,#reconciliation_period_fields .form-inline .form-group{display:block;width:100%;margin-bottom:5px}@media (min-width: 992px){#other_names_fields .form-inline .form-group,#reconciliation_period_fields .form-inline .form-group{-webkit-box-flex:1;-ms-flex:1;flex:1}}#other_names_fields .form-inline .form-control,#reconciliation_period_fields .form-inline .form-control{display:inline-block;width:auto;vertical-align:middle;height:34px;margin-top:0;padding:8px 15px}#other_names_fields .form-inline label,#reconciliation_period_fields .form-inline label{min-width:45px;margin-right:10px;text-align:right}#other_names_fields .form-inline:before,#reconciliation_period_fields .form-inline:before{display:table;content:" "}#other_names_fields .form-inline select.response-dropdown,#reconciliation_period_fields .form-inline select.response-dropdown{margin-right:5px;-webkit-box-flex:0;-ms-flex:0 0 180px;flex:0 0 180px}@media (min-width: 1px) and (max-width: 1199px){#other_names_fields .form-inline select.response-dropdown,#reconciliation_period_fields .form-inline select.response-dropdown{margin-bottom:5px;-webkit-box-flex:0;-ms-flex:0 0 100%;flex:0 0 100%}}#other_names_fields .form-inline input.response-textbox,#reconciliation_period_fields .form-inline input.response-textbox{margin-right:5px;-webkit-box-flex:1;-ms-flex:1;flex:1;width:99%}#other_names_fields .form-inline input.btn,#reconciliation_period_fields .form-inline input.btn{padding:8px 15px}@media (min-width: 992px){#other_names_fields .form-inline input.btn,#reconciliation_period_fields .form-inline input.btn{-webkit-box-flex:0;-ms-flex:0 0 70px;flex:0 0 70px}}.footer{background-color:#042553;border-top:3px solid #dea61b;padding:15px}.footer .footer-container ul{list-style-type:none}.footer .footer-container ul li{float:left;padding:2px 10px;position:relative}.footer .footer-container ul li a{display:block;text-align:center;color:#ffffff;font-size:13px;font-weight:600}.footer .footer-container ul li+li{border-left:1px solid #4b5e73}.question-well{min-height:20px;padding:25px;margin-top:25px;border:1px solid #d5d5d5;border-radius:10px;background:#ffffff}.question-well.hasFocus{border:1px solid #365ebe;-webkit-transition:0.1s ease-in-out all;transition:0.1s ease-in-out all}.question-well h3{margin-top:0}.question-well p{max-width:90%;margin-bottom:20px}.question-well .fact-sheet-table-inline-question{margin-bottom:48px}.question-well .required,.question-well .optional{font-size:14px;font-family:Myriad-Pro-Bold,Calibri,Arial,Sans Serif;font-weight:bold;text-transform:uppercase;padding:4px 6px;margin-left:16px;white-space:nowrap}.question-well .required{color:#D8292F;border:#D8292F 2px solid}.question-well .optional{color:#19355b;border:#19355b 1px solid}.question-well-border-less{min-height:20px;padding:25px 25px 0 0;margin-top:25px;background:#ffffff}.question-well-border-less h3{margin-top:20px}.question-well-border-less p{max-width:90%}.review-well{border-radius:10px;min-height:20px;margin-bottom:10px;border:1px solid #d5d5d5;background:#ffffff}.review-well .review-well{margin:0 40px 5px}.review-well .collapse-trigger{padding:20px 15px}.review-well .collapse,.review-well .collapsing{border-top:1px solid #d5d5d5;padding:24px 47px}.review-well .collapse>div,.review-well .collapsing>div{margin-bottom:0}.review-well .review-buttons{float:left;padding:0 15px 20px;margin:0 0 0 32px}@media (min-width: 991px){.review-well .review-buttons{float:right;padding:10px 15px;margin:0}}.review-well .review-buttons .fa{color:white;margin-right:6px}.review-well .collapse-trigger{margin-bottom:0;display:inline-block;width:100%}@media (min-width: 991px){.review-well .collapse-trigger{width:initial}}.review-well .collapse-trigger>div{border-bottom:none;font-size:18px;font-weight:600;padding-left:8px;position:relative}.review-well .collapse-trigger>div:before{font-family:FontAwesome;font-weight:normal;font-style:normal;position:absolute;text-decoration:inherit;left:0;content:"\f077";-webkit-transform-origin:50%;transform-origin:50%;-webkit-transition:all 0.1s ease-in-out;transition:all 0.1s ease-in-out}.review-well .collapse-trigger>div span{display:inline-block;margin-left:24px}.review-well .collapse-trigger>div:after{display:none}.review-well .collapse-trigger.empty{display:block;border-top:1px solid #d5d5d5}.review-well .collapse-trigger.empty div:before{display:none}.review-well .collapse-trigger.collapsed div:before{-webkit-transform:rotate(-180deg);transform:rotate(-180deg);-webkit-transform-style:preserve-3D;transform-style:preserve-3D;-webkit-transform-origin:50%;transform-origin:50%}.review-well .collapse.empty{display:inline-block;border-top:none}.review-well-no-icon{padding-left:47px}.review-well-child{display:inline-block;width:100%}.review-well-child .review-buttons{margin:0;padding-left:8px}@media (min-width: 991px){.review-well-child .review-buttons{margin:initial;padding-left:initial}}.review-well-child .collapse-trigger{padding-left:0}.review-well-child .collapse-trigger>div{color:#494949;font-weight:normal}.review-child-heading{background-color:#D4DCE5}.review-table-spacer::before{content:'';display:block;height:25px}.print-form-action{display:inline-block;float:right}.print-form-action a{text-decoration:none}.print-form-action:after{display:none}.step-review .collapse-trigger{font-size:24px;display:inline-block}.step-review .collapse-trigger.collapsed{margin-bottom:0;-webkit-transition:0.5s ease-out all;transition:0.5s ease-out all}.step-review table{margin-bottom:0}.step-review table thead tr{background-color:#042553;color:#fff}.step-review .collapse>div,.step-review .collapsing>div{margin-bottom:0}.step-review .review-buttons{float:right;padding:0 15px 10px;margin:0}.row-flex{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-ms-flex-wrap:wrap;flex-wrap:wrap;height:100%;overflow:hidden;background:#fdfdfd;position:relative}.row-flex .col{-webkit-box-flex:1;-ms-flex:1;flex:1;box-sizing:border-box;-webkit-box-ordinal-group:4;-ms-flex-order:3;order:3}.row-flex .col.shroud:before{content:"";position:absolute;width:100%;display:block;height:100%;background:linear-gradient(to top, rgba(0,0,0,0.35) 0%, transparent 90%)}.row-flex .content-column{max-width:1280px;padding:36px 6% 50px;position:relative}.row-flex .progress-column{-webkit-box-flex:0;-ms-flex:0 0 280px;flex:0 0 280px;background-color:#efefef;-webkit-box-ordinal-group:3;-ms-flex-order:2;order:2}.row-flex .dashnav-column{-webkit-box-flex:0;-ms-flex:0 0 280px;flex:0 0 280px;background-color:#19355b;-webkit-box-ordinal-group:3;-ms-flex-order:2;order:2}.row-flex .more_information-column{background-color:#efefef;box-shadow:inset 0 0 10px 0 rgba(0,0,0,0.1);padding:20px 45px;font-size:14px;line-height:21px;-webkit-box-ordinal-group:2;-ms-flex-order:1;order:1;height:auto}@media (min-width: 1920px){.row-flex .more_information-column{font-size:16px;line-height:1.5}}.row-flex .more_information-column .more_information-close{float:right;font-size:24px;margin-top:3px}.row-flex .more_information-column .more_information-close i.fa{color:#042553}.row-flex .more_information-column h2{color:#042553;padding-right:25px}.row-flex .more_information-column h3{font-size:21px;line-height:28px}@media (min-width: 992px){.row-flex .more_information-column{padding:45px 20px;-webkit-box-ordinal-group:5;-ms-flex-order:4;order:4;-webkit-box-flex:0;-ms-flex:0 0 306px;flex:0 0 306px}}.row-flex.intro-page{background:#2b5580 url("../img/bg-edivorce__landing.jpg") no-repeat top center fixed;background-size:cover}.row-flex.intro-page .content-column{margin:54px auto 100px;max-width:840px;padding:0 20px;text-align:center;color:#ffffff;position:relative}.row-flex.intro-page .content-column h1,.row-flex.intro-page .content-column h2,.row-flex.intro-page .content-column h3{color:#ffffff}.row-flex.intro-page .content-column h2{font-size:30px;font-weight:600;margin:42px 0 0}.row-flex.intro-page .content-column h2.shaded-box{padding-top:28px;border-top-left-radius:8px;border-top-right-radius:8px}.row-flex.intro-page .content-column .intro{font-size:24px;line-height:36px;margin:0 100px}.row-flex.intro-page .content-column a{color:#ffffff;text-decoration:none}.row-flex.intro-page .content-column a:focus,.row-flex.intro-page .content-column a:hover{text-decoration:underline}.row-flex.intro-page .content-column a.btn:focus,.row-flex.intro-page .content-column a.btn:hover{text-decoration:none}.row-flex.intro-page .content-column .btn-group-lg>.btn,.row-flex.intro-page .content-column .btn-lg{padding:12px 40px;margin:10px}.row-flex.intro-page .content-column .flex-wrapper{display:-webkit-box;display:-ms-flexbox;display:flex;margin:20px 0;text-align:left;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;font-size:18px}.row-flex.intro-page .content-column .flex-wrapper .flex-column{width:45%}.row-flex.intro-page .content-column .flex-wrapper.shaded-box{padding-top:22px;padding-bottom:50px;margin-top:0;border-bottom-left-radius:8px;border-bottom-right-radius:8px}.row-flex.intro-page .content-column .flex-wrapper.shaded-box .flex-column.left{padding-left:30px}.row-flex.intro-page .content-column .flex-wrapper.shaded-box .flex-column.right{padding-right:30px}.row-flex.intro-page .content-column .flex-wrapper span.number-circle{border:solid 2px white;padding:0;border-radius:40px;width:40px;height:40px;display:inline-block;text-align:center;margin-right:10px;font-size:21px}.dashnav-column h4,.overview-progress h4,.progress-column h4{color:#494949;padding:0 18px;margin-top:36px;font-size:14px;letter-spacing:0.1em}.dashnav-column .progress-question,.overview-progress .progress-question,.progress-column .progress-question{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;height:72px;margin-bottom:12px;padding:0 18px}.dashnav-column .progress-question .progress-icon,.overview-progress .progress-question .progress-icon,.progress-column .progress-question .progress-icon{-webkit-box-flex:0;-ms-flex:0 0 46px;flex:0 0 46px}.dashnav-column .progress-question .progress-icon i,.overview-progress .progress-question .progress-icon i,.progress-column .progress-question .progress-icon i{font-size:20px;border:solid 1px #494949;padding:8px;border-radius:36px}.dashnav-column .progress-question .progress-icon i.fa:before,.overview-progress .progress-question .progress-icon i.fa:before,.progress-column .progress-question .progress-icon i.fa:before{width:20px;text-align:center;display:block;height:20px}.dashnav-column .progress-question .progress-content,.overview-progress .progress-question .progress-content,.progress-column .progress-question .progress-content{width:190px;font-size:14px;line-height:1.3;color:#494949}@media (min-width: 1920px){.dashnav-column .progress-question .progress-content,.overview-progress .progress-question .progress-content,.progress-column .progress-question .progress-content{font-size:16px;width:190px}}.dashnav-column .progress-question .progress-content small,.overview-progress .progress-question .progress-content small,.progress-column .progress-question .progress-content small{font-size:11px;text-transform:uppercase;font-weight:700;letter-spacing:0.1em}.dashnav-column .progress-question .progress-status,.overview-progress .progress-question .progress-status,.progress-column .progress-question .progress-status{width:28px;text-align:right}.dashnav-column .progress-question .progress-status i,.overview-progress .progress-question .progress-status i,.progress-column .progress-question .progress-status i{float:right}.dashnav-column .progress-question i,.overview-progress .progress-question i,.progress-column .progress-question i{color:#494949}.dashnav-column .progress-question.complete i,.dashnav-column .progress-question.complete span,.overview-progress .progress-question.complete i,.overview-progress .progress-question.complete span,.progress-column .progress-question.complete i,.progress-column .progress-question.complete span{color:#57b26a;border-color:#57b26a}.dashnav-column .progress-question:focus,.dashnav-column .progress-question:hover,.overview-progress .progress-question:focus,.overview-progress .progress-question:hover,.progress-column .progress-question:focus,.progress-column .progress-question:hover{background-color:#e6ca85;text-decoration:none}.dashnav-column .progress-question:focus i,.dashnav-column .progress-question:focus span,.dashnav-column .progress-question:hover i,.dashnav-column .progress-question:hover span,.overview-progress .progress-question:focus i,.overview-progress .progress-question:focus span,.overview-progress .progress-question:hover i,.overview-progress .progress-question:hover span,.progress-column .progress-question:focus i,.progress-column .progress-question:focus span,.progress-column .progress-question:hover i,.progress-column .progress-question:hover span{color:#ffffff;border-color:#ffffff}.dashnav-column .progress-question.active,.overview-progress .progress-question.active,.progress-column .progress-question.active{background-color:#dea61b;text-decoration:none}.dashnav-column .progress-question.active i,.dashnav-column .progress-question.active span,.overview-progress .progress-question.active i,.overview-progress .progress-question.active span,.progress-column .progress-question.active i,.progress-column .progress-question.active span{color:#ffffff;border-color:#ffffff}.dashnav-column .progress-sub-menu,.overview-progress .progress-sub-menu,.progress-column .progress-sub-menu{list-style-type:none}.dashnav-column .progress-sub-menu li,.overview-progress .progress-sub-menu li,.progress-column .progress-sub-menu li{display:inline-block;padding:5px 10px 5px 22px;border-left:2px solid #dea61b;width:100%}.dashnav-column .progress-sub-menu .progress-sub-question,.overview-progress .progress-sub-menu .progress-sub-question,.progress-column .progress-sub-menu .progress-sub-question{width:190px;font-size:14px;line-height:1.3;color:#494949}@media (min-width: 1920px){.dashnav-column .progress-sub-menu .progress-sub-question,.overview-progress .progress-sub-menu .progress-sub-question,.progress-column .progress-sub-menu .progress-sub-question{font-size:16px;width:190px}}.dashnav-column .progress-sub-menu .progress-sub-question .progress-content,.overview-progress .progress-sub-menu .progress-sub-question .progress-content,.progress-column .progress-sub-menu .progress-sub-question .progress-content{width:190px;font-size:14px;line-height:1.3}@media (min-width: 1920px){.dashnav-column .progress-sub-menu .progress-sub-question .progress-content,.overview-progress .progress-sub-menu .progress-sub-question .progress-content,.progress-column .progress-sub-menu .progress-sub-question .progress-content{font-size:16px;width:190px}}.dashnav-column .progress-sub-menu .progress-sub-question:focus,.dashnav-column .progress-sub-menu .progress-sub-question:hover,.overview-progress .progress-sub-menu .progress-sub-question:focus,.overview-progress .progress-sub-menu .progress-sub-question:hover,.progress-column .progress-sub-menu .progress-sub-question:focus,.progress-column .progress-sub-menu .progress-sub-question:hover{color:#dea61b;text-decoration:none;font-weight:700}.dashnav-column .progress-sub-menu .progress-sub-question.active,.overview-progress .progress-sub-menu .progress-sub-question.active,.progress-column .progress-sub-menu .progress-sub-question.active{color:#dea61b;text-decoration:none;font-weight:700}.dashnav-column .progress-question{height:60px}.overview-progress{border:solid 1px #efefef;border-radius:10px;background:#ffffff}.overview-progress .progress-question{margin-bottom:0;border-bottom:solid 1px #efefef}.overview-progress .progress-question:last-of-type{border-bottom:none}.overview-progress .progress-question .progress-icon{-webkit-box-flex:0;-ms-flex:0 0 52px;flex:0 0 52px}.overview-progress .progress-question .progress-content{font-size:16px;font-weight:600;-webkit-box-flex:2;-ms-flex:2;flex:2}.overview-progress .progress-question .progress-status{font-size:14px;font-weight:600;-webkit-box-flex:1;-ms-flex:1;flex:1}.overview-progress .progress-question .progress-status i{float:none;margin-right:5px}.overview-progress .progress-question.complete{background-color:rgba(87,178,106,0.2)}.overview-progress .progress-question.complete .progress-content,.overview-progress .progress-question.complete .progress-icon i,.overview-progress .progress-question.complete .progress-icon i:before,.overview-progress .progress-question.complete .progress-status,.overview-progress .progress-question.complete .progress-status i{color:#57b26a}.overview-progress .progress-question.complete .progress-icon i{border:solid 1px #57b26a}.overview-progress .progress-question .progress-content,.overview-progress .progress-question .progress-icon i,.overview-progress .progress-question .progress-icon i::before,.overview-progress .progress-question .progress-status,.overview-progress .progress-question .progress-status i{color:#042553}.overview-progress .progress-question .progress-icon i{border:solid 1px #042553}.overview-progress .progress-question:focus,.overview-progress .progress-question:hover{background-color:rgba(4,37,83,0.3);text-decoration:none}.overview-progress .progress-question:focus .progress-content,.overview-progress .progress-question:focus .progress-icon i,.overview-progress .progress-question:focus .progress-icon i::before,.overview-progress .progress-question:focus .progress-status,.overview-progress .progress-question:focus .progress-status i,.overview-progress .progress-question:hover .progress-content,.overview-progress .progress-question:hover .progress-icon i,.overview-progress .progress-question:hover .progress-icon i::before,.overview-progress .progress-question:hover .progress-status,.overview-progress .progress-question:hover .progress-status i{color:#042553;border-color:#042553}.overview-progress .progress-question:first-child:hover{border-top-left-radius:7px;border-top-right-radius:7px}.overview-progress .progress-question:last-child:hover{border-bottom-left-radius:7px;border-bottom-right-radius:7px}.overview-progress .progress-question a{transition:0.1s background ease-in-out;-webkit-transition:0.1s background ease-in-out}.dashnav-column h4{color:#ffffff}.dashnav-column .progress-question .progress-icon{-webkit-box-flex:0;-ms-flex:0 0 36px;flex:0 0 36px}.dashnav-column .progress-question .progress-icon i{font-size:20px;border:none;padding:0}.dashnav-column .progress-question .progress-content{width:180px;color:#ffffff;font-weight:600}.dashnav-column .progress-question i{color:#ffffff}.dashnav-column .progress-question:focus,.dashnav-column .progress-question:hover{background-color:#dea61b}.has-warning-box{border:3px solid #D8292F;padding-top:8px;padding-left:8px}.has-warning-box #terms_warning{color:#D8292F}.modal-dialog{width:780px}.modal-header{border:0;padding-bottom:0;padding-top:24px}.modal-title{font-size:32px;font-weight:normal}.modal-body{padding:0 64px 36px}.modal-body p{font-size:18px;margin-top:12px}.modal-footer{background:#f5f5f5;border-bottom-left-radius:10px;border-bottom-right-radius:10px}.footnote-marker{font-size:18px;top:-10px;position:relative;display:inline-block;left:1px;margin-right:1px}.footnote{margin-top:40px;margin-bottom:52px;font-size:16px}.footnote h5{font-size:30px;margin-bottom:20px}.footnote.shaded-box{border-radius:8px;padding:25px 80px 25px 80px}.shaded-box{background-color:rgba(0,0,0,0.35)}#delete_child_modal,#info_modal,#questions_modal,#terms_modal{margin-top:112px;font-size:18px}#delete_child_modal .modal-header,#info_modal .modal-header,#questions_modal .modal-header,#terms_modal .modal-header{text-align:center}#delete_child_modal .modal-header i,#info_modal .modal-header i,#questions_modal .modal-header i,#terms_modal .modal-header i{background-color:#365ebe;color:#ffffff;height:80px;width:80px;border-radius:40px;font-size:40px;padding:20px;margin-bottom:15px}#delete_child_modal .modal-body,#info_modal .modal-body,#questions_modal .modal-body,#terms_modal .modal-body{padding:36px 64px}#delete_child_modal .modal-body p,#info_modal .modal-body p,#questions_modal .modal-body p,#terms_modal .modal-body p{font-size:18px;margin-top:12px}#delete_child_modal .modal-footer,#info_modal .modal-footer,#questions_modal .modal-footer,#terms_modal .modal-footer{text-align:center;border:none;padding-bottom:18px}#delete_child_modal{text-align:center;vertical-align:middle;margin-top:112px;font-size:18px}#delete_child_modal .modal-footer{text-align:center;border:none;padding-bottom:18px}div#progress-overlay{position:fixed;top:0;bottom:0;left:0;right:0;z-index:10000;background:rgba(0,0,0,0.35)}div#progress-overlay-spinner{position:fixed;top:0;bottom:0;left:0;right:0;z-index:5000}span.hard-stop{font-size:2.8em;display:inline-block;float:left;margin:3px 10px 0 0}.date-picker-group .input-group-addon{display:inline-block;background-color:inherit;border:none}@media (min-width: 1px) and (max-width: 991px){.on-canvas{display:block}}@media (min-width: 992px){.on-canvas{-webkit-transition:0.2s ease-out all;transition:0.2s ease-out all;-webkit-transform:translateX(0);transform:translateX(0)}}@media (min-width: 1px) and (max-width: 991px){.off-canvas{display:none}}@media (min-width: 992px){.off-canvas{-webkit-transition:0.2s ease-out all;transition:0.2s ease-out all;-webkit-transform:translateX(306px);transform:translateX(306px)}}@media (min-width: 1px) and (max-width: 991px){.margin-right{margin-right:0}}@media (min-width: 992px){.margin-right{-webkit-transition:0.2s ease-out all;transition:0.2s ease-out all;margin-right:-306px}}@media (min-width: 1px) and (max-width: 991px){.no-margin-right{margin-right:0}}@media (min-width: 992px){.no-margin-right{-webkit-transition:0.2s ease-out all;transition:0.2s ease-out all;margin-right:0}} /*# sourceMappingURL=main.css.map */ \ No newline at end of file diff --git a/edivorce/apps/core/static/css/main.scss b/edivorce/apps/core/static/css/main.scss index 0ddb754e..17ad3dc5 100644 --- a/edivorce/apps/core/static/css/main.scss +++ b/edivorce/apps/core/static/css/main.scss @@ -690,6 +690,14 @@ i.fa.fa-question-circle { } } +.table-error { + border: 2px solid $color-red !important; + -webkit-transition: 0.1s ease-in-out all; + transition: 0.1s ease-in-out all; + margin: -5px -10px; + padding: 12px 16px; +} + .btn-radio { color: $brand-titles; background-color: $color-blue-lighter; diff --git a/edivorce/apps/core/templates/question/06_children_facts.html b/edivorce/apps/core/templates/question/06_children_facts.html index 0ae23c6c..ab6c80a7 100644 --- a/edivorce/apps/core/templates/question/06_children_facts.html +++ b/edivorce/apps/core/templates/question/06_children_facts.html @@ -18,12 +18,12 @@