text:
import * as api from '../utils/api';
import * as config from '../utils/configuration';

// export async function listAvailableDevices() {
//   // simulate an asynchronous operation
//   //console.log('listAvailableDevices');
//   return new Promise((res) =>setTimeout(res, 2500))
//     .then(() =>{
//       var ret = [{key: 'blee1'},{key: 'blee2'},{key: 'blee3'}];
//       //console.log('listAvailableDevices.then:',ret);re
//       return ret;
//     })
//     .catch((error) =>{
//       console.log('error:',error);
//     });
// }

export async function loadPost(postId) {
  //console.log('Service.loadPost:',postId);
  //const url = "http://www.rekete.com/umbraco/api/MoliPost/GetPost/"+postId;
  //console.log('url:',url);
  //return await serverOperate(url, "GET");
  //console.log('Services.loadPost');
  return new Promise((resolve, reject) => {
    var req = new XMLHttpRequest();
    req.open(
      'GET',
      'http://www.rekete.com/umbraco/api/MoliPost/GetPost/' + postId,
    );
    req.onload = () => {
      if (req.status === 200) {
        resolve(req.response);
      } else {
        reject(Error(req.statusText));
      }
    };
    req.onerror = () => {
      reject(Error('Network Error'));
    };
    req.send();
  })
    .then((resp) => {
      var ret = JSON.parse(resp);
      return ret;
    })
    .catch((error) => {
      console.log('error:', error);
    });
}
export async function loadSchoolClasses(schoolId) {
  return await serverOperate(
    'http://www.rekete.com/umbraco/api/MoliPost/GetSchoolClasses?SchoolId=' +
      schoolId,
    'GET',
  );
}
export async function loadSchools() {
  //const url = 'http://www.rekete.com/umbraco/api/MoliPost/GetAllSchools';
  //const method = 'GET';
  config.setConfiguration('API_ROOT', 'http://www.rekete.com/umbraco/api');

  return await api.get('/MoliPost/GetAllSchools'); //serverOperate(url, method);
}

export async function loadFaqList() {
  return await serverOperate(
    'http://www.rekete.com/umbraco/api/MoliPost/GetAllFaqs',
    'GET',
  );
}
export function likePost(postId) {
  //console.log('Services.likePost:',postId);
  return operatePost(
    postId,
    'http://www.rekete.com/umbraco/api/MoliPost/LikePost/',
    'POST',
  );
}
export function dislikePost(postId) {
  //console.log('Services.dislikePost:',postId);
  return operatePost(
    postId,
    'http://www.rekete.com/umbraco/api/MoliPost/DislikePost/',
    'POST',
  );
}
export function postShown(postId) {
  //console.log('Services.postShown:', postId);
  return operatePost(
    postId,
    'http://www.rekete.com/umbraco/api/MoliPost/PostShown/',
    'POST',
  );
}

export async function loadLastStudyData(userId) {
  // simulate an asynchronous operation
  //console.log('studyDataService->loadLastStudyData=>userId:',userId);
  const url =
    'http://www.rekete.com/umbraco/api/MoliPost/GetUserLastData?userId=' +
    userId;
  return await serverOperate(url, 'GET');
}
export async function loadUserCurMonthData(userId) {
  let today = new Date();
  return await loadUserStatData(
    today.getFullYear(),
    today.getMonth() + 1,
    userId,
  );
}
export async function loadUserStatData(year, month, userId) {
  //console.log('loadUserStatData:',year, month, userId);
  //const url = 'http://www.rekete.com/umbraco/api/MoliPost/GetUserStatData?userId=' + userId + '&year=' + year + '&month=' + month;
  //return await serverOperate(url, 'GET');
  config.setConfiguration('API_ROOT', 'http://www.rekete.com/umbraco/api');
  return await api.get(
    '/MoliPost/GetUserStatData?userId=' +
      userId +
      '&year=' +
      year +
      '&month=' +
      month,
    true,
  );
}
export async function loadClassCurMeanStatData(classId) {
  let today = new Date();
  return await loadClassMeanStatData(
    today.getFullYear(),
    today.getMonth() + 1,
    classId,
  );
}
export async function loadClassMeanStatData(year, month, classId) {
  config.setConfiguration('API_ROOT', 'http://www.rekete.com/umbraco/api');
  return await api.get(
    '/MoliPost/GetClassMeanStatData?classId=' +
      classId +
      '&year=' +
      year +
      '&month=' +
      month,
    true,
  );
}
export async function loadUserLastReportData(userId) {
  //console.log('loadUserLastReportData:', userId);
  const url =
    'http://www.rekete.com/umbraco/api/MoliPost/GetUserLastWeekData?userId=' +
    userId;
  return await serverOperate(url, 'GET');
}
export async function loadUserDiffData(userId) {
  //console.log('loadUserDiffData->:',userId);
  const url =
    'http://www.rekete.com/umbraco/api/MoliPost/GetUserDiffData?userId=' +
    userId;
  return await serverOperate(url, 'GET');
}
async function operatePost(postId, url, method) {
  return await serverOperate(url + postId, method);
}

export async function loadPostList() {
  // simulate an asynchronous operation
  //console.log('Services.loadPostList');
  return new Promise((resolve, reject) => {
    var req = new XMLHttpRequest();
    //console.log('req:',req);

    req.open('GET', 'http://www.rekete.com/umbraco/api/MoliPost/GetAllPosts');
    req.onload = () => {
      if (req.status === 200) {
        //console.log('success:',req);
        resolve(req.response);
      } else {
        reject(Error(req.statusText));
      }
    };
    req.onerror = () => {
      reject(Error('Network Error'));
    };
    req.send();
  })
    .then((resp) => {
      var ret = JSON.parse(resp);
      console.log('success->data:', ret);
      return ret;
    })
    .catch((error) => {
      console.log('error:', error);
    });
}

async function serverOperate(url, method) {
  //console.log('serverOperate:', url, method);
  config.setConfiguration('API_ROOT', 'http://www.rekete.com/umbraco/api');
  if (method === 'GET') {
    return await api.get(
      url.replace('http://www.rekete.com/umbraco/api', ''),
      true,
    );
  } else {
    //if (method === 'POST'){
    //update it later for post and other methods
    return new Promise((resolve, reject) => {
      var req = new XMLHttpRequest();
      req.open(method, url);
      req.onload = () => {
        if (req.status === 200) {
          //console.log('success-req:',req.response);
          resolve(req.response);
        } else {
          console.log('service - error:', req);
          reject(Error(req.statusText));
        }
      };
      req.onerror = () => {
        reject(Error('Network Error'));
      };
      req.send();
    })
      .then((resp) => {
        //console.log('then.resp:', resp);
        return JSON.parse(resp);
      })
      .catch((error) => {
        console.log('error:', error);
      });
  }
}


text:
namespace TheDarkness
{
	bool IOManagere::readFileToBuffer(const std::string& fp, std::vector< unsigned char >& buff)
	{
	  std::ifstream file(fp, std::ios::binary);

	  if(file.fail()) {
	    std::cerr << "Failed to open " << ": readFileToBuffer" << std::endl;
	    return false;
	  }
	  file.seekg(0, std::ios::end);

	  auto size_pos = file.tellg();

	  file.seekg(0, std::ios::beg);

	  size_pos -= file.tellg();

	  buff.resize(size_pos);

	  file.read((char*)&buff[0], size_pos);

	  return true;
	}
}

redpajama_set_name: RedPajamaGithub


text: currently a nasty experiment


text:
// Copyright Yahoo. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
package com.yahoo.config.application;

import java.util.logging.Level;
import com.yahoo.text.XML;
import org.w3c.dom.*;

import javax.xml.transform.TransformerException;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.LinkedHashMap;
import java.util.logging.Logger;

/**
 * Handles getting properties from services.xml and replacing references to properties with their real values
 *
 * @author hmusum
 */
class PropertiesProcessor implements PreProcessor {
    private final static Logger log = Logger.getLogger(PropertiesProcessor.class.getName());
    private final LinkedHashMap<String, String> properties;

    PropertiesProcessor() {
        properties = new LinkedHashMap<>();
    }

    public Document process(Document input) throws TransformerException {
        Document doc = Xml.copyDocument(input);
        final Document document = buildProperties(doc);
        applyProperties(document.getDocumentElement());
        return document;
    }

    private Document buildProperties(Document input) {
        NodeList list = input.getElementsByTagNameNS(XmlPreProcessor.preprocessNamespaceUri, "properties");
        while (list.getLength() > 0) {
            Element propertiesElement = (Element) list.item(0);
            //System.out.println("prop=" + propertiesElement);
            Element parent = (Element) propertiesElement.getParentNode();
            for (Node node : XML.getChildren(propertiesElement)) {
                //System.out.println("Found " + node.getNodeName() + ", " + node.getTextContent());
                final String propertyName = node.getNodeName();
                if (properties.containsKey(propertyName)) {
                    log.log(Level.WARNING, "Duplicate definition for property '" + propertyName + "' detected");
                }
                properties.put(propertyName, node.getTextContent());
            }
            parent.removeChild(propertiesElement);
            list = input.getElementsByTagNameNS(XmlPreProcessor.preprocessNamespaceUri, "properties");
        }
        return input;
    }

    private void applyProperties(Element parent) {
        // System.out.println("applying properties for " + parent.getNodeName());
        final NamedNodeMap attributes = parent.getAttributes();
        for (int i = 0; i < attributes.getLength(); i++) {
            Node a = attributes.item(i);
            if (hasProperty(a)) {
                replaceAttributePropertyWithValue(a);
            }
        }

        if (XML.getChildren(parent).isEmpty() && parent.getTextContent() != null) {
            if (hasPropertyInElement(parent)) {
                replaceElementPropertyWithValue(parent);
            }
        }

        // Repeat for remaining children;
        for (Element child : XML.getChildren(parent)) {
            applyProperties(child);
        }
    }

    private void replaceAttributePropertyWithValue(Node a) {
        String propertyValue = a.getNodeValue();
        String replacedPropertyValue = replaceValue(propertyValue);
        a.setNodeValue(replacedPropertyValue);
    }

