/* Olympus — the base layout. Fixed sidebar, flat sticky header, uniform grid.
   Ported from bandsaas public/css/layouts/olympus.css, which is likewise almost
   empty: olympus IS the base chrome, so this layer only has to pin the three
   signature values explicitly rather than inherit them implicitly. It states
   them because the gate measures computed style, and "whatever the base happens
   to be today" is not a layout contract. */
/* CASCADE NOTE. These selectors are body-prefixed on purpose. The freeplay
   chrome (views/partials/freeplay-chrome.ejs) emits its base rules from a
   <style> block inside <body>, which is LATER in document order than this
   stylesheet, so at equal specificity the base would win and this layer would
   be inert — the exact "layout picker does nothing" failure. `body.layout-<id>`
   is one element more specific than `.freeplay .fp-*`, so the layer wins by
   specificity and not by load order. */


body.layout-olympus .fp-shell { grid-template-columns: 220px 1fr; }
body.layout-olympus .fp-rail { display: block; width: 220px; }
body.layout-olympus .fp-rail-link span { display: inline; }
body.layout-olympus .fp-nav-head { display: none; }

body.layout-olympus .fp-top { border-radius: 0; }

/* Uniform fixed-column grid: every tile the same size, nothing staggered. */
body.layout-olympus .pgrid {
  display: grid;
  grid-template-columns: repeat(4, 1fr);
  gap: 16px;
  column-count: auto;
}
body.layout-olympus .pgrid-item { margin-bottom: 0; width: auto; }
body.layout-olympus .pg-capsule { flex-direction: column; }

@media (max-width: 1199.98px) {
  body.layout-olympus .pgrid { grid-template-columns: repeat(3, 1fr); }
}
@media (max-width: 767.98px) {
  body.layout-olympus .fp-shell { grid-template-columns: 1fr; }
  body.layout-olympus .pgrid { grid-template-columns: repeat(2, 1fr); }
}
