body { margin: 0; background-color: #acf; } .current { background-color: white; } header a, .contact a { text-decoration: none; } header a, footer a { color: inherit; } header.banner a { display: flex; align-items: center; } header.banner img { filter: brightness(0%); transition: filter 1s; } header.banner:hover img { filter: brightness(100%) sepia(100%); } header.banner h1 { margin: 0; transition: color 1s; } header.banner:hover h1 { color: #d82; } @media (min-width: 40em) { .togglable > input.toggle, .togglable > img.button, .togglable > label { display: none; } body { min-height: 100vh; display: grid; grid-template-columns: 2fr 1fr 3fr 1fr 1fr; grid-template-rows: auto 1fr auto; } header.banner { grid-column: 1; } header.banner img { width: 10rem; } header.banner h1 { font-size: 1.5rem; } header.menu { grid-column: 3 / -1; } header.menu > .content { display: grid; grid-template-columns: 3fr 1fr 1fr; } header.menu nav { grid-column: 1; margin-top: 2rem; } header.menu .lang { grid-column: 3; } nav > ol { display: flex; align-items: center; align-content: stretch; flex-wrap: wrap; padding-left: 0; text-align: center; list-style-type: none; } nav > ol > li { flex: 1; } nav > ol > li > a { display: block; padding: 0.5em 0.1em; } nav li.dropdown { position: relative; } nav li.dropdown ul { position: absolute; padding-left: 0; width: 100%; text-align: left; background: lightgrey; z-index: 1; overflow: hidden; max-height: 0; transition: max-height 0.5s; } nav li.dropdown:hover ul { /* ⚠ Magic constant: must be big enough to show the whole dropdown, but not too big otherwise the transition will be "delayed". */ max-height: 5em; } nav li.dropdown > ul > li { list-style-type: none; } nav li.dropdown > ul > li:hover { background: white; } nav li.dropdown > ul > li a { display: block; /* Make link span whole containing block. */ padding-inline-start: 10%; } nav li.dropdown > ul > li a img { width: 1em; height: 1em; } .lang { grid-column: 5; background-color: black; border-radius: 50% 50% 50% 0; color: white; padding: 0.5em; margin: auto; margin-top: 3rem; } main { grid-row: 2; grid-column: 1 / -2; padding-left: 4%; } footer.social { grid-row: 2; grid-column: 5; position: sticky; top: 0; } footer.social > .content { display: flex; flex-direction: column; align-items: center; } .social img { width: 2em; margin-top: 0.5em; margin-bottom: 0.5em; } .contact { /* Ideally should be just: */ /* writing-mode: sideways-lr; */ /* but of course We Can't Have Nice Things. */ writing-mode: vertical-rl; transform: rotate(180deg); margin: 0; padding: 1em 0.5em; } footer.legal { grid-column: 1 / -1; width: 100%; text-align: center; margin: auto; font-size: 75%; } } @media (max-width: 40em) { body { --togglable-origin: left; --togglable-transform: translate(-100vw); display: grid; grid-template-columns: 2fr 1fr; grid-template-rows: auto auto 1fr auto; min-height: 100vh; } header.banner { grid-row: 1 / 3; grid-column: 1; } header.menu { grid-row: 1; grid-column: 2; } footer.social { grid-row: 2; grid-column: 2; } footer.legal { grid-row: 4; grid-column: 1 / -1; } main { grid-row: 3; grid-column: 1 / -1; } .togglable { display: grid; position: relative; grid-template-columns: 2rem auto; align-items: center; } .togglable > input.toggle { z-index: 2; grid-column: 1; position: absolute; width: 2rem; height: 2rem; margin: 0; opacity: 0; } .togglable > img.button.open { grid-column: 1; position: absolute; left: 0.2rem; width: 1.6rem; height: 1.6rem; object-fit: contain; object-position: center; } .togglable > img.button.close { display: block; position: fixed; top: 1rem; right: 1rem; width: 1.5rem; height: 1.5rem; transform-origin: var(--togglable-origin); transform: var(--togglable-transform); transition: transform 0.5s; z-index: 4; } .togglable > label { grid-column: 2; height: 100%; display: flex; align-items: center; } .togglable > .content { display: block; position: fixed; overflow: auto; width: 100%; height: 100%; top: 0; left: 0; margin: 0; background: #dddd; transform-origin: var(--togglable-origin); transform: var(--togglable-transform); transition: transform 0.5s; z-index: 3; } .togglable > input.toggle:checked { display: block; position: fixed; top: 1rem; right: 1rem; width: 1.5rem; height: 1.5rem; z-index: 5; } .togglable > input.toggle:checked ~ img.button.close { transform: none; } .togglable > input.toggle:checked ~ .content { transform: none; } header.banner img { width: 4rem; height: 4rem; } }