    private String replaceValue(String propertyValue) {
        // Use a list with keys sorted by length (longest key first)
        // Needed for replacing values where you have overlapping keys
        ArrayList<String> keys = new ArrayList<>(properties.keySet());
        Collections.sort(keys, Collections.reverseOrder(Comparator.comparing(String::length)));

        for (String key : keys) {
            String value = properties.get(key);
            // Try to find exact match first and since this is done with longest key
            // first, the else branch will only happen when there cannot be an exact
            // match, i.e. where you want to replace only parts of the attribute or node value
            if (propertyValue.equals("${" + key + "}")) {
                final String regex = "\\$\\{" + key + "\\}";
                return propertyValue.replaceAll(regex, value);
            } else if (propertyValue.contains(key)) {
                return propertyValue.replaceAll("\\$\\{" + key + "\\}", value);
            }
        }
        throw new IllegalArgumentException("Unable to find property replace in " + propertyValue);
    }

    private void replaceElementPropertyWithValue(Node a) {
        String propertyValue = a.getTextContent();
        String replacedPropertyValue = replaceValue(propertyValue);
        a.setTextContent(replacedPropertyValue);
    }

    private static boolean hasProperty(Node node) {
        return hasProperty(node.getNodeValue());
    }

    private static boolean hasPropertyInElement(Node node) {
        return hasProperty(node.getTextContent());
    }

    private static boolean hasProperty(String s) {
        return s.matches("^.*\\$\\{.+\\}.*$");
    }

    public LinkedHashMap<String, String> getProperties() {
        return properties;
    }
}


text:
import numpy as np
import os

#check that the right files are present
names = os.listdir('.')

if 'features.npy' in names:
    print "Not doing anything, features.npy already exists."
    quit(0)

chunk_names = [ 'features_A.npy',
                'features_B.npy',
                'features_C.npy',
                'features_D.npy',
                'features_E.npy' ]

for name in chunk_names:
    assert name in names

for name in chunk_names:
    if name.startswith('features') and name.endswith('.npy'):
        if name not in chunk_names:
            print "I'm not sure what to do with "+name
            print "The existence of this file makes me think extract_features.yaml has changed"
            print "I don't want to do something incorrect so I'm going to give up."
            quit(-1)

#Do the conversion
print 'loading '+chunk_names[0]
first_chunk = np.load(chunk_names[0])

final_shape = list(first_chunk.shape)

final_shape[0] = 50000

print 'making output'
X = np.zeros(final_shape,dtype='float32')

idx = first_chunk.shape[0]

X[0:idx,:] = first_chunk

for i in xrange(1, len(chunk_names)):

    arg = chunk_names[i]
    print 'loading '+arg

    chunk = np.load(arg)

    chunk_span = chunk.shape[0]

    X[idx:idx+chunk_span,...] = chunk

    idx += chunk_span

print "Saving features.npy..."
np.save('features.npy',X)

print "Deleting the chunks..."
for chunk_name in chunk_names:
    os.remove(chunk_name)


text:
package com.google.api.client.http;

import com.google.api.client.util.ArrayValueMap;
import com.google.api.client.util.Base64;
import com.google.api.client.util.ClassInfo;
import com.google.api.client.util.Data;
import com.google.api.client.util.FieldInfo;
import com.google.api.client.util.GenericData;
import com.google.api.client.util.Key;
import com.google.api.client.util.Preconditions;
import com.google.api.client.util.StringUtils;
import com.google.api.client.util.Throwables;
import com.google.api.client.util.Types;

import java.io.IOException;
import java.io.Writer;
import java.lang.reflect.Type;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.Collections;
import java.util.EnumSet;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.logging.Level;
import java.util.logging.Logger;

/**
 * Stores HTTP headers used in an HTTP request or response, as defined in Header Field Definitions.
 *
 *

 * {@code null} is not allowed as a name or value of a header. Names are case-insensitive.
 *

 *
 *

 * Implementation is not thread-safe.
 *

 *
 * @since 1.0
 * @author Yaniv Inbar
 */
public class HttpHeaders extends GenericData {

  public HttpHeaders() {
    super(EnumSet.of(Flags.IGNORE_CASE));
  }

  /** {@code "Accept"} header. */
  @Key("Accept")
  private List<String> accept;

  /** {@code "Accept-Encoding"} header. */
  @Key("Accept-Encoding")
  private List<String> acceptEncoding = new ArrayList<String>(Collections.singleton("gzip"));

  /** {@code "Authorization"} header. */
  @Key("Authorization")
  private List<String> authorization;

  /** {@code "Cache-Control"} header. */
  @Key("Cache-Control")
  private List<String> cacheControl;

  /** {@code "Content-Encoding"} header. */
  @Key("Content-Encoding")
  private List<String> contentEncoding;

  /** {@code "Content-Length"} header. */
  @Key("Content-Length")
  private List<Long> contentLength;

  /** {@code "Content-MD5"} header. */
  @Key("Content-MD5")
  private List<String> contentMD5;

  /** {@code "Content-Range"} header. */
  @Key("Content-Range")
  private List<String> contentRange;

  /** {@code "Content-Type"} header. */
  @Key("Content-Type")
  private List<String> contentType;

  /** {@code "Cookie"} header. */
  @Key("Cookie")
  private List<String> cookie;

  /** {@code "Date"} header. */
  @Key("Date")
  private List<String> date;

  /** {@code "ETag"} header. */
  @Key("ETag")
  private List<String> etag;

  /** {@code "Expires"} header. */
  @Key("Expires")
  private List<String> expires;

  /** {@code "If-Modified-Since"} header. */
  @Key("If-Modified-Since")
  private List<String> ifModifiedSince;

  /** {@code "If-Match"} header. */
  @Key("If-Match")
  private List<String> ifMatch;

  /** {@code "If-None-Match"} header. */
  @Key("If-None-Match")
  private List<String> ifNoneMatch;

  /** {@code "If-Unmodified-Since"} header. */
  @Key("If-Unmodified-Since")
  private List<String> ifUnmodifiedSince;

  /** {@code "If-Range"} header. */
  @Key("If-Range")
  private List<String> ifRange;

  /** {@code "Last-Modified"} header. */
  @Key("Last-Modified")
  private List<String> lastModified;

  /** {@code "Location"} header. */
  @Key("Location")
  private List<String> location;

  /** {@code "MIME-Version"} header. */
  @Key("MIME-Version")
  private List<String> mimeVersion;

  /** {@code "Range"} header. */
  @Key("Range")
  private List<String> range;

  /** {@code "Retry-After"} header. */
  @Key("Retry-After")
  private List<String> retryAfter;

  /** {@code "User-Agent"} header. */
  @Key("User-Agent")
  private List<String> userAgent;

  /** {@code "WWW-Authenticate"} header. */
  @Key("WWW-Authenticate")
  private List<String> authenticate;

  /** {@code "Age"} header. */
  @Key("Age")
  private List<Long> age;

  @Override
  public HttpHeaders clone() {
    return (HttpHeaders) super.clone();
  }

  @Override
  public HttpHeaders set(String fieldName, Object value) {
    return (HttpHeaders) super.set(fieldName, value);
  }

  /**
   * Returns the first {@code "Accept"} header or {@code null} for none.
   *
   * @since 1.5
   */
  public final String getAccept() {
    return getFirstHeaderValue(accept);
  }

  /**
   * Sets the {@code "Accept"} header or {@code null} for none.
   *
   *

   * Overriding is only supported for the purpose of calling the super implementation and changing
   * the return type, but nothing else.
   *

   *
   * @since 1.5
   */
  public HttpHeaders setAccept(String accept) {
    this.accept = getAsList(accept);
    return this;
  }

  /**
   * Returns the first {@code "Accept-Encoding"} header or {@code null} for none.
   *
   * @since 1.5
   */
  public final String getAcceptEncoding() {
    return getFirstHeaderValue(acceptEncoding);
  }

  /**
   * Sets the {@code "Accept-Encoding"} header or {@code null} for none.
   *
   *

   * By default, this is {@code "gzip"}.
   *

   *
   * @since 1.5
   */
  public HttpHeaders setAcceptEncoding(String acceptEncoding) {
    this.acceptEncoding = getAsList(acceptEncoding);
    return this;
  }

  /**
   * Returns the first {@code "Authorization"} header or {@code null} for none.
   *
   * @since 1.5
   */
  public final String getAuthorization() {
    return getFirstHeaderValue(authorization);
  }

  /**
   * Returns all {@code "Authorization"} headers or {@code null} for none.
   *
   * @since 1.13
   */
  public final List<String> getAuthorizationAsList() {
    return authorization;
  }

  /**
   * Sets the {@code "Authorization"} header or {@code null} for none.
   *
   *

   * Overriding is only supported for the purpose of calling the super implementation and changing
   * the return type, but nothing else.
   *

   *
   * @since 1.5
   */
  public HttpHeaders setAuthorization(String authorization) {
    return setAuthorization(getAsList(authorization));
  }

  /**
   * Sets the {@code "Authorization"} header or {@code null} for none.
   *
   *

   * Overriding is only supported for the purpose of calling the super implementation and changing
   * the return type, but nothing else.
   *

   *
   * @since 1.13
   */
  public HttpHeaders setAuthorization(List<String> authorization) {
    this.authorization = authorization;
    return this;
  }

  /**
   * Returns the first {@code "Cache-Control"} header or {@code null} for none.
   *
   * @since 1.5
   */
  public final String getCacheControl() {
    return getFirstHeaderValue(cacheControl);
  }

  /**
   * Sets the {@code "Cache-Control"} header or {@code null} for none.
   *
   *

   * Overriding is only supported for the purpose of calling the super implementation and changing
   * the return type, but nothing else.
   *

   *
   * @since 1.5
   */
  public HttpHeaders setCacheControl(String cacheControl) {
    this.cacheControl = getAsList(cacheControl);
    return this;
  }

  /**
   * Returns the first {@code "Content-Encoding"} header or {@code null} for none.
   *
   * @since 1.5
   */
  public final String getContentEncoding() {
    return getFirstHeaderValue(contentEncoding);
  }

  /**
   * Sets the {@code "Content-Encoding"} header or {@code null} for none.
   *
   *

   * Overriding is only supported for the purpose of calling the super implementation and changing
   * the return type, but nothing else.
   *

   *
   * @since 1.5
   */
  public HttpHeaders setContentEncoding(String contentEncoding) {
    this.contentEncoding = getAsList(contentEncoding);
    return this;
  }

  /**
   * Returns the first {@code "Content-Length"} header or {@code null} for none.
   *
   * @since 1.5
   */
  public final Long getContentLength() {
    return getFirstHeaderValue(contentLength);
  }

  /**
   * Sets the {@code "Content-Length"} header or {@code null} for none.
   *
   *

   * Overriding is only supported for the purpose of calling the super implementation and changing
   * the return type, but nothing else.
   *

   *
   * @since 1.5
   */
  public HttpHeaders setContentLength(Long contentLength) {
    this.contentLength = getAsList(contentLength);
    return this;
  }

