 | us-gaap:RevenueRemainingPerformanceObligationExpectedTimingOfSatisfactionPeriod1 | parent-child | http://fasb.org/us-gaap/role/disclosure/RevenueFromContractWithCustomerTemp03 |
 | us-gaap:RevenueRemainingPerformanceObligation | parent-child | http://fasb.org/us-gaap/role/disclosure/RevenueFromContractWithCustomerTemp03 |
 | us-gaap:RevenueRemainingPerformanceObligationExpectedTimingOfSatisfactionTable | all | http://fasb.org/us-gaap/role/disclosure/RevenueFromContractWithCustomerTemp03RevenueRemainingPerformanceObligationExpectedTimingOfSatisfactionTable |
 | us-gaap:RevenueRemainingPerformanceObligationExpectedTimingOfSatisfactionPeriod1 | domain-member | http://fasb.org/us-gaap/role/disclosure/RevenueFromContractWithCustomerTemp03RevenueRemainingPerformanceObligationExpectedTimingOfSatisfactionTable |
 | us-gaap:RevenueRemainingPerformanceObligation | domain-member | http://fasb.org/us-gaap/role/disclosure/RevenueFromContractWithCustomerTemp03RevenueRemainingPerformanceObligationExpectedTimingOfSatisfactionTable |
 | us-gaap:RevenueRemainingPerformanceObligation | domain-member | http://fasb.org/us-gaap/role/disclosure/RevenueFromContractWithCustomerTemp03RevenueRemainingPerformanceObligationExpectedTimingOfSatisfactionTableDefault |
 | us-gaap:RevenueRemainingPerformanceObligationExpectedTimingOfSatisfactionPeriod1 | domain-member | http://fasb.org/us-gaap/role/disclosure/RevenueFromContractWithCustomerTemp03RevenueRemainingPerformanceObligationExpectedTimingOfSatisfactionTableDefault |
 | us-gaap:RevenueRemainingPerformanceObligationExpectedTimingOfSatisfactionTable | all | http://fasb.org/us-gaap/role/disclosure/RevenueFromContractWithCustomerTemp03RevenueRemainingPerformanceObligationExpectedTimingOfSatisfactionTableDefault |
 | us-gaap:RevenueRemainingPerformanceObligationExpectedTimingOfSatisfactionExplanation | parent-child | http://fasb.org/us-gaap/role/disclosure/RevenuefromContractswithCustomers |
 | us-gaap:RevenueRemainingPerformanceObligationExpectedTimingOfSatisfactionPeriod1 | parent-child | http://fasb.org/us-gaap/role/disclosure/RevenuefromContractswithCustomers |
 | us-gaap:RevenueRemainingPerformanceObligationExpectedTimingOfSatisfactionYear1 | parent-child | http://fasb.org/us-gaap/role/disclosure/RevenuefromContractswithCustomers |
 | us-gaap:RevenueRemainingPerformanceObligation | parent-child | http://fasb.org/us-gaap/role/disclosure/RevenuefromContractswithCustomers |
 | us-gaap:RevenueRemainingPerformanceObligationPercentage | parent-child | http://fasb.org/us-gaap/role/disclosure/RevenuefromContractswithCustomers |
 | us-gaap:RevenueRemainingPerformanceObligationExpectedTimingOfSatisfactionTable | all | http://fasb.org/us-gaap/role/disclosure/RevenuefromContractswithCustomersRevenueRemainingPerformanceObligationExpectedTimingOfSatisfactionTable |
 | us-gaap:RevenueRemainingPerformanceObligationExpectedTimingOfSatisfactionExplanation | domain-member | http://fasb.org/us-gaap/role/disclosure/RevenuefromContractswithCustomersRevenueRemainingPerformanceObligationExpectedTimingOfSatisfactionTable |
 | us-gaap:RevenueRemainingPerformanceObligationExpectedTimingOfSatisfactionPeriod1 | domain-member | http://fasb.org/us-gaap/role/disclosure/RevenuefromContractswithCustomersRevenueRemainingPerformanceObligationExpectedTimingOfSatisfactionTable |
 | us-gaap:RevenueRemainingPerformanceObligationExpectedTimingOfSatisfactionYear1 | domain-member | http://fasb.org/us-gaap/role/disclosure/RevenuefromContractswithCustomersRevenueRemainingPerformanceObligationExpectedTimingOfSatisfactionTable |
 | us-gaap:RevenueRemainingPerformanceObligation | domain-member | http://fasb.org/us-gaap/role/disclosure/RevenuefromContractswithCustomersRevenueRemainingPerformanceObligationExpectedTimingOfSatisfactionTable |
 | us-gaap:RevenueRemainingPerformanceObligationPercentage | domain-member | http://fasb.org/us-gaap/role/disclosure/RevenuefromContractswithCustomersRevenueRemainingPerformanceObligationExpectedTimingOfSatisfactionTable |