/* Archive & Atlas - /privacy. Built 2026-08-17 from newfiles/aa-privacy-mockup-v1.html.
   STORE SKIN (Van): tokens lifted from store.css:5-14 - bone paper, near-black ink,
   deep archive blue as the engine colour, Fraunces / Inter / JetBrains Mono.
   GOLD IS DELIBERATELY ABSENT - store.css reserves it for price and Acquire, and
   nothing is sold on this page. Blue carries the accent instead.

   Band architecture matches give.css (hero / ledger / tint / table / ink strip) so
   Privacy, Patron, Donate and Digitize read as one system despite the palettes.

   THIS FILE CARRIES ITS OWN RESET AND BODY FONT ON PURPOSE. The page loads
   shell.css + sitehead.css + this, and NOT library.css or store.css - which are the
   only two files that ship the site's reset. give.css shipped without it at v348 and
   every paragraph on three pages rendered in Times New Roman while lint and preflight
   both passed. Do not remove the block below. */
:root{
  --pv-paper:#f5f1e8; --pv-ink:#1b1a16; --pv-ink-80:#403c34; --pv-ink-60:#6a6456;
  --pv-ink-45:#8d8675; --pv-ink-30:#b3ac99;
  --pv-ink-15:color-mix(in oklab,var(--pv-ink) 15%,var(--pv-paper));
  --pv-blue:#1f3a5f; --pv-blue-2:#2d5683; --pv-blue-ink:#16283f;
  --pv-mist:#ece6d7; --pv-card:#fbf8f1; --pv-line:#ddd6c4; --pv-line-2:#cfc7b2;
  --pv-green:#3f7d54; --pv-coral:#9d4b35;
  --pv-on-ink:color-mix(in oklab,white 66%,transparent);
  --pv-on-ink-dim:color-mix(in oklab,white 44%,transparent);
  --pv-rule-ink:color-mix(in oklab,white 20%,transparent);
  --pv-serif:'Fraunces',Georgia,serif;
  --pv-ui:'Inter',system-ui,sans-serif;
  --pv-mono:'JetBrains Mono',ui-monospace,monospace;
}
*{box-sizing:border-box;margin:0;padding:0}
html,body{background:var(--pv-mist);color:var(--pv-ink);font-family:var(--pv-ui);-webkit-font-smoothing:antialiased}
img{display:block;max-width:100%}
a{color:inherit;text-decoration:none}
.pv-serif{font-family:var(--pv-serif);font-weight:400;letter-spacing:-.01em}

/* THE GROUND UNDER THE CARD. shell.css:21 paints #app with the surface register and
   gives it min-height:100vh; shell.css:91 then adds padding-bottom:4rem for
   data-surface="library" ONLY. This page is store-surfaced, so it got neither:
   - the card's 4rem bottom margin COLLAPSED through #app instead of pushing it down,
     so the card sat flush against the bottom edge, and
   - #app painted the store register while html/body painted mist, so that edge was
     also a visible colour seam.
   Paint the same ground and hold the gap with padding on the parent, which is what
   stops the collapse. Same shape library pages already get. */
#app{background:var(--pv-mist);padding-bottom:4rem;}
.pv-shell{max-width:1040px;margin:2.5rem auto 4rem;background:var(--pv-card);border:1px solid var(--pv-line-2);border-radius:14px;overflow:hidden;line-height:1.5;box-shadow:0 1px 2px color-mix(in oklab,var(--pv-ink) 8%,transparent),0 22px 60px -38px color-mix(in oklab,var(--pv-ink) 45%,transparent)}
@media(max-width:1090px){.pv-shell{margin-left:1.25rem;margin-right:1.25rem}}
.pv-wrap{padding:0 2.6rem}
@media(max-width:620px){.pv-wrap{padding:0 1.3rem}}
.pv-band{border-top:1px solid var(--pv-line);padding:3rem 0}
.pv-band.tint{background:var(--pv-mist)}
.pv-band.ink{background:var(--pv-blue-ink);color:var(--pv-paper);border-top-color:var(--pv-blue-ink)}
.pv-band.hero-band{border-top:none;padding-top:0;padding-bottom:0}
@media(max-width:620px){.pv-band{padding:2.2rem 0}}
.pv-eyebrow{font-family:var(--pv-mono);font-size:10px;text-transform:uppercase;letter-spacing:.26em;color:var(--pv-ink-45);margin:0}
.ink .pv-eyebrow{color:var(--pv-on-ink-dim)}
.pv-sh{display:flex;align-items:baseline;justify-content:space-between;gap:1.5rem;flex-wrap:wrap;border-bottom:1px solid var(--pv-ink-30);padding-bottom:.9rem;margin-bottom:1.7rem}
.pv-sh h2{font-family:var(--pv-serif);font-weight:500;font-size:2.05rem;line-height:1.05;letter-spacing:-.02em;margin:0}
.pv-sh .meta{font-family:var(--pv-mono);font-size:9.5px;text-transform:uppercase;letter-spacing:.18em;color:var(--pv-ink-45)}

