.layout { --max-content-width: 800px; --min-content-width: 550px; --nav-width: 200px; --content-margin: 16px; --container-padding: 12px; --grid-gutter: calc(var(--content-margin) + var(--container-padding)); --grid-min-center-width: calc(var(--min-content-width) + 2 * var(--grid-gutter)); --grid-max-center-width: calc(var(--max-content-width) + 2 * var(--grid-gutter)); --grid-left: min(var(--nav-width), calc(.2 * 100vw)); --grid-right: min(var(--nav-width), calc(100vw - 2 * var(--container-padding) - var(--nav-width) - var(--grid-min-center-width))); max-width: calc(2 * var(--nav-width) + var(--grid-max-center-width)); width: calc(100vw - 2 * var(--container-padding)); margin: 0 auto; display: grid; grid-template-columns: var(--grid-left) 1fr var(--grid-right); grid-template-rows: repeat(3, auto); column-gap: var(--grid-gutter); row-gap: var(--grid-gutter); } .layout > *:not(main) { color: white; } .layout header { display: flex; grid-row: 1 / 2; grid-column: 2 / 3; padding: var(--container-padding) 0; } .layout nav { grid-row: 2 / 3; grid-column: 1 / 2; } .layout main { grid-row: 2 / 3; grid-column: 2 / 3; padding: var(--container-padding); margin: 0 -16px; background: white; box-shadow: 0px 0px 8px #00000066; border: solid 12px #ffffffcc; background-clip: padding-box; } .layout footer { grid-column: 2 / 3; grid-row: 3 / 4; padding: var(--container-padding) 0; }