/* Shared page rhythm. Loaded after component styles in both layouts.
   Full-screen map and fixed action bars keep their own viewport geometry. */
:root {
  --page-space-start: 32px;
  --page-space-end: 48px;
  --section-space: 32px;
  --block-space: 24px;
}
@media (max-width: 767px) {
  :root {
    --page-space-start: 24px;
    --page-space-end: 32px;
    --section-space: 24px;
    --block-space: 16px;
  }
}

.public-site:not(.map-page) #main > .container:not(.public-flash),
.panel-workspace > .panel-content {
  padding-block: var(--page-space-start) var(--page-space-end);
}
/* A last component's margin must not add a second footer gap. Hidden
   dialogs, scripts and no-JS fallbacks are not visual page endings. */
.public-site:not(.map-page) #main > .container:not(.public-flash) > :nth-last-child(1 of :not([hidden], script, style, dialog, noscript)),
.panel-content > :nth-last-child(1 of :not([hidden], script, style, dialog, noscript)),
.panel-content > :is(.factory-workspace, .settings-workspace, .category-workspace) > :last-child {
  margin-block-end: 0;
}
.public-site #main > .public-flash {
  padding-block-start: var(--page-space-start);
}
.public-site #main > .public-flash > .notice { margin-block: 0; }
.public-site #main .breadcrumbs,
.public-site #main .page-heading,
.panel-content .page-heading {
  margin-block-end: var(--block-space);
}
.public-site #main .section-heading { margin-block-end: var(--block-space); }
.public-site .results-heading { margin-block: var(--section-space) var(--block-space); }
/* Results heading already provides the gap, including the empty grid case. */
.public-site .search-recovery { margin-block: 0; }
.public-site .comparison-toolbar { margin-block: 0 var(--block-space); }
.public-site .activity-directory-heading { margin-block-end: var(--block-space); }

/* Home already uses flex gaps: no additional section padding or margins. */
.public-site .home-page { row-gap: var(--section-space); }
.public-site .home-page > :is(.home-intro, .section) { padding-block: 0; }
.public-site .home-page > .section .section-heading { margin-block-end: var(--block-space); }
.public-site .public-cta { margin-block-start: var(--section-space); }
.public-site .related-factories { margin-block: var(--section-space); }
.public-site .about-intro { margin-block-end: var(--section-space); }
.public-site .editorial-section { padding-block: var(--section-space); }
.public-site .industry-description { margin-block-end: var(--block-space); }
.public-site .industry-children { margin-block-end: var(--section-space); }
.public-site .industry-intro { margin-block-end: var(--section-space); }
.public-site .estate-explorer-heading,
.public-site .estate-profile-heading,
.public-site .estate-statistics { margin-block-end: var(--block-space); }
.public-site :is(.estate-profile-grid, .estate-main, .estate-rail) { gap: var(--block-space); }
.public-site .estate-profile-section,
.public-site .estate-register { margin-block-start: var(--section-space); }
.public-site .factory-experience { --pf-panel-gap: var(--block-space); }
.public-site .factory-experience :is(.pf-section, .pf-content > .factory-rating) .section-heading { margin-block-end: var(--block-space); }

/* Panel: page-level groups, not the compact fields/actions inside them. */
.panel-content > .dashboard-insights { margin-block: var(--section-space); }
.panel-content > .dashboard-grid { margin-block-start: var(--section-space); gap: var(--block-space); }
.panel-content .factory-edit-workspace .editor-main { gap: var(--block-space); }