  /**
   * Returns the first {@code "Content-MD5"} header or {@code null} for none.
   *
   * @since 1.5
   */
  public final String getContentMD5() {
    return getFirstHeaderValue(contentMD5);
  }

  /**
   * Sets the {@code "Content-MD5"} header or {@code null} for none.
   *
   *

   * Overriding is only supported for the purpose of calling the super implementation and changing
   * the return type, but nothing else.
   *

   *
   * @since 1.5
   */
  public HttpHeaders setContentMD5(String contentMD5) {
    this.contentMD5 = getAsList(contentMD5);
    return this;
  }

  /**
   * Returns the first {@code "Content-Range"} header or {@code null} for none.
   *
   * @since 1.5
   */
  public final String getContentRange() {
    return getFirstHeaderValue(contentRange);
  }

  /**
   * Sets the {@code "Content-Range"} header or {@code null} for none.
   *
   *

   * Overriding is only supported for the purpose of calling the super implementation and changing
   * the return type, but nothing else.
   *

   *
   * @since 1.5
   */
  public HttpHeaders setContentRange(String contentRange) {
    this.contentRange = getAsList(contentRange);
    return this;
  }

  /**
   * Returns the first {@code "Content-Type"} header or {@code null} for none.
   *
   * @since 1.5
   */
  public final String getContentType() {
    return getFirstHeaderValue(contentType);
  }

  /**
   * Sets the {@code "Content-Type"} header or {@code null} for none.
   *
   *

   * Overriding is only supported for the purpose of calling the super implementation and changing
   * the return type, but nothing else.
   *

   *
   * @since 1.5
   */
  public HttpHeaders setContentType(String contentType) {
    this.contentType = getAsList(contentType);
    return this;
  }

  /**
   * Returns the first {@code "Cookie"} header or {@code null} for none.
   *
   *

   * See Cookie Specification.
   *

   *
   * @since 1.6
   */
  public final String getCookie() {
    return getFirstHeaderValue(cookie);
  }

  /**
   * Sets the {@code "Cookie"} header or {@code null} for none.
   *
   *

   * Overriding is only supported for the purpose of calling the super implementation and changing
   * the return type, but nothing else.
   *

   *
   * @since 1.6
   */
  public HttpHeaders setCookie(String cookie) {
    this.cookie = getAsList(cookie);
    return this;
  }

  /**
   * Returns the first {@code "Date"} header or {@code null} for none.
   *
   * @since 1.5
   */
  public final String getDate() {
    return getFirstHeaderValue(date);
  }

  /**
   * Sets the {@code "Date"} header or {@code null} for none.
   *
   *

   * Overriding is only supported for the purpose of calling the super implementation and changing
   * the return type, but nothing else.
   *

   *
   * @since 1.5
   */
  public HttpHeaders setDate(String date) {
    this.date = getAsList(date);
    return this;
  }

  /**
   * Returns the first {@code "ETag"} header or {@code null} for none.
   *
   * @since 1.5
   */
  public final String getETag() {
    return getFirstHeaderValue(etag);
  }

  /**
   * Sets the {@code "ETag"} header or {@code null} for none.
   *
   *

   * Overriding is only supported for the purpose of calling the super implementation and changing
   * the return type, but nothing else.
   *

   *
   * @since 1.5
   */
  public HttpHeaders setETag(String etag) {
    this.etag = getAsList(etag);
    return this;
  }

  /**
   * Returns the first {@code "Expires"} header or {@code null} for none.
   *
   * @since 1.5
   */
  public final String getExpires() {
    return getFirstHeaderValue(expires);
  }

  /**
   * Sets the {@code "Expires"} header or {@code null} for none.
   *
   *

   * Overriding is only supported for the purpose of calling the super implementation and changing
   * the return type, but nothing else.
   *

   *
   * @since 1.5
   */
  public HttpHeaders setExpires(String expires) {
    this.expires = getAsList(expires);
    return this;
  }

  /**
   * Returns the first {@code "If-Modified-Since"} header or {@code null} for none.
   *
   * @since 1.5
   */
  public final String getIfModifiedSince() {
    return getFirstHeaderValue(ifModifiedSince);
  }

  /**
   * Sets the {@code "If-Modified-Since"} header or {@code null} for none.
   *
   *

   * Overriding is only supported for the purpose of calling the super implementation and changing
   * the return type, but nothing else.
   *

   *
   * @since 1.5
   */
  public HttpHeaders setIfModifiedSince(String ifModifiedSince) {
    this.ifModifiedSince = getAsList(ifModifiedSince);
    return this;
  }

  /**
   * Returns the first {@code "If-Match"} header or {@code null} for none.
   *
   * @since 1.5
   */
  public final String getIfMatch() {
    return getFirstHeaderValue(ifMatch);
  }

  /**
   * Sets the {@code "If-Match"} header or {@code null} for none.
   *
   *

   * Overriding is only supported for the purpose of calling the super implementation and changing
   * the return type, but nothing else.
   *

   *
   * @since 1.5
   */
  public HttpHeaders setIfMatch(String ifMatch) {
    this.ifMatch = getAsList(ifMatch);
    return this;
  }

  /**
   * Returns the first {@code "If-None-Match"} header or {@code null} for none.
   *
   * @since 1.5
   */
  public final String getIfNoneMatch() {
    return getFirstHeaderValue(ifNoneMatch);
  }

  /**
   * Sets the {@code "If-None-Match"} header or {@code null} for none.
   *
   *

   * Overriding is only supported for the purpose of calling the super implementation and changing
   * the return type, but nothing else.
   *

   *
   * @since 1.5
   */
  public HttpHeaders setIfNoneMatch(String ifNoneMatch) {
    this.ifNoneMatch = getAsList(ifNoneMatch);
    return this;
  }

  /**
   * Returns the first {@code "If-Unmodified-Since"} header or {@code null} for none.
   *
   * @since 1.5
   */
  public final String getIfUnmodifiedSince() {
    return getFirstHeaderValue(ifUnmodifiedSince);
  }

  /**
   * Sets the {@code "If-Unmodified-Since"} header or {@code null} for none.
   *
   *

   * Overriding is only supported for the purpose of calling the super implementation and changing
   * the return type, but nothing else.
   *

   *
   * @since 1.5
   */
  public HttpHeaders setIfUnmodifiedSince(String ifUnmodifiedSince) {
    this.ifUnmodifiedSince = getAsList(ifUnmodifiedSince);
    return this;
  }

  /**
   * Returns the first {@code "If-Range"} header or {@code null} for none.
   *
   * @since 1.14
   */
  public final String getIfRange() {
    return getFirstHeaderValue(ifRange);
  }

  /**
   * Sets the {@code "If-Range"} header or {@code null} for none.
   *
   *

   * Overriding is only supported for the purpose of calling the super implementation and changing
   * the return type, but nothing else.
   *

   *
   * @since 1.14
   */
  public HttpHeaders setIfRange(String ifRange) {
    this.ifRange = getAsList(ifRange);
    return this;
  }

  /**
   * Returns the first {@code "Last-Modified"} header or {@code null} for none.
   *
   * @since 1.5
   */
  public final String getLastModified() {
    return getFirstHeaderValue(lastModified);
  }

  /**
   * Sets the {@code "Last-Modified"} header or {@code null} for none.
   *
   *

   * Overriding is only supported for the purpose of calling the super implementation and changing
   * the return type, but nothing else.
   *

   *
   * @since 1.5
   */
  public HttpHeaders setLastModified(String lastModified) {
    this.lastModified = getAsList(lastModified);
    return this;
  }

  /**
   * Returns the first {@code "Location"} header or {@code null} for none.
   *
   * @since 1.5
   */
  public final String getLocation() {
    return getFirstHeaderValue(location);
  }

  /**
   * Sets the {@code "Location"} header or {@code null} for none.
   *
   *

   * Overriding is only supported for the purpose of calling the super implementation and changing
   * the return type, but nothing else.
   *

   *
   * @since 1.5
   */
  public HttpHeaders setLocation(String location) {
    this.location = getAsList(location);
    return this;
  }

  /**
   * Returns the first {@code "MIME-Version"} header or {@code null} for none.
   *
   * @since 1.5
   */
  public final String getMimeVersion() {
    return getFirstHeaderValue(mimeVersion);
  }

  /**
   * Sets the {@code "MIME-Version"} header or {@code null} for none.
   *
   *

   * Overriding is only supported for the purpose of calling the super implementation and changing
   * the return type, but nothing else.
   *

   *
   * @since 1.5
   */
  public HttpHeaders setMimeVersion(String mimeVersion) {
    this.mimeVersion = getAsList(mimeVersion);
    return this;
  }

  /**
   * Returns the first {@code "Range"} header or {@code null} for none.
   *
   * @since 1.5
   */
  public final String getRange() {
    return getFirstHeaderValue(range);
  }

  /**
   * Sets the {@code "Range"} header or {@code null} for none.
   *
   *

   * Overriding is only supported for the purpose of calling the super implementation and changing
   * the return type, but nothing else.
   *

   *
   * @since 1.5
   */
  public HttpHeaders setRange(String range) {
    this.range = getAsList(range);
    return this;
  }

  /**
   * Returns the first {@code "Retry-After"} header or {@code null} for none.
   *
   * @since 1.5
   */
  public final String getRetryAfter() {
    return getFirstHeaderValue(retryAfter);
  }

  /**
   * Sets the {@code "Retry-After"} header or {@code null} for none.
   *
   *

   * Overriding is only supported for the purpose of calling the super implementation and changing
   * the return type, but nothing else.
   *

   *
   * @since 1.5
   */
  public HttpHeaders setRetryAfter(String retryAfter) {
    this.retryAfter = getAsList(retryAfter);
    return this;
  }

  /**
   * Returns the first {@code "User-Agent"} header or {@code null} for none.
   *
   * @since 1.5
   */
  public final String getUserAgent() {
    return getFirstHeaderValue(userAgent);
  }

  /**
   * Sets the {@code "User-Agent"} header or {@code null} for none.
   *
   *

   * Overriding is only supported for the purpose of calling the super implementation and changing
   * the return type, but nothing else.
   *

   *
   * @since 1.5
   */
  public HttpHeaders setUserAgent(String userAgent) {
    this.userAgent = getAsList(userAgent);
    return this;
  }

  /**
   * Returns the first {@code "WWW-Authenticate"} header or {@code null} for none.
   *
   * @since 1.5
   */
  public final String getAuthenticate() {
    return getFirstHeaderValue(authenticate);
  }

