.demoTile {
    opacity: 0.7;
    transition: opacity 0.3s;
    max-width: 15vw;
    display: inline;
}

.demoTile:hover {
    opacity: 1.0;
}

.demoTiles {
    position: absolute;
    background-color:white;
    left:27.5%;
    top: var(--title-height);
    margin-top:40px;
}

.page.portfolio {
    padding-top: 0;
    width: 70%;
    right: 0;
    margin:0;
    padding:0;
    transform: translate(-40%,0);
}

.portfolio h1 {
    margin: 1em 0 0 0;
}

.portfolio p {

}

.wrapper {
    margin-top: 1em;

    width: 100%;
    height: 100%;
    background-color: transparent;
    /*background-color: var(--background);*/
    display: grid;
    grid-template-columns: 1fr 1fr 1fr 1fr;
}

/* what the fuck 
 * https://www.karlhorky.com/2012/06/cross-browser-image-grayscale-with-css.html
 * */
.wrapper img {
    width: 100%;
    height: 100%;
    object-fit: cover;
    transition: transform 0.1s ease-in;

    filter: url("data:image/svg+xml;utf8,&lt;svg xmlns=\'http://www.w3.org/2000/svg\'&gt;&lt;filter id=\'grayscale\'&gt;&lt;feColorMatrix type=\'matrix\' values=\'0.3333 0.3333 0.3333 0 0 0.3333 0.3333 0.3333 0 0 0.3333 0.3333 0.3333 0 0 0 0 0 1 0\'/&gt;&lt;/filter&gt;&lt;/svg&gt;#grayscale"); /* Firefox 10+, Firefox on Android */
    filter: gray; /* IE6-9 */
    -webkit-filter: grayscale(50%); /* Chrome 19+, Safari 6+, Safari 6+ iOS */

    transition: all .3s ease;
}

.wrapper img:hover {
    filter: url("data:image/svg+xml;utf8,&lt;svg xmlns=\'http://www.w3.org/2000/svg\'&gt;&lt;filter id=\'grayscale\'&gt;&lt;feColorMatrix type=\'matrix\' values=\'1 0 0 0 0, 0 1 0 0 0, 0 0 1 0 0, 0 0 0 1 0\'/&gt;&lt;/filter&gt;&lt;/svg&gt;#grayscale");

    -webkit-filter: grayscale(0%);
}
