.doc-loader 
{
    position: fixed;
    left: 0px;
    top: 0px;
    width: 100%;
    height: 100%;
    z-index: 99999;	
    background-color: white;
}

html{
    scroll-behavior: smooth;
    overflow-x: hidden;
}

.doc-loader td 
{       
    text-align: center;
    vertical-align: middle;
}

.doc-loader img
{
    width: 90px;
    height: 90px;        
}

.header-universal
{
    width: 100%;
    height: 100px;
    padding: 0px;
    display: flex;
    align-items: center;
    vertical-align: middle;
    position: fixed;
    z-index: 20;
    text-align: right;
}

.hamburger{
    display: none;
    position: absolute;
    right: 10px;
}

.header-background
{
    background-color:none;
    opacity: 100%;
    width: 100%;
    height:inherit;
    position: absolute;
    z-index: 3;
    transition: background-color 700ms linear;
}

.scrolled
{
    background-color: white;
}

.scrolled-p
{
    color:black !important;
}

/* The About Me pointer starts with .scrolled-p hardcoded in the HTML (so it's
   black on load), and the scroll listener only ever removes that class once
   you scroll back near the top, flipping it to white and leaving it there.
   Pin it to black permanently regardless of scroll state. */
#pointer-about
{
    color: black !important;
}

.hamburger.scrolled-m .hamburger-inner,
  .hamburger.scrolled-m .hamburger-inner::before,
  .hamburger.scrolled-m .hamburger-inner::after {
    transition: background-color 700ms linear, transform 0.15s ease, top 0.15s ease, opacity 0.15s ease, bottom 0.15s ease;
    background-color: black; }

.logo-image
{
    position: absolute;
    margin: auto;
    top: 0;
    left: 0;
    right: 0;
    bottom: 0;
    height: 65.5%;
    width:auto;
    z-index: 4;
}

.menu
{
    position: fixed;
    height: 100%;
    width: 100%;
    text-align: center;
    align-items: center;
    justify-content: center;
    display: none;
    background-color: white;
    color: black;
    font-family: 'Lato', sans-serif;
    font-size: 40px;
    line-height: 100px;
    z-index: 15;
}

.menu > p{
    text-decoration: none;
}



.menu-vis{display: flex;}

body
{
    padding:0px;
    margin:0px;
    width: 100%;
    background-color:white;
    overflow-x: hidden;
    overflow-y: clip;
}

.intro-wrapper
{
    width:70%;
    height:100vh;
    position: absolute;
    z-index: 5;
    display: block;
    text-align: center;
}

.intro-main
{
    position: absolute;
    height: 350px;
    width: 725px;
    bottom:25%;
    left:15%;
    z-index: 2;
    background-color:#030040;
}

.intro-shader
{
    position: absolute;
    height:50%;
    width:75%;
    background-color: darkgray;
    top:32%;
    left:10%;
}

#intro
{
    text-align: left;
    padding-left:30px;
    padding-top:50px;
    margin:auto;
    font-family: 'Lora', serif;
    color:white;
}

#first-line
{
    font-family: 'Playfair Display', serif;
    font-size: 90px; 	
    line-height: 60px;
    color:white;
}

#pronun
{
    font-family: 'Libre Baskerville', serif;
    font-size: 25px;
    line-height: 80px;
}

#noun
{
    font-family: 'PT Serif', serif;
    font-size: 25px;
    line-height: 80px;
}

#defs
{
    text-align: left;
    padding-left:30px;
    padding-top:10px;
    margin:auto;
    font-family: 'Lora', serif;
    font-size: 45px; 	
    line-height: 80px;
    color:white;
}

@media screen and (max-width: 900px)
{
    .intro-wrapper{
        width: 100%;
        text-align: center;
        display: flex;
        justify-content: center;
    }
    .intro-main{
        height: 300px;
        width: 600px;
        margin: auto !important;
        top: unset;
        left: unset;
        bottom: 15%;
        display: block;
    }
    #first-line{
        font-size: 77px;
        line-height: 51px;
    }
    #pronun, #noun{
        line-height: 80px;
        font-size: 21px;
    }
    #defs{
        font-size: 34px;
        line-height: 68px;
        padding-left: 26px;
        padding-top: 6px;
    }
    .portfolio{
        padding-left:80px !important;
        padding-right:80px !important;
        gap: 30px !important;
    }
    .portfolio-entry{
        flex-basis: calc((100% - 30px) / 2) !important;
        max-width: 300px !important;
    }
}

