/* Shared module rhythm. Keep text, buttons and card internals compact. */
:root{--module-gap:24px;--field-gap:16px}
@media(max-width:700px){:root{--module-gap:16px}}
/* Equal horizontal and vertical gutters for independent panels. */
.service-grid,.content-grid,.tool-grid,.browse-layout,.news-grid,.news-layout,.detail-layout,.about-columns,.source-grid,.workspace{gap:var(--module-gap)}
.service-grid,.about-columns{margin-block:0}
/* Main-level blocks use one margin owner, including dynamically hidden filters. */
#main>:not([hidden]){margin-block:0}
#main>:not([hidden])~:not([hidden]){margin-top:var(--module-gap)}
#main>.page-heading,#main>.home-intro,#main>.breadcrumb{padding-bottom:0}
/* Stacked panels: eliminate accumulated top and bottom margins. */
.content-grid>div:first-child,.home-aside,.news-aside,.detail-sidebar{display:grid;gap:var(--module-gap);align-content:start}
.content-grid>div:first-child>section,.home-aside>*,.news-aside>*,.detail-sidebar>*{margin-block:0}
.home-aside>.update-note{margin-top:0}
/* Repeated result cards use grid gaps, so last cards leave no extra space. */
#researchResults,#homeResearch,.search-group,#cards{display:grid;gap:var(--module-gap)}
#researchResults>.paper-row,#homeResearch>.paper-row,.search-group>.search-result,#cards>.card{margin-block:0}
.tool-grid>.tool-card,.about-columns>.about-card{margin:0}
.home-scroll-controls{margin-bottom:0}
/* Consistent form groups, without inflating the spacing inside a field. */
.research-filter-grid,.journal-filters{gap:var(--field-gap)}
.browse-toolbar,.result-summary{margin-bottom:var(--module-gap)}
.browse-layout .filter-panel{margin-bottom:0}
@media(max-width:600px){.browse-layout>.filter-panel{margin-bottom:var(--module-gap)}}
/* Meeting navigation, heading, search and results follow the same rhythm. */
body:has(#meetingsPage) main>.intro{padding-bottom:0;margin-bottom:var(--module-gap)}
body:has(#meetingsPage) main>.notice,body:has(#meetingsPage) .meeting-tabs{margin-bottom:var(--module-gap)}
.results>.result-head,.results>.search-wrap{margin:0 0 var(--module-gap)}
.results>.result-head h2{margin:0}
@media(max-width:700px){.workspace>aside{margin-bottom:var(--module-gap)}}
/* Journal cards on narrow screens retain the same vertical gutter. */
@media(max-width:760px){.journal-table tbody{gap:var(--module-gap)}}
.home-aside>.right-box,.detail-sidebar>.right-box,.news-aside>.right-box{margin-block:0}
.news-layout>.news-aside{display:grid;gap:var(--module-gap)}
