<!--
Copyright 2019 EveryUP srl

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

    http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an  BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
-->

{% load staticfiles %}
{% load i18n %}

  <title>{{ SITE_NAME }}</title>

  <!-- Tell the browser to be responsive to screen width -->
  <meta content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no" name="viewport">
  <!-- Bootstrap 3.3.7 -->
  <link rel="stylesheet" href="/static/node_modules/bootstrap/dist/css/bootstrap.min.css">
  <!-- Font Awesome-->
  <link rel="stylesheet" href="/static/node_modules/font-awesome/css/font-awesome.css">
  <!--<link rel="stylesheet" href="/static/node_modules/components-font-awesome/css/fontawesome.min.css">-->
  <link rel="stylesheet" href="/static/node_modules/components-font-awesome/css/fontawesome-all.min.css">
  <!-- Ionicons -->
  <link rel="stylesheet" href="/static/node_modules/ionicons/dist/css/ionicons.min.css">
  <!-- Theme style -->
  <link rel="stylesheet" href="/static/node_modules/admin-lte/dist/css/AdminLTE.min.css">
  <!-- AdminLTE Skins. Choose a skin from the css/skins
       folder instead of downloading all of them to reduce the load. -->
  <link rel="stylesheet" href="/static/node_modules/admin-lte/dist/css/skins/_all-skins.min.css">

  <link rel="stylesheet" href="/static/css/rdcl.css">
  <link rel="stylesheet" href="/static/css/lwui.css">

  <link rel="stylesheet" href="/static/node_modules/admin-lte/plugins/pace/pace.min.css">
  <link rel="icon" href="/static/assets/img/favicon.ico">