  /**
   * Returns all {@code "WWW-Authenticate"} headers or {@code null} for none.
   *
   * @since 1.16
   */
  public final List<String> getAuthenticateAsList() {
    return authenticate;
  }

  /**
   * Sets the {@code "WWW-Authenticate"} header or {@code null} for none.
   *
   *

   * Overriding is only supported for the purpose of calling the super implementation and changing
   * the return type, but nothing else.
   *

   *
   * @since 1.5
   */
  public HttpHeaders setAuthenticate(String authenticate) {
    this.authenticate = getAsList(authenticate);
    return this;
  }

  /**
   * Returns the first {@code "Age"} header or {@code null} for none.
   *
   * @since 1.14
   */
  public final Long getAge() {
    return getFirstHeaderValue(age);
  }

  /**
   * Sets the {@code "Age"} header or {@code null} for none.
   *
   *

   * Overriding is only supported for the purpose of calling the super implementation and changing
   * the return type, but nothing else.
   *

   *
   * @since 1.14
   */
  public HttpHeaders setAge(Long age) {
    this.age = getAsList(age);
    return this;
  }

  /**
   * Sets the {@link #authorization} header as specified in Basic Authentication Scheme.
   *
   *

   * Overriding is only supported for the purpose of calling the super implementation and changing
   * the return type, but nothing else.
   *

   *
   * @since 1.2
   */
  public HttpHeaders setBasicAuthentication(String username, String password) {
    String userPass =
        Preconditions.checkNotNull(username) + ":" + Preconditions.checkNotNull(password);
    String encoded = Base64.encodeBase64String(StringUtils.getBytesUtf8(userPass));
    return setAuthorization("Basic " + encoded);
  }

  private static void addHeader(Logger logger,
      StringBuilder logbuf,
      StringBuilder curlbuf,
      LowLevelHttpRequest lowLevelHttpRequest,
      String name,
      Object value,
      Writer writer) throws IOException {
    // ignore nulls
    if (value == null || Data.isNull(value)) {
      return;
    }
    // compute value
    String stringValue = toStringValue(value);
    // log header
    String loggedStringValue = stringValue;
    if (("Authorization".equalsIgnoreCase(name) || "Cookie".equalsIgnoreCase(name))
        && (logger == null || !logger.isLoggable(Level.ALL))) {
      loggedStringValue = "<Not Logged>";
    }
    if (logbuf != null) {
      logbuf.append(name).append(": ");
      logbuf.append(loggedStringValue);
      logbuf.append(StringUtils.LINE_SEPARATOR);
    }
    if (curlbuf != null) {
      curlbuf.append(" -H '").append(name).append(": ").append(loggedStringValue).append("'");
    }
    // add header to lowLevelHttpRequest
    if (lowLevelHttpRequest != null) {
      lowLevelHttpRequest.addHeader(name, stringValue);
    }
    // add header to the writer
    if (writer != null) {
      writer.write(name);
      writer.write(": ");
      writer.write(stringValue);
      writer.write("\r\n");
    }
  }

  /**
   * Returns the string header value for the given header value as an object.
   */
  private static String toStringValue(Object headerValue) {
    return headerValue instanceof Enum<?>
        ? FieldInfo.of((Enum<?>) headerValue).getName() : headerValue.toString();
  }

  /**
   * Serializes headers to an {@link LowLevelHttpRequest}.
   *
   * @param headers HTTP headers
   * @param logbuf log buffer or {@code null} for none
   * @param curlbuf log buffer for logging curl requests or {@code null} for none
   * @param logger logger or {@code null} for none. Logger must be specified if log buffer is
   *        specified
   * @param lowLevelHttpRequest low level HTTP request where HTTP headers will be serialized to or
   *        {@code null} for none
   */
  static void serializeHeaders(HttpHeaders headers, StringBuilder logbuf, StringBuilder curlbuf,
      Logger logger, LowLevelHttpRequest lowLevelHttpRequest) throws IOException {
    serializeHeaders(headers, logbuf, curlbuf, logger, lowLevelHttpRequest, null);
  }

  /**
   * Serializes headers to an {@link Writer} for Multi-part requests.
   *
   * @param headers HTTP headers
   * @param logbuf log buffer or {@code null} for none
   * @param logger logger or {@code null} for none. Logger must be specified if log buffer is
   *        specified
   * @param writer Writer where HTTP headers will be serialized to or {@code null} for none
   *
   * @since 1.9
   */
  public static void serializeHeadersForMultipartRequests(
      HttpHeaders headers, StringBuilder logbuf, Logger logger, Writer writer) throws IOException {
    serializeHeaders(headers, logbuf, null, logger, null, writer);
  }

  static void serializeHeaders(HttpHeaders headers,
      StringBuilder logbuf,
      StringBuilder curlbuf,
      Logger logger,
      LowLevelHttpRequest lowLevelHttpRequest,
      Writer writer) throws IOException {
    HashSet<String> headerNames = new HashSet<String>();
    for (Map.Entry<String, Object> headerEntry : headers.entrySet()) {
      String name = headerEntry.getKey();
      Preconditions.checkArgument(headerNames.add(name),
          "multiple headers of the same name (headers are case insensitive): %s", name);
      Object value = headerEntry.getValue();
      if (value != null) {
        // compute the display name from the declared field name to fix capitalization
        String displayName = name;
        FieldInfo fieldInfo = headers.getClassInfo().getFieldInfo(name);
        if (fieldInfo != null) {
          displayName = fieldInfo.getName();
        }
        Class<? extends Object> valueClass = value.getClass();
        if (value instanceof Iterable<?> || valueClass.isArray()) {
          for (Object repeatedValue : Types.iterableOf(value)) {
            addHeader(logger,
                logbuf,
                curlbuf,
                lowLevelHttpRequest,
                displayName,
                repeatedValue,
                writer);
          }
        } else {
          addHeader(logger, logbuf, curlbuf, lowLevelHttpRequest, displayName, value, writer);
        }
      }
    }
    if (writer != null) {
      writer.flush();
    }
  }

  /**
   * Puts all headers of the {@link LowLevelHttpResponse} into this {@link HttpHeaders} object.
   *
   * @param response Response from which the headers are copied
   * @param logger {@link StringBuilder} to which logging output is added or {@code null} to disable
   *        logging
   * @since 1.10
   */
  public final void fromHttpResponse(LowLevelHttpResponse response, StringBuilder logger)
      throws IOException {
    clear();
    ParseHeaderState state = new ParseHeaderState(this, logger);
    int headerCount = response.getHeaderCount();
    for (int i = 0; i < headerCount; i++) {
      parseHeader(response.getHeaderName(i), response.getHeaderValue(i), state);
    }
    state.finish();
  }

  /** LowLevelHttpRequest which will call the .parseHeader() method for every header added. */
  private static class HeaderParsingFakeLevelHttpRequest extends LowLevelHttpRequest {
    private final HttpHeaders target;
    private final ParseHeaderState state;

    HeaderParsingFakeLevelHttpRequest(HttpHeaders target, ParseHeaderState state) {
      this.target = target;
      this.state = state;
    }

    @Override
    public void addHeader(String name, String value) {
      target.parseHeader(name, value, state);
    }

    @Override
    public LowLevelHttpResponse execute() throws IOException {
      throw new UnsupportedOperationException();
    }
  }

  /** Returns the first header value based on the given internal list value. */
  private <T> T getFirstHeaderValue(List<T> internalValue) {
    return internalValue == null ? null : internalValue.get(0);
  }

  /** Returns the list value to use for the given parameter passed to the setter method. */
  private <T> List<T> getAsList(T passedValue) {
    if (passedValue == null) {
      return null;
    }
    List<T> result = new ArrayList<T>();
    result.add(passedValue);
    return result;
  }

  /**
   * Returns the first header string value for the given header name.
   *
   * @param name header name (may be any case)
   * @return first header string value or {@code null} if not found
   * @since 1.13
   */
  public String getFirstHeaderStringValue(String name) {
    Object value = get(name.toLowerCase());
    if (value == null) {
      return null;
    }
    Class<? extends Object> valueClass = value.getClass();
    if (value instanceof Iterable<?> || valueClass.isArray()) {
      for (Object repeatedValue : Types.iterableOf(value)) {
        return toStringValue(repeatedValue);
      }
    }
    return toStringValue(value);
  }

  /**
   * Returns an unmodifiable list of the header string values for the given header name.
   *
   * @param name header name (may be any case)
   * @return header string values or empty if not found
   * @since 1.13
   */
  public List<String> getHeaderStringValues(String name) {
    Object value = get(name.toLowerCase());
    if (value == null) {
      return Collections.emptyList();
    }
    Class<? extends Object> valueClass = value.getClass();
    if (value instanceof Iterable<?> || valueClass.isArray()) {
      List<String> values = new ArrayList<String>();
      for (Object repeatedValue : Types.iterableOf(value)) {
        values.add(toStringValue(repeatedValue));
      }
      return Collections.unmodifiableList(values);
    }
    return Collections.singletonList(toStringValue(value));
  }

  /**
   * Puts all headers of the {@link HttpHeaders} object into this {@link HttpHeaders} object.
   *
   * @param headers {@link HttpHeaders} from where the headers are taken
   * @since 1.10
   */
  public final void fromHttpHeaders(HttpHeaders headers) {
    try {
      ParseHeaderState state = new ParseHeaderState(this, null);
      serializeHeaders(
          headers, null, null, null, new HeaderParsingFakeLevelHttpRequest(this, state));
      state.finish();
    } catch (IOException ex) {
      // Should never occur as we are dealing with a FakeLowLevelHttpRequest
      throw Throwables.propagate(ex);
    }
  }

  /** State container for {@link #parseHeader(String, String, ParseHeaderState)}. */
  private static final class ParseHeaderState {
    /** Target map where parsed values are stored. */
    final ArrayValueMap arrayValueMap;

    /** Logger if logging is enabled or {@code null} otherwise. */
    final StringBuilder logger;

    /** ClassInfo of the HttpHeaders. */
    final ClassInfo classInfo;

    /** List of types in the header context. */
    final List<Type> context;

    /**
     * Initializes a new ParseHeaderState.
     *
     * @param headers HttpHeaders object for which the headers are being parsed
     * @param logger Logger if logging is enabled or {@code null}
     */
    public ParseHeaderState(HttpHeaders headers, StringBuilder logger) {
      Class<? extends HttpHeaders> clazz = headers.getClass();
      this.context = Arrays.<Type>asList(clazz);
      this.classInfo = ClassInfo.of(clazz, true);
      this.logger = logger;
      this.arrayValueMap = new ArrayValueMap(headers);
    }

