/* cryptographyworld.com — The Register of Ciphers
   Palette: ground / ink / accent (oxblood) / secondary (cadmium) */

:root{
  --ground:#EDEBE4;        /* page ground */
  --ink:#131311;           /* type, rules */
  --accent:#7A1420;        /* oxblood — bands, section grounds, links */
  --secondary:#E8B10A;     /* cadmium — marks, highlights, the unbroken row */
  --paper:#F6F4EE;         /* raised panels */
  --dark:#131311;          /* plates, logo grounds */
  --rule:#C9C5B7;
  --muted:#5C594F;
  --measure:70ch;
  --wrap:1400px;
}

*,*::before,*::after{box-sizing:border-box;}
html{-webkit-text-size-adjust:100%;}
body{
  margin:0; background:var(--ground); color:var(--ink);
  font-family:Faustina,Georgia,"Times New Roman",serif;
  font-size:19px; line-height:1.62; text-wrap:pretty;
  -webkit-font-smoothing:antialiased;
}
img{max-width:100%; display:block;}
a{color:var(--accent); text-decoration:none;}
a:hover{color:var(--ink);}
::selection{background:var(--secondary); color:var(--ink);}
h1,h2,h3,h4{font-family:"Bricolage Grotesque",system-ui,sans-serif; font-weight:600; letter-spacing:-0.025em; line-height:1.04; margin:0;}
p{margin:0 0 1.15em;}
figure{margin:0;}
svg{flex:none;}

.wrap{max-width:var(--wrap); margin:0 auto; padding-inline:clamp(18px,4vw,36px);}
.measure{max-width:var(--measure); margin-inline:auto; padding-inline:clamp(18px,4vw,36px);}
.label{font-family:"Martian Mono",ui-monospace,monospace; font-size:10px; line-height:1.7;
  letter-spacing:0.04em; text-transform:uppercase; color:var(--muted);}
.label--ink{color:var(--ink);}
.label--accent{color:var(--accent);}
.label--gold{color:var(--secondary);}
.iconrow{display:flex; align-items:center; gap:8px;}
.skip{position:absolute; left:-9999px;}
.skip:focus{left:12px; top:12px; background:var(--secondary); color:var(--ink); padding:10px 14px; z-index:99;}

/* ---------- masthead ---------- */
.topline{height:7px; background:var(--accent);}
.masthead{position:sticky; top:0; z-index:40; background:var(--ground); border-bottom:1px solid var(--ink);}
.masthead .wrap{display:flex; flex-wrap:wrap; align-items:center; gap:10px 20px; padding-block:11px;}
.brand{display:flex; align-items:center; gap:11px; color:var(--ink);}
.brand svg{color:var(--accent);}
.brand b{display:block; font-family:"Bricolage Grotesque",sans-serif; font-size:20px; font-weight:600; letter-spacing:-0.02em; line-height:1.05;}
.brand-host{display:block; font-family:"Martian Mono",ui-monospace,monospace; font-size:9px; letter-spacing:0.04em; text-transform:uppercase; color:var(--muted); margin-top:4px;}
.brand span{display:block;}
.nav{margin-left:auto; display:flex; flex-wrap:wrap; align-items:center; gap:8px 6px;}
.nav a{display:flex; align-items:center; gap:7px; white-space:nowrap; color:var(--ink); padding:8px 10px;
  border:1px solid transparent; font-family:"Martian Mono",ui-monospace,monospace; font-size:10px; font-weight:500;
  letter-spacing:0.04em; text-transform:uppercase; transition:background .12s, color .12s, border-color .12s;}
.nav a svg{color:var(--accent); transition:color .12s;}
.nav a:hover{color:var(--accent); background:var(--paper); border-color:var(--ink); box-shadow:inset 0 -4px 0 var(--secondary);}
.nav a.is-here{color:var(--accent); box-shadow:inset 0 -4px 0 var(--secondary);}
.nav a.nav-cta{background:var(--accent); color:var(--paper); border-color:var(--accent); box-shadow:inset 4px 0 0 var(--secondary); padding-left:14px;}
.nav a.nav-cta svg{color:var(--secondary);}
.nav a.nav-cta:hover{background:var(--ink); border-color:var(--ink); color:var(--paper); box-shadow:inset 4px 0 0 var(--secondary);}

