/* ============================================================
   MONSERRO — Independent media company
   Editorial static site · shared stylesheet
   ============================================================ */

/* ---------- Tokens ---------- */
:root{
  --paper:#EDEBE4;      /* warm bone */
  --ink:#0B0B0B;        /* near black */
  --muted:#8B8578;      /* warm grey */
  --line:#CFC9BC;       /* hairline on paper */
  --signal:#F03A17;     /* ember — used sparingly */

  /* role tokens (flipped inside .invert) */
  --bg:var(--paper);
  --fg:var(--ink);
  --hair:var(--line);
  --dim:var(--muted);

  --maxw:1600px;
  --pad:clamp(18px,4.4vw,72px);
  --grain:.05;

  --serif:"Times New Roman",Times,"Iowan Old Style",Georgia,serif;
  --sans:"Helvetica Neue",Helvetica,Arial,"Segoe UI",sans-serif;
  --mono:"SFMono-Regular",ui-monospace,"Cascadia Mono",Menlo,Consolas,monospace;
}
.invert{
  --bg:#0B0B0B;
  --fg:#EDEBE4;
  --hair:#2A2A28;
  --dim:#8F897E;
  --grain:.08;
  background:var(--bg);
  color:var(--fg);
}

*{box-sizing:border-box;margin:0;padding:0}
html{scroll-behavior:smooth;-webkit-text-size-adjust:100%}
body{
  background:var(--paper);
  color:var(--ink);
  font-family:var(--sans);
  font-size:16px;line-height:1.5;
  -webkit-font-smoothing:antialiased;
  text-rendering:optimizeLegibility;
  overflow-x:hidden;
}
img{max-width:100%;display:block}
a{color:inherit;text-decoration:none}
::selection{background:var(--signal);color:#fff}

/* ---------- Utilities ---------- */
.container{max-width:var(--maxw);margin:0 auto;padding-left:var(--pad);padding-right:var(--pad)}
.section{background:var(--bg);color:var(--fg);position:relative}
.pad-y{padding-top:clamp(56px,10vh,140px);padding-bottom:clamp(56px,10vh,140px)}
.serif{font-family:var(--serif)}
.mono{font-family:var(--mono)}
.kicker{font-family:var(--sans);font-size:11px;letter-spacing:.24em;text-transform:uppercase;color:var(--dim);font-weight:500}
.reg{font-family:var(--sans);vertical-align:super;font-size:.32em;letter-spacing:0;color:var(--signal)}
.hr{height:1px;background:var(--hair);border:0;width:100%}
/* Reveals are progressive enhancement: hidden state only applies once JS
   adds .reveal-ready to <html>. If JS fails, all content stays visible. */
html.reveal-ready .reveal{opacity:0;transform:translateY(26px);transition:opacity 1s cubic-bezier(.22,1,.36,1),transform 1s cubic-bezier(.22,1,.36,1)}
html.reveal-ready .reveal.is-in{opacity:1;transform:none}

/* Blocks the editor has marked as deleted (applied server-side on public pages) */
.mns-hidden{display:none !important}

/* ---------- Grain overlay ---------- */
.grain{position:relative}
.grain::after{
  content:"";position:absolute;inset:0;pointer-events:none;z-index:2;mix-blend-mode:overlay;opacity:var(--grain);
  background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='180' height='180'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.9' numOctaves='2' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23n)'/%3E%3C/svg%3E");
}

/* ---------- Cinematic plates (image placeholders) ----------
   Replace .plate blocks with <img>/<video> later; keep the
   .plate wrapper for aspect-ratio + grain. See README. */
.plate{position:relative;overflow:hidden;background:#111;isolation:isolate}
.plate .fill{position:absolute;inset:0;background-size:cover;background-position:center;transform:scale(1.02);transition:transform 1.6s cubic-bezier(.22,1,.36,1);filter:grayscale(1) contrast(1.05)}
/* Uploaded photos (editor) fill their slot with a cinematic B&W treatment */
.plate img.fill,.hero .bg img.fill{object-fit:cover;width:100%;height:100%}
.plate .vig{position:absolute;inset:0;z-index:1;background:linear-gradient(180deg,rgba(0,0,0,.15),rgba(0,0,0,0) 45%,rgba(0,0,0,.5))}
.plate .plabel{position:absolute;left:16px;bottom:14px;z-index:3;font-family:var(--mono);font-size:10.5px;letter-spacing:.16em;text-transform:uppercase;color:rgba(237,235,228,.72)}
.plate--a .fill{background:radial-gradient(120% 120% at 68% 22%,#5a5a5a 0%,#2b2b2b 42%,#0c0c0c 100%)}
.plate--b .fill{background:linear-gradient(155deg,#4c4c4c 0%,#232323 46%,#0a0a0a 100%)}
.plate--c .fill{background:linear-gradient(200deg,#606060 0%,#2e2e2e 40%,#101010 100%)}
.plate--d .fill{background:radial-gradient(130% 100% at 30% 80%,#565656 0%,#262626 46%,#0b0b0b 100%)}
.plate--e .fill{background:linear-gradient(120deg,#3f3f3f 0%,#1a1a1a 60%,#050505 100%)}
.plate--f .fill{background:radial-gradient(100% 120% at 75% 15%,#6a6a6a 0%,#333 40%,#0d0d0d 100%)}
a.hoverplate:hover .fill,.hoverplate:hover .fill{transform:scale(1.06)}

/* ============================================================
   HEADER / NAV
   ============================================================ */
.site-head{
  position:fixed;top:0;left:0;right:0;z-index:100;
  display:flex;align-items:center;justify-content:space-between;
  padding:0 var(--pad);height:66px;
  color:var(--fg);
  transition:background .5s ease,color .5s ease,border-color .5s ease;
  border-bottom:1px solid transparent;mix-blend-mode:difference;
}
/* mix-blend-mode difference makes the bar legible over light or dark;
   its own color is bone so it inverts against content. */
.site-head, .site-head a, .site-head button{color:#EDEBE4}
.site-head.solid{mix-blend-mode:normal;background:color-mix(in srgb,var(--paper) 90%,transparent);backdrop-filter:blur(12px);-webkit-backdrop-filter:blur(12px);border-color:var(--line)}
.site-head.solid, .site-head.solid a, .site-head.solid button{color:var(--ink)}
.wordmark{font-family:var(--sans);font-weight:700;font-size:18px;letter-spacing:.02em}
.wordmark .reg{color:var(--signal)}
.mainnav{display:flex;gap:clamp(14px,2vw,34px);align-items:center}
.mainnav a{font-size:12px;letter-spacing:.16em;font-weight:500;opacity:.85;transition:opacity .25s;position:relative;padding:4px 0}
.mainnav a:hover{opacity:1}
.mainnav a.is-current{opacity:1}
.mainnav a.is-current::after{content:"";position:absolute;left:0;right:0;bottom:-2px;height:1.5px;background:var(--signal)}
.mainnav a.ext{opacity:.85}
.menu-toggle{display:none;background:none;border:1px solid currentColor;border-radius:2px;font-size:11px;letter-spacing:.16em;padding:7px 12px;cursor:pointer;font-family:var(--sans)}

/* Mobile menu overlay */
.mobile-menu{
  position:fixed;inset:0;z-index:99;background:#0B0B0B;color:#EDEBE4;
  display:flex;flex-direction:column;justify-content:center;gap:6px;padding:var(--pad);
  transform:translateY(-100%);transition:transform .6s cubic-bezier(.76,0,.24,1);
}
.mobile-menu.open{transform:none}
.mobile-menu a{font-family:var(--serif);font-size:clamp(34px,11vw,68px);line-height:1.06;letter-spacing:-.01em}
.mobile-menu a .i{font-family:var(--mono);font-size:12px;letter-spacing:.2em;color:var(--signal);vertical-align:super;margin-right:12px}
.mobile-menu .mm-foot{margin-top:auto;display:flex;gap:22px;font-family:var(--sans);font-size:12px;letter-spacing:.16em;color:#8F897E}
.mm-close{position:absolute;top:22px;right:var(--pad);background:none;border:0;color:#EDEBE4;font-size:12px;letter-spacing:.16em;cursor:pointer;font-family:var(--sans)}
@media(max-width:860px){
  .mainnav{display:none}
  .menu-toggle{display:inline-block}
}

/* ============================================================
   HERO
   ============================================================ */
.hero{position:relative;height:100svh;min-height:600px;color:#EDEBE4;overflow:hidden}
.hero .bg{position:absolute;inset:0;z-index:0}
.hero .bg .fill{position:absolute;inset:0;background:radial-gradient(130% 110% at 60% 30%,#4a4a4a 0%,#202020 44%,#070707 100%);filter:grayscale(1);animation:heroZoom 30s ease-in-out infinite alternate}
@keyframes heroZoom{from{transform:scale(1.04)}to{transform:scale(1.18) translate3d(-2%,-2%,0)}}
.hero .scrim{position:absolute;inset:0;z-index:1;background:linear-gradient(180deg,rgba(0,0,0,.35),rgba(0,0,0,.05) 40%,rgba(0,0,0,.55))}
.hero-inner{position:relative;z-index:3;height:100%;display:flex;flex-direction:column;justify-content:center;padding:0 var(--pad);max-width:var(--maxw);margin:0 auto}
.hero .word{font-family:var(--sans);font-weight:700;letter-spacing:-.02em;line-height:.9;font-size:clamp(58px,17vw,290px)}
.hero .word .reg{font-size:.16em;vertical-align:super;color:var(--signal)}
.hero .micro{margin-top:clamp(18px,3vh,34px);font-family:var(--sans);font-size:clamp(13px,1.4vw,17px);letter-spacing:.04em;color:rgba(237,235,228,.9);line-height:1.7}
.hero .micro b{font-weight:600}
.hero-bottom{position:absolute;left:0;right:0;bottom:0;z-index:3;padding:0 var(--pad) 20px;max-width:var(--maxw);margin:0 auto;display:flex;justify-content:space-between;align-items:flex-end;gap:20px}
.hero-bottom .exists{font-family:var(--serif);font-style:italic;font-size:clamp(15px,1.6vw,20px);color:rgba(237,235,228,.85)}
.hero .scrolldot{display:flex;align-items:center;gap:10px;font-size:10.5px;letter-spacing:.2em;text-transform:uppercase;color:rgba(237,235,228,.75)}
.hero .scrolldot .d{width:6px;height:6px;border-radius:50%;background:var(--signal);animation:pulse 2.4s ease-in-out infinite}
@keyframes pulse{0%,100%{opacity:1;transform:scale(1)}50%{opacity:.4;transform:scale(1.6)}}

/* Category ticker */
.ticker{border-top:1px solid var(--hair);border-bottom:1px solid var(--hair);overflow:hidden;white-space:nowrap;background:var(--bg);color:var(--fg)}
.ticker-track{display:inline-flex;gap:0;padding:14px 0;animation:tick 34s linear infinite;will-change:transform}
.ticker-track span{font-family:var(--sans);font-size:13px;letter-spacing:.22em;text-transform:uppercase;padding:0 26px;color:var(--fg)}
.ticker-track span i{color:var(--signal);font-style:normal;margin-left:26px}
@keyframes tick{to{transform:translateX(-50%)}}

/* ============================================================
   SECTION HEADER (shared)
   ============================================================ */
.sec-head{display:flex;align-items:baseline;justify-content:space-between;gap:20px;flex-wrap:wrap;padding-bottom:clamp(24px,4vh,44px);border-bottom:1px solid var(--hair)}
.sec-head h2{font-family:var(--serif);font-weight:400;font-size:clamp(28px,4.4vw,60px);letter-spacing:-.01em;line-height:.98}
.sec-head .rt{font-family:var(--sans);font-size:11px;letter-spacing:.22em;text-transform:uppercase;color:var(--dim);text-align:right}

/* ============================================================
   THE FRONT PAGE
   ============================================================ */
.frontpage .fp-grid{display:grid;grid-template-columns:repeat(12,1fr);gap:clamp(20px,2.4vw,40px);margin-top:clamp(30px,5vh,60px)}
.entry{grid-column:span 4;display:flex;flex-direction:column;border-top:1px solid var(--hair);padding-top:16px}
.entry.lead{grid-column:span 8;grid-row:span 2}
.entry.wide{grid-column:span 8}
.entry .emeta{display:flex;align-items:center;gap:12px;font-family:var(--mono);font-size:11px;letter-spacing:.14em;text-transform:uppercase;color:var(--dim)}
.entry .emeta .cat{color:var(--fg)}
.entry .emeta .num{color:var(--signal)}
.entry .eplate{margin:16px 0;border-radius:2px}
.entry.lead .eplate{aspect-ratio:16/9}
.entry .eplate{aspect-ratio:4/3}
.entry h3{font-family:var(--serif);font-weight:400;letter-spacing:-.01em;line-height:1.05;font-size:clamp(20px,2vw,28px);transition:color .3s}
.entry.lead h3{font-size:clamp(30px,4.6vw,68px);line-height:1.0}
.entry .foot{margin-top:12px;font-family:var(--sans);font-size:12px;letter-spacing:.06em;color:var(--dim)}
.entry:hover h3{color:var(--signal)}
.entry.textonly{padding-bottom:18px}
@media(max-width:1000px){
  .entry{grid-column:span 6}
  .entry.lead,.entry.wide{grid-column:span 12}
}
@media(max-width:620px){
  .entry,.entry.lead,.entry.wide{grid-column:span 12}
  .entry.lead h3{font-size:clamp(28px,9vw,40px)}
}

/* ============================================================
   SELECTED WORK
   ============================================================ */
.work-grid{display:grid;grid-template-columns:repeat(12,1fr);gap:clamp(20px,2.4vw,44px);margin-top:clamp(30px,5vh,60px)}
.wk{grid-column:span 6;display:block}
.wk.tall{grid-column:span 6}
.wk.full{grid-column:span 12}
.wk .wkplate{border-radius:2px}
.wk.full .wkplate{aspect-ratio:16/8}
.wk .wkplate{aspect-ratio:3/2}
.wk.tall .wkplate{aspect-ratio:4/5}
.wk .wkmeta{display:flex;justify-content:space-between;gap:16px;align-items:baseline;margin-top:14px;padding-bottom:16px;border-bottom:1px solid var(--hair)}
.wk .wkmeta h3{font-family:var(--serif);font-weight:400;font-size:clamp(20px,2.2vw,32px);letter-spacing:-.01em;line-height:1.02;transition:color .3s}
.wk .wkmeta .yr{font-family:var(--mono);font-size:12px;letter-spacing:.1em;color:var(--dim);white-space:nowrap}
.wk .wktag{font-family:var(--sans);font-size:11px;letter-spacing:.18em;text-transform:uppercase;color:var(--dim);margin-top:8px}
.wk .wktag .cs{color:var(--signal)}
.wk:hover h3{color:var(--signal)}
@media(max-width:760px){.wk,.wk.tall,.wk.full{grid-column:span 12}}

/* ============================================================
   MONSERRO UNIVERSE
   ============================================================ */
.universe .uni-lead{font-family:var(--serif);font-weight:400;font-size:clamp(22px,3.4vw,46px);line-height:1.16;letter-spacing:-.01em;max-width:22ch;margin-top:clamp(28px,4vh,48px)}
.universe .uni-lead .signal{color:var(--signal)}
.uni-tree{margin-top:clamp(40px,7vh,80px);border-top:1px solid var(--hair)}
.uni-node{display:grid;grid-template-columns:40px 1.4fr 1fr auto;gap:clamp(14px,2.4vw,40px);align-items:baseline;padding:clamp(20px,3vh,30px) 0;border-bottom:1px solid var(--hair)}
.uni-node .un{font-family:var(--mono);font-size:12px;color:var(--dim)}
.uni-node .uname{font-family:var(--serif);font-size:clamp(20px,2.4vw,32px);letter-spacing:-.01em}
.uni-node .udesc{font-family:var(--sans);font-size:14px;color:var(--dim);max-width:38ch}
.uni-node .ustatus{font-family:var(--sans);font-size:11px;letter-spacing:.16em;text-transform:uppercase;color:var(--dim);text-align:right;white-space:nowrap}
.uni-node.active .uname{color:var(--fg)}
.uni-node.reserved .uname{color:var(--dim);letter-spacing:.06em}
.uni-node .redact{background:currentColor;color:var(--dim);border-radius:1px}
.uni-node .ustatus .live{color:var(--signal)}
@media(max-width:760px){
  .uni-node{grid-template-columns:1fr;gap:8px}
  .uni-node .ustatus{text-align:left}
}

/* ============================================================
   INDEX / ARCHIVE
   ============================================================ */
.index-intro{max-width:60ch;font-family:var(--sans);font-size:clamp(15px,1.5vw,18px);color:var(--dim);margin-top:20px}
.index-filters{display:flex;flex-wrap:wrap;gap:8px;margin:clamp(30px,5vh,50px) 0 8px}
.index-filters button{font-family:var(--sans);font-size:11px;letter-spacing:.14em;text-transform:uppercase;background:none;border:1px solid var(--hair);color:var(--dim);border-radius:100px;padding:8px 15px;cursor:pointer;transition:.25s}
.index-filters button:hover{color:var(--fg);border-color:var(--fg)}
.index-filters button.active{background:var(--fg);color:var(--bg);border-color:var(--fg)}
.index-list{margin-top:10px;border-top:1px solid var(--hair)}
.ix{display:grid;grid-template-columns:64px 1fr 150px 70px;gap:clamp(12px,2vw,30px);align-items:baseline;
  padding:clamp(15px,2vh,20px) 0;border-bottom:1px solid var(--hair);font-family:var(--mono);
  transition:padding-left .45s cubic-bezier(.22,1,.36,1),background .3s}
.ix .ixn{font-size:12px;color:var(--signal);letter-spacing:.1em}
.ix .ixt{font-family:var(--serif);font-size:clamp(17px,1.8vw,24px);letter-spacing:-.005em;line-height:1.1}
.ix .ixc{font-family:var(--sans);font-size:11px;letter-spacing:.16em;text-transform:uppercase;color:var(--dim)}
.ix .ixy{font-size:12px;color:var(--dim);text-align:right}
.ix:hover{padding-left:14px}
.ix .redact{background:var(--dim);color:transparent;border-radius:1px;padding:0 2px}
@media(max-width:760px){
  .ix{grid-template-columns:44px 1fr auto;gap:12px}
  .ix .ixc{display:none}
}

/* ============================================================
   JOURNAL
   ============================================================ */
.jrn-list{margin-top:clamp(30px,5vh,60px);border-top:1px solid var(--hair)}
.jrow{display:grid;grid-template-columns:1.2fr 1fr;gap:clamp(20px,4vw,70px);align-items:center;padding:clamp(28px,5vh,56px) 0;border-bottom:1px solid var(--hair)}
.jrow:nth-child(even) .jrplate{order:2}
.jrplate{aspect-ratio:16/10;border-radius:2px}
.jrow .jmeta{display:flex;gap:12px;font-family:var(--mono);font-size:11px;letter-spacing:.14em;text-transform:uppercase;color:var(--dim)}
.jrow .jmeta .cat{color:var(--signal)}
.jrow h3{font-family:var(--serif);font-weight:400;font-size:clamp(24px,3.4vw,48px);line-height:1.04;letter-spacing:-.01em;margin-top:16px;transition:color .3s}
.jrow p{font-family:var(--sans);color:var(--dim);font-size:15px;margin-top:16px;max-width:46ch}
.jrow .rd{margin-top:22px;font-family:var(--sans);font-size:12px;letter-spacing:.14em;text-transform:uppercase;display:inline-flex;gap:10px;border-bottom:1px solid currentColor;padding-bottom:5px;transition:gap .3s,color .3s}
.jrow:hover h3{color:var(--signal)}
.jrow .rd:hover{gap:18px;color:var(--signal)}
@media(max-width:820px){
  .jrow,.jrow:nth-child(even) .jrplate{grid-template-columns:1fr;order:0}
  .jrplate{order:-1 !important}
}

/* ============================================================
   COMPANY / ABOUT
   ============================================================ */
.company-hero{padding-top:clamp(120px,20vh,240px)}
.company-hero .big{font-family:var(--serif);font-weight:400;font-size:clamp(30px,6vw,92px);line-height:1.04;letter-spacing:-.02em;max-width:16ch}
.company-hero .big .signal{color:var(--signal)}
.company-cols{display:grid;grid-template-columns:1fr 1fr;gap:clamp(30px,6vw,110px);margin-top:clamp(50px,9vh,110px)}
.company-cols p{font-family:var(--sans);font-size:clamp(15px,1.5vw,19px);color:var(--fg);max-width:52ch}
.company-cols p+p{margin-top:20px}
.company-cols .muted{color:var(--dim)}
.company-facts{display:grid;grid-template-columns:repeat(3,1fr);gap:24px;margin-top:clamp(56px,10vh,120px);border-top:1px solid var(--hair);padding-top:36px}
.company-facts .f .t{font-family:var(--sans);font-size:11px;letter-spacing:.2em;text-transform:uppercase;color:var(--dim);margin-bottom:12px}
.company-facts .f .v{font-family:var(--serif);font-size:clamp(20px,2.2vw,30px);letter-spacing:.01em}
@media(max-width:760px){.company-cols{grid-template-columns:1fr;gap:24px}.company-facts{grid-template-columns:1fr;gap:24px}}

/* Page hero (interior pages) */
.page-hero{padding-top:clamp(120px,20vh,220px)}
.page-hero .ph-kicker{margin-bottom:22px}
.page-hero h1{font-family:var(--serif);font-weight:400;font-size:clamp(40px,9vw,150px);line-height:.92;letter-spacing:-.02em}
.page-hero h1 .reg{color:var(--signal)}
.page-hero .ph-sub{font-family:var(--sans);font-size:clamp(14px,1.4vw,18px);color:var(--dim);max-width:52ch;margin-top:26px}

/* ============================================================
   FOOTER
   ============================================================ */
.site-foot{background:#0B0B0B;color:#EDEBE4;padding:clamp(60px,10vh,120px) var(--pad) 40px}
.site-foot .fin{max-width:var(--maxw);margin:0 auto}
.site-foot .fmark{font-family:var(--sans);font-weight:700;font-size:clamp(48px,14vw,190px);letter-spacing:-.03em;line-height:.82}
.site-foot .fmark .reg{color:var(--signal);font-size:.16em;vertical-align:super}
.site-foot .fline{font-family:var(--serif);font-style:italic;font-size:clamp(16px,2vw,24px);color:#B7B1A6;margin-top:26px;max-width:34ch}
.site-foot .frow{display:flex;justify-content:space-between;flex-wrap:wrap;gap:24px;margin-top:clamp(48px,8vh,90px);padding-top:28px;border-top:1px solid #2A2A28}
.site-foot .fnav{display:flex;gap:28px;flex-wrap:wrap}
.site-foot .fnav a{font-family:var(--sans);font-size:12px;letter-spacing:.16em;text-transform:uppercase;color:#EDEBE4;opacity:.85;transition:.25s}
.site-foot .fnav a:hover{opacity:1;color:var(--signal)}
.site-foot .flegal{font-family:var(--sans);font-size:11px;letter-spacing:.06em;color:#7C766B;line-height:1.7}

/* ============================================================
   MOTION PREFERENCES
   ============================================================ */
@media (prefers-reduced-motion: reduce){
  *{animation:none !important;transition:none !important;scroll-behavior:auto !important}
  .reveal,html.reveal-ready .reveal{opacity:1 !important;transform:none !important}
  .hero .bg .fill{animation:none}
}