/*Small Media (Phone Portrait)*/
@media screen and (max-width: 600px)
{
    #pointer-portfolio-main{
        display:none;
    }
    #pointer-portfolio{
        display: none;
    }
    #pointer-about{
        display:none;
    }
    #pointer-contact{
        display: none;
    }
    .intro-main{
        height: 175px;
        width: 362px;
    }
    .portfolio{
        padding-left: 35px !important;
        padding-right: 35px !important;
        gap: 40px !important;
    }
    .portfolio-entry{
        flex-basis: 100% !important;
        max-width: 260px !important;
    }
    .intro-wrapper{
        width: 100%;
        text-align: center;
        display: flex;
        justify-content: center;
    }
    .intro-main{
        width: 300px;
        height: 250px; /*was 145px*/
        margin: auto !important;
        top: unset;
        bottom: 20%;
        left: unset;
        display: block;
    }
    #first-line{
        font-size: 45px;
        line-height: 50px;
    }
    #intro{
        padding-top: 25px;
        margin-bottom:10px;
    }
    #intro-pic{
        right:calc(50% - 420px) !important;
        bottom: 0 !important;
        height: 120vh !important;
    }
    #pronun, #noun{
        line-height: 40px;
        font-size: 12px;
    }
    #defs{
        font-size: 20px;
        line-height: 35px;
        padding-left: 20px;
        padding-top: 4px;
    }
    .hamburger{display: inline-block;}
    .portfolio-entry:hover .overlay
    {
        height:100% !important;
    }
}

#hline{
    flex-grow:1;
    height: 1px;
    width: 90%;
    margin-left: 5%;
    background-color: gold;
  }

#pointer-portfolio-main:hover
{
    opacity: 100%;
    transition:opacity 0.7s;
}
#pointer-portfolio:hover
{
    opacity: 100%;
    transition:opacity 0.7s;
}
#pointer-about:hover
{
    opacity: 100%;
    transition:opacity 0.7s;
}
#pointer-contact:hover
{
    opacity: 100%;
    transition:opacity 0.7s;
}
a:link
{
    color:black;
    text-decoration: none;
}
a:visited
{
    color:black;
}
#intro-pic
{
    display: inline-block;
    position:fixed;
    width: auto;
    min-width: 110vh;
    min-height: 100vh;
    height: 110vh;
    margin:0px;
    overflow-x: hidden;
    white-space: nowrap;
    bottom:-10%;
    right: 0;
    z-index: -1;
}

@media screen and (min-width: 1200px){
    #intro-pic{
        width:100vw;
        height: auto;
        object-fit: cover;
    }
}

.splash
{
    padding:0;
    margin:0;
    height: 100vh;
    width: auto;
    position: relative;
    overflow-x: hidden;
}

#pointer-portfolio-main
{
    font-family: 'Lato', sans-serif;
    font-size: 15px; 	
    line-height: 15px;
    text-align: center;
    margin: 0;
    padding:0;
    position: absolute;
    bottom:20px;
    left:0;
    right:0;
    opacity:50%;
    z-index: 10;
    color: black;
    transition:opacity 0.7s;
}
#pointer-portfolio
{
    font-family: 'Lato', sans-serif;
    font-size: 15px; 	
    line-height: 15px;
    text-align: center;
    margin: 0;
    padding:0;
    position: fixed;
    top:50%;
    opacity:50%;
    z-index: 0;
    color: white;
}

#pointer-about
{
    font-family: 'Lato', sans-serif;
    font-size: 15px; 	
    line-height: 15px;
    text-align: center;
    margin: 0;
    padding:0;
    position: fixed;
    top:50%;
    opacity:50%;
    z-index: 10;
    color: white;
    transition:opacity 0.7s;
    transition: color 700ms linear;
}

#pointer-contact
{
    font-family: 'Lato', sans-serif;
    font-size: 15px; 	
    line-height: 15px;
    text-align: center;
    margin: 0;
    padding:0;
    position: fixed;
    top:50%;
    opacity:50%;
    z-index: 10;
    color: white;
    transition:opacity 0.7s;
    transition: color 700ms linear;
}

.raptor
{
    background-color:black;
    padding-left:50px;
    padding-right:50px;
    z-index: 1;
    padding-top:50px;
    padding-bottom: 50px;
    text-align: center;
    width: 100%;
    box-sizing: border-box;
}

.portfolio
{
    background-color:white;
    padding-left:70px;
    padding-right:70px;
    z-index: 1;
    padding-top:100px;
    padding-bottom: 100px;
    width: 100%;
    box-sizing: border-box;
    display: flex;
    flex-wrap: wrap;
    justify-content: center;
    gap: 45px;
}

.portfolio > a
{
    display: contents;
}

.portfolio-entry
{
    background-color:grey;
    background-size: cover;
    flex: 0 1 calc((100% - 90px) / 3);
    max-width: 340px;
    aspect-ratio: 1 / 1;
    position: relative;
    container-type: inline-size;
}

#whoosh
{
    background-image: url("../images/whoosh_square_color.png");
    background-repeat: no-repeat;
    background-position: top;
}

