<!DOCTYPE html>
<!-- Licensed to the Apache Software Foundation (ASF) under one or more
contributor license agreements. See the NOTICE file distributed with
this work for additional information regarding copyright ownership. The
ASF licenses this file to you under the Apache License, Version 2.0 (the
&quot;License&quot;); 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 &quot;AS IS&quot; 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. -->
<html lang="en">
  <head>
    <meta charset="utf-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <!-- The above 3 meta tags *must* come first in the head; any other head content must come *after* these tags -->
    <title>Pony Mail!</title>

    <!-- Bootstrap -->
    <link href="css/bootstrap.min.css" rel="stylesheet">
    <link href="css/popup.css" rel="stylesheet">
    <link href="css/solar.css" rel="alternate stylesheet" type="text/css" title="Solar theme" media="all">
    <link href="css/metro.css" rel="alternate stylesheet" type="text/css" title="Metropolis" media="all">
    <link rel="stylesheet" href="//cdn.jsdelivr.net/font-hack/2.013/css/hack.min.css">

    <!-- HTML5 shim and Respond.js for IE8 support of HTML5 elements and media queries -->
    <!-- WARNING: Respond.js doesn't work if you view the page via file:// -->
    <!--[if lt IE 9]>
      <script src="https://oss.maxcdn.com/html5shiv/3.7.2/html5shiv.min.js"></script>
      <script src="https://oss.maxcdn.com/respond/1.4.2/respond.min.js"></script>
    <![endif]-->
  </head>
  <body style="margin: 0px;" onload="listNotifications()">
        <header class="navbar navbar-default" style="margin-bottom: 5px; background: linear-gradient(to bottom, rgba(229,229,229,1) 0%,rgba(191,191,191,1) 100%);">
        <div class="container-fluid">
            <!-- Brand and toggle get grouped for better mobile display -->
            <div class="navbar-header" style="min-width: 160px;">
                <a class="navbar-brand" href="/">
                    <span>
                    <img src="images/logo.png" style="margin-top: -10px !important;" height="27" width="32" />&#160;Pony Mail!</span>
                </a>
            </div>
            <div class="collapse navbar-collapse" id="bs-example-navbar-collapse-1" style="float: left;">
                <ul class="nav navbar-nav" id="userprefs" style="position: absolute; right: 8px;">
                    <li class="dropdown navbar-right" id="listchoice">
                        <a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-haspopup="true" aria-expanded="false">
                            <img id="uimg" src="images/user_loggedout.png" title="Not logged in" />
                            <span class="caret"></span>
                        </a>
                        <ul class="dropdown-menu" id="prefs_dropdown">
                            <li>
                                <a href="oauth.html">Log in</a>
                            </li>
                        </ul>
                    </li>
                </ul>
            </div>
        </div>
    </header>
    
    <div class="container-fluid">
    
    <div class="row">
       <!-- Popup box for various notices -->
      <div style="display: none;" class="bs-callout bs-callout-success fade-in" id="popupper" style="margin: 2px !important; padding: 5px;">
      </div>
      <div id="bread" class="col-md-12" style="text-align: center">
        <noscript>
          <div class="bs-callout bs-callout-alert">
            This site requires JavaScript enabled. Please enable it.
          </div>
      </noscript>
          <h3 id="welcome">Notifications</h3>
        <div id="notifications">
          Loading notifications, please hang on...
        </div>
        
      </div>
      </div>
    </div>

    <div id="splash" class="splash fade-in"> &nbsp; </div>
  <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.3/jquery.min.js"></script>
    <!-- Include all compiled plugins (below), or include individual files as needed -->
    <script src="js/bootstrap.min.js"></script>
    <script src="js/config.js"></script>
    <script src="js/ponymail.js"></script>
    <script src="js/notifications.js"></script>
    <script src="js/weburl.js"></script>
  </body>
</html>