body { height: 100vh; box-sizing: border-box; margin: 0; } h1 { margin-top: 0; margin-bottom: 0.25rem; } .page-container { display: grid; grid-template-columns: 1fr 1fr 1fr; grid-template-rows: auto 2rem 1fr 2rem; width: 100%; height: 100%; } .panel { padding: 0.25rem; /* Establishing minimum sizes here causes the codemirror CSS to work */ min-height: 0; min-width: 0; overflow-y: scroll; border-left: 1px solid; border-right: 1px solid; border-bottom: 1px solid; } .panel-top { padding: 0.5rem; border-bottom: 1px dashed; border-right: 1px solid; border-left: 1px solid; border-top: 1px solid; } .page-title { grid-column: 1 / 4; grid-row: 1; padding: 0.5rem; } .grammar-title { grid-column: 1; grid-row: 2; } .grammar-container { grid-column: 1; grid-row: 3; } .input-title { grid-column: 2; grid-row: 2; } .input-container { grid-column: 2; grid-row: 3; } .result-selector { position: relative; grid-column: 3; grid-row: 2; } .result-selector-buttons { position: absolute; top: 0.25rem; right: 1rem; } .results-container { grid-column: 3; grid-row: 3; } .status { grid-column: 1 / 4; grid-row: 4; padding: 0.25rem; border: 1px solid; } .parsed-node { margin-left: 1rem; } .parsed-error-node { color: red; } .error-panel { margin: 1rem; } .main-textarea { height: 100%; width: 100%; } .hidden { display: none; } .CodeMirror { height: 100%; }