Professional Documents
Culture Documents
Documentation
Documentation
1
INTRODUCTION
2
WEATHER FORECASTING WEBSITE
1. INTRODUCTION
Weather impacts nearly every aspect of our lives, from planning outdoor activities to making
crucial decisions in industries such as agriculture, transportation, and construction. In today's
fast-paced world, having access to accurate and timely weather forecasts is more important than
ever. The Weather Forecasting Website Project seeks to address this need by developing a user-
friendly and reliable platform for accessing weather information.
In this digital age, the internet has become the primary source for obtaining weather forecasts.
However, many existing weather forecasting websites often suffer from issues such as outdated
information, complex user interfaces, and limited functionalities. Recognizing these challenges,
our project aims to create a solution that overcomes these shortcomings and provides users with
an enhanced weather forecasting experience.
The primary objective of the Weather Forecasting Website Project is to develop a dynamic and
interactive website that delivers precise and up-to-date weather predictions to users. Leveraging
the power of JavaScript, we aim to create a platform that not only presents weather data in a
clear and understandable manner but also offers interactive features for a more engaging user
experience.
Through this project, we aspire to revolutionize the way users access weather forecasts, offering
a seamless and informative experience for individuals, businesses, and organizations alike. By
providing users with accurate forecasts, real-time updates, and intuitive features, our website
aims to empower users to make informed decisions based on weather conditions.
In the following sections, we will delve into the existing challenges in weather forecasting,
analyze current solutions in the market, outline the proposed enhancements for our website,
detail the software requirements, describe the various modules of the project, discuss our testing
procedures, evaluate the results, and conclude with recommendations for future enhancements.
Through this comprehensive approach, we aim to develop a weather forecasting website that
3
meets the needs and expectations of our users while also paving the way for future advancements
in the field of weather forecasting.
Furthermore, VS Code's integrated Git support simplifies version control workflows, enabling
developers to manage their code repositories directly within the editor. Its intuitive user interface,
coupled with keyboard shortcuts and command palette functionality, promotes efficiency and
productivity in coding tasks.
Overall, Visual Studio Code is a versatile and feature-rich code editor that caters to the diverse
needs of developers, whether they are working on web development, mobile apps, cloud
applications, or other software projects. Its flexibility, extensibility, and user-friendly interface
make it a preferred choice for developers worldwide.
4
1.2 ARCHITECTURE OVERVIEW
The architecture of the Weather Forecasting Website involves a client-server model.
The client-side consists of HTML, CSS, and JavaScript, rendering the user interface and
handling user interactions. JavaScript is used for dynamic content and interactive features.
On the server-side, a backend framework like Node.js retrieves weather data from external
APIs and processes it. The data is then sent to the client-side for presentation. This
architecture allows for a responsive and interactive user experience while ensuring timely
and accurate weather information retrieval and delivery.
5
CHAPTER 2
6
SYSTEM ANALYSIS
7
2.1 SYSTEM REQUIREMENTS
o Functional Requirements: These define the essential actions the website must
perform to fulfill its purpose.
Core Functionalities:
Location Search: Users can search for weather information by entering a city
name, zip code, or other location identifiers.
Current Weather Display: Present real-time weather data for the searched
location, including:
Temperature (in Celsius or Fahrenheit)
Feels Like temperature
Humidity percentage
Wind speed and direction
Weather description (e.g., sunny, cloudy, rainy)
Optionally: Cloud cover percentage, visibility
Weather Forecast: Provide weather predictions for upcoming days or hours.
This could include:
Daily forecasts with high and low temperatures, weather conditions, and
chance of precipitation (rain/snow).
Hourly forecasts for detailed information within a specific day.
Optional Functionalities: Consider including additional features based on your
target audience:
UV index for sun protection awareness.
Chance of precipitation with specific amounts (e.g., rain chance with
millimeters expected).
Sunrise and sunset times.
o Non-Functional Requirements: These define the website's overall
characteristics beyond core functionalities.
Performance:
Website Loading Speed: Specify an acceptable loading time for pages to
ensure a smooth user experience (e.g., pages load within 3 seconds).
8
Data Retrieval Speed:** Define the desired speed for fetching weather data
from APIs or local storage.
Usability:
Intuitive Interface: The website should be easy to navigate with clear labels
and well-organized information.
Responsive Design: The website should adapt seamlessly to different screen
sizes (desktop, mobile, tablets) for optimal viewing across devices.
Accessibility: Consider accessibility features for users with disabilities (e.g.,
screen reader compatibility, color contrast).
Security:
If the website collects user data (e.g., location history for personalized
forecasts), outline measures to protect user privacy and data security.
following are the problems associated with the previous project which led to the creation of
the proposed project:-
The feasibility system for the Weather Forecasting Website assesses technical, economic,
and operational viability. It examines factors such as data availability, reliability of
forecasting algorithms, scalability of the infrastructure, and integration with external
APIs. Economic feasibility evaluates the cost of development, maintenance, and potential
revenue streams. Operational feasibility considers user adoption, usability, and support
requirements. The feasibility system ensures that the weather forecasting website is
technically sound, economically viable, and operationally feasible, laying the foundation
9
for its successful development, deployment, and long-term sustainability in providing
valuable weather information to users
Technical Feasibility:
Evaluate if the website can be built using the chosen technologies
(programming languages, frameworks) and available development skills.
Consider any technical challenges that might need to be addressed (e.g.,
integrating with complex APIs, data processing requirements).
Economic Feasibility:
Estimate the development and maintenance costs of the website. This
includes:
Cost of development tools and software licenses.
Server costs (if applicable).
Ongoing maintenance and updates.
Analyze if the expected benefits (e.g., increased user traffic, potential
advertising revenue) justify the investment.
Operational Feasibility:
Assess if the website can be integrated with existing infrastructure and
resources. This includes:
Availability of necessary hardware and software resources.
Ability to manage the website within the organization's existing workflows
10
4. Improved User Experience: Enhancing the user interface design for better usability,
accessibility, and interactivity, resulting in a more intuitive and engaging experience for
users interacting with the website.
11
CHATPER 3
12
SYSTEM CONFIGURATION
13
SYSTEM CONFIGURATION
The system configuration for the Weather Forecasting Website comprises an operating system,
web server (like Apache or Nginx), programming languages (HTML, CSS, and JavaScript), and
weather APIs (such as OpenWeatherMap). This setup facilitates the website's operation across
platforms, efficient serving of web pages, client-side interactivity, and fetching of weather data
for accurate forecasts without the need for a database.
Server:
o Define the minimum server requirements : Processor: Intel core i3 or above for a
stable experience and fast retrieval of data.
o Hard Disk: 4GB and above
o RAM: 256 MB or more to handle website traffic and data processing.
o Consider scalability if you anticipate future growth in user base or data volume.
This section lists the essential software tools needed for development and website operation:
Web Server Software: Specify the web server software required to host the website
(e.g., Apache, Nginx).
Operating System: Windows 7, 8, 9, 10
Development Tools: List the development tools your team will use to build the website:
o Integrated Development Environment (IDE): A code editor with features like
syntax highlighting, debugging tools, and project management - (Visual Studio
Code).
14
o Version Control System (VCS): A system for tracking code changes and
collaboration - ( Git ).
3. Development Tools
This section delves deeper into the specific programming languages, frameworks, and libraries
used to build the website:
Front-End Development:
o HTML: The core markup language for structuring website content.
o CSS: Defines the website's visual style (layout, colors, fonts).
o JavaScript: Adds interactivity to the website (e.g., handling user input, updating
UI elements).
o JavaScript Frameworks (Optional): Consider using frameworks like React,
Angular, or Vue.js to streamline development and enhance user interface features.
4. Third-Party Libraries :
If your website utilizes external libraries or APIs (Application Programming Interfaces), list
them here with a brief description of their purpose:
Weather Data API: Most weather forecasting websites rely on APIs from weather data
providers like OpenWeatherMap , These APIs provide access to real-time and historical
weather data.
5. API Integration :
Obtaining API Keys: Weather data providers typically require API keys for access.
Explain how to acquire an API key from the chosen service.
API Calls: Describe how the website code will interact with the API to fetch weather
data.
o Specify the API endpoints used to retrieve specific weather information (e.g.,
current weather for a location, forecast data for a period).
o Handling API responses on a website involves:
15
Sending HTTP requests to API endpoints.
Receiving asynchronous responses containing JSON data.
Parsing JSON data using built-in methods like `response.json()`.
Checking HTTP status codes to determine success or failure.
Handling errors with appropriate error messages or fallback behavior.
Updating the website's UI dynamically based on the parsed data.
Visual Studio Code (VS Code) stands as a highly versatile source code editor developed by
Microsoft, prized for its lightweight yet potent platform serving writing, debugging, and
management of code across diverse programming languages and platforms. Its appeal lies in its
cross-platform compatibility, seamlessly adapting to Windows, macOS, and Linux operating
systems, ensuring a consistent development experience across environments. VS Code's hallmark
features include an intuitive user interface that can be easily customized with themes, layouts,
and extensions from a vast ecosystem. With built-in language support, developers benefit from
syntax highlighting, code completion, and IntelliSense features, enhancing code-writing
efficiency. The editor's integrated terminal empowers seamless command-line interaction, while
its robust Git integration simplifies version control. Moreover, its debugging capabilities, task
automation, and extensive library of extensions contribute to its status as a preferred choice
among developers for efficient and productive coding endeavors.
16
CHAPTER 4
17
SYSTEM DESIGN
18
SYSTEM DESIGN
Front-End (User Interface): This is the part users interact with directly. It includes
elements like:
o Search bar for location input.
o Weather display area showcasing current conditions and forecasts.
Back-End (Server-Side): This handles tasks behind the scenes:
o Processes user requests (e.g., location search).
o Interacts with the weather data API to fetch information.
o Prepares and formats data for display on the front-end.
API Integration : The website interacts with an external weather data API to retrieve
real-time and forecast information.
2. User Interface (UI) Design
Here, you'll detail the design of the user interface, focusing on usability and aesthetics.
19
3. Database Design (if applicable)
If your website stores user data or historical weather data, explain the database structure:
Create a flowchart to illustrate the overall flow of the system. This visualizes the steps involved
when users interact with the website:
20
CHAPTER 5
21
SYSTEM DESCRIPTION
22
5.1 SYSTEM DESCRIPTION :
The system description provides an overview of the weather forecasting website , detailing its
key features, functionalities, and interactions between various components.
This section focuses on how users interact with the website visually and functionally.
23
Feels Like temperature: Explain how "Feels Like" temperature is
displayed and its significance.
Weather Conditions: Describe how the current weather conditions are
displayed (e.g., sunny, cloudy, rainy, etc.) with corresponding weather
icons (optional).
Optional: Humidity percentage, wind speed and direction.
o Weather Forecast: Describe how the website presents the weather forecast for
upcoming days or hours. This could include:
Daily Forecasts: Explain how daily high and low temperatures, weather
conditions, and chance of precipitation are displayed for the next few days
(e.g., 3-day forecast).
Hourly Forecasts (Optional): If the website offers hourly forecasts,
explain how users access them and how the information is presented (e.g.,
hourly breakdown of temperature, chance of rain, etc.).
o Additional Information Display (Optional): Describe any additional weather
information displayed on the page, such as: * Sunrise and sunset times. * UV
index information.
5.1.2 SYSTEM FUNCTIONALITY DESCRIPTION
This section delves into the inner workings of the website, explaining how it processes data to
deliver information to users:
Error Handling: Explain how the website handles potential errors, such as:
24
o User entering an invalid location.
o Issues with fetching data from the weather API.
o Describe how error messages are displayed to users, ensuring clarity and
guidance.
25
CHAPTER 6
26
TESTING
27
TESTING
A comprehensive test plan serves as a roadmap for conducting various types of testing. It defines
the scope of testing, objectives, resources, and schedule.
28
6.1.2 TESTING TYPES :
This section describes the different types of testing you will perform:
Unit Testing: This focuses on testing individual units of code (functions, modules) to
ensure they work as expected in isolation.
Integration Testing: This verifies that different components of the website (front-end,
back-end, API integration) work together seamlessly and exchange data correctly.
Functional Testing: This tests the website's core functionalities to ensure they work as
specified in the requirements. You'll test functionalities like search, weather data display,
and different features (if applicable).
Non-Functional Testing: This evaluates other important aspects beyond core
functionalities:
o Performance Testing: Measures website loading speed and ensures
responsiveness under different user loads.
o Usability Testing: Involves real users interacting with the website to identify any
usability issues and ensure the interface is intuitive and user-friendly.
o Security Testing: Evaluates the website's security measures to protect user data
and prevent unauthorized access.
29
CHAPTER 7
30
SOURCE CODE
31
CODE :
<!DOCTYPE html>
<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.0,maximum-scale=1">
<title>Weather Forecasting</title>
<script>
var now = new Date();
</script>
<!--[if lt IE 9]>
<script src="js/ie-support/html5.js"></script>
32
<script src="js/ie-support/respond.js"></script>
<![endif]-->
</head>
<body onload="DefaultScreen()">
<div class="site-content">
<div class="site-header">
<div class="container">
<a href="index.html" class="branding">
<img src="images/logo.png" alt="" class="logo">
<div class="logo-type">
<h1 class="site-title">Weather Forecasting</h1>
<class="site-description">Weather Updates
</div>
</a>
33
</div> <!-- .main-navigation -->
<div class="mobile-navigation"></div>
</div>
</div> <!-- .site-header -->
<div class="container">
<form action="#" class="find-location">
<input type="text" placeholder="Find your location..." id="searchBar">
<input type="submit" value="Find" id="searchBtn" onclick="GetInfo()">
</form>
</div>
<div class="forecast-table">
<div class="container">
<div class="forecast-container">
<div class="today forecast">
<div class="forecast-header">
<div class="day" id="day1">Monday</div>
<div class="date" id = "date1"></div>
</div> <!-- .forecast-header -->
<div class="forecast-content">
34
<div class="location" id="city">Weather in Chennai</div>
<div class="degree">
<div class="num" id="temperature1">23<sup>o</sup>C</div>
<div class="forecast-icon">
<img src="https://openweathermap.org/img/wn/04n.png" id="icon1" alt="" width=90>
</div>
</div>
<div class="minValues" id="day1Min">Loading...</div>
<div class="maxValues" id="day1Max">Loading...</div>
<div class="wind" id="windSpeed1">Loading</div>
</div>
</div>
<div class="forecast">
<div class="forecast-header">
<div class="day" id="day2"> Tuesday</div>
</div> <!-- .forecast-header -->
<div class="forecast-content">
<div class="forecast-icon">
<img src="https://openweathermap.org/img/wn/04n.png" alt="" width=48 id="icon2">
</div>
<div class="num" id="temperature2">23<sup>o</sup>C</div>
<div class="minValues" id="day2Min">Loading...</div>
<div class="maxValues" id="day2Max">Loading...</div>
<div class="wind" id="windSpeed2">Loading</div>
</div>
35
</div>
<div class="forecast">
<div class="forecast-header">
<div class="day" id="day3">Wednesday</div>
</div> <!-- .forecast-header -->
<div class="forecast-content">
<div class="forecast-icon">
<img src="https://openweathermap.org/img/wn/04n.png" alt="" width=48 id="icon3">
</div>
<div class="num" id="temperature3">23<sup>o</sup>C</div>
<div class="minValues" id="day3Min">Loading...</div>
<div class="maxValues" id="day3Max">Loading...</div>
<div class="wind" id="windSpeed3">Loading</div>
</div>
</div>
<div class="forecast">
<div class="forecast-header">
<div class="day" id="day4">Thursday</div>
</div> <!-- .forecast-header -->
<div class="forecast-content">
<div class="forecast-icon">
<img src="https://openweathermap.org/img/wn/04n.png" alt="" width=48 id="icon4">
</div>
<div class="num" id="temperature4">23<sup>o</sup>C</div>
<div class="minValues" id="day4Min">Loading...</div>
<div class="maxValues" id="day4Max">Loading...</div>
36
<div class="wind" id="windSpeed4">Loading</div>
</div>
</div>
<div class="forecast">
<div class="forecast-header">
<div class="day" id="day5">Friday</div>
</div> <!-- .forecast-header -->
<div class="forecast-content">
<div class="forecast-icon">
<img src="https://openweathermap.org/img/wn/04n.png" alt="" width=48 id="icon5">
</div>
<div class="num" id="temperature5">23<sup>o</sup>C</div>
<div class="minValues" id="day5Min">Loading...</div>
<div class="maxValues" id="day5Max">Loading...</div>
<div class="wind" id="windSpeed5">Loading</div>
</div>
</div>
</div>
</div>
</div>
</div>
<main class="main-content">
<h1 id="temperatureMap"><b>Temperature Map</b></h1>
37
<center> <iframe width="700" height="450"
src="https://embed.windy.com/embed2.html?
lat=14.264&lon=72.905&detailLat=14.264&detailLon=72.905&width=650&height=450&*zoo
m=5&level=surface&overlay=temp&product=ecmwf&menu=&message=&marker=&calendar=
now&pressure=&type=map&location=coordinates&detail=&metricWind=default&metricTemp=
default&radarRange=-1"
frameborder="0"></iframe></center>
</main>
</div>
</div>
</div>
</div>
<br><br>
<footer class="site-footer">
<div class="container">
<div class="row">
<div class="col-md-8">
<form action="#" class="subscribe-form">
<input type="text" placeholder="Enter your email to subscribe...">
38
<input type="submit" value="Subscribe">
</form>
</div>
<div class="col-md-3 col-md-offset-1">
<div class="social-links">
<a href="#"><i class="fa fa-facebook"></i></a>
<a href="#"><i class="fa fa-twitter"></i></a>
<a href="#"><i class="fa fa-google-plus"></i></a>
</div>
</div>
</div>
<script src="js/jquery-1.11.1.min.js"></script>
<script src="js/plugins.js"></script>
<script src="js/app.js"></script>
<script src="scrolling.js"></script>
<script src="script.js"></script>
</body>
<script>
function scrollWin() {
39
window.scrollTo(0, 1615);
}
</script>
</html>
ABOUT PAGE :
<!DOCTYPE html>
<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.0,maximum-scale=1">
<title>Weather Forecasting</title>
<!--[if lt IE 9]>
<script src="js/ie-support/html5.js"></script>
<script src="js/ie-support/respond.js"></script>
40
<![endif]-->
</head>
<body>
<div class="site-content">
<div class="site-header">
<div class="container">
<a href="index.html" class="branding">
<img src="images/logo.png" alt="" class="logo">
<div class="logo-type">
<h1 class="site-title">Weather Forecasting</h1>
<small class="site-description">Weather Updates</small>
</div>
</a>
41
</ul> <!-- .menu -->
</div> <!-- .main-navigation -->
<div class="mobile-navigation"></div>
</div>
</div> <!-- .site-header -->
<main class="main-content">
<br>
<br>
<br>
<center ><h1 style="font-size: 40px;">About-us</h1>
</center>
<br>
<br>
<div style="width: 1100px ;margin: auto ;"><h4>Our website presents OFFICIAL weather
observations, weather forecasts and climatological information for selected cities supplied by
National Meteorological & Hydrological Services (NMHSs) worldwide.The NMHSs make
official weather observations in their respective countries. Links to their official weather service
websites and tourism board/organization are also provided whenever available. Weather icons are
shown alongside worded forecasts in this version to facilitate visual inspection.
42
By April 2024, WWIS provided official weather information for 2963 cities in which 2819 cities
are available with forecast from 139 members while 2177 cities are available with climatological
information from 170 members. Suggestions to enrich the contents of this website are welcome.
</h4>
</div>
<div class="fullwidth-block">
<div class="container">
<div class="col-md-5">
<div class="contact-details">
<div class="map" data-latitude="-6.897789" data-longitude="107.621735"></div>
<div class="contact-info">
<address>
<img src="images/icon-marker.png" alt="">
<p>Weather Forecasting <br>
Mylapore Chennai-4</p>
</address>
43
<p>Stay Connected and Contact us for any Problem ! </p>
<form action="#" class="contact-form">
<div class="row">
<div class="col-md-6"><input type="text" placeholder="Your name..."></div>
<div class="col-md-6"><input type="text" placeholder="Email Addresss..."></div>
</div>
<div class="row">
<div class="col-md-6"><input type="text" placeholder="Company name..."></div>
<div class="col-md-6"><input type="text" placeholder="Website..."></div>
</div>
<textarea name="" placeholder="Message..."></textarea>
<div class="text-right">
<input type="submit" placeholder="Send message">
</div>
</form>
</div>
</div>
</div>
<footer class="site-footer">
<div class="container">
<div class="row">
<div class="col-md-8">
<form action="#" class="subscribe-form">
44
<input type="text" placeholder="Enter your email to subscribe...">
<input type="submit" value="Subscribe">
</form>
</div>
<div class="col-md-3 col-md-offset-1">
<div class="social-links">
<a href="#"><i class="fa fa-facebook"></i></a>
<a href="#"><i class="fa fa-twitter"></i></a>
<a href="#"><i class="fa fa-google-plus"></i></a>
</div>
</div>
</div>
<script src="js/jquery-1.11.1.min.js"></script>
<script type="text/javascript" src="http://maps.google.com/maps/api/js?
sensor=false&language=en"></script>
<script src="js/plugins.js"></script>
<script src="js/app.js"></script>
</body>
45
</html>
<!DOCTYPE html>
<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.0">
<title>Account | Weather Forecasting</title>
</head>
46
<a href="#" class="social"><i class="fab fa-facebook-f"></i></a>
<a href="#" class="social"><i class="fab fa-google-plus-g"></i></a>
<a href="#" class="social"><i class="fab fa-linkedin-in"></i></a>
</div> -->
<!-- <span>or use your email for registration</span> -->
<input type="text" placeholder="Name" />
<input type="email" placeholder="Email" />
<input type="password" placeholder="Password" />
<br>
<button>Sign Up</button>
</form>
</div>
<div class="form-container sign-in-container">
<form action="#">
<h1>Sign in</h1>
<br>
<div class="social-container">
<a href="#" class="social"><i class="fab fa-facebook-f"></i></a>
<a href="#" class="social"><i class="fab fa-google-plus-g"></i></a>
<a href="#" class="social"><i class="fab fa-linkedin-in"></i></a>
</div>
<!-- <span>or use your account</span> -->
<input type="email" placeholder="Email" />
<input type="password" placeholder="Password" />
<!-- <a href="#">Forgot your password?</a> -->
<br>
<button>Sign In</button>
47
</form>
</div>
<div class="overlay-container">
<div class="overlay">
<div class="overlay-panel overlay-left">
<h1>Welcome Back!</h1>
<p>To keep connected with us please login with your personal info</p>
<button class="ghost" id="signIn">Sign In</button>
</div>
<div class="overlay-panel overlay-right">
<h1>Hello, Friend!</h1>
<p>Enter your personal details and start journey with us</p>
<button class="ghost" id="signUp">Sign Up</button>
</div>
</div>
</div>
</div>
<br><br>
<a href="index.html"> <span id="samosa" >Back</span></a>
<script src="sign.js"></script>
</body>
</html>
CSS:
48
article,
aside,
details,
figcaption,
figure,
footer,
header,
hgroup,
nav,
section,
summary {
display: block;
}
audio,
canvas,
video {
display: inline-block;
}
audio:not([controls]) {
display: none;
height: 0;
}
[hidden],
template {
display: none;
}
html {
background: #fff;
color: #000;
-webkit-text-size-adjust: 100%;
-ms-text-size-adjust: 100%;
}
html,
button,
input,
select,
textarea {
font-family: sans-serif;
49
}
body {
margin: 0;
}
a{
background: transparent;
}
a:focus {
outline: thin dotted;
}
a:hover,
a:active {
outline: 0;
}
h1 {
font-size: 2em;
margin: 0.67em 0;
}
h2 {
font-size: 1.5em;
margin: 0.83em 0;
}
h3 {
font-size: 1.17em;
margin: 1em 0;
}
h4 {
font-size: 1em;
margin: 1.33em 0;
}
h5 {
font-size: 0.83em;
margin: 1.67em 0;
}
50
h6 {
font-size: 0.75em;
margin: 2.33em 0;
}
abbr[title] {
border-bottom: 1px dotted;
}
b,
strong {
font-weight: bold;
}
dfn {
font-style: italic;
}
mark {
background: #ff0;
color: #000;
}
code,
kbd,
pre,
samp {
font-family: monospace, serif;
font-size: 1em;
}
pre {
white-space: pre;
white-space: pre-wrap;
word-wrap: break-word;
}
q{
quotes: "\201C" "\201D" "\2018" "\2019";
}
q:before,
51
q:after {
content: '';
content: none;
}
small {
font-size: 80%;
}
sub,
sup {
font-size: 75%;
line-height: 0;
position: relative;
vertical-align: baseline;
}
sup {
top: -0.5em;
}
sub {
bottom: -0.25em;
}
img {
border: 0;
}
svg:not(:root) {
overflow: hidden;
}
figure {
margin: 0;
}
fieldset {
border: 1px solid #c0c0c0;
margin: 0 2px;
padding: 0.35em 0.625em 0.75em;
}
52
legend {
border: 0;
padding: 0;
white-space: normal;
}
button,
input,
select,
textarea {
font-family: inherit;
font-size: 100%;
margin: 0;
vertical-align: baseline;
}
button,
input {
line-height: normal;
}
button,
select {
text-transform: none;
}
button,
html input[type="button"],
input[type="reset"],
input[type="submit"] {
-webkit-appearance: button;
cursor: pointer;
}
button[disabled],
input[disabled] {
cursor: default;
}
input[type="checkbox"],
input[type="radio"] {
box-sizing: border-box;
padding: 0;
53
}
input[type="search"] {
-webkit-appearance: textfield;
box-sizing: content-box;
}
input[type="search"]::-webkit-search-cancel-button,
input[type="search"]::-webkit-search-decoration {
-webkit-appearance: none;
}
button::-moz-focus-inner,
input::-moz-focus-inner {
border: 0;
padding: 0;
}
textarea {
overflow: auto;
vertical-align: top;
}
table {
border-collapse: collapse;
border-spacing: 0;
}
*,
*:before,
*:after {
box-sizing: border-box;
}
/*
* Global Styles
*/
html {
font-size: 14px;
}
body {
color: #bfc1c8;
54
font-family: "Roboto", "Open Sans", sans-serif;
font-size: 14px;
font-weight: 300;
line-height: 1.5;
background: #1e202b;
}
h1,
h2,
h3,
h4,
h5,
h6 {
font-weight: 700;
margin: 0 0 20px;
line-height: normal;
}
hr {
border: none;
border-bottom: 1px solid #777;
}
ul,
ol {
margin: 0;
padding-left: 0;
}
a{
text-decoration: none;
color: #009ad8;
}
address {
font-style: normal;
}
p{
margin-top: 0;
}
form input,
55
form textarea,
form select {
outline: none;
border: none;
padding: 10px;
border-radius: 30px;
}
form select {
-webkit-appearance: none;
-moz-appearance: none;
appearance: none;
}
form textarea {
resize: vertical;
}
/*
* Reusable Components Style
*/
.button,
form input[type="submit"],
form button,
form input[type="reset"] {
border: none;
background: #009ad8;
padding: 10px 20px;
border-radius: 30px;
color: white;
}
.map {
height: 220px;
}
.container {
margin-right: auto;
margin-left: auto;
padding-left: 15px;
padding-right: 15px;
*zoom: 1;
}
56
.container:after {
content: " ";
clear: both;
display: block;
overflow: hidden;
height: 0;
}
.container-fluid {
margin-right: auto;
margin-left: auto;
padding-left: 15px;
padding-right: 15px;
*zoom: 1;
}
.container-fluid:after {
content: " ";
clear: both;
display: block;
overflow: hidden;
height: 0;
}
57
.row {
margin-left: -15px;
margin-right: -15px;
*zoom: 1;
}
.row:after {
content: " ";
clear: both;
display: block;
overflow: hidden;
height: 0;
}
.col-xs-1,
.col-sm-1,
.col-md-1,
.col-lg-1,
.col-xs-2,
.col-sm-2,
.col-md-2,
.col-lg-2,
.col-xs-3,
.col-sm-3,
.col-md-3,
.col-lg-3,
.col-xs-4,
.col-sm-4,
.col-md-4,
.col-lg-4,
.col-xs-5,
.col-sm-5,
.col-md-5,
.col-lg-5,
.col-xs-6,
.col-sm-6,
.col-md-6,
.col-lg-6,
.col-xs-7,
.col-sm-7,
.col-md-7,
.col-lg-7,
.col-xs-8,
58
.col-sm-8,
.col-md-8,
.col-lg-8,
.col-xs-9,
.col-sm-9,
.col-md-9,
.col-lg-9,
.col-xs-10,
.col-sm-10,
.col-md-10,
.col-lg-10,
.col-xs-11,
.col-sm-11,
.col-md-11,
.col-lg-11,
.col-xs-12,
.col-sm-12,
.col-md-12,
.col-lg-12 {
position: relative;
min-height: 1px;
padding-left: 15px;
padding-right: 15px;
}
.col-xs-1,
.col-xs-2,
.col-xs-3,
.col-xs-4,
.col-xs-5,
.col-xs-6,
.col-xs-7,
.col-xs-8,
.col-xs-9,
.col-xs-10,
.col-xs-11,
.col-xs-12 {
float: left;
}
.col-xs-1 {
width: 8.3333333333%;
}
59
.col-xs-2 {
width: 16.6666666667%;
}
.col-xs-3 {
width: 25%;
}
.col-xs-4 {
width: 33.3333333333%;
}
.col-xs-5 {
width: 41.6666666667%;
}
.col-xs-6 {
width: 50%;
}
.col-xs-7 {
width: 58.3333333333%;
}
.col-xs-8 {
width: 66.6666666667%;
}
.col-xs-9 {
width: 75%;
}
.col-xs-10 {
width: 83.3333333333%;
}
.col-xs-11 {
width: 91.6666666667%;
}
.col-xs-12 {
width: 100%;
60
}
.col-xs-pull-0 {
right: auto;
}
.col-xs-pull-1 {
right: 8.3333333333%;
}
.col-xs-pull-2 {
right: 16.6666666667%;
}
.col-xs-pull-3 {
right: 25%;
}
.col-xs-pull-4 {
right: 33.3333333333%;
}
.col-xs-pull-5 {
right: 41.6666666667%;
}
.col-xs-pull-6 {
right: 50%;
}
.col-xs-pull-7 {
right: 58.3333333333%;
}
.col-xs-pull-8 {
right: 66.6666666667%;
}
.col-xs-pull-9 {
right: 75%;
}
.col-xs-pull-10 {
61
right: 83.3333333333%;
}
.col-xs-pull-11 {
right: 91.6666666667%;
}
.col-xs-pull-12 {
right: 100%;
}
.col-xs-push-0 {
left: auto;
}
.col-xs-push-1 {
left: 8.3333333333%;
}
.col-xs-push-2 {
left: 16.6666666667%;
}
.col-xs-push-3 {
left: 25%;
}
.col-xs-push-4 {
left: 33.3333333333%;
}
.col-xs-push-5 {
left: 41.6666666667%;
}
.col-xs-push-6 {
left: 50%;
}
.col-xs-push-7 {
left: 58.3333333333%;
}
62
.col-xs-push-8 {
left: 66.6666666667%;
}
.col-xs-push-9 {
left: 75%;
}
.col-xs-push-10 {
left: 83.3333333333%;
}
.col-xs-push-11 {
left: 91.6666666667%;
}
.col-xs-push-12 {
left: 100%;
}
.col-xs-offset-0 {
margin-left: 0%;
}
.col-xs-offset-1 {
margin-left: 8.3333333333%;
}
.col-xs-offset-2 {
margin-left: 16.6666666667%;
}
.col-xs-offset-3 {
margin-left: 25%;
}
.col-xs-offset-4 {
margin-left: 33.3333333333%;
}
.col-xs-offset-5 {
margin-left: 41.6666666667%;
}
63
.col-xs-offset-6 {
margin-left: 50%;
}
.col-xs-offset-7 {
margin-left: 58.3333333333%;
}
.col-xs-offset-8 {
margin-left: 66.6666666667%;
}
.col-xs-offset-9 {
margin-left: 75%;
}
.col-xs-offset-10 {
margin-left: 83.3333333333%;
}
.col-xs-offset-11 {
margin-left: 91.6666666667%;
}
.col-xs-offset-12 {
margin-left: 100%;
}
.col-sm-1,
.col-sm-2,
.col-sm-3,
.col-sm-4,
.col-sm-5,
.col-sm-6,
.col-sm-7,
.col-sm-8,
.col-sm-9,
.col-sm-10,
.col-sm-11,
.col-sm-12 {
64
float: left;
}
.col-sm-1 {
width: 8.3333333333%;
}
.col-sm-2 {
width: 16.6666666667%;
}
.col-sm-3 {
width: 25%;
}
.col-sm-4 {
width: 33.3333333333%;
}
.col-sm-5 {
width: 41.6666666667%;
}
.col-sm-6 {
width: 50%;
}
.col-sm-7 {
width: 58.3333333333%;
}
.col-sm-8 {
width: 66.6666666667%;
}
.col-sm-9 {
width: 75%;
}
.col-sm-10 {
width: 83.3333333333%;
}
65
.col-sm-11 {
width: 91.6666666667%;
}
.col-sm-12 {
width: 100%;
}
.col-sm-pull-0 {
right: auto;
}
.col-sm-pull-1 {
right: 8.3333333333%;
}
.col-sm-pull-2 {
right: 16.6666666667%;
}
.col-sm-pull-3 {
right: 25%;
}
.col-sm-pull-4 {
right: 33.3333333333%;
}
.col-sm-pull-5 {
right: 41.6666666667%;
}
.col-sm-pull-6 {
right: 50%;
}
.col-sm-pull-7 {
right: 58.3333333333%;
}
.col-sm-pull-8 {
right: 66.6666666667%;
}
66
.col-sm-pull-9 {
right: 75%;
}
.col-sm-pull-10 {
right: 83.3333333333%;
}
.col-sm-pull-11 {
right: 91.6666666667%;
}
.col-sm-pull-12 {
right: 100%;
}
.col-sm-push-0 {
left: auto;
}
.col-sm-push-1 {
left: 8.3333333333%;
}
.col-sm-push-2 {
left: 16.6666666667%;
}
.col-sm-push-3 {
left: 25%;
}
.col-sm-push-4 {
left: 33.3333333333%;
}
.col-sm-push-5 {
left: 41.6666666667%;
}
.col-sm-push-6 {
left: 50%;
67
}
.col-sm-push-7 {
left: 58.3333333333%;
}
.col-sm-push-8 {
left: 66.6666666667%;
}
.col-sm-push-9 {
left: 75%;
}
.col-sm-push-10 {
left: 83.3333333333%;
}
.col-sm-push-11 {
left: 91.6666666667%;
}
.col-sm-push-12 {
left: 100%;
}
.col-sm-offset-0 {
margin-left: 0%;
}
.col-sm-offset-1 {
margin-left: 8.3333333333%;
}
.col-sm-offset-2 {
margin-left: 16.6666666667%;
}
.col-sm-offset-3 {
margin-left: 25%;
}
.col-sm-offset-4 {
68
margin-left: 33.3333333333%;
}
.col-sm-offset-5 {
margin-left: 41.6666666667%;
}
.col-sm-offset-6 {
margin-left: 50%;
}
.col-sm-offset-7 {
margin-left: 58.3333333333%;
}
.col-sm-offset-8 {
margin-left: 66.6666666667%;
}
.col-sm-offset-9 {
margin-left: 75%;
}
.col-sm-offset-10 {
margin-left: 83.3333333333%;
}
.col-sm-offset-11 {
margin-left: 91.6666666667%;
}
.col-sm-offset-12 {
margin-left: 100%;
}
}
.col-md-1,
.col-md-2,
.col-md-3,
.col-md-4,
.col-md-5,
69
.col-md-6,
.col-md-7,
.col-md-8,
.col-md-9,
.col-md-10,
.col-md-11,
.col-md-12 {
float: left;
}
.col-md-1 {
width: 8.3333333333%;
}
.col-md-2 {
width: 16.6666666667%;
}
.col-md-3 {
width: 25%;
}
.col-md-4 {
width: 33.3333333333%;
}
.col-md-5 {
width: 41.6666666667%;
}
.col-md-6 {
width: 50%;
}
.col-md-7 {
width: 58.3333333333%;
}
.col-md-8 {
width: 66.6666666667%;
}
.col-md-9 {
70
width: 75%;
}
.col-md-10 {
width: 83.3333333333%;
}
.col-md-11 {
width: 91.6666666667%;
}
.col-md-12 {
width: 100%;
}
.col-md-pull-0 {
right: auto;
}
.col-md-pull-1 {
right: 8.3333333333%;
}
.col-md-pull-2 {
right: 16.6666666667%;
}
.col-md-pull-3 {
right: 25%;
}
.col-md-pull-4 {
right: 33.3333333333%;
}
.col-md-pull-5 {
right: 41.6666666667%;
}
.col-md-pull-6 {
right: 50%;
}
71
.col-md-pull-7 {
right: 58.3333333333%;
}
.col-md-pull-8 {
right: 66.6666666667%;
}
.col-md-pull-9 {
right: 75%;
}
.col-md-pull-10 {
right: 83.3333333333%;
}
.col-md-pull-11 {
right: 91.6666666667%;
}
.col-md-pull-12 {
right: 100%;
}
.col-md-push-0 {
left: auto;
}
.col-md-push-1 {
left: 8.3333333333%;
}
.col-md-push-2 {
left: 16.6666666667%;
}
.col-md-push-3 {
left: 25%;
}
.col-md-push-4 {
left: 33.3333333333%;
}
72
.col-md-push-5 {
left: 41.6666666667%;
}
.col-md-push-6 {
left: 50%;
}
.col-md-push-7 {
left: 58.3333333333%;
}
.col-md-push-8 {
left: 66.6666666667%;
}
.col-md-push-9 {
left: 75%;
}
.col-md-push-10 {
left: 83.3333333333%;
}
.col-md-push-11 {
left: 91.6666666667%;
}
.col-md-push-12 {
left: 100%;
}
.col-md-offset-0 {
margin-left: 0%;
}
.col-md-offset-1 {
margin-left: 8.3333333333%;
}
.col-md-offset-2 {
margin-left: 16.6666666667%;
73
}
.col-md-offset-3 {
margin-left: 25%;
}
.col-md-offset-4 {
margin-left: 33.3333333333%;
}
.col-md-offset-5 {
margin-left: 41.6666666667%;
}
.col-md-offset-6 {
margin-left: 50%;
}
.col-md-offset-7 {
margin-left: 58.3333333333%;
}
.col-md-offset-8 {
margin-left: 66.6666666667%;
}
.col-md-offset-9 {
margin-left: 75%;
}
.col-md-offset-10 {
margin-left: 83.3333333333%;
}
.col-md-offset-11 {
margin-left: 91.6666666667%;
}
.col-md-offset-12 {
margin-left: 100%;
}
}
74
@media (min-width: 1200px) {
.col-lg-1,
.col-lg-2,
.col-lg-3,
.col-lg-4,
.col-lg-5,
.col-lg-6,
.col-lg-7,
.col-lg-8,
.col-lg-9,
.col-lg-10,
.col-lg-11,
.col-lg-12 {
float: left;
}
.col-lg-1 {
width: 8.3333333333%;
}
.col-lg-2 {
width: 16.6666666667%;
}
.col-lg-3 {
width: 25%;
}
.col-lg-4 {
width: 33.3333333333%;
}
.col-lg-5 {
width: 41.6666666667%;
}
.col-lg-6 {
width: 50%;
}
.col-lg-7 {
width: 58.3333333333%;
75
}
.col-lg-8 {
width: 66.6666666667%;
}
.col-lg-9 {
width: 75%;
}
.col-lg-10 {
width: 83.3333333333%;
}
.col-lg-11 {
width: 91.6666666667%;
}
.col-lg-12 {
width: 100%;
}
.col-lg-pull-0 {
right: auto;
}
.col-lg-pull-1 {
right: 8.3333333333%;
}
.col-lg-pull-2 {
right: 16.6666666667%;
}
.col-lg-pull-3 {
right: 25%;
}
.col-lg-pull-4 {
right: 33.3333333333%;
}
.col-lg-pull-5 {
76
right: 41.6666666667%;
}
.col-lg-pull-6 {
right: 50%;
}
.col-lg-pull-7 {
right: 58.3333333333%;
}
.col-lg-pull-8 {
right: 66.6666666667%;
}
.col-lg-pull-9 {
right: 75%;
}
.col-lg-pull-10 {
right: 83.3333333333%;
}
.col-lg-pull-11 {
right: 91.6666666667%;
}
.col-lg-pull-12 {
right: 100%;
}
.col-lg-push-0 {
left: auto;
}
.col-lg-push-1 {
left: 8.3333333333%;
}
.col-lg-push-2 {
left: 16.6666666667%;
}
77
.col-lg-push-3 {
left: 25%;
}
.col-lg-push-4 {
left: 33.3333333333%;
}
.col-lg-push-5 {
left: 41.6666666667%;
}
.col-lg-push-6 {
left: 50%;
}
.col-lg-push-7 {
left: 58.3333333333%;
}
.col-lg-push-8 {
left: 66.6666666667%;
}
.col-lg-push-9 {
left: 75%;
}
.col-lg-push-10 {
left: 83.3333333333%;
}
.col-lg-push-11 {
left: 91.6666666667%;
}
.col-lg-push-12 {
left: 100%;
}
.col-lg-offset-0 {
margin-left: 0%;
}
78
.col-lg-offset-1 {
margin-left: 8.3333333333%;
}
.col-lg-offset-2 {
margin-left: 16.6666666667%;
}
.col-lg-offset-3 {
margin-left: 25%;
}
.col-lg-offset-4 {
margin-left: 33.3333333333%;
}
.col-lg-offset-5 {
margin-left: 41.6666666667%;
}
.col-lg-offset-6 {
margin-left: 50%;
}
.col-lg-offset-7 {
margin-left: 58.3333333333%;
}
.col-lg-offset-8 {
margin-left: 66.6666666667%;
}
.col-lg-offset-9 {
margin-left: 75%;
}
.col-lg-offset-10 {
margin-left: 83.3333333333%;
}
.col-lg-offset-11 {
margin-left: 91.6666666667%;
79
}
.col-lg-offset-12 {
margin-left: 100%;
}
}
@-ms-viewport {
width: device-width;
}
.visible-xs,
.visible-sm,
.visible-md,
.visible-lg {
display: none !important;
}
.visible-xs-block,
.visible-xs-inline,
.visible-xs-inline-block,
.visible-sm-block,
.visible-sm-inline,
.visible-sm-inline-block,
.visible-md-block,
.visible-md-inline,
.visible-md-inline-block,
.visible-lg-block,
.visible-lg-inline,
.visible-lg-inline-block {
display: none !important;
}
table.visible-xs {
display: table;
}
tr.visible-xs {
80
display: table-row !important;
}
th.visible-xs,
td.visible-xs {
display: table-cell !important;
}
}
table.visible-sm {
display: table;
}
tr.visible-sm {
display: table-row !important;
}
th.visible-sm,
td.visible-sm {
display: table-cell !important;
81
}
}
table.visible-md {
display: table;
}
tr.visible-md {
display: table-row !important;
}
th.visible-md,
td.visible-md {
display: table-cell !important;
}
}
82
}
}
table.visible-lg {
display: table;
}
tr.visible-lg {
display: table-row !important;
}
th.visible-lg,
td.visible-lg {
display: table-cell !important;
}
}
83
}
}
.visible-print {
display: none !important;
}
@media print {
.visible-print {
display: block !important;
}
table.visible-print {
84
display: table;
}
tr.visible-print {
display: table-row !important;
}
th.visible-print,
td.visible-print {
display: table-cell !important;
}
}
.visible-print-block {
display: none !important;
}
@media print {
.visible-print-block {
display: block !important;
}
}
.visible-print-inline {
display: none !important;
}
@media print {
.visible-print-inline {
display: inline !important;
}
}
.visible-print-inline-block {
display: none !important;
}
@media print {
.visible-print-inline-block {
display: inline-block !important;
}
}
85
@media print {
.hidden-print {
display: none !important;
}
}
/*
* Header Styles
*/
.site-header {
padding: 50px 0;
}
.site-header .branding {
float: left;
}
.main-navigation {
float: right;
86
}
.main-navigation .menu-toggle,
.main-navigation .menu {
vertical-align: middle;
}
.main-navigation .menu-toggle {
background: none;
border: 2px solid transparent;
color: white;
padding: 20px;
border-radius: 40px;
-webkit-transition: .3s ease;
transition: .3s ease;
display: none;
outline: none;
}
.main-navigation .menu-toggle:hover,
.main-navigation .menu-toggle:active {
border-color: #009ad8;
color: #009ad8;
}
.main-navigation .menu {
list-style: none;
display: inline-block;
*zoom: 1;
}
.main-navigation .menu:after {
content: " ";
clear: both;
display: block;
overflow: hidden;
height: 0;
87
}
.mobile-navigation {
padding: 30px 0 0;
clear: both;
display: none;
}
.mobile-navigation .menu {
background: #262936;
88
list-style: none;
text-align: center;
border-radius: 10px;
overflow: hidden;
}
.mobile-navigation .menu a {
padding: 20px;
display: block;
color: white;
}
.hero {
background-size: cover;
padding: 70px 0;
min-height: 350px;
}
.find-location {
position: relative;
margin-bottom: 164px;
}
.find-location input[type="text"] {
width: 100%;
padding: 20px 50px 20px 20px;
background: #1e202b;
color: white;
}
.find-location input[type="submit"] {
89
position: absolute;
top: 5px;
right: 5px;
bottom: 5px;
padding: 0 40px;
}
.forecast-container {
width: 100%;
background: #323544;
display: table;
table-layout: fixed;
width: 100%;
overflow: hidden;
border-radius: 10px;
margin-top: -150px;
margin-bottom: 50px;
position: relative;
top: 45px;
}
.forecast-container .forecast {
display: table-cell;
vertical-align: top;
}
.forecast-container .forecast:nth-child(even) {
background-color: #262936;
}
.forecast-container .forecast.today {
width: 420px;
}
90
*zoom: 1;
}
91
.forecast-container .forecast.today span {
margin-right: 20px;
}
92
.forecast-container .forecast .forecast-content small {
font-size: 16px;
font-size: 1.1428571429em;
}
.fullwidth-block {
padding: 70px 0;
}
.fullwidth-block .section-title {
font-size: 36px;
font-size: 2.5714285714em;
font-weight: 300;
color: white;
}
.filter {
margin-bottom: 30px;
}
.filter-control {
border: 2px solid #262936;
padding: 5px 5px 5px 20px;
border-radius: 30px;
display: inline-block;
white-space: nowrap;
}
.filter-control label {
margin-right: 10px;
display: inline-block;
padding: 10px;
vertical-align: middle;
}
.select.control {
background: #262936;
border-radius: 40px;
overflow: hidden;
display: inline-block;
vertical-align: middle;
padding-right: 30px;
position: relative;
93
}
.select.control:after {
content: " ";
width: 7px;
height: 9px;
background: url(images/arrow-down.png);
position: absolute;
right: 10px;
top: 0;
bottom: 0;
margin: auto;
display: block;
z-index: 1;
}
.select.control select {
padding: 10px 30px;
width: 110%;
border: none;
background: none;
outline: none;
appearance: none;
-webkit-appearance: none;
color: white;
}
.live-camera {
margin-bottom: 30px;
}
.live-camera .live-camera-cover {
position: relative;
margin-bottom: 20px;
cursor: pointer;
}
.live-camera .live-camera-cover:after {
content: " ";
width: 45px;
height: 45px;
position: absolute;
left: 0;
94
right: 0;
top: 0;
bottom: 0;
margin: auto;
background: url(images/play-button.png);
}
.live-camera .location {
margin-bottom: 5px;
color: white;
font-weight: 300;
}
.news {
padding-left: 100px;
position: relative;
}
.news:after {
content: " ";
width: 12px;
height: 7px;
background: url(images/arrow.png);
display: block;
}
.news .date {
position: absolute;
top: 0;
left: 0;
color: #009ad8;
font-size: 24px;
font-size: 1.7142857143em;
}
95
.news h3 {
font-size: 14px;
font-size: 1em;
}
.news h3 a {
color: white;
}
.arrow-feature {
list-style-type: none;
}
.arrow-feature li {
position: relative;
padding-left: 30px;
}
.arrow-feature li:before {
content: " ";
width: 12px;
height: 7px;
background: url(images/arrow.png);
position: absolute;
left: 0;
top: 5px;
}
.arrow-feature li h3 {
font-size: 14px;
font-size: 1em;
color: white;
}
.arrow-list {
list-style-image: url(images/arrow.png);
list-style-position: inside;
}
.arrow-list li {
padding: 10px 0;
border-bottom: 1px solid rgba(255, 255, 255, 0.1);
}
96
.arrow-list li:last-child {
border-bottom: none;
}
.arrow-list a {
color: white;
}
.arrow-list a:hover {
color: #009ad8;
}
.photo-grid {
margin: 0 -5px;
}
.photo-grid a {
width: 33.333%;
padding: 5px;
float: left;
}
.photo-grid a img {
display: block;
width: 100%;
max-width: 100%;
height: auto;
}
.breadcrumb {
background: #262936;
border-radius: 40px;
padding: 20px 30px;
font-size: 13px;
font-size: 0.9285714286em;
}
.breadcrumb a {
color: #bfc1c8;
}
.breadcrumb a:after {
97
content: " ";
display: inline-block;
vertical-align: middle;
width: 12px;
height: 7px;
background: url(images/arrow-gray.png) no-repeat;
margin: 0 10px;
}
.breadcrumb a:hover {
text-decoration: underline;
}
.breadcrumb span {
color: white;
}
.post {
padding: 50px 0;
border-bottom: 1px solid rgba(255, 255, 255, 0.1);
}
.post.single {
border-bottom: none;
}
.post:first-child {
padding-top: 0;
}
.post .entry-title {
font-size: 30px;
font-size: 2.1428571429em;
font-weight: 300;
color: white;
}
.post .featured-image {
margin-bottom: 20px;
}
98
max-width: 100%;
height: auto;
border-radius: 5px;
display: block;
}
.post p {
margin-bottom: 30px;
}
#temperatureMap {
margin-left: 29rem;
margin-bottom: 3rem;
margin-top: 4rem;
}
.entry-content blockquote {
margin-left: 50px;
padding-left: 50px;
position: relative;
}
.entry-content blockquote:before {
content: " ";
width: 30px;
height: 23px;
background: url(images/quote.png);
position: absolute;
top: 0;
left: 0;
}
.entry-content blockquote p {
font-size: 24px;
font-size: 1.7142857143rem;
color: #009ad8;
}
.photo {
position: relative;
padding-left: 50%;
min-height: 190px;
border-radius: 10px;
99
overflow: hidden;
background: #262936;
margin-bottom: 30px;
}
.photo .photo-preview {
position: absolute;
width: 50%;
left: 0;
top: 0;
bottom: 0;
background-size: cover;
}
.photo .photo-details {
padding: 20px;
}
.photo .photo-title {
margin-bottom: 10px;
font-weight: 300;
}
.photo .photo-title a {
color: white;
}
.star-rating {
float: none;
overflow: hidden;
position: relative;
height: 15px;
line-height: 15px;
font-size: 16px;
width: 100px;
font-family: 'FontAwesome';
}
.star-rating:before {
content: "\f005\f005\f005\f005\f005";
color: #1e202b;
float: left;
top: 0;
100
left: 0;
position: absolute;
}
.star-rating span {
overflow: hidden;
float: left;
top: 0;
left: 0;
position: absolute;
padding-top: 1.5em;
color: #009ad8;
font-size: 16px;
}
.star-rating span:before {
content: "\f005\f005\f005\f005\f005";
top: 0;
position: absolute;
left: 0;
}
.contact-details {
background: #262936;
border-radius: 10px;
overflow: hidden;
}
.contact-details .map {
border-top-left-radius: 10px;
border-top-right-radius: 10px;
}
.contact-details .contact-info {
padding: 20px;
}
.contact-details address {
padding-left: 30px;
position: relative;
}
101
position: absolute;
left: 0;
top: 0;
}
.contact-details a {
margin-right: 20px;
color: #bfc1c8;
}
.contact-details a img {
margin-right: 10px;
vertical-align: middle;
}
.contact-form [class*="col"] {
padding: 0 5px;
}
.contact-form .row {
margin: 0 -5px;
}
.contact-form input:not([type="submit"]),
.contact-form textarea {
width: 100%;
padding: 15px;
margin-bottom: 10px;
color: white;
border: 2px solid #393c48;
background: transparent;
}
.contact-form input:not([type="submit"]):hover,
.contact-form input:not([type="submit"]):focus,
.contact-form textarea:hover,
.contact-form textarea:focus {
border-color: #009ad8;
}
.contact-form textarea {
min-height: 150px;
}
102
.contact-form .text-right {
text-align: right;
}
.sidebar .widget {
background: #262936;
border-radius: 10px;
padding: 20px;
margin-bottom: 30px;
}
.sidebar .widget.top-rated {
padding: 0;
}
.sidebar .widget.top-rated ul {
list-style: none;
}
.sidebar .widget.top-rated ul li {
border-bottom: 1px solid rgba(255, 255, 255, 0.1);
padding: 10px 20px;
}
103
.sidebar .widget.top-rated .entry-title {
font-size: 14px;
font-size: 1em;
margin-bottom: 5px;
font-weight: 300;
}
/*
* Footer Styles
*/
.site-footer {
background: #262936;
padding: 50px 0;
}
.site-footer .subscribe-form {
position: relative;
margin-bottom: 30px;
}
104
.site-footer .social-links a {
width: 40px;
height: 40px;
display: inline-block;
border-radius: 50%;
background: #1e202b;
color: #009ad8;
text-align: center;
line-height: 2;
-webkit-transition: .3s ease;
transition: .3s ease;
font-size: 20px;
font-size: 1.4285714286em;
}
/*
api
*/
#temperature {
font-size: 54px;
}
.minValues {
text-align: center;
display: inline-block;
border-radius: 5px;
height: 25px;
width: 85px;
margin: 0;
.maxValues {
text-align: center;
105
display: inline-block;
border-radius: 5px;
height: 25px;
width: 85px;
margin: 0;
#windSpeed1 {
position: relative;
bottom: 25px;
left: 192px;
}
SING IN / SIGN UP :
@import url('https://fonts.googleapis.com/css?family=Montserrat:400,800');
*{
box-sizing: border-box;
}
body {
/* font-family: 'Montserrat', sans-serif; */
/* font-family: 'Gill Sans', 'Gill Sans MT', Calibri, 'Trebuchet MS', sans-serif; */
font-family: 'Times New Roman', Times, serif;
background: #f6f5f7;
display: flex;
flex-direction: column;
justify-content: center;
align-items: center;
height: 100vh;
margin: -20px 0 50px;
margin-top: 20px;
}
h1 {
font-weight: bold;
106
margin: 0;
}
p{
/* font-size: 14px; */
font-size: 16px;
font-weight: 100;
line-height: 21px;
letter-spacing: 2px;
margin: 50px 0px 30px;
}
span {
font-size: 12px;
}
a{
color: rgb(230, 223, 223);
font-size: 14px;
text-decoration: none;
margin: 15px 0;
}
.container {
background: #fff;
border-radius: 10px;
box-shadow: 0 14px 28px rgba(0, 0, 0, .2), 0 10px 10px rgba(0, 0, 0, .2);
position: relative;
overflow: hidden;
width: 768px;
max-width: 100%;
min-height: 480px;
}
.form-container form {
background: #fff;
display: flex;
107
flex-direction: column;
padding: 0 50px;
height: 100%;
justify-content: center;
align-items: center;
text-align: center;
}
/* .social-container {
margin: 20px 0;
}
.social-container a {
border: 1px solid #ddd;
border-radius: 50%;
display: inline-flex;
justify-content: center;
align-items: center;
margin: 0 5px;
height: 40px;
width: 40px;
} */
.form-container input {
background: #eee;
border: none;
padding: 12px 15px;
margin: 8px 0;
width: 100%;
}
button {
border-radius: 20px;
border: 1px solid #000000;
/* background: #ff445c; */
background: #242630;
108
color: #fff;
font-size: 12px;
font-weight: bold;
padding: 12px 45px;
letter-spacing: 1px;
text-transform: uppercase;
transition: transform 80ms ease-in;
}
button:active {
transform: scale(.95);
}
button:focus {
outline: none;
}
button.ghost {
background: transparent;
border-color: #fff;
}
.form-container {
position: absolute;
top: 0;
height: 100%;
transition: all .6s ease-in-out;
}
.sign-in-container {
left: 0;
width: 50%;
z-index: 2;
}
.sign-up-container {
left: 0;
109
width: 50%;
z-index: 1;
opacity: 0;
}
.overlay-container {
position: absolute;
top: 0;
left: 50%;
width: 50%;
height: 100%;
overflow: hidden;
transition: transform .6s ease-in-out;
z-index: 100;
}
.overlay {
background: #1e202b;
background: linear-gradient(to right, #242630, #242630) no-repeat 0 0 / cover;
color: #fff;
position: relative;
left: -100%;
height: 100%;
width: 200%;
transform: translateY(0);
transition: transform .6s ease-in-out;
}
.overlay-panel {
position: absolute;
top: 0;
display: flex;
flex-direction: column;
justify-content: center;
align-items: center;
padding: 0 40px;
110
height: 100%;
width: 50%;
text-align: center;
transform: translateY(0);
transition: transform .6s ease-in-out;
}
.overlay-right {
right: 0;
transform: translateY(0);
}
.overlay-left {
transform: translateY(-20%);
}
111
/* Bring back the text to center */
.container.right-panel-active .overlay-left {
transform: translateY(0);
}
.footer {
margin-top: 25px;
text-align: center;
}
.icons {
display: flex;
width: 30px;
height: 30px;
letter-spacing: 15px;
align-items: center;
}
span#samosa{
border-radius: 20px;
border: 1px solid #000000;
background: #242630;
color: #fff;
font-size: 16px;
font-weight: bold;
padding: 12px 45px;
letter-spacing: 1px;
text-transform: uppercase;
112
transition: transform 80ms ease-in;
margin-top: 0;
#samosa:active {
transform: scale(.95);
}
#samosa:focus {
outline: none;
}
JAVA SCRIPT :
function GetInfo() {
fetch('https://api.openweathermap.org/data/2.5/forecast?q='+
newName.value+'&appid=1c5f09f467eae9269fcd3e360464b306')
.then(response => response.json())
.then(data => {
})
.catch(err => alert("Something Went Wrong: Try Checking Your Internet Coneciton"))
}
function DefaultScreen(){
document.getElementById("searchBar").defaultValue = "Chennai";
GetInfo();
}
114
];
SING IN/SING UP :
115
const signUpButton = document.getElementById('signUp');
const signInButton = document.getElementById('signIn');
const container = document.getElementById('container');
signUpButton.addEventListener('click', () =>
container.classList.add('right-panel-active'));
signInButton.addEventListener('click', () =>
116
CHAPTER 8
117
CONCLUSION & FUTURE ENHANCEMENT
118
8.1 CONCLUSION
The system configuration phase has specified the requisite hardware, software components, and
development tools necessary for constructing a robust and scalable weather service platform.
This includes considerations for data storage, processing capabilities, and external API
integrations. The system design further elaborated on the website's architecture, delineating user
interface elements for intuitive interaction, data management strategies for handling and
presenting weather data efficiently, and the flow of information from sources to end-users.
Finally, the testing section has laid out meticulous strategies to ensure the website's functionality,
accuracy, and usability. It includes plans for unit testing, integration testing, and user acceptance
testing to validate performance and responsiveness across various devices and user scenarios.
Through this meticulous approach, we aim to deliver a weather forecasting website that not only
meets but exceeds user expectations, providing a reliable and insightful resource for weather-
related information.
119
8.2 FUTURE SCOPE :
120
AI-Powered Insights: In the future, consider implementing AI (Artificial Intelligence) to
analyze weather patterns and offer personalized weather predictions or recommendations
based on user preferences (e.g., suggesting appropriate clothing for the forecast).
121
CHAPTER 9
122
SCREENSHOT
123
SCREENSHOT:
HOME PAGE :
124
It will show the different souce of map’s
125
ABOUT US PAGE :
126
SING IN PAGE :
SING UP PAGE :
127
CHAPATER 10
128
FORMS AND REPORTS
129
10.1 FORMS
1. Location Selection:
- Dropdown menu allowing users to select their location from a list of cities or regions.
2. Forecast Type:
- Radio buttons allowing users to specify the type of forecast they're interested in: current
conditions, hourly forecast, or daily forecast.
3. Submit Button:
- Provide a button for users to submit their preferences and generate the weather forecast
report.
10.2 REPORTS
1) Daily Forecast: Include a summary of the weather forecast for each day of the selected
date range, highlighting expected temperature highs and lows, precipitation amounts, and
any notable weather events.
2) Visuals: Enhance the report with visual elements such as charts, graphs, or icons to make
the forecast information more engaging and easy to understand.
3) Current Conditions: Provide an overview of the current weather conditions, including
temperature, humidity, wind speed, and precipitation.
4) Location and Date : Display the selected location and date for which the weather forecast
is generated at the top of the report.
130
CHAPTER 11
131
BIBLIOGRAPHY
132
11.1 BIBLIOGRAPHY:
1. .Singh, Dan, Amreek Singh, and Ashwagosha Ganju. "Site-specific analog weather-
forecast system for northwest Himalaya, India." Annals of Glaciology 49 (2008): 224–30.
http://dx.doi.org/10.3189/172756408787815013.
2. Wible, B. "Weather Forecast." Science 329, no. 5998 (September 16, 2010): 1443.
http://dx.doi.org/10.1126/science.329.5998.1443-a.
3. O'Malley, Mary. "The Weather Forecast." Estudios Irlandeses, no. 11 (March 15, 2016):
232–33. http://dx.doi.org/10.24162/ei2015-6535.
11.1.1 BOOKS
1. https.wikipedia.com
2. https.w3schools.com
3. https.reactjs.org
4. https://dev.to/achowba/building-a-modal-in-react- 15hg#::targetText=Open%20the
%20Modal.js%20file,%7B%7B%20transform%3A%20props.sho w%20%3F
5. https://github.com/
133