/* ---------- footer ---------- */
.foot{border-top:1px solid var(--ink); margin-top:72px;}
.foot .wrap{display:flex; flex-wrap:wrap; gap:28px 48px; padding-block:34px 56px;}
.foot h4{font-size:15px; margin-bottom:10px;}
.foot ul{list-style:none; margin:0; padding:0;}
.foot li{margin-bottom:6px;}
.foot a{color:var(--ink); font-size:16px;}
.foot a:hover{color:var(--accent);}
.foot .foot-brand{flex:1 1 260px;}
.foot .foot-brand p{font-size:16px; color:var(--muted); max-width:40ch;}

/* ---------- homepage: opener ---------- */
.opener{background:var(--dark); color:var(--paper);}
.opener a{color:inherit;}
.opener-fig{position:relative; height:clamp(380px,62vh,620px); overflow:hidden;}
.opener-fig img{width:100%; height:100%; object-fit:cover; filter:saturate(0.9) contrast(1.02);}
.opener-body{background:var(--dark); padding-block:34px 44px;}
.opener-body .wrap{display:grid; gap:26px 56px; grid-template-columns:minmax(0,1.4fr) minmax(0,0.9fr); align-items:end;}
.opener h1{font-size:clamp(38px,5.6vw,78px); line-height:0.96; max-width:16ch;}
.opener .dek{font-size:clamp(17px,1.4vw,20px); color:#D9CFC6; margin:0; max-width:52ch;}
.opener .kicker{margin-bottom:16px;}

/* ---------- generic band ---------- */
.band{padding-block:clamp(48px,7vw,92px);}
.band--tight{padding-block:clamp(34px,4vw,56px);}
.band--accent{background:var(--accent); color:var(--paper);}
.band--accent a{color:var(--paper);}
.band--dark{background:var(--dark); color:var(--paper);}
.band-head{display:flex; flex-wrap:wrap; gap:12px 24px; align-items:baseline; justify-content:space-between;
  border-bottom:2px solid currentColor; padding-bottom:11px; margin-bottom:30px;}
.band-head h2{font-size:clamp(22px,2.2vw,30px);}
.quiet{font-family:"Bricolage Grotesque",sans-serif; font-weight:400; letter-spacing:-0.02em;
  font-size:clamp(24px,3.4vw,42px); line-height:1.22; max-width:26ch; margin:0;}

/* ---------- register table ---------- */
.register{width:100%; border-collapse:collapse; text-align:left;}
.register th{font-family:"Martian Mono",ui-monospace,monospace; font-size:9.5px; letter-spacing:0.04em;
  text-transform:uppercase; color:var(--muted); font-weight:400; padding:0 20px 10px 0; border-bottom:2px solid var(--ink); vertical-align:bottom;}
.register td{padding:18px 20px 18px 0; border-bottom:1px solid var(--rule); vertical-align:top; font-size:17px; line-height:1.45;}
.register tr:hover td{background:#E5E2D8;}
.register .r-title{font-family:"Bricolage Grotesque",sans-serif; font-size:21px; font-weight:600; letter-spacing:-0.015em; display:block;}
.register .r-sec{display:inline-flex; align-items:center; gap:7px; color:var(--muted);
  font-family:"Martian Mono",ui-monospace,monospace; font-size:9px; text-transform:uppercase;}
.register tr.is-unbroken td{background:var(--secondary);}
.register tr.is-unbroken:hover td{background:var(--secondary);}
.register tr.is-unbroken .r-sec{color:#6B5405;}
.register td:first-child{padding-left:12px;}
.register caption{caption-side:top; text-align:left; padding-bottom:14px;}

/* ---------- section index ---------- */
.sec-grid{display:grid; grid-template-columns:repeat(auto-fit,minmax(230px,1fr)); border-top:2px solid var(--ink);}
.sec-grid a{display:block; padding:22px 20px 26px; border-bottom:1px solid var(--rule); border-right:1px solid var(--rule); color:var(--ink);}
.sec-grid a:hover{background:#E5E2D8;}
.sec-grid svg{color:var(--accent);}
.sec-grid h3{font-size:20px; margin:14px 0 7px;}
.sec-grid p{font-size:16px; line-height:1.45; color:#43403A; margin:0 0 10px;}

/* ---------- picks (two seconds) ---------- */
.picks{display:grid; grid-template-columns:repeat(auto-fit,minmax(300px,1fr)); gap:44px;}
.pick{display:flex; flex-direction:column;}
.pick .shot{position:relative;}
.pick .shot::after{content:""; position:absolute; inset:14px -14px -14px 14px; background:var(--secondary); z-index:-1;}
.pick .shot{isolation:isolate;}
.pick img{border:1px solid var(--ink); aspect-ratio:16/10; object-fit:cover; width:100%;}
.pick h3{font-size:clamp(24px,2.4vw,32px); margin:26px 0 10px;}
.pick p{font-size:17px; line-height:1.5; color:#43403A; margin:0;}
.pick .label{margin-bottom:0;}

/* ---------- article ---------- */
.art-head{padding-block:clamp(30px,4vw,52px) 0;}
.art-head .kicker{display:inline-flex; align-items:center; gap:8px; color:var(--accent); margin-bottom:18px;}
.art-head h1{font-size:clamp(34px,5vw,64px); line-height:1.0; max-width:20ch;}
.art-head .lead{margin-top:22px;}
.lead{font-size:clamp(19px,1.6vw,23px); line-height:1.5; color:#3C392F; max-width:58ch; font-weight:500;}
.art-meta{display:flex; flex-wrap:wrap; gap:10px 28px; margin-top:26px; padding-top:14px; border-top:2px solid var(--ink);}
.art-meta div{min-width:120px;}
.art-meta b{display:block; font-family:"Bricolage Grotesque",sans-serif; font-weight:600; font-size:16px; letter-spacing:-0.01em; color:var(--ink);}
.prose{padding-block:8px;}
.prose h2{font-size:clamp(24px,2.6vw,34px); margin:0 0 18px; max-width:22ch;}
.prose h2 + p{margin-top:0;}
.prose > *{margin-inline:auto;}
.prose p, .prose h2, .prose ul, .prose ol, .prose .note, .prose .callout, .prose .pullquote,
.prose .blockquote, .prose .datatable-wrap, .prose .versus-wrap{
  max-width:var(--measure); margin-inline:auto; padding-inline:clamp(18px,4vw,36px);}
.prose h2{margin-top:2.2em;}
.prose em{font-style:italic;}
.prose a{border-bottom:1px solid rgba(122,20,32,0.4);}
.prose a:hover{border-bottom-color:var(--ink);}

/* components */
.pullquote{border-top:2px solid var(--ink); border-bottom:2px solid var(--ink); padding-block:22px; margin-block:2em;}
.pullquote p{font-family:"Bricolage Grotesque",sans-serif; font-weight:500; font-size:clamp(21px,2.2vw,28px);
  line-height:1.3; letter-spacing:-0.015em; margin:0; padding:0; max-width:none;}
.blockquote{border-left:3px solid var(--secondary); padding-left:20px; margin-block:2em;}
.blockquote p{font-size:20px; font-style:italic; margin-bottom:8px; padding:0; max-width:none;}
.blockquote cite{font-family:"Martian Mono",ui-monospace,monospace; font-size:10px; text-transform:uppercase;
  letter-spacing:0.04em; color:var(--muted); font-style:normal;}
.callout{background:var(--paper); border:1px solid var(--ink); border-left:8px solid var(--secondary);
  padding:20px 22px; margin-block:2em;}
.callout p{margin:0; padding:0; max-width:none; font-size:18px;}
.note{font-size:16px; color:#43403A; border-left:2px solid var(--rule);}
.prose p.note{padding-left:calc(clamp(18px,4vw,36px) + 14px);}

/* figure system — three treatments, one drawing system */
.article-figure{margin-block:2.6em;}
.article-figure img{width:100%;}
.article-figure figcaption{font-size:17px; line-height:1.45; color:var(--ink);}
.article-figure .credit{display:block; font-family:"Martian Mono",ui-monospace,monospace; font-size:9px;
  letter-spacing:0.04em; text-transform:uppercase; color:var(--muted); margin-top:8px;}

/* 1 — plate: full-bleed band that breaks the measure, caption on an accent bar */
.article-figure.plate{margin-inline:0; max-width:none; padding:0;}
.article-figure.plate img{aspect-ratio:16/9; object-fit:cover; max-height:70vh;}
.article-figure.plate figcaption{background:var(--accent); color:var(--paper); padding:16px clamp(18px,4vw,36px);}
.article-figure.plate figcaption .cap{display:block; max-width:60ch;}
.article-figure.plate .credit{color:#E7C6C0;}

/* 2 — mat: photograph sitting on a dark mat, hairline inset, caption hung on a gold rule */
.article-figure.mat{max-width:calc(var(--measure) + 200px); margin-inline:auto; padding-inline:clamp(18px,4vw,36px);}
.article-figure.mat .matte{background:var(--dark); padding:clamp(14px,2vw,26px);}
.article-figure.mat img{border:1px solid rgba(237,235,228,0.35); aspect-ratio:16/10; object-fit:cover;}
.article-figure.mat figcaption{border-top:2px solid var(--secondary); padding-top:12px; margin-top:16px; max-width:56ch;}

/* 3 — inset: narrow figure in the column, caption hanging beside it */
.article-figure.inset{max-width:var(--measure); margin-inline:auto; padding-inline:clamp(18px,4vw,36px);
  display:grid; grid-template-columns:minmax(0,1.35fr) minmax(150px,0.65fr); gap:20px; align-items:start;}
.article-figure.inset img{border:1px solid var(--ink); aspect-ratio:4/3; object-fit:cover;}
.article-figure.inset figcaption{font-size:16px; border-top:1px solid var(--ink); padding-top:10px;}

/* notes-for-design material — full-width interruptions */
.strip{margin-block:3em; padding-block:clamp(28px,4vw,46px);}
.strip--accent{background:var(--accent); color:var(--paper);}
.strip--dark{background:var(--dark); color:var(--paper);}
.strip .strip-head{display:flex; align-items:center; gap:9px; margin-bottom:22px;}
.strip h3{font-size:clamp(19px,2vw,26px);}
.timeline{list-style:none; margin:0; padding:0; display:grid; gap:0;
  grid-template-columns:repeat(auto-fit,minmax(230px,1fr)); border-top:1px solid rgba(237,235,228,0.4);}
.timeline li{padding:18px 22px 22px 0; border-right:1px solid rgba(237,235,228,0.25);}
.timeline li:last-child{border-right:0;}
.timeline .t-when{display:block; font-family:"Martian Mono",ui-monospace,monospace; font-size:9.5px;
  letter-spacing:0.04em; text-transform:uppercase; color:var(--secondary); margin-bottom:10px;}
.timeline .t-what{display:block; font-size:17px; line-height:1.45;}
.ledger{list-style:none; margin:0; padding:0; counter-reset:l;}
.ledger li{counter-increment:l; display:grid; grid-template-columns:44px minmax(0,1fr); gap:18px;
  padding:16px 0; border-top:1px solid rgba(237,235,228,0.25); font-size:17px; line-height:1.45;}
.ledger li::before{content:counter(l,decimal-leading-zero); font-family:"Martian Mono",ui-monospace,monospace;
  font-size:10px; color:var(--secondary); padding-top:4px;}
.ledger b{font-family:"Bricolage Grotesque",sans-serif; font-weight:600; letter-spacing:-0.01em;}

/* related / further */
.related-links{list-style:none; margin:0; padding:0;}
.related-links li{border-top:1px solid var(--rule);}
.related-links li:last-child{border-bottom:1px solid var(--rule);}
.related-links a{display:flex; flex-wrap:wrap; gap:8px 20px; justify-content:space-between; align-items:baseline;
  padding:16px 0; color:var(--ink);}
.related-links a:hover{color:var(--accent);}
.related-links .rl-title{font-family:"Bricolage Grotesque",sans-serif; font-size:21px; font-weight:600; letter-spacing:-0.015em;}
.further-grid{display:grid; grid-template-columns:repeat(auto-fit,minmax(240px,1fr)); gap:0; border-top:2px solid var(--ink);}
.further-grid a{padding:18px 20px 22px 0; border-bottom:1px solid var(--rule); border-right:1px solid var(--rule);
  color:var(--ink); font-family:"Bricolage Grotesque",sans-serif; font-size:20px; font-weight:600; letter-spacing:-0.015em;}
.further-grid a:hover{background:#E5E2D8; color:var(--accent);}

/* category list */
.cat-list{list-style:none; margin:0; padding:0; border-top:2px solid var(--ink);}
.cat-list li{border-bottom:1px solid var(--rule);}
.cat-list a{display:grid; grid-template-columns:minmax(0,1fr) minmax(0,1.1fr); gap:12px 36px; align-items:baseline;
  padding:20px 0; color:var(--ink);}
.cat-list a:hover{color:var(--accent);}
.cat-list .c-title{font-family:"Bricolage Grotesque",sans-serif; font-size:clamp(21px,2vw,26px); font-weight:600; letter-spacing:-0.02em;}
.cat-list .c-brief{font-size:17px; line-height:1.45; color:#43403A;}

/* data / comparison components */
.datatable-wrap, .versus-wrap{overflow-x:auto;}
.datatable, .versus{width:100%; border-collapse:collapse; font-size:17px; min-width:420px;}
.datatable th, .versus th{font-family:"Martian Mono",ui-monospace,monospace; font-size:9.5px; text-transform:uppercase;
  letter-spacing:0.04em; color:var(--muted); font-weight:400; text-align:left; padding:0 16px 10px 0; border-bottom:2px solid var(--ink);}
.datatable td, .versus td{padding:14px 16px 14px 0; border-bottom:1px solid var(--rule); vertical-align:top; line-height:1.45;}
.versus td:first-child{font-family:"Bricolage Grotesque",sans-serif; font-weight:600;}
.statrow{display:grid; grid-template-columns:repeat(auto-fit,minmax(170px,1fr)); gap:0; border-top:2px solid var(--ink);}
.statblock{padding:18px 20px 22px 0; border-bottom:1px solid var(--rule); border-right:1px solid var(--rule);}
.stat-num{display:block; font-family:"Bricolage Grotesque",sans-serif; font-size:clamp(34px,4vw,52px); font-weight:600;
  letter-spacing:-0.03em; line-height:1; color:var(--accent);}
.stat-label{display:block; font-size:16px; line-height:1.4; color:#43403A; margin-top:10px;}
.chart figcaption{font-size:16px; border-top:1px solid var(--ink); padding-top:10px; margin-top:12px;}
.chart svg{width:100%; height:auto;}
.gallery{display:grid; grid-template-columns:repeat(auto-fit,minmax(200px,1fr)); gap:14px;}
.gallery img{aspect-ratio:4/3; object-fit:cover; border:1px solid var(--ink);}
.gallery figcaption{font-size:15px; margin-top:8px; line-height:1.4;}

/* cards */
.profile-grid{display:grid; grid-template-columns:repeat(auto-fit,minmax(260px,1fr)); gap:20px;}
.profile-card{background:var(--paper); border:1px solid var(--ink); padding:20px; display:flex; flex-direction:column;}
.profile-card .p-photo{width:100%; aspect-ratio:1; object-fit:cover; margin-bottom:14px;}
.profile-card h3{font-size:21px; margin-bottom:4px;}
.profile-card .p-role{font-family:"Martian Mono",ui-monospace,monospace; font-size:9.5px; text-transform:uppercase;
  letter-spacing:0.04em; color:var(--muted); margin-bottom:10px;}
.profile-card p{font-size:16px; line-height:1.45;}
.profile-card .p-links{margin-top:auto; padding-top:10px;}
.org-grid{display:grid; grid-template-columns:repeat(auto-fit,minmax(220px,1fr)); gap:14px;}
.org-card{display:grid; grid-template-columns:52px minmax(0,1fr); gap:14px; align-items:center;
  border:1px solid var(--ink); padding:14px; background:var(--paper); color:var(--ink);}
.org-card:hover{background:#E5E2D8;}
.org-logo{width:52px; height:52px; object-fit:contain; background:var(--dark);}
.org-name{font-family:"Bricolage Grotesque",sans-serif; font-weight:600; font-size:18px; display:block;}
.org-host{font-family:"Martian Mono",ui-monospace,monospace; font-size:9px; text-transform:uppercase; color:var(--muted);}
.entity-ref{white-space:nowrap; border-bottom:1px solid var(--rule);}

/* collapsible long lists */
.expander{margin-top:14px;}
.expander summary{cursor:pointer; font-family:"Martian Mono",ui-monospace,monospace; font-size:9.5px;
  text-transform:uppercase; letter-spacing:0.04em; color:var(--accent); padding:12px 0; list-style:none;}
.expander summary::-webkit-details-marker{display:none;}
.expander summary::after{content:" +";}
.expander[open] summary::after{content:" –";}

/* ---------- supporters ---------- */
.supporters{border-top:1px solid var(--ink); background:var(--paper);}
.supporters .wrap{padding-block:38px 44px;}
.sponsor-head{display:flex; flex-direction:column; gap:10px; flex:1 1 280px; min-width:250px; justify-content:flex-end; padding-bottom:2px;}
.sponsor-head h2{font-size:clamp(19px,1.8vw,24px);}
.sponsor-head p{margin:0; max-width:34ch;}
.sponsor-tier{display:grid; grid-template-columns:repeat(auto-fit,250px); gap:16px; justify-content:start;}
.sponsor-tier--feat{display:flex; flex-wrap:wrap; gap:16px; align-items:stretch; margin-bottom:26px; padding-bottom:26px; border-bottom:1px solid var(--rule);}
.sponsor{display:flex; flex-direction:column; width:250px; border:1px solid var(--ink); background:var(--ground); color:var(--ink);}
.sponsor:hover{background:#E5E2D8;}
.sponsor img{width:100%; height:56px; background:var(--dark); object-fit:contain; padding:8px 14px;}
.sponsor-name{display:block; font-family:"Bricolage Grotesque",sans-serif; font-weight:600; font-size:17px;
  letter-spacing:-0.01em; padding:12px 14px 0; white-space:nowrap; overflow:hidden; text-overflow:ellipsis;}
.sponsor-blurb{display:block; font-size:15px; line-height:1.4; color:#43403A; padding:6px 14px 14px; min-height:2.8em;}
.sponsor-name + .sponsor-blurb{padding-top:4px;}
.sponsor:not(:has(.sponsor-blurb)) .sponsor-name{padding-bottom:14px;}

/* ---------- 404 / simple pages ---------- */
.pagehead{padding-block:clamp(34px,5vw,64px) 0;}
.pagehead h1{font-size:clamp(34px,5vw,60px); max-width:18ch;}
.simple p{max-width:var(--measure);}

@media (max-width:900px){
  .opener-body .wrap{grid-template-columns:1fr;}
  .cat-list a{grid-template-columns:1fr;}
  .article-figure.inset{grid-template-columns:1fr;}
  .register thead{display:none;}
  .register, .register tbody, .register tr, .register td{display:block; width:100%;}
  .register tr{border-bottom:1px solid var(--rule); padding:16px 0;}
  .register td{border:0; padding:2px 0;}
  .register td:first-child{padding-left:0;}
  .register td[data-th]::before{content:attr(data-th); display:block; font-family:"Martian Mono",ui-monospace,monospace;
    font-size:9px; text-transform:uppercase; letter-spacing:0.04em; color:var(--muted); margin:8px 0 4px;}
  .register tr.is-unbroken{background:var(--secondary); padding-inline:12px;}
  .register tr.is-unbroken td{background:transparent;}
}
@media (max-width:640px){
  body{font-size:18px;}
  .masthead .wrap{flex-wrap:nowrap;}
  .nav{flex-wrap:nowrap; overflow-x:auto; scrollbar-width:none; -webkit-overflow-scrolling:touch;}
  .nav::-webkit-scrollbar{display:none;}
  .nav a{padding:13px 10px;}
  .foot a{display:inline-block; padding:6px 0;}
  .sec-grid a{border-right:0;}
  .further-grid a{border-right:0;}
  .timeline li{border-right:0; border-bottom:1px solid rgba(237,235,228,0.25);}
  .sponsor-tier{grid-template-columns:1fr; justify-content:stretch;}
  .sponsor-head{min-width:0;}
  .sponsor{width:100%;}
}
@media print{
  .masthead,.nav,.supporters{display:none;}
  body{background:#fff;}
}
a:focus-visible, summary:focus-visible, .sponsor:focus-visible{outline:3px solid var(--secondary); outline-offset:2px;}
img{height:auto;}

/* sp-mark-align: marks sit CENTRED in their box. Placement only — Design's size,
   padding, panel and object-fit are untouched. */
.sponsor img,.sponsor-box img,.sp-logo img{object-position:center!important;margin-left:auto!important;margin-right:auto!important;display:block}
.sponsor .sp-logo,.sponsor-box{display:flex;align-items:center;justify-content:center}

/* sp-tile-uniform: a slot never grows to fill its row — every tile the same width in
   every row, whatever the count. Only flex-grow is touched. */
.sponsor{flex-grow:0!important}
.sponsor.lead-line,.sponsor.feat.lead-line{flex-grow:1!important}

/* sp-mark-fit: width:100% + padding must not overflow the tile — but the declared
   HEIGHT is the mark's size and border-box alone steals the vertical padding from it.
   earlychristianireland declares height:66px with 10px top/bottom padding: border-box
   left a 46px mark and the operator read it as 'logos too small'. Keep the horizontal
   inset, drop the vertical padding, so the mark occupies the full height Design set. */
.sponsor img,.sponsor-box img,.sp-logo img{box-sizing:border-box!important;padding-top:0!important;padding-bottom:0!important}

/* sp-blurb-unhide: every supporter slot shows its text — no half-texted grids */
.sponsor-blurb:not(:empty){display:block!important;line-height:1.5}

/* sp-blurb-link: money-link anchors in blurbs must inherit the blurb colour (readable on dark OR light tiles) */
.sponsor-blurb a{color:inherit;text-decoration:underline;text-underline-offset:2px}

/* sp-mark-frame: a uniform plate for the money mark, in the tiers where Design sized the plate
   to the artwork instead. Operator's rule: the dark ground is unified whatever the logo's
   size. width:100% (or one fixed width where copy shares the row) + one height for the tier
   + object-fit:contain, so the plate is the same box everywhere and the artwork fits inside
   it. A ground and an inset are added ONLY where none exists — adding a second ground gives
   co-cure's rectangle-inside-a-rectangle. Design's framed tiers are not touched at all. */
.sponsor-tier.sponsor-tier--feat .feat.sponsor.feat.sponsor img{box-sizing:border-box!important;padding:9px 15px!important}
.sponsor-tier .sponsor.sponsor img{box-sizing:border-box!important;padding:9px 15px!important}

/* op-money-columns: the supporters block ran one tile per row — 11 tiles,
   1977px at 390, 25% of the whole page. Two columns bring it to
   1303px (34% shorter). Checked before writing: no new overflow, smallest mark still
   167px wide, longest blurb 4 lines, tile heights 163-230px.
   A block that fails any of those is left in one column — two narrow columns can make a block
   TALLER once the copy rewraps, which is the case the operator warned about.
   The blurb is held to three rows at phone width, because a nine- or eleven-line blurb in a narrow column made two columns TALLER than one. The copy stays in the markup. An odd tile count means the lead tile spans the whole row, so the block does not end on an empty cell. Only the tier(s) that were one-per-row are touched (.sponsor-tier.sponsor-tier--feat, .sponsor-tier), never the section
   that holds several tiers: forcing a grid on that would put a featured row and a regulars run
   side by side. Phone widths only. */
@media (max-width:640px){
  .sponsor-tier.sponsor-tier--feat{display:grid!important;grid-template-columns:repeat(2,minmax(0,1fr))!important;column-gap:16px!important}
    .sponsor-tier.sponsor-tier--feat > *{min-width:0!important;max-width:100%;width:auto!important;flex:0 1 auto!important}
    .sponsor-tier.sponsor-tier--feat > * *{min-width:0!important;max-width:100%}
    .sponsor-tier.sponsor-tier--feat img,.sponsor-tier.sponsor-tier--feat svg{max-width:100%;height:auto}
  .sponsor-tier{display:grid!important;grid-template-columns:repeat(2,minmax(0,1fr))!important;column-gap:16px!important}
    .sponsor-tier > *{min-width:0!important;max-width:100%;width:auto!important;flex:0 1 auto!important}
    .sponsor-tier > * *{min-width:0!important;max-width:100%}
    .sponsor-tier img,.sponsor-tier svg{max-width:100%;height:auto}
  .sponsor-tier.sponsor-tier--feat .sponsor-blurb{display:-webkit-box!important;-webkit-line-clamp:3!important;-webkit-box-orient:vertical;overflow:hidden!important}
  .sponsor-tier .sponsor-blurb{display:-webkit-box!important;-webkit-line-clamp:3!important;-webkit-box-orient:vertical;overflow:hidden!important}
}

/* op-odd-tier-lead: .sponsor-tier (9 tiles) lay out two per row with an ODD tile count, so the
   block ended on a lone tile beside an empty cell. The lead tile takes the whole row instead —
   operator: "the 1st item in such rows to be 100% width, then split" — so the grid reads as
   complete. These tiers were already two-per-row, which is why the column pass never wrote the
   rule for them. Checked before writing: no new horizontal overflow, block not more than 15%
   taller. Phone widths only; desktop keeps Design's layout. */
@media (max-width:640px){
  .sponsor-tier:has(> *:nth-child(odd):last-child) > *:first-child{grid-column:1 / -1!important}
}

/* op-name-wrap: at 320 the money tile truncated its brand name — "Girlfriends Films" — losing up to 28px to an
   ellipsis. The name is allowed to wrap instead of being cut: a brand that reads as half a word
   is worse than a brand on two lines. Structural only, phone widths only, desktop untouched. */
@media (max-width:360px){
  .sponsor-name{white-space:normal!important;overflow-wrap:anywhere;text-overflow:clip}
}

/* op-img-dims — intrinsic width/height reserve image space; the proven height:auto guard (zero specificity) */
:where(article > figure.article-figure.plate > img,
  article.pick > div.shot > img,
  div.prose > figure.article-figure.inset > img,
  div.prose > figure.article-figure.plate > img,
  figure.article-figure.mat > div.matte > img,
  main > figure.article-figure.plate > img,
  section.opener > figure.opener-fig > img){height:auto}
/* op-img-dims:end */
@media (min-width:621px) and (max-width:889px){.sponsor-tier--feat.sponsor-tier--feat > .sponsor-head{flex:1 1 100%!important;max-width:none!important}.sponsor-tier--feat.sponsor-tier--feat > [data-partner]{flex:1 1 250px!important;width:auto!important;max-width:none!important}}
@media (min-width:621px) and (max-width:1439px){.sponsor-tier.sponsor-tier:not(.sponsor-tier--feat):has(> [data-partner]){grid-template-columns:repeat(auto-fill,minmax(250px,1fr))!important}.sponsor-tier.sponsor-tier:not(.sponsor-tier--feat) > [data-partner]{width:auto!important;max-width:none!important}}