#pcbs
{
    background-image: url("../images/pcbs_square_color.png");
    background-repeat: no-repeat;
    background-position: top;
}

#oven
{
    background-image: url("../images/oven\ color.png");
    background-repeat: no-repeat;
    background-position: top;
}

#smartdorm
{
    background-image: url("../images/sd_square_1.png");
    background-repeat: no-repeat;
    background-position: top;
}
#dev
{
    background-image: url("../images/dev_square_1.png");
    background-repeat: no-repeat;
    background-position: top;
}
#art
{
    background-image: url("../images/clocks_square-1.png");
    background-repeat: no-repeat;
    background-position: top;
}
#enable
{
    background-image: url("../images/enable_square_1.png");
    background-repeat: no-repeat;
    background-position: top;
}
#fpv
{
    background-image: url("../images/fpv_square_1.png");
    background-repeat: no-repeat;
    background-position: top;
}
#tank
{
    background-image: url("../images/tank_square_1.png");
    background-repeat: no-repeat;
    background-position: top;
}
#rocket-car
{
    background-image: url("../images/new_rc_color.png");
    background-repeat: no-repeat;   
    background-position: top;
}
#bayes
{
    background-image: url("../images/bayes_square_1.png");
    background-repeat: no-repeat;
    background-position: top;
}
#website
{
    background-image: url("../images/website_square_1.png");
    background-repeat: no-repeat;
    background-position: top;
}
#test-stand
{
    background-image: url("../images/thrust_square_1.png");
    background-repeat: no-repeat;
    background-position: top;
}
#prints
{
    background-image: url("../images/3dprinting_square_1.png");
    background-repeat: no-repeat;
    background-position: top;
}
#hexlights
{
    background-image: url("../images/hexlights_square_1.png");
    background-repeat: no-repeat;
    background-position: top;
}
#flyak
{
    background-image: url("../images/flyak_square_1.png");
    background-repeat: no-repeat;
    background-position: top;
}
#frc
{
    background-image: url("../images/sciborgs_square_1.png");
    background-repeat: no-repeat;
    background-position: top;
}
#tube
{
    background-image: url("../images/tube_square_1.png");
    background-repeat: no-repeat;
    background-position: top;
}
#battlebot
{
    background-image: url("../images/battlebot_square_1.png");
    background-repeat: no-repeat;
    background-position: top;
}
#part107
{
    background-image: url("../images/dronephoto_square_1.png");
    background-repeat: no-repeat;
    background-position: top;
}
#airbrakes
{
    background-image: url("../images/rocket_color.png");
    background-repeat: no-repeat;
    background-position: top;
}
#cubesat
{
    background-image: url("../images/cubesat_color.png");
    background-repeat: no-repeat;
    background-position: top;
}

.portfolio-entry:hover .overlay
{
    height:20%;
}

.portfolio-entry img
{
    position: absolute;
    top: 0;
    left: 0;
    width: 100%;
    height: 100%;
    object-fit: cover;
    padding: 0;
    margin: 0;
}
.overlay {
    position: absolute;
    bottom:0;
    left: 0;
    right: 0;
    background-color: #012169;
    overflow: hidden;
    width: 100%; 
    height: 0;
    transition: .5s ease;
  }
.text {
    color: white;
    font-size: clamp(8px, 3.7cqw, 14px);
    position: absolute;
    top: 50%;
    left: 50%;
    width:90%;
    font-family: 'Cabin', sans-serif;
    -webkit-transform: translate(-50%, -50%);
    -ms-transform: translate(-50%, -50%);
    transform: translate(-50%, -50%);
    text-align: center;
}
.text span
{
    font-size: clamp(11px, 5.3cqw, 20px);
    line-height: clamp(13px, 6.6cqw, 25px);
}
.rotate-left {
    right:0;
    transform: rotate(-90deg);

    /* Legacy vendor prefixes that you probably don't need... */
  
    /* Safari */
    -webkit-transform: rotate(-90deg);
  
    /* Firefox */
    -moz-transform: rotate(-90deg);
  
    /* IE */
    -ms-transform: rotate(-90deg);
  
    /* Opera */
    -o-transform: rotate(-90deg);
  
    /* Internet Explorer */
    filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=3);
  
  }

  .rotate-right {
    left:0;
    transform: rotate(90deg);
  
  
    /* Legacy vendor prefixes that you probably don't need... */
  
    /* Safari */
    -webkit-transform: rotate(90deg);
  
    /* Firefox */
    -moz-transform: rotate(90deg);
  
    /* IE */
    -ms-transform: rotate(90deg);
  
    /* Opera */
    -o-transform: rotate(90deg);
  
    /* Internet Explorer */
    filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=1);
  
  }

  .footer
  {
      height:60px;
      background-color:  #030040;
      width: auto;
  }
  #copyright
  {
      width:60%;
      height: 60px;
      position:relative;
      display:inline-block;
      font-family: Verdana, Geneva, Tahoma, sans-serif;
      font-size: 11px;
      line-height: 60px;
      text-align: center;
      color:white
  }
  .aboutvid
  {
      width: 35%;
      margin-top:15%;
      margin-left:12%;
      display: inline-block;
  }
  .vl
  {
      border-left: 6px solid black;
      margin: 0;
      padding: 0;
      height:50%;
      width:1px;
  }
  .abouttext
  {
      display:inline-block;
      width: 50%;
  }

