/* Fine neutral grain. Normal blending keeps it visible on paper and black alike. */
:root{--mgl-grain-opacity:.07}
body::before{content:"";position:fixed;inset:0;z-index:89;pointer-events:none;background:radial-gradient(ellipse at 50% 45%,transparent 55%,rgba(0,0,0,.035) 100%)}
body::after,dialog:modal::after{content:"";position:fixed;inset:0;width:100%;height:100%;z-index:2147483646;pointer-events:none;background:url('assets/editorial-grain.png') repeat;background-size:128px 128px;opacity:var(--mgl-grain-opacity);mix-blend-mode:normal;animation:mgl-film-grain .8s step-end infinite;will-change:transform;transform:translateZ(0)}
/* Native dialogs live above every document z-index. Move the same finish into
   their top layer, keeping a single grain pass over the viewport. */
body:has(dialog:modal)::after{visibility:hidden}
@keyframes mgl-film-grain{0%,100%{background-position:0 0}25%{background-position:2px -1px}50%{background-position:-1px 2px}75%{background-position:1px 1px}}
@media(max-width:800px){:root{--mgl-grain-opacity:.06}}
@media(prefers-reduced-motion:reduce){body::after,dialog:modal::after{animation:none}}
.manifesto{background:#111;min-height:0;padding:54px 4.3%;display:block}
.manifesto h2{margin:0;line-height:1.02}
@media(max-width:700px){.manifesto{min-height:0;padding:42px 18px}.manifesto h2{font-size:8.1vw;line-height:1.09}}
@media(forced-colors:active){body::before,body::after,dialog:modal::after{display:none}}
