/*
 * 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, a.btn-primary:visited {
  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;
}
