/*
 * Copyright (c) 2020 Eclipse Foundation, Inc.
 * 
 * This program and the accompanying materials are made available under the
 * terms of the Eclipse Public License v. 2.0 which is available at
 * http://www.eclipse.org/legal/epl-2.0.
 * 
 * Contributors:
 *   Eric Poirier <eric@eclipse.org>
 * 
 * SPDX-License-Identifier: EPL-2.0
*/
.header-eclipseide {
  background-image:url("/eclipseide/2021-06/images/background-2.jpg");
  background-position:top;
  background-size:cover;
}

@media (max-width: 767px) {
  #main-menu .navbar-toggle .icon-bar {
    background: #fff;
    height: 3px;
  }
}


.h1, .h2, .h3, .h4, .h5, .h6, h1, h2, h3, h4, h5, h6 {
  color:#3a315c;
}

#btn-call-for-action a {
  background-color:#fff;
  border-color:#fff;
  color:#000;
}

@media (min-width: 768px) {
  #main-menu li a {
      margin-right: 0;
      color: #fff;
      text-shadow: 0px 0px 5px rgb(0 0 0 / 60%);
  }
}

@media (min-width: 992px) {
  .featured-jumbotron {
    min-height: 600px;
  }
}

.featured-jumbotron {
  text-align: left;
  position: relative;
}

@media (min-width: 768px) {
  .featured-jumbotron h1 {
    margin-top: 135px;
  }
}

.featured-jumbotron h1 {
  font-size:60px;
  text-transform: uppercase;
  margin-bottom:10px;
}
.header-eclipseide h1:after {
  display:none;
}

.featured-jumbotron h2 {
  margin-top:0px;
  color:#a6c1f2;
  font-size: 32px;
  font-weight: 400;
}

@media (min-width: 992px) {
  .jumbotron-links {
    position:absolute;
    bottom:30px;
    left: 50%;
    transform: translate(-50%, -50%);
  }
}

@media (max-width: 991px) {
  .jumbotron-links { 
    margin-top:20px;
  }
}



a.btn-primary, a.btn-primary:active {
  color: #000;
  background-color: #a6c1f2;
  border-color: #a6c1f2;
}

.btn-primary:hover, .btn-primary.focus, .btn-primary:focus,.btn-primary:active:focus, .btn-primary:active:hover {
  color: #000;
  background-color: #8198c4;
  border-color: #8198c4;
}

.eclipse-ide-new-features {
  padding-top:30px;
  padding-bottom:50px;
}

.eclipse-ide-new-features-prefix {
  text-align:center;
}

.eclipse-ide-new-features-prefix h2 {
  font-weight:600;
  text-transform: uppercase;
}

.eclipse-ide-new-features-prefix p {
  margin-bottom:30px;
  font-size: 20px;
  text-transform: uppercase;
  color:#3a315c;
}

.featured-new-items {
  background-color:#eeeded;
  padding:0 15px 10px;
}

.featured-new-items h3 {
  font-size:18px;
  text-transform: uppercase;
}

.featured-new-items h3.heading-underline {
  font-weight: 600;
  margin: 20px 0 20px;
}

.featured-new-items h3.heading-underline:after {
  border-bottom: 4px solid #acc7f6;
}

.featured-new-item-icon {
  background-color:#2d2252;
  height: 60px;
  width:60px;
  position: relative;
  top: -10px;
  padding: 10px;
  border-radius: 0px 0px 2px 2px;
}

.featured-new-item-icon:after {
  width: 0;
  height: 0;
  border-left: 30px solid transparent;
  border-right: 30px solid transparent;
  border-top: 10px solid #2e2252;
  content: "";
  display: block;
  bottom: -9px;
  position: absolute;
  left:0;
}

.featured-new-links {
  text-align:center;
}

@media (min-width: 768px) {
  .featured-new-links li:not(:last-child){
    margin-right:30px;
  }
}

.featured-circle-outline {
  width:80px;
  height:80px;
  border-radius:80px;
}
.featured-circle-outline .icon{
  font-size:42px;
  color:#f7941e;
}
.featured-stats {
  background-image:url("/eclipseide/2021-06/images/featured-stats-bg.jpg");
  background-position:top right;
  background-size:cover;
  padding:30px ​0 60px;
}

.featured-stats-item {
  background-color:#fff;
  padding:15px;
  color:#2d2252;
  font-weight: 600;
  border-radius: 0px 0px 2px 2px;
}

.featured-stats-item-arrow {
  clip-path: polygon(50% 100%, 0 0, 100% 0);
  background-color: #fff;
  height: 15px;
  top: -1px;
  position: relative;
  margin-bottom:20px;
}


