/* Page layout. Mobile first: one column, a burger menu; then tabs and more columns as space allows. */ /* --------------------------------------------------------------- top bar */ .topbar { display: grid; grid-template-columns: minmax(0, 1fr) auto; grid-template-areas: 'title toggle' 'menu menu'; align-items: center; gap: var(--gap); padding: var(--gap) 1rem; background: var(--surface); border-bottom: 1px solid var(--border); } .topbar__title { grid-area: title; font-size: 1.25rem; overflow-wrap: anywhere; } .menu-toggle { grid-area: toggle; } /* Phones: the menu is a drop-down opened by the burger button. */ .menu { grid-area: menu; display: none; flex-direction: column; gap: var(--gap); } .menu[data-open] { display: flex; } .tabs { display: flex; flex-direction: column; gap: 0.35rem; } .menu__controls { display: flex; flex-wrap: wrap; align-items: flex-end; gap: var(--gap); padding-top: var(--gap); border-top: 1px solid var(--border); } /* Tablet and desktop: the tabs form a bar under the title, the controls sit on the right. */ @media (min-width: 760px) { .topbar { grid-template-columns: minmax(0, 1fr) auto; grid-template-areas: 'title controls' 'tabs tabs'; row-gap: 0.5rem; } /* More specific than .btn (components.css loads later) so the burger really disappears. */ .topbar .menu-toggle { display: none; } /* The nav's children join the top bar grid directly. */ .menu, .menu[data-open] { display: contents; } .tabs { grid-area: tabs; flex-direction: row; flex-wrap: wrap; } .menu__controls { grid-area: controls; padding-top: 0; border-top: 0; } } /* -------------------------------------------------------- resource bar */ .resourcebar { position: sticky; top: 0; z-index: 5; display: flex; gap: var(--gap); padding: 0.4rem 1rem; background: var(--surface); border-bottom: 1px solid var(--border); box-shadow: 0 2px 6px rgb(0 0 0 / 0.12); } /* ----------------------------------------------------------------- views */ .views { max-width: 1400px; margin: 0 auto; } /* The production section is a named grid, the others a simple responsive one. */ .game { display: grid; gap: 1rem; padding: 1rem; grid-template-columns: minmax(0, 1fr); grid-template-areas: 'stats' 'production' 'market' 'generators' 'upgrades'; } .view { display: grid; gap: 1rem; padding: 1rem; grid-template-columns: minmax(0, 1fr); align-items: start; } .panel--stats { grid-area: stats; } .panel--production { grid-area: production; } .panel--market { grid-area: market; } .panel--generators { grid-area: generators; } .panel--upgrades { grid-area: upgrades; } /* Tablet */ @media (min-width: 760px) { .game { grid-template-columns: repeat(2, minmax(0, 1fr)); grid-template-areas: 'stats stats' 'production market' 'generators upgrades'; align-items: start; } .view { grid-template-columns: repeat(2, minmax(0, 1fr)); } .panel--wide { grid-column: 1 / -1; } } /* Desktop */ @media (min-width: 1200px) { .game { grid-template-columns: minmax(0, 1fr) minmax(0, 1.2fr) minmax(0, 1.2fr); grid-template-rows: auto auto 1fr; /* spare height goes below the left column, not between its panels */ grid-template-areas: 'stats stats stats' 'production generators upgrades' 'market generators upgrades'; } .view { grid-template-columns: repeat(3, minmax(0, 1fr)); } }