 | us-gaap:CapitalizedContractCostNetAbstract | parent-child | http://fasb.org/us-gaap/role/disclosure/RevenueFromContractWithCustomerTemp04 |
 | us-gaap:CapitalizedContractCostTable | all | http://fasb.org/us-gaap/role/disclosure/RevenueFromContractWithCustomerTemp04CapitalizedContractCostTable |
 | us-gaap:CapitalizedContractCostNetAbstract | domain-member | http://fasb.org/us-gaap/role/disclosure/RevenueFromContractWithCustomerTemp04CapitalizedContractCostTable |
 | us-gaap:CapitalizedContractCostNetAbstract | parent-child | http://fasb.org/us-gaap/role/disclosure/RevenuefromContractswithCustomers |
 | us-gaap:CapitalizedContractCostNetClassifiedAbstract | parent-child | http://fasb.org/us-gaap/role/disclosure/RevenuefromContractswithCustomers |
 | us-gaap:CapitalizedContractCostAmortization | parent-child | http://fasb.org/us-gaap/role/disclosure/RevenuefromContractswithCustomers |
 | us-gaap:CapitalizedContractCostImpairmentLoss | parent-child | http://fasb.org/us-gaap/role/disclosure/RevenuefromContractswithCustomers |
 | us-gaap:CapitalizedContractCostTable | all | http://fasb.org/us-gaap/role/disclosure/RevenuefromContractswithCustomersCapitalizedContractCostTable |
 | us-gaap:CapitalizedContractCostNetAbstract | domain-member | http://fasb.org/us-gaap/role/disclosure/RevenuefromContractswithCustomersCapitalizedContractCostTable |
 | us-gaap:CapitalizedContractCostNetClassifiedAbstract | domain-member | http://fasb.org/us-gaap/role/disclosure/RevenuefromContractswithCustomersCapitalizedContractCostTable |
 | us-gaap:CapitalizedContractCostAmortization | domain-member | http://fasb.org/us-gaap/role/disclosure/RevenuefromContractswithCustomersCapitalizedContractCostTable |
 | us-gaap:CapitalizedContractCostImpairmentLoss | domain-member | http://fasb.org/us-gaap/role/disclosure/RevenuefromContractswithCustomersCapitalizedContractCostTable |