/* ==========================================================================
   Shared project-page rules (moved here from being duplicated across every
   assets/css/*-style.css file - verified byte-identical in every file that
   had them before consolidating). Rules with genuine per-page customizations
   (.proj-splash, .proj-splash-desc/-features, .gallery-num, .halves-desc >
   div > div > div > h1, #copyright) were left in their page-specific files
   instead, since consolidating those would silently break the customization
   (this shared file loads after the page-specific one, so it would win the
   cascade tie).
   ========================================================================== */

table {
    border-collapse: collapse;
  }
  table td {
    border: 3px solid white;
  }
  table tr:first-child td {
    border-top: 0;
  }
  table tr td:first-child {
    border-left: 0;
  }
  table tr:last-child td {
    border-bottom: 0;
  }
  table tr td:last-child {
    border-right: 0;
  }

.doc-loader {
    transition: opacity 0.3s ease;
}

.back-button{
    font-size: 40px;
    z-index: 10;
    position: absolute;
    left: 30px;
    top: 20px;
}

.features-wrapper{
    width: 100%;
    text-align: center;
}
.features-wrapper > h4{
    font-family: 'Oswald', sans-serif;
    color: gray;
}
.feature{
    display: block;
    padding-top: 15px;
}
.feature-icon{
    width:50px;
    height: 50px;
    display: inline-block;
}
.feature-name{
    display: inline-block;
    padding-left: 15px;
    font-family: 'Oswald', sans-serif;
    font-weight: 400;
    color: gray;
}
.abstract{
    font-family: 'Open Sans', sans-serif;
    padding-top: 10px;
}
.mobile-splash-desc{
    display: none;
    padding:15px;
    font-family: 'Oswald', sans-serif;
    text-align: center;
    background-color: white;
}
.mobile-splash-features{
    display: none;
    background-color: white;
    padding:20px;
}

.gallery{
    overflow-x: hidden;
    overflow-y: clip;
}
.gallery-img{
    height: 400px;
    background-repeat: no-repeat;
    background-size: cover;
    background-position: center;
    transition:0.3s;
}
.gallery > div > div > .col-md{
    padding:0px !important;
}

.halves-desc{
    padding: 20px;
}
.halves-desc > div{
    text-align: center;
}
.left-img{
    background-color: white;
}
.right-img{
    background-color: lightgray;
}

.no-pad{
    padding: none;
}

.contact-button{
    margin-left: 20px;
    font-size: 30px;
    font-family: 'Oswald', sans-serif;
    border: 2px solid white;
    border-radius: 8px;
    padding-left: 10px;
    padding-right: 10px;
}
.contact-button:hover{
    background-color: white;
    color: #030040;
    transition: 0.3s;
}
.design-goals > h1{
    font-family: 'Oswald', sans-serif;
    position: absolute;
    font-weight: 200;
    left: -20px;
    top: 50%;
    transform: translateY(-50%) rotate(-90deg);
    margin: 0;
    display: inline-block;
}
@media (max-width: 991.98px) {
    .design-goals > h1{
        position: relative;
        font-weight: 200;
        left: unset !important;
        top: unset !important;
        transform: unset !important;
        margin: auto;
        padding-top: 20px;
        display: inline-block;
    }
}

.learn-more > h2{
    font-family: 'Oswald', sans-serif;
}
.learn-more > a{
    color: white !important;
}

/* Fills a positioned container the same way the background-image gifs these
   replaced used to (background-size: cover/contain, background-position:
   center), for divs that now hold a <video> instead. */
.media-cover, .media-contain{
    width: 100%;
    height: 100%;
    display: block;
}
.media-cover{
    object-fit: cover;
}
.media-contain{
    object-fit: contain;
}

/* Hover-triggered background videos (the mach1-4 clips): the video sits over
   the still background-image and is only shown/played while hovered, so nothing
   downloads or plays until the visitor actually hovers it. hover-video.js
   wires the play()/pause() side of this. */
.hover-video-target{
    position: relative;
    overflow: hidden;
}
.hover-video-target > video{
    position: absolute;
    top: 0;
    left: 0;
    opacity: 0;
    transition: opacity 150ms ease-in-out;
}
.hover-video-target:hover > video{
    opacity: 1;
}