/* hero */
.pv-hero{display:grid;grid-template-columns:minmax(0,1.25fr) minmax(0,1fr);gap:3.5rem;padding:3.6rem 0 3.2rem;align-items:start}
.pv-hero>*{min-width:0}
@media(max-width:900px){.pv-hero{grid-template-columns:1fr;gap:2rem;padding:2.6rem 0 2.2rem}}
.pv-hero h1{font-family:var(--pv-serif);font-weight:500;font-size:3.2rem;line-height:1.02;letter-spacing:-.03em;margin:1.2rem 0 1rem;color:#fff;overflow-wrap:break-word}
@media(max-width:620px){.pv-hero h1{font-size:2.2rem}}
.pv-hero .lede{font-size:1.02rem;line-height:1.6;color:var(--pv-on-ink);max-width:46ch;margin:0}
.pv-cap{display:flex;justify-content:space-between;gap:1rem;font-family:var(--pv-mono);font-size:9px;text-transform:uppercase;letter-spacing:.18em;color:var(--pv-on-ink-dim);padding-bottom:.6rem;border-bottom:1px solid var(--pv-rule-ink)}
.pv-ledger .r{display:flex;align-items:baseline;gap:.9rem;padding:.55rem 0;border-bottom:1px solid var(--pv-rule-ink);min-width:0}
.pv-ledger .r .n{font-family:var(--pv-serif);font-weight:600;font-size:1.7rem;line-height:1;color:#fff;min-width:3.4rem;text-align:right;flex:none;font-variant-numeric:tabular-nums}
.pv-ledger .r .l{font-size:.84rem;color:var(--pv-on-ink);min-width:0;overflow-wrap:break-word}

/* the promise band. MUST stack on narrow - as a fixed two-up it gave the headline a
   122px column to hold 30px type at 375px. Measured, not assumed. */
.pv-promise-row{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1fr);gap:3rem;align-items:center}
.pv-promise-row>*{min-width:0}
@media(max-width:820px){.pv-promise-row{grid-template-columns:1fr;gap:1.4rem}}
.pv-promise{font-family:var(--pv-serif);font-weight:500;font-size:2.6rem;line-height:1.1;letter-spacing:-.02em;color:#fff;max-width:20ch;margin:0}
@media(max-width:620px){.pv-promise{font-size:1.9rem}}
.pv-promise-sub{color:var(--pv-on-ink);font-size:.95rem;line-height:1.65;margin:0}

/* three-up */
.pv-cols3{display:grid;grid-template-columns:repeat(3,1fr);gap:0}
.pv-cols3>*{min-width:0}
@media(max-width:860px){.pv-cols3{grid-template-columns:1fr 1fr}}
@media(max-width:560px){.pv-cols3{grid-template-columns:1fr}}
.pv-item{padding:1rem 1.6rem 1.1rem 0;border-bottom:1px solid var(--pv-ink-15);border-right:1px solid var(--pv-ink-15);min-width:0}
.pv-cols3 .pv-item{padding-left:1.6rem}
.pv-cols3 .pv-item:nth-child(3n+1){padding-left:0}
.pv-cols3 .pv-item:nth-child(3n){border-right:none;padding-right:0}
@media(max-width:860px){
  .pv-cols3 .pv-item:nth-child(2n+1){padding-left:0}
  .pv-cols3 .pv-item:nth-child(2n){border-right:none;padding-right:0}
  .pv-cols3 .pv-item:nth-child(3n){border-right:1px solid var(--pv-ink-15)}
}
/* ONE COLUMN HAS NO COLUMNS, SO IT MUST NOT KEEP THE COLUMN GUTTERS (2026-08-27).
   The nth-child rules above space cards ACROSS a row. Below 560px the grid is a
   single column but nothing reset them, so the 2-up rules still ran and staggered
   the stack: card 1 padding-left 0, card 2 padding-left 1.6rem, card 3 back to 0.
   MEASURED at 375px - the three headings started at x=42, x=67, x=42, and they
   read as accidentally indented rather than as a list. The right border is the
   same defect's other half: a column divider drawn where there is no column
   beside it, on cards 1 and 3 only. In one column all three cards are identical. */
@media(max-width:560px){
  .pv-cols3 .pv-item,
  .pv-cols3 .pv-item:nth-child(2n),
  .pv-cols3 .pv-item:nth-child(2n+1),
  .pv-cols3 .pv-item:nth-child(3n){padding-left:0;padding-right:0;border-right:none}
}
.pv-item .n{font-family:var(--pv-mono);font-size:9px;letter-spacing:.14em;color:var(--pv-blue-2);display:block;margin-bottom:.35rem}
.pv-item .n.no{color:var(--pv-coral)}
.pv-item h4{font-size:.95rem;font-weight:600;margin:0 0 .25rem}
.pv-item p{font-size:.87rem;color:var(--pv-ink-80);margin:0}

/* tables */
.pv-tbl{width:100%;table-layout:fixed;border-collapse:collapse;font-size:.88rem}
.pv-tbl th{font-family:var(--pv-mono);font-size:9px;text-transform:uppercase;letter-spacing:.16em;color:var(--pv-ink-45);text-align:left;font-weight:500;padding:0 1rem .6rem 0;border-bottom:1px solid var(--pv-ink-30);vertical-align:bottom}
.pv-tbl td{padding:.72rem 1rem .72rem 0;border-bottom:1px solid var(--pv-ink-15);color:var(--pv-ink-80);vertical-align:top}
.pv-tbl td:last-child,.pv-tbl th:last-child{padding-right:0}
.pv-tbl td.k{color:var(--pv-ink);font-weight:500}
.pv-tbl td.m{font-family:var(--pv-mono);font-size:.78rem;color:var(--pv-ink-60)}
.pv-tbl td.never{color:var(--pv-green);font-weight:500}
.pv-tbl tbody tr:hover td{background:color-mix(in oklab,var(--pv-ink) 3%,transparent)}
.pv-scroll{overflow-x:auto}
.pv-scroll .pv-tbl{min-width:34rem}
.pv-note{border-left:3px solid var(--pv-blue);background:var(--pv-mist);padding:.9rem 1.1rem;font-size:.87rem;color:var(--pv-ink-80);margin-top:1.5rem}
.tint .pv-note{background:var(--pv-card)}

/* ink strip: sentence left, contact right */
.pv-strip{background:var(--pv-ink);color:var(--pv-paper)}
.pv-strip .in{display:flex;align-items:center;gap:1.6rem;flex-wrap:wrap;padding:1.15rem 2.6rem}
@media(max-width:620px){.pv-strip .in{padding:1.1rem 1.3rem;gap:.7rem}}
.pv-strip .say{font-family:var(--pv-serif);font-weight:500;font-size:1.45rem;letter-spacing:-.02em;color:var(--pv-paper);min-width:0}
.pv-strip .sp{margin-left:auto;font-family:var(--pv-mono);font-size:10px;letter-spacing:.14em;color:var(--pv-on-ink-dim);word-break:break-word}
.pv-strip .sp:hover{color:var(--pv-paper)}
@media(max-width:620px){.pv-strip .sp{margin-left:0}}

.pv-ftr{border-top:1px solid var(--pv-line);background:var(--pv-mist)}
.pv-ftr .in{display:flex;align-items:baseline;justify-content:space-between;gap:1rem;flex-wrap:wrap;padding:1.7rem 2.6rem 2.3rem}
.pv-ftr .nm{font-family:var(--pv-serif);font-size:1.05rem}
.pv-ftr .meta{font-family:var(--pv-mono);font-size:9px;text-transform:uppercase;letter-spacing:.2em;color:var(--pv-ink-45)}
