/* Fluid public layout — intentionally loaded after the legacy, homepage, and
   catalog styles. Admin/editor canvases retain their own workspace geometry. */
body.public-site {
  --public-gutter: clamp(12px, 2.25vw, 42px);
  min-width: 0;
}

/* A block-level auto width fills the remaining viewport between the gutters.
   This also overrides the legacy 1190/970/750px homepage/library containers. */
body.public-site > :is(.masthead.container, .main-nav.container, #page.container, .site-footer.container) {
  width: auto;
  max-width: none;
  min-width: 0;
  margin-inline: var(--public-gutter);
}

body.public-site > .global-nav {
  padding-inline: var(--public-gutter);
}

body.public-site #page,
body.public-site #page > :is(section, article, div),
body.public-site :is(.tool-main, .catalog-main, .catalog-layout, .catalog-aside, .home-panel, .home-panel-body, .member-profile, .portal-page) {
  min-width: 0;
}

body.public-site #page :is(img, video, iframe) {
  max-width: 100%;
}

body.public-site #page :is(.content-page, .catalog-page, .tool-main, .portal-page) {
  overflow-wrap: anywhere;
}

/* User-facing dashboards and directory pages use available width; prose and
   sign-in dialogs can retain their deliberately readable measure. */
body.public-site #page > .portal-page {
  width: 100%;
  max-width: none;
}

/* Balance the logo, growing search bar and account shortcuts on wide screens. */
@media (min-width: 992px) {
  body.public-site > .masthead.container {
    display: grid;
    grid-template-columns: minmax(130px, 1fr) minmax(300px, min(48vw, 720px)) minmax(175px, 1fr);
    align-items: center;
    gap: clamp(14px, 1.6vw, 36px);
  }

  body.public-site > .masthead.container .search-form {
    position: relative;
    left: auto;
    top: auto;
    flex: initial;
    width: 100%;
    max-width: none;
    min-width: 0;
    margin: 0;
    transform: none;
  }

  body.public-site > .masthead.container .quick-links {
    justify-self: end;
    min-width: 0;
    margin-right: 0;
  }

  /* Stay sticky, but scroll the navigation within itself instead of making
     the document wider when administrators add additional menu items. */
  body.public-site > .main-nav.container {
    display: flex;
    flex-wrap: nowrap;
    overflow-x: auto;
    overflow-y: hidden;
    overscroll-behavior-x: contain;
    scrollbar-width: none;
    -webkit-overflow-scrolling: touch;
    position: sticky;
    top: 0;
    z-index: 35;
  }
  body.public-site > .main-nav.container::-webkit-scrollbar { display: none; }
  body.public-site > .main-nav.container > a { flex: 0 0 auto; }

  /* Card density responds to the actual screen size, not a fixed 1190px page. */
  body.public-site .tool-grid {
    grid-template-columns: repeat(auto-fill, minmax(min(100%, 260px), 1fr));
  }
  body.public-site .catalog-items-software {
    grid-template-columns: repeat(auto-fill, minmax(min(100%, 165px), 1fr));
  }
  body.public-site .catalog-website-grid {
    grid-template-columns: repeat(auto-fill, minmax(min(100%, 205px), 1fr));
  }
  body.public-site .catalog-items-shop {
    grid-template-columns: repeat(auto-fill, minmax(min(100%, 220px), 1fr));
  }
  body.public-site .home-tool-grid {
    grid-template-columns: repeat(auto-fill, minmax(min(100%, 145px), 1fr));
  }
  body.public-site .home-software-grid {
    grid-template-columns: repeat(auto-fill, minmax(min(100%, 170px), 1fr));
  }
}

/* The top bar becomes a proper edge-to-edge sticky touch header on tablets.
   The existing fixed bottom navigation remains the mobile navigation. */
@media (max-width: 991px) {
  body.public-site > .global-nav {
    display: none;
  }
  body.public-site > .masthead.container {
    display: flex;
    position: sticky;
    top: 0;
    width: 100%;
    margin: 0;
    padding-inline: var(--public-gutter);
    z-index: 40;
  }

  body.public-site > .masthead.container .search-form {
    min-width: 0;
    max-width: none;
    flex: 1 1 auto;
  }
  body.public-site > .masthead.container .quick-links {
    flex: 0 0 auto;
    min-width: 0;
  }
  body.public-site > .main-nav.container { display: none; }
  body.public-site .mobile-nav {
    max-width: 100%;
  }

  /* In smaller directory columns, keep the content and the sidebar viable. */
  body.public-site .catalog-layout {
    min-width: 0;
  }
}

@media (min-width: 768px) and (max-width: 991px) {
  /* Two balanced homepage columns avoid the cramped original 8:4 split on
     tablet-sized viewports. Major grids still span the full usable width. */
  body.public-site .home-overview {
    grid-template-columns: repeat(2, minmax(0, 1fr));
  }
  body.public-site .home-overview > .home-panel {
    grid-column: auto;
  }
  body.public-site .home-overview > :is(
    .home-panel-tools, .home-panel-manuscripts, .home-panel-shop,
    .home-panel-websites, .home-panel-software
  ) {
    grid-column: 1 / -1;
  }
  body.public-site .catalog-website-grid {
    grid-template-columns: repeat(2, minmax(0, 1fr));
  }
}

/* Use screen real estate on phones, without making forms or content spill
   outside the viewport. Preserve existing one-column/mobile tool layouts. */
@media (max-width: 767px) {
  body.public-site { --public-gutter: 12px; }
  body.public-site > .masthead.container .search-input input {
    font-size: 16px;
  }
  body.public-site #page :is(.tool-workspace, .catalog-main, .content-page, .member-profile-card) {
    max-width: 100%;
  }
  body.public-site .site-footer {
    max-width: none;
  }
  body.public-site .catalog-filterbar {
    flex-wrap: wrap;
  }
  body.public-site .catalog-search {
    max-width: 100%;
  }
  body.public-site .catalog-search input {
    min-width: 0;
    flex: 1 1 auto;
  }
}

@media (max-width: 380px) {
  body.public-site > .masthead.container {
    gap: 8px;
  }
  body.public-site > .masthead.container .quick-links {
    gap: 2px;
  }
  body.public-site .home-overview {
    grid-template-columns: minmax(0, 1fr);
  }
}

@media print {
  body.public-site > :is(.masthead.container, .main-nav.container, #page.container, .site-footer.container) {
    width: 100%;
    margin: 0;
  }
}
