footer
    .container
        .row
            .col-md-9
                p Apache ECharts is an effort undergoing incubation at The Apache Software Foundation (ASF), sponsored by the Apache Incubator. Incubation is required of all newly accepted projects until a further review indicates that the infrastructure, communications, and decision making process have stabilized in a manner consistent with other successful ASF projects. While incubation status is not necessarily a reflection of the completeness or stability of the code, it does indicate that the project has yet to be fully endorsed by the ASF.
                p Copyright © 2017-2020, The Apache Software Foundation Apache ECharts, ECharts, Apache, the Apache feather, and the Apache ECharts project logo are either registered trademarks or trademarks of the Apache Software Foundation.
            .col-md-3#footer-icon-panel
                a(href='https://www.apache.org')
                    img(src='#{cdnPayRoot}/#{ecWWWLang}/images/asf_logo.svg?_v_=#{cdnPayVersion}', class="footer-apache-logo")
                .icon-panel
                    a.footer-icon(href='mailto:dev@echarts.apache.org?body=%28Thanks%20for%20using%20ECharts.%20Email%20us%20if%20you%20have%20non-technical%20problems%20using%20ECharts.%20For%20technical%20support%2C%20please%20go%20to%20https%3A//github.com/apache/incubator-echarts/issues%20.%29')
                        img(src='#{cdnPayRoot}/#{ecWWWLang}/images/icon-email.png?_v_=#{cdnPayVersion}')
                    a.footer-icon(href='https://twitter.com/EChartsJs')
                        img(src='#{cdnPayRoot}/#{ecWWWLang}/images/icon-twitter.png?_v_=#{cdnPayVersion}')
                    a.footer-icon(href='https://weibo.com/u/5160877841')
                        img(src='#{cdnPayRoot}/#{ecWWWLang}/images/icon-weibo.png?_v_=#{cdnPayVersion}')
                    a.footer-icon(href='https://github.com/apache/incubator-echarts')
                        img(src='#{cdnPayRoot}/#{ecWWWLang}/images/icon-github.png?_v_=#{cdnPayVersion}')