    /**
     * Finishes the parsing-process by setting all array-values.
     */
    void finish() {
      arrayValueMap.setValues();
    }
  }

  /** Parses the specified case-insensitive header pair into this HttpHeaders instance. */
  void parseHeader(String headerName, String headerValue, ParseHeaderState state) {
    List<Type> context = state.context;
    ClassInfo classInfo = state.classInfo;
    ArrayValueMap arrayValueMap = state.arrayValueMap;
    StringBuilder logger = state.logger;

    if (logger != null) {
      logger.append(headerName + ": " + headerValue).append(StringUtils.LINE_SEPARATOR);
    }
    // use field information if available
    FieldInfo fieldInfo = classInfo.getFieldInfo(headerName);
    if (fieldInfo != null) {
      Type type = Data.resolveWildcardTypeOrTypeVariable(context, fieldInfo.getGenericType());
      // type is now class, parameterized type, or generic array type
      if (Types.isArray(type)) {
        // array that can handle repeating values
        Class<?> rawArrayComponentType =
            Types.getRawArrayComponentType(context, Types.getArrayComponentType(type));
        arrayValueMap.put(fieldInfo.getField(), rawArrayComponentType,
            parseValue(rawArrayComponentType, context, headerValue));
      } else if (Types.isAssignableToOrFrom(
          Types.getRawArrayComponentType(context, type), Iterable.class)) {
        // iterable that can handle repeating values
        @SuppressWarnings("unchecked")
        Collection<Object> collection = (Collection<Object>) fieldInfo.getValue(this);
        if (collection == null) {
          collection = Data.newCollectionInstance(type);
          fieldInfo.setValue(this, collection);
        }
        Type subFieldType = type == Object.class ? null : Types.getIterableParameter(type);
        collection.add(parseValue(subFieldType, context, headerValue));
      } else {
        // parse value based on field type
        fieldInfo.setValue(this, parseValue(type, context, headerValue));
      }
    } else {
      // store header values in an array list
      @SuppressWarnings("unchecked")
      ArrayList<String> listValue = (ArrayList<String>) this.get(headerName);
      if (listValue == null) {
        listValue = new ArrayList<String>();
        this.set(headerName, listValue);
      }
      listValue.add(headerValue);
    }
  }

  private static Object parseValue(Type valueType, List<Type> context, String value) {
    Type resolved = Data.resolveWildcardTypeOrTypeVariable(context, valueType);
    return Data.parsePrimitiveValue(resolved, value);
  }

  // TODO(yanivi): override equals and hashCode
}


text:
/*****************/
/* Global Styles */
/*****************/
*
{
    margin: 0;
    padding: 0;
}
html{
    height:100%;
    overflow:hidden;
}
body {
    height:100%;
    font-family: Open Sans;
    font-size: 16px;
}

h1, h2, h3, h4, h5, h6, h7, p, label {
    font-weight: 400;
}

.button {
    line-height: 100%;
    cursor: pointer;
    background-color: #3FABC6;
    color: white;
    font-family: Oswald;
    text-overflow: ellipsis;
    text-transform: uppercase;
    padding: 0.5rem;
    border-radius: 0px;
    -webkit-border-radius: 0px;
    -o-border-radius: 0px;
    box-shadow: 0.25rem 0.25rem 0.5rem rgba(21,21,153,0.6);
}
.button:hover {
    background-color: #3C948B;
}

.translucent {
    background: rgba(255,255,255,0.8);
    filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#CCFFFFFF,endColorstr=#CCFFFFFF);
    -ms-filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#CCFFFFFF,endColorstr=#CCFFFFFF);
}

/**********/
/* Navbar */
/**********/

nav {
    display: block;
    position: relative;
    height: 2.5rem;
    width: 100%;
    color: #eee;
    background-color: #3a3a3a;
}

nav img#ceo-site-logo {
    position: relative;
    top: 0px;
    left: 10px;
    height: 2rem;
    padding:0.25rem;
}

nav ul {
    position: absolute;
    top: 0px;
    left: 10px;
    padding: 0.5rem;
}

nav ul li {
    display: inline;
    list-style-type: none;
    padding-left: 0.5rem;
    padding-right: 0.5rem;
}

nav #login-info {
    position: absolute;
    top: 0px;
    right: 40px;
    padding: 0.7rem;
    font-size: 0.8rem;
}

nav a {
    color: #FFCF06!important;
}

nav #login-info a {
    margin-left: 0.2rem;
    padding: 0.3rem;
    border: 1px solid #FFCF06;
    background-color: #e8f5f9;
    color: #3c948b!important;
}

nav a:link, nav a:visited, nav a:active {
    text-decoration: none;
}

nav a:hover, nav a.active-link {
    text-shadow: 0px 0px 4px #fff;
}
.topnav {
  overflow: hidden;
  padding:0px;
  line-height: 14px;
  position:relative;
  display: inline-block;
}
.mobileLogin{
  display:none!important;
  }
.topnav li {
  float: left;
  display: block;
  color: #f2f2f2;
  text-align: center;
  padding: 14px 16px;
  text-decoration: none;
  font-size: 17px;
}

.topnav a:hover {

  color: black;
}

.topnav .icon {
  display: none;
}

/**********************/
/* Logo Banner */
/**********************/

#logo-banner {
    position: relative;
    height: 55px;
    width: 100%;
    background-color: #fff;
}

#logo-banner img#fao {
    position: absolute;
    top: 5px;
    left: 20px;
    width: 150px;
    padding-right:5px;
}

#logo-banner img#usaid {
    position: absolute;
    top: 5px;
    left: 180px;
    width: 150px;
}

#logo-banner img#nasa {
    position: absolute;
    top: 0px;
    left: 360px;
    width: 60px;
}

#logo-banner img#adpc {
    position: absolute;
    top: 9px;
    left: 450px;
    width: 80px;
}

#logo-banner img#sig {
    position: absolute;
    top: 0px;
    left: 560px;
    width: 230px;
}

#logo-banner img#google {
    position: absolute;
    top: 5px;
    left: 800px;
    width: 150px;
}

#logo-banner img#servir {
    position: absolute;
    top: 12px;
    right: 30px;
    width: 250px;
}

/*******************/
/* Content Section */
/*******************/

section#content {
    display: block;
    position: relative;
    width: calc(100% - 2px);
    color: #222;
    /*border: 1px solid darkgray;*/
}

section#content a {
    color: #666;
}

section#content a:link, section#content a:visited, section#content a:active {
    text-decoration: none;
}

section#content a:hover, section#content a.active-link {
    text-shadow: 0px 0px 4px #333;
}

/******************/
/* Flash Messages */
/******************/

.alert {
    position: absolute;
    top: 1rem;
    left: 1rem;
    width: 35rem;
    border: 1px solid #009;
    padding: 1rem;
    z-index: 1000;
    font-size: 1rem;
    font-style: italic;
    background: white;
    opacity: 0;
    animation: fade-out 5s;
    -webkit-animation: fade-out 5s;
    -moz-animation: fade-out 5s;
    -o-animation: fade-out 5s;
}

@-webkit-keyframes fade-out {
    0%   { opacity: 0; }
    50%  { opacity: 1; }
    100% { opacity: 0; }
}

@-moz-keyframes fade-out {
    0%   { opacity: 0; }
    50%  { opacity: 1; }
    100% { opacity: 0; }
}

@-o-keyframes fade-out {
    0%   { opacity: 0; }
    50%  { opacity: 1; }
    100% { opacity: 0; }
}

@keyframes fade-out {
    0%   { opacity: 0; }
    50%  { opacity: 1; }
    100% { opacity: 0; }
}

/*************************************************/
/* Institution, Project, User, and Imagery Lists */
/*************************************************/

#institution-list,
#project-list,
#user-list,
#imagery-list {
   /*  position: relative;
   top: calc(142px + 1rem);
    height: calc(100% - 142px - 3rem);
    width: calc(33vw - 2rem - 2px);*/
   /* padding: 1rem;*/

}

#institution .Column{
    float: left;
    width: 33%;
    height: 100%;
}

#institution-list ul, #project-list ul, #user-list ul, #imagery-list ul{
    padding: 20px;
}

#institution-list,
#imagery-list {
    /*left: 0vw;*/
    border-right: 2px solid darkgray;
}

#project-list {
    /*left: 33vw;*/
    border-right: 2px solid darkgray;
}

#user-list {
    /*left: 66vw;*/
    width: calc(33vw - 4rem);
}

#institution-list h1,
#project-list h1,
#user-list h1,
#imagery-list h1 {
    font-size: 1.5rem;
    font-weight: 100;
    padding: 0.5rem;
    color: gray;
    text-align: center;
}

#institution-list ul,
#project-list ul,
#user-list ul {
    list-style-type: none;
    padding: 0.5rem;
    height: calc(100% - 4.5rem);
    overflow: auto;
}

#imagery-list ul {
    list-style-type: none;
    padding: 0.5rem;
    height: calc(100% - 4.5rem - 3rem);
    overflow: auto;
}

#imagery-list #add-imagery {
    margin: 0.5rem;
    height: calc(100% - 4.5rem - 3rem);
    overflow: auto;
}

#imagery-list #add-imagery td {
    padding:0.5rem;
    text-align: right;
}

#imagery-list #add-imagery-button {
    display: block;
    margin-left: auto;
    margin-right: auto;
    margin-top: 10px;
}

#institution-list ul li,
#project-list ul li,
#user-list ul li,
#imagery-list ul li {
    margin-bottom: 0.5rem;
}

#institution-list ul li a,
#project-list ul li a,
#user-list ul li a,
#imagery-list ul li a {
    display: inline-block;
    width: calc(97% - 0.5rem - 2px);
    padding: 0.25rem;
    text-align: center;
    color: #3C948B;
    font-size: 1rem;
    text-decoration: none;
    text-overflow: ellipsis;
    border: 1px solid blue;
}

#institution-list ul li a.create-institution {
    font-weight: 700;
}

#imagery-list ul li input#delete-imagery,
#project-list ul li input#create-project {
    display: inline-block;
    cursor: pointer;
    background: rgba(255, 255, 255, 0.0);
    padding: 0.25rem;
    color: #3C948B;
    font-size: 1rem;
    font-weight: 700;
    text-overflow: ellipsis;
    border: 1px solid blue;
}

#project-list ul li input#create-project {
    width: calc(99.5% - 0.5rem - 2px);
}