.featured-stats-item a,
.featured-stats-item a:hover,
.featured-stats-item a:visited {
  color:#2d2252;
}

.featured-stats h3 {
  margin-bottom: 20px;
  color: #fff;
}

.featured-videos {
  background-color:#f9f9f9;
  padding:50px 0;
}

.featured-videos h2 {
  font-weight:600;
  margin-bottom: 50px;
  text-align:center;
}

.featured-videos h3 {
  font-weight: 600;
  margin-bottom:20px;
  margin-top: 10px;
}

.featured-videos-white-block {
  margin-top:40px;
  background-color:#fff;
  padding:15px 20px; 
  box-shadow:5px 5px 5px 0px rgb(0 0 0 / 20%);
  display: block;
  color:#2d2252;
}

.featured-videos-white-block:hover {
  text-decoration: none;
  background-color:#a6c1f2;
  color:#2d2252;
}

.featured-connected {
  padding:50px 0;
  color:#a6c1f2;
  text-align:center;
}

footer#solstice-footer .featured-connected h2 {
  font-size:30px;
  color:#fff;
  font-weight: 600;
}

footer#solstice-footer .featured-connected p {
  font-size:18px;
}

footer#solstice-footer .featured-connected .fa {
  font-size:30px;
  color:#fff;
  margin:20px 10px 0;
}

footer#solstice-footer {
  background-image:url(images/footer-bg.jpg);
  background-size:cover;
}

footer#solstice-footer, footer#solstice-footer h2 {
  color:#fff;
}

footer#solstice-footer h2 {
  text-transform: uppercase;
  font-weight: 600;
  font-size: 16px;
}

footer#solstice-footer a:active, footer#solstice-footer a:focus, footer#solstice-footer a:link, footer#solstice-footer a:visited {
  color:#fff;
}

footer#solstice-footer .nav a:hover {
  color:#a6c1f2;
}








.featured-community {
  background-color:#f9f9f9;
  background-position:bottom center;
  background-size:cover;
  position:relative;
}

.featured-community .container {
  z-index: 1;
  position: relative;
}

.featured-community:before, .featured-community:after {
  content: "";
  display: block;
  width: 200px;
  height: 218px;
  position: absolute;
  bottom: 0;
  background-size: cover;
}

.featured-community:before {
  background-image:url(/eclipseide/2021-06/images/lattice-left.svg);
  left:0;
}

.featured-community:after {
  background-image:url(/eclipseide/2021-06/images/lattice-right.svg);
  right:0;
}

.featured-community p {
  font-size:18px;
}

.featured-community .btn {
  width:150px;
}

.featured-social-links a, .featured-social-links a:visited {
  color:#2d2252;
}

.featured-social-links a:hover {
  color:#110c23;
}






@media (max-width: 768px) {
  .header-eclipseide h1 {
    font-size:72px;
  }
  .featured-new-links li:not(:last-child){
    margin-bottom:20px;
  }
  
  .featured-community-links li:not(:last-child) {
    margin-bottom:20px;
  }
}

.featured-circle-stats {
  padding-top:14px;
}

.eclipseide-btn {
  width:20px;
  height:20px;
  position: relative;
  top: -2px;
}

.featured-circle-outline {
  background-color:#f7941e;
}

.featured-circle-outline .icon {
  
  color:#fff;
}

.solstice-block-white-bg {
  background: #fff;
  border: 1px solid #ccc;
  padding: 15px;
}

.eclipseide-icon {
  width:40px;
  height:40px;
  display: block;
  background-repeat: no-repeat;
  background-position: center;
  margin: 0 auto;
}

.eclipseide-icon-1{
  background-image:url(images/icon-1-performance.svg);
}
.eclipseide-icon-2{
  background-image:url(images/icon-2-sharing.svg);
}
.eclipseide-icon-3{
  background-image:url(images/icon-3-java.svg);
}
.eclipseide-icon-4{
  width:40px;
  background-image:url(images/icon-4-dark.svg);
}
.eclipseide-icon-5{
  width:40px;
  background-image:url(images/icon-5-proven.svg);
}
.eclipseide-icon-6{
  width:40px;
  background-image:url(images/icon-6-free.svg);
}
.eclipseide-icon-7{
  background-image:url(images/icon-7-projects.svg);
}
.eclipseide-icon-8{
  background-image:url(images/icon-8-committers.svg);
}
.eclipseide-icon-9{
  background-image:url(images/icon-9-code.svg);
}
.eclipseide-icon-10{
  background-image:url(images/icon-10-contributors.svg);
}

.header-eclipseide hr {
  width: 70%;
  border-top: 2px solid #f7941e;
}

.eclipsefdn-video {
  border:2px solid #f7941e;
}

.featured-new-items .big {
  font-size:18px;
}