#imagery-list ul li input#delete-imagery {
    width: calc(25% - 0.5rem - 2px);
}

#project-list ul li a.view-project {
    width: calc(76% - 0.5rem - 2px);
}

#project-list ul li a.edit-project {
    width: calc(20% - 0.5rem - 2px);
}

#imagery-list ul li a.wide-entry,
#user-list ul li a.wide-entry {
    width: calc(97% - 0.5rem - 2px);
}

#imagery-list ul li a.narrow-entry,
#user-list ul li a.narrow-entry {
    width: calc(70% - 0.5rem - 2px);
}

#user-list ul li select {
    display: inline-block;
    width: calc(25% - 0.5rem - 2px);
    text-align: center;
    color: #3C948B;
    font-size: 1rem;
    text-decoration: none;
    text-overflow: ellipsis;
    border: 1px solid blue;
}

#user-list ul li #request-membership-button {
    display: block;
    margin-left: auto;
    margin-right: auto;
}

#user-list #user-map {
    height: calc(100% - 5.5rem);
    padding: 0.5rem;
}

/*************/
/* Home Page */
/*************/

#home {
    position: relative;
    height: 100%;
    width: 100%;
}

div#home:before {
    content: '';
    height: 100%;
    float: left;
}

#content.home {
    height: calc(100vh - 2px) !important;
}
#home #mobilespan{
    position:absolute;
    top:-1;
    left:-200;
    height:00px;
    width:0px;
    display:none;
}
#home div#bcontainer {
    position: relative;
    z-index: 1;
}

#home div#bcontainer:after {
    content: '';
    clear: both;
    display: block;
}

#home .Table {
    display: block;
    height: 100%;
    width: 100%;
}

#home .Column {
    display: block;
    vertical-align: top;
}

#home .Wrapper {
    position: absolute;
    width: 100%;
    height: 100%;
    overflow: auto;
}

#home #home-map-pane {
    height: 100%;
    width: 100%;
    display: block;
    background-color: #041a24;
}

#home #home-map-pane .ol-viewport {
    position: relative;
    overflow: hidden;
    width: 100%;
    height: 100%;
    touch-action: none;
}

#home #mapPanel {
    /* Firefox */
    width: 75%;
    float: right;
    height: 100%;
    position:relative;
}

#home #lPanel {
    float: left;
    height: 100%;
    width: 100%;
    background-color: #fff;
    position:relative;
}

#home h1#panelTitle {
    background-color: #3C948B;
    /*height: 112px;*/
    color: #fff;
    font-size: 1.25rem;
    text-align: center;
    line-height: 3.0em;
    font-weight: 500;
}
#home .institution_info{
    float:right;
}
#home .institution_info img{
    width:16px;
    height:16px;
}
#home #lPanel ul li a:visited {
    color: #3C948B;
}

#home #lPanel ul li a:link {
    color: #3C948B;
}

#home #togglePanel-button {
    z-index: 100;
    position: absolute;
}

#home div#btnHolder {
    height: 100%;
    width: 25%;
    overflow: auto;
    float: left;
    background-color: white;
}

#home #home-quit-button {
    position: absolute;
    right: 6px;
    z-index: 100;
}
#home #action-button {
    line-height: 100%;
    cursor: pointer;
    background-color: #3C948B;
    color: white;
    font-family: Oswald;
    text-overflow: ellipsis;
    text-transform: uppercase;
    padding: 0.5rem;
    border-radius: 0px;
    -webkit-border-radius: 0px;
    -o-border-radius: 0px;
    position: absolute;
    z-index: 100;
    left: 50%;
    margin-left: -108px;
    cursor: initial;
}

#home .ol-viewport .ol-zoom.ol-unselectable {
    right: 5px;
    left: auto;
    border-top: darkgray solid 2px;
    border-left: darkgray solid 2px;
    padding: 0px;
    box-shadow:0.25rem 0.25rem 0.5rem rgba(21,21,153,0.6);
}
.ol-control {
    background-color: darkgray;
}
.ol-control button{
    background-color: rgb(63, 171, 198);
}
.ol-control button:focus, .ol-control button:hover{
    background-color: #3C948B;
}

#home #ceo-description {
    position: relative;
    top: 0;
    left: 0;
    width: 100%;
    padding: 0.5rem 0rem;
    border-bottom: 2px solid darkgray;
    overflow: auto;
    display: none;
}

#home #ceo-description img#ceo-logo {
    display: block;
    margin: auto;
    max-width: 100%;
    max-height: 94px;
}

#home #ceo-description h1 {
    margin-bottom: 0.5rem;
    font-size: 1.25rem;
    font-weight: 600;
    color: gray;
    text-align: center;
}

#home #ceo-description h2 {
    font-family: Open Sans;
    font-style: normal;
    font-size: 1.0rem;
    font-weight: 400;
    color: #3C948B;
    text-align: center;
}

#home #ceo-description p {
    padding: 0.5rem;
    text-align: center;
    color: #8B8B8B;
}

#home .edit-project {
    border: 1px solid #FFCF06;
    float: right;
    padding: 0px 10px;
}
/* ————————————————————–
  Tree core styles
*/
#home .tree {
    margin: 1em;
}

#home .tree input {
    position: absolute;
    clip: rect(0, 0, 0, 0);
}

#home .tree input ~ ul {
    display: none;
}

#home .tree input:checked ~ ul {
    display: block;
}

/* ————————————————————–
Tree rows
*/
#home .tree li {
    line-height: 1.2;
    position: relative;
    padding: 0 0 1em 1em;
}

#home .tree ul li {
    padding: 1em 0 0 1em;
}

#home .tree > li:last-child {
    padding-bottom: 0;
}

/* ————————————————————–
  Tree labels
*/
#home .tree_label {
    position: relative;
    display: inline-block;
    background: #fff;
    width: 100%;
}

#home label.tree_label {
    cursor: pointer;
    color: #3C948B;
    font-weight: 600;
}

#home label.tree_label:hover {
    color: #666;
}

/* ————————————————————–
Tree expanded icon
*/
#home label.tree_label:before {
    width: 17px;
    height: 19px;
    color: #fff;
    position: relative;
    z-index: 1;
    float: left;
    margin: 0 1em 0 -2em;
    content: " ";
    text-align: center;
    line-height: .9em;
}

#home :checked ~ label.tree_label:before {
    width: 19px;
    height: 17px;
    content: ' ';
}

/* ————————————————————–
  Tree branches
*/
#home .tree li:before {
    position: absolute;
    top: 0;
    bottom: 0;
    left: -.5em;
    display: block;
    width: 0;
    content: "";
}

#home .tree_label:after {
    position: absolute;
    top: 0;
    left: -1.5em;
    display: block;
    height: 0.5em;
    width: 1em;
    content: '';
}

#home label.tree_label:after {
    border-bottom: 0;
}

#home :checked ~ label.tree_label:after {
    bottom: 0;
    top: 0.5em;
    height: auto;
}

#home .tree li:last-child:before {
    height: 1em;
    bottom: auto;
}

#home .tree > li:last-child:before {
    display: none;
}

#collection .ol-dragbox {
    background-color: rgba(255,255,255,0.4);
    border-color: rgba(100,150,0,1);
}

#collection .ol-rotate {
    top: 4rem;
}
#collection .fullmap{
    width:100%;
}
#collection .sidemap{
    width:70%;
}
#collection #action-button {
    line-height: 100%;
    cursor: pointer;
    background-color: #3C948B;
    color: white;
    font-family: Oswald;
    text-overflow: ellipsis;
    text-transform: uppercase;
    padding: 0.5rem;
    border-radius: 0px;
    -webkit-border-radius: 0px;
    -o-border-radius: 0px;
    position: absolute;
    z-index: 100;
    left: 50%;
    margin-left: -108px;
    cursor: initial;
    right: 50%;
    white-space: nowrap;
    width: fit-content;
    text-align: center;
}

/**************/
/* About Page */
/**************/

#about {
    position: absolute;
    top: 0;
    left: 0;
    height: calc(100% - 4rem);
    width: calc(100% - 4rem);
    padding: 2rem;
    overflow: auto;
}

#about h1 {
    font-size: 1.5rem;
    font-weight: 100;
    padding: 0.5rem;
    color: gray;
}

#about p {
    padding: 0.5rem;
}

/****************/
/* Support Page */
/****************/

#support {
    position: absolute;
    top: 0;
    left: 0;
    height: calc(100% - 4rem);
    width: calc(100% - 4rem);
    padding: 2rem;
    overflow: auto;
}

#support h1 {
    font-size: 1.5rem;
    font-weight: 100;
    padding: 0.5rem;
    color: gray;
}

#support p {
    padding: 0.5rem;
}

#support ul {
    margin-left: 0.5rem;
}

#support ul li {
    padding: 0.5rem;
}

/*****************************************************/
/* Login / Register / Password Reset / Account Pages */
/*****************************************************/

#login-form, #register-form, #password-form, #account-form {
    position: absolute;
    top: 50%;
    left: 50%;
    transform: translate(-50%, -50%);
    height: calc(80% - 4rem);
    width: 25vw;
    padding: 2rem;
    overflow: auto;
    border: 1px solid darkgray;
}

#login-form h1, #register-form h1, #password-form h1, #account-form h1 {
    font-size: 1.7rem;
    font-weight: 100;
    padding: 0 0.5rem 0.5rem 0.5rem;
    color: gray;
}

#login-form h2, #register-form h2, #password-form h2, #account-form h2 {
    font-size: 1rem;
    font-weight: 400;
    padding: 0.1rem;
    color: darkgray;
}

#login-form input#email, #login-form input#password, #login-form input#password-confirmation, #login-form input#password-reset-key, #login-form input#current-password, #register-form input#email, #register-form input#password, #register-form input#password-confirmation, #register-form input#password-reset-key, #register-form input#current-password, #password-form input#email, #password-form input#password, #password-form input#password-confirmation, #password-form input#password-reset-key, #password-form input#current-password, #account-form input#email, #account-form input#password, #account-form input#password-confirmation, #account-form input#password-reset-key, #account-form input#current-password {
    height: 2rem;
    width: 20rem;
    border: 1px solid #ececec;
    margin: 0.3rem;
    padding: 0px 5px;
}

#login-form input#email:focus, #login-form input#password:focus, #login-form input#password-confirmation:focus, #login-form input#password-reset-key:focus, #login-form input#current-password:focus, #register-form input#email:focus, #register-form input#password:focus, #register-form input#password-confirmation:focus, #register-form input#password-reset-key:focus, #register-form input#current-password:focus, #password-form input#email:focus, #password-form input#password:focus, #password-form input#password-confirmation:focus, #password-form input#password-reset-key:focus, #password-form input#current-password:focus, #account-form input#email:focus, #account-form input#password:focus, #account-form input#password-confirmation:focus, #account-form input#password-reset-key:focus, #account-form input#current-password:focus {
    border: 1px solid darkgray;
    cursor: grab;
}

#login-form input#email:hover, #login-form input#password:hover, #login-form input#password-confirmation:hover, #login-form input#password-reset-key:hover, #login-form input#current-password:hover, #register-form input#email:hover, #register-form input#password:hover, #register-form input#password-confirmation:hover, #register-form input#password-reset-key:hover, #register-form input#current-password:hover, #password-form input#email:hover, #password-form input#password:hover, #password-form input#password-confirmation:hover, #password-form input#password-reset-key:hover, #password-form input#current-password:hover, #account-form input#email:hover, #account-form input#password:hover, #account-form input#password-confirmation:hover, #account-form input#password-reset-key:hover, #account-form input#current-password:hover {
    border: 1px solid gray;
    cursor: pointer;
}

#login-form p#forgot-password a, #register-form p#forgot-password a, #password-form p#forgot-password a, #account-form p#forgot-password a {
    display: block;
    font-size: 0.9rem;
    font-weight: 700;
    margin: 0.5rem 0.5rem 0rem 1rem;
}

#login-form input.button, #register-form input.button, #password-form input.button, #account-form input.button {
    height: 2rem;
    width: 21rem;
    margin: 0.6rem 0.3rem;
    padding: 0.5rem;
    border: 1px solid #ececec;
}

#login-form input.button:focus, #register-form input.button:focus, #password-form input.button:focus, #account-form input.button:focus {
    border: 1px solid #999;
}

#login-form hr, #register-form hr, #password-form hr, #account-form hr {
    height: 12px;
    border: 0;
    box-shadow: inset 0 12px 12px -12px rgba(0, 0, 0, 0.5);
}

/***********************/
/* Page Not Found Page */
/***********************/

#access-denied, #page-not-found, #error-page {
    position: absolute;
    top: 50%;
    left: 50%;
    transform: translate(-50%, -50%);
    height: calc(80% - 4rem);
    width: 25vw;
    padding: 2rem;
    border: 1px solid darkgray;
}

#access-denied h3, #page-not-found h3, #error-page h3 {
    font-size: 1.5rem;
    font-weight: 100;
    color: #f57900;
}

p.error-message {
    margin-top: 1rem;
    font-size: 1rem;
    font-style: normal;
    color: #555;
}

/********************/
/* Institution Page */
/********************/
div#institution:before {
    content: '';
    height: 100%;
    float: left;
}
#institution {
    position: relative;
    height: 100%;
    width: 100%;
}

#institution div#bcontainer {
    position: relative;
    z-index: 1;
}

#institution div#bcontainer:after {
    content: '';
    clear: both;
    display: block;
}

#institution .Table {
    display: block;
    height: 100%;
    width: 100%;
}

#institution .Column {
    display: block;
    vertical-align: top;
}

#institution .Wrapper {
    position: absolute;
    width: 100%;
    height: 100%;
    overflow: auto;
}

#institution #institution-details {
   /* position: absolute;*/
    top: 0;
    left: 0;
    height: 140px;
    width: 100%;
    padding: 0.5rem 0rem;
    border-bottom: 2px solid darkgray;
}

#institution #institution-details #institution-view {
    position: relative;
    height: 100%;
    width: 100%;
}

#institution #institution-details #institution-view #institution-logo-container {
    position: absolute;
    top: 0px;
    left: 0px;
    height: 140px;
    width: 280px;
}

#institution #institution-details #institution-view #institution-logo-container img {
    position: absolute;
    top: 50%;
    left: 50%;
    transform: translate(-50%, -50%);
    max-height: 140px;
    max-width: 280px;
}

#institution #institution-details #institution-view h1 {
    position: absolute;
    top: 0px;
    left: 280px;
    height: 2.5rem;
    width: calc(100% - 280px);
    font-size: 1.5rem;
    font-weight: 100;
    color: gray;
    text-align: center;
}

#institution #institution-details #institution-view p {
    position: absolute;
    top: 2.5rem;
    left: 280px;
    height: calc(140px - 2.5rem - 1rem);
    width: calc(100% - 280px - 1rem);
    padding: 0.5rem;
    overflow: auto;
}

#institution #institution-details #institution-edit {
    position: relative;
    height: 100%;
    width: 100%;
    overflow: auto;
}

#institution #institution-details #institution-edit label#institution-name {
    position: absolute;
    top: calc(25% - 1rem);
    left: 0px;
    height: 2rem;
    width: 24rem;
}

#institution #institution-details #institution-edit label#institution-url {
    position: absolute;
    top: calc(50% - 1rem);
    left: 0px;
    height: 2rem;
    width: 24rem;
}

#institution #institution-details #institution-edit label#institution-logo-selector {
    position: absolute;
    top: calc(75% - 1rem);
    left: 0px;
    height: 2rem;
    width: 24rem;
}

#institution #institution-details #institution-edit label#institution-description {
    position: absolute;
    top: calc(25% - 1rem);
    left: 26rem;
    text-align: left;
}

#institution #institution-details #institution-edit label {
    display: block;
    padding: 0.25rem;
    font-size: 1rem;
    font-weight: 100;
    color: gray;
    text-align: right;
}

#institution #institution-details #institution-edit input[type=text] {
    height: 1rem;
    width: calc(20rem - 0.5rem - 2px);
    padding: 0.25rem;
    color: darkgray;
    border: 1px solid darkgray;
}

#institution #institution-details #institution-edit textarea {
    height: 4.5rem;
    width: calc(40rem - 0.5rem - 2px);
    padding: 0.25rem;
    color: darkgray;
    border: 1px solid darkgray;
}

#institution #institution-details #institution-controls {
    position: absolute;
    top: 0px;
    right: 0px;
    z-index: 1000;
}

#institution #institution-details #institution-controls input[type=button] {
    display: inline-block;
    width: calc(6rem - 0.5rem - 2px);
    cursor: pointer;
    background: rgba(255, 255, 255, 0.0);
    padding: 0.25rem;
    color: #3C948B;
    font-size: 1rem;
    font-weight: 700;
    text-overflow: ellipsis;
    border: 1px solid blue;
}

#institution #institution-details #institution-controls input#create-institution {
    display: block;
    width: calc(12rem - 0.5rem - 2px);
}

/*******************/
/* Collection Page */
/*******************/

#collection {
    height: 100%;
    padding: 0rem;
    background: rgba(255,255,255,0.8);
}
#collection #hamburger{
    float:right;
    cursor:pointer;
}
#collection #spacer{
    content: ' ';
      display: block;
      height: 20px;
}
#collection #hamburger div{
   /* width: 35px;
    height: 5px;
    background-color: #3fabc6;
    margin: 6px 0;
    */
}
#collection .projNoStats{
    display:none;
}
#collection .projStats{
    display:block;
}
#collection .arrow-down {
  width: 0;
  height: 0;
  border-left: 10px solid transparent;
  border-right: 10px solid transparent;
  border-top: 10px solid #3FABC6;
}

#collection .arrow-up {
  width: 0;
  height: 0;
  border-left: 10px solid transparent;
  border-right: 10px solid transparent;
  border-bottom: 10px solid #3FABC6;
}
#collection #quit-button {
    position: absolute;
    /*right: 30%;*/
    height: 40px;
    width: 5rem;
    text-align: center;
    background-color: #3FABC6;
    z-index: 500;
    box-shadow: none;
    border: none;
}
#collection .quit-side{
     right:30%;
}
#collection .quit-full{
    right:0%;
}
#collection #image-analysis-pane {
    float: left;
    height: 100%;
    /*width: 70%;*/
    background-color: darkgray;
}

#collection .ol-dragbox {
    background-color: rgba(255,255,255,0.4);
    border-color: rgba(100,150,0,1);
}

#collection .ol-rotate {
    top: 4rem;
}

#collection #sidebar {
    float: right;
    height: 100%;
    width: 30%;
    padding: 0rem;
    overflow: auto;
}

#collection #sidebar fieldset {
    margin-bottom: 10px;
}

#collection #sidebar fieldset legend {
    color: #3FABC6;
    font-size: 1.2rem;
    font-family: Oswald;
    text-transform: uppercase;
    text-indent: 10px;
}

#collection #sidebar fieldset table {
    margin-left: auto;
    margin-right: auto;
}

#collection #sidebar fieldset table td {
    font-size: 0.9rem;
    padding: 0rem 0.5rem;
    border: 2px solid darkgray;
}

#collection #sidebar fieldset table td:first-child {
    font-weight: bold;
    color: #3FABC6;
}

#collection #sidebar fieldset input#new-plot-button,
#collection #sidebar fieldset input#save-values-button,
#collection #sidebar fieldset input#flag-plot-button {
    margin-left: 10px;
}

#collection #sidebar fieldset select#base-map-source {
    height: 1.8rem;
    width: calc(90% - 10px);
    font-size: 0.9rem;
    margin-left: 10px;
    border: 1px solid darkgray;
}

#collection #sidebar fieldset ul li {
    float: left;
    width: 50%;
}

#collection #sidebar fieldset ul li input {
    height: 40px;
    width: 100%;
    font-family: Verdana,Geneva,sans-serif;
    font-size: 0.8rem;
    text-transform: uppercase;
    text-align: left;
    text-indent: 10px;
    cursor: pointer;
}

#collection #imagery-info {
    position: absolute;
    bottom: 0;
    left: 18%;
    width: 40%;
    line-height: 1rem;
    padding: 0.25rem;
    text-align: center;
    font-size: 0.8rem;
    color: white;
    background-color: rgba(75,75,150,0.6);
}

/***************************/
/* Project Management Page */
/***************************/

#project {
    height: 100%;
    width: 100%;
}

#project fieldset {
    margin-bottom: 10px;
}

#project h1 {
    font-size: 1.25rem;
    font-weight: bold;
    text-transform: uppercase;
    margin-bottom: 10px;
    text-align: center;
}

#project h2 {
    font-size: 1.2rem;
    font-weight: bold;
    margin-bottom: 5px;
    text-align: center;
}

#project legend {
    font-size: 1rem;
    font-family: Oswald;
    font-weight: 400;
    color: #3fabc6;
    text-transform: uppercase;
}

#project label {
    display: block;
    font-size: 0.8rem;
    padding: 0.25rem 0rem;
}

#project input[type=text],
#project input[type=number] {
    height: 0.8rem;
    font-size: 0.8rem;
    padding: 0.1rem;
    margin-bottom: 5px;
}

#project input[type=radio] {
    vertical-align: middle;
}

#project table {
    background-color: white;
    border: 1px solid #aaa;
}

#project table td {
    padding: 0px 5px;
}

#project #project-dashboard {
    position: absolute;
    top: 10px;
    left: 10px;
    height: calc(100% - 10px);
    width: calc(55% - 20px);
    overflow: auto;
}

#project #project-dashboard #project-map {
    height: 65%;
    width: calc(100% - 12px);
    margin-bottom: 10px;
    border: 1px solid black;
}

#project #project-dashboard #project-stats {
    float: left;
    width: calc(45% - 5px);
}

#project #project-dashboard #project-stats table {
    margin-left: auto;
    margin-right: auto;
}

#project #project-dashboard #project-stats table td {
    font-size: 0.8rem;
}

#project #project-dashboard #project-management{
    float: right;
    margin-right: 10px;
    width: calc(55% - 5px);
}

#project #project-dashboard #project-management #change-availability,
#project #project-dashboard #project-management #configure-geo-dash,
#project #project-dashboard #project-management #download-plot-data,
#project #project-dashboard #project-management #download-sample-data {
    display: block;
    width: 11rem;
    font-size: 1rem;
    float:left;
    margin-left: 5px;
}

#project #project-design {
    position: absolute;
    top: 10px;
    right: 10px;
    height: calc(100% - 10px);
    width: calc(45% - 10px);
    overflow: auto;
}

#project #project-design #project-info {
    float: left;
    width: 60%;
    margin-right: 10px;
}

#project #project-design #project-info #project-name {
    width: 90%;
}

#project #project-design #project-info #project-description {
    height: 2rem;
    width: 90%;
    padding: 0.2rem 0.5rem;
    font-size: 0.8rem;
    border-radius: 0.25rem;
    border: 1px solid darkgray;
}

#project #project-design #project-visibility {
    float: left;
    width: 35%;
}

#project #project-design #project-aoi {
    float: left;
    width: 40%;
    margin-right: 25px;
}

#project #project-design #project-aoi label {
    text-align: center;
    margin-bottom: 5px;
}

#project #project-design #project-aoi input[type=number] {
    display: block;
    width: 5rem;
}

#project #project-design #project-aoi #lat-max {
    margin: 0rem auto 0.25rem auto;
}

#project #project-design #project-aoi #lon-min {
    margin: 0.25rem 0rem;
    float: left;
}

#project #project-design #project-aoi #lon-max {
    margin: 0.25rem 0rem;
    float: right;
}

#project #project-design #project-aoi #lat-min {
    clear: both;
    margin: 0.25rem auto;
}

#project #project-design #project-imagery {
    float: left;
    width: 50%;
}

#project #project-design #project-imagery select {
    height: 1.6rem;
    width: 90%;
    font-size: 0.8rem;
    margin-bottom: 5px;
    border: 1px solid darkgray;
}

#project #project-design #plot-design {
    float: left;
    width: 45%;
    margin-right: 20px;
}

#project #project-design #plot-design #plot-design-col1,
#project #project-design #plot-design #plot-design-col2 {
    float: left;
    width: 50%;
}

#project #project-design #plot-design #custom-csv-upload {
    display: inline-block;
    margin-left: -4px;
    padding: 4px;
    cursor: pointer;
    border: 1px solid darkgray;
}

#project #project-design #plot-design #custom-csv-upload input[type=file] {
    display: none;
}

#project #project-design #sample-design {
    float: left;
    width: 45%;
}

#project #project-design #plot-design input[type=number],
#project #project-design #sample-design input[type=number] {
    width: 80%;
}

#project hr {
    float: left;
    width: 95%;
    height: 4px;
    border: 0;
    margin-top: 10px;
    margin-bottom: 20px;
    box-shadow: inset 0 4px 4px -4px rgba(0, 0, 0, 0.5);
}

#project #project-design #add-sample-value-group {
    float: left;
    width: 70%;
    margin-left: 15%;
}

#project #project-design #add-sample-value-group input[type=button] {
    width: 45%;
    font-size: 1rem;
}

#project #project-design #add-sample-value-group input[type=text] {
    width: 45%;
}

#project #project-design .sample-value-info {
    float: left;
    margin-bottom: 20px;
}

#project #project-design .sample-value-info th,
#project #project-design .sample-value-info td {
    text-align: center;
    font-size: 0.8rem;
    padding: 0.25rem;
}

#project #project-design .sample-value-info .button {
    min-width: 1.5rem;
    min-height: 1.5rem;
    padding: 0.25rem;
    margin-bottom: 0.5rem;
    font-size: 1.2rem;
}

#project #project-design .sample-value-info .circle {
    width: 1rem;
    height: 1rem;
    border-radius: 0.5rem;
    margin: 0rem auto;
}

#project #project-design .sample-value-info .value-name,
#project #project-design .sample-value-info .value-color,
#project #project-design .sample-value-info .value-image {
    height: 2rem;
    font-size: 0.8rem;
    padding: 0.1rem;
    margin-bottom: 5px;
}

#project #spinner {
    position: absolute;
    top: calc(1.3rem + 21px + 12.5%);
    left: calc(11px + 24%);
    width: 4rem;
    height: 4rem;
    border-radius: 2rem;
    border-bottom: 0.5rem solid #3fabc6;
    visibility: hidden;
    animation: sweep 1s infinite linear;
    -webkit-animation: sweep 1s infinite linear;
    -moz-animation: sweep 1s infinite linear;
    -o-animation: sweep 1s infinite linear;
}
#geodash .mapRange {
  -webkit-appearance: none; /* Hides the slider so that custom slider can be made */
  width: 100%; /* Specific width is required for Firefox. */
  background: transparent; /* Otherwise white in Chrome */
  padding:20px 10px;
}

#geodash .mapRange::-webkit-slider-thumb {
  -webkit-appearance: none;
}

#geodash .mapRange:focus {
  outline: none; /* Removes the blue border. You should probably do some kind of focus styling for accessibility reasons though. */
}

#geodash .mapRange::-ms-track {
  width: 100%;
  cursor: pointer;

  /* Hides the slider so custom styles can be added */
  background: transparent;
  border-color: transparent;
  color: transparent;
}
    /* Special styling for WebKit/Blink */
#geodash .mapRange::-webkit-slider-thumb {
  -webkit-appearance: none;
  border: 1px solid #000000;
  height: 36px;
  width: 16px;
  border-radius: 3px;
  background: #ffffff;
  cursor: pointer;
  margin-top: -14px; /* You need to specify a margin in Chrome, but in Firefox and IE it is automatic */
  box-shadow: 1px 1px 1px #000000, 0px 0px 1px #0d0d0d; /* Add cool effects to your sliders! */
}

/* All the same stuff for Firefox */
#geodash .mapRange::-moz-range-thumb {
  box-shadow: 1px 1px 1px #000000, 0px 0px 1px #0d0d0d;
  border: 1px solid #000000;
  height: 36px;
  width: 16px;
  border-radius: 3px;
  background: #ffffff;
  cursor: pointer;
}

/* All the same stuff for IE */
#geodash .mapRange::-ms-thumb {
  box-shadow: 1px 1px 1px #000000, 0px 0px 1px #0d0d0d;
  border: 1px solid #000000;
  height: 36px;
  width: 16px;
  border-radius: 3px;
  background: #ffffff;
  cursor: pointer;
}
    #geodash .mapRange::-webkit-slider-runnable-track {
  width: 100%;
  height: 8.4px;
  cursor: pointer;
  box-shadow: 1px 1px 1px #000000, 0px 0px 1px #0d0d0d;
  background: #3071a9;
  border-radius: 1.3px;
  border: 0.2px solid #010101;
}

#geodash .mapRange:focus::-webkit-slider-runnable-track {
  background: #367ebd;
}

#geodash .mapRange::-moz-range-track {
  width: 100%;
  height: 8.4px;
  cursor: pointer;
  box-shadow: 1px 1px 1px #000000, 0px 0px 1px #0d0d0d;
  background: #3071a9;
  border-radius: 1.3px;
  border: 0.2px solid #010101;
}

#geodash .mapRange::-ms-track {
  width: 100%;
  height: 8.4px;
  cursor: pointer;
  background: transparent;
  border-color: transparent;
  border-width: 16px 0;
  color: transparent;
}
#geodash .mapRange::-ms-fill-lower {
  background: #2a6495;
  border: 0.2px solid #010101;
  border-radius: 2.6px;
  box-shadow: 1px 1px 1px #000000, 0px 0px 1px #0d0d0d;
}
#geodash .mapRange:focus::-ms-fill-lower {
  background: #3071a9;
}
#geodash .mapRange::-ms-fill-upper {
  background: #3071a9;
  border: 0.2px solid #010101;
  border-radius: 2.6px;
  box-shadow: 1px 1px 1px #000000, 0px 0px 1px #0d0d0d;
}
#geodash .mapRange:focus::-ms-fill-upper {
  background: #367ebd;
}

@-webkit-keyframes sweep { to { -webkit-transform:rotate(360deg); } }

@-moz-keyframes    sweep { to { -moz-transform:rotate(360deg); } }

@-o-keyframes      sweep { to { -o-transform:rotate(360deg); } }

@keyframes         sweep { to { transform:rotate(360deg); } }

@media screen and (max-width: 600px) {
    .topnav li:not(:first-child) {display: none;}
    .topnav .icon {
    float: right;
    display: block!important;
    }
    .topnav.responsive {
    position: relative;
      z-index: 200;
      background-color: #3a3a3a;
          left: 0px;

    }
    .topnav.responsive .icon {
    position: absolute;
    right: 0;
    top: 0;
    }
    .topnav.responsive li {
    float: none;
    display: block;
    text-align: left;
    }
    .mobileLogin{
    display:block;
    }
    .mobileLogin.responsive{
    display:block!important;
    }
    #login-info{
    display:none;
    }
    #action-button{
        display:none;
    }
    #mobilespan{
        display:block;
    }
    nav img#ceo-site-logo{
        left: auto;
        right: 10px;
        float: right;
    }
    #login-form, #register-form, #password-form, #account-form{
        width: 100%;
        text-align: center;
    }
    #home #ceo-description p{
        display:none;
    }
    #home #ceo-description h1{
        display:none;
    }
}