/* Site footer — standalone CSS for the static (non-React) pages.
   Generated by _tools/shell-footer/snapshot_footer.mjs from the React stylesheets:
   every rule targeting .v5-footer* (and .v4-container, the footer's inner
   container, and .zn-foot-field, the glyph band above the footer) in
   src/v4-styles.css, src/v5-styles.css, src/v5-featured.css and
   src/v5-ornaments.css, in source order, plus the tokens the footer relies on.
   Load after /sqs/site-shell.css, /sqs/page-grounds.css and /theme/zn-theme.css:
   the palette tokens (--v4-*, --zn-*-rgb), the type variables (--serif, --mono)
   and the pulse-dot keyframes come from those. Do not hand-edit; regenerate. */

/* Tokens the footer reads that the shell may not define yet. The shell's own
   values (sqs/site-shell.css) are identical; these only fill the gap. */
:root{
  --zn-label:12px;
  --zn-label-track:.08em;
  --ease-soft:cubic-bezier(.22,.61,.36,1);
  --v4-night:#0B0C0A;
}
/* What the footer inherits from the page on the React pages (src/styles.css body
   and a resets); the static pages carry Squarespace's, so it is set on the footer. */
.v5-footer{font-family:var(--sans);font-size:15.5px;line-height:1.55;font-weight:400;color:var(--v4-ink);-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}
:where(.v5-footer) :where(a){color:inherit;text-decoration:none}
:where(.v5-footer) :where(ul){margin:0;padding:0}
:where(.v5-footer) :where(*,*::before,*::after){box-sizing:border-box}

/* ---- from src/v4-styles.css: container the footer sits in (+ its phone padding lives in v5-styles.css) ---- */
.v4-container{width:100%;max-width:1400px;margin:0 auto;padding:0 40px}
@media (max-width:900px){
  .v4-container{padding:0 20px}
}

/* ---- from src/v5-styles.css: the footer itself, the type-scale overrides for the In-focus card, phone tiers ---- */
.v5-footer{background:var(--v4-paper);border-top:1px solid var(--v4-line); position:relative;overflow:hidden;}
.v5-footer-spine{background:var(--v4-paper-2);color:var(--v4-ink); padding:32px 0;border-top:1px solid rgba(var(--zn-cream-rgb,242,238,230),0.06);border-bottom:1px solid var(--v4-ink); position:relative;overflow:hidden;}
.v5-footer-spine::before{content:"";position:absolute;inset:0;pointer-events:none; background:radial-gradient(50% 80% at 50% 50%, rgba(var(--zn-accent-rgb,185,88,60),0.10), transparent 70%);}
.v5-footer-spine-inner{display:flex;align-items:center;justify-content:space-between;gap:24px; position:relative;z-index:1;flex-wrap:wrap;}
.v5-footer-spine-mark{font-family:var(--mono);font-size:var(--zn-label);letter-spacing:var(--zn-label-track);text-transform:uppercase;color:var(--v4-mute);}
.v5-footer-spine-text{font-family:var(--serif);font-size:clamp(28px,3.8vw,52px);line-height:1.05; letter-spacing:-.022em;color:var(--v4-ink);font-style:italic; font-variation-settings:"opsz" 60;flex:1;text-align:center;}
.v5-footer-spine-text .split-char{color:var(--v4-ink);transition:color .35s ease, transform .35s cubic-bezier(.22,.61,.36,1)}
.v5-footer-spine-text:hover .split-char{color:var(--v4-accent-hi)}
.v5-footer-spine-wrap{display:inline-block; text-align:center;}
.v5-footer-spine-wrap.wire-underline::after{background:url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='120' height='8' viewBox='0 0 120 8'><path d='M0 4 C20 -1, 40 9, 60 4 S 100 -1, 120 4' fill='none' stroke='%23D86A48' stroke-width='1.4'/></svg>") repeat-x; background-size:120px 8px; bottom:-10px;}
.v5-footer-spine-meta{font-family:var(--mono);font-size:var(--zn-label);letter-spacing:var(--zn-label-track);text-transform:uppercase;color:var(--v4-mute);}
@media (max-width:900px){
  .v5-footer-spine-inner{justify-content:center}
  .v5-footer-spine-text{text-align:center;flex:0 1 100%}
}
.v5-footer-grid{display:grid;grid-template-columns:1.5fr 1fr 1fr;gap:48px; padding:64px 0 40px;}
@media (max-width:1100px){
  .v5-footer-grid{grid-template-columns:1fr 1fr;gap:32px}
}
@media (max-width:600px){
  .v5-footer-grid{grid-template-columns:1fr;gap:32px}
}
.v5-footer-col{display:flex;flex-direction:column;gap:18px}
.v5-footer-col-label{font-family:var(--mono);font-size:var(--zn-label);letter-spacing:var(--zn-label-track);text-transform:uppercase;color:var(--v4-mute); padding-bottom:6px;border-bottom:1px solid var(--v4-line); display:inline-flex;align-items:center;gap:8px;}
.v5-footer-col-label-2{margin-top:14px}
.v5-footer-col-id{gap:22px}
.v5-footer-mark{display:flex;align-items:center;gap:12px}
.v5-footer-mark-glyph{width:36px;height:36px;border-radius:50%;background:var(--v4-ink);color:var(--v4-paper); display:inline-flex;align-items:center;justify-content:center; font-family:var(--mono);font-size:13px;font-weight:600;letter-spacing:.04em; position:relative;overflow:hidden;flex-shrink:0;}
.v5-footer-mark-glyph::after{content:"";position:absolute;inset:0;border-radius:50%; background:radial-gradient(circle at 30% 30%, rgba(var(--zn-hilite-rgb,255,255,255),0.18), transparent 60%); pointer-events:none;}
.v5-footer-mark-name{display:block;font-family:var(--serif);font-size:19px;color:var(--v4-ink); letter-spacing:-.014em;font-variation-settings:"opsz" 36;}
.v5-footer-mark-sub{display:block;font-family:var(--mono);font-size:var(--zn-label);letter-spacing:var(--zn-label-track);text-transform:uppercase;color:var(--v4-mute); margin-top:2px;}
.v5-footer-blurb{font-family:var(--serif);font-size:15.5px;line-height:1.55;color:var(--v4-ink-2); max-width:46ch;margin:0;}
.v5-footer-pins{display:flex;flex-direction:column;gap:8px;margin-top:6px}
.v5-footer-pin{display:grid;grid-template-columns:92px 1fr;gap:14px;align-items:baseline; padding:6px 0;border-top:1px solid var(--v4-line-soft); font-family:var(--mono);font-size:var(--zn-label);letter-spacing:var(--zn-label-track);}
.v5-footer-pin-label{font-size:var(--zn-label);letter-spacing:var(--zn-label-track);text-transform:uppercase;color:var(--v4-mute);}
.v5-footer-pin-val{color:var(--v4-ink-2);font-size:var(--zn-label)}
.v5-footer-subnav{display:flex;flex-wrap:wrap;gap:10px;align-items:center; margin-top:14px;padding-top:14px;border-top:1px solid var(--v4-line-soft); font-family:var(--mono);font-size:var(--zn-label);letter-spacing:var(--zn-label-track);text-transform:uppercase;}
.v5-footer-subnav a{color:var(--v4-ink-2);transition:color .25s ease}
.v5-footer-subnav a:hover{color:var(--v4-accent)}
.v5-footer-subnav-dot{color:var(--v4-line)}
.v5-footer-earlier{font-family:var(--mono);font-size:var(--zn-label);letter-spacing:var(--zn-label-track);line-height:1.7;color:var(--v4-ink-2); margin:0;padding-top:6px;}
.v5-footer-list, .v5-footer-contact-list{list-style:none;margin:0;padding:0; display:flex;flex-direction:column;gap:0;}
.v5-footer-list li{padding:10px 0;border-bottom:1px solid var(--v4-line-soft);}
.v5-footer-list li:last-child{border-bottom:0}
.v5-footer-list a{display:flex;justify-content:space-between;align-items:baseline;gap:14px; font-family:var(--serif);font-size:15.5px;line-height:1.2;color:var(--v4-ink); letter-spacing:-.008em; transition:color .25s ease, transform .25s ease;}
.v5-footer-list a:hover{color:var(--v4-accent);transform:translateX(3px)}
.v5-footer-list-meta{font-family:var(--mono);font-size:var(--zn-label);letter-spacing:var(--zn-label-track);text-transform:uppercase;color:var(--v4-mute); flex-shrink:0;}
.v5-footer-books{display:flex;flex-direction:column;gap:12px;margin-top:14px}
.v5-footer-books-row{display:flex;gap:14px}
.v5-footer-book-mini{display:flex;flex-direction:column;gap:6px;flex:1}
.v5-footer-book-mini-cover{display:block;width:100%;aspect-ratio:0.7/1; background:linear-gradient(135deg, var(--v4-ink) 0%, var(--v4-ink-2) 100%); position:relative;border-radius:2px;overflow:hidden; box-shadow:0 6px 18px -10px rgba(var(--zn-ink-rgb,14,15,14),0.4); transition:transform .4s var(--ease-soft, ease);}
.v5-footer-book-mini-cover.is-alt{background:linear-gradient(135deg, var(--v4-accent) 0%, var(--zn-accent-deep,#8B3D29) 100%);}
.v5-footer-book-mini-cover::before{content:"";position:absolute;left:4px;top:8px;bottom:8px;width:1px; background:rgba(var(--zn-cream-rgb,242,238,230),0.3);}
.v5-footer-book-mini:hover .v5-footer-book-mini-cover{transform:translateY(-2px) rotate(-1deg)}
.v5-footer-book-mini-title{font-family:var(--mono);font-size:var(--zn-label);letter-spacing:var(--zn-label-track);color:var(--v4-ink-2); text-align:center;line-height:1.3;}
.v5-footer-contact-list li{display:grid;grid-template-columns:92px 1fr;gap:14px;align-items:baseline; padding:10px 0;border-bottom:1px solid var(--v4-line-soft);}
.v5-footer-contact-list li:last-child{border-bottom:0}
.v5-footer-contact-key{font-family:var(--mono);font-size:var(--zn-label);letter-spacing:var(--zn-label-track);text-transform:uppercase;color:var(--v4-mute);}
.v5-footer-contact-val{font-family:var(--serif);font-size:15px;color:var(--v4-ink);line-height:1.2; transition:color .25s ease;}
.v5-footer-cta{display:inline-flex;align-items:center;gap:10px; padding:12px 18px;background:var(--v4-ink);color:var(--v4-paper); font-family:var(--mono);font-size:var(--zn-label);letter-spacing:var(--zn-label-track);text-transform:uppercase; border-radius:99px;margin-top:8px;align-self:flex-start; transition:background .25s ease, transform .25s ease;}
.v5-footer-cta:hover{background:var(--v4-accent);transform:translateY(-1px)}
.v5-footer-cta-dot{width:7px;height:7px;border-radius:50%;background:#7AB48A; box-shadow:0 0 0 4px rgba(var(--zn-led-green-rgb,122,180,138),0.18); animation:pulse-dot 2s ease-in-out infinite;}
.v5-footer-cta-arr{font-size:inherit}
.v5-footer-ribbon{display:flex;justify-content:space-between;align-items:center;gap:24px; padding:20px 0 14px;border-top:1px solid var(--v4-line); font-family:var(--mono);font-size:var(--zn-label);letter-spacing:var(--zn-label-track);text-transform:uppercase;color:var(--v4-mute); flex-wrap:wrap;}
.v5-footer-ribbon-left, .v5-footer-ribbon-right{display:flex;align-items:center;gap:10px;flex-wrap:wrap;}
.v5-footer-ribbon-right a{color:inherit;border-bottom:1px solid var(--v4-line); transition:color .25s ease, border-color .25s ease;}
.v5-footer-ribbon-right a:hover{color:var(--v4-accent);border-bottom-color:var(--v4-accent)}
.v5-footer-ribbon-right .emph{color:var(--v4-accent);font-family:var(--serif);font-style:italic;font-size:13px; letter-spacing:-.008em;text-transform:none;}
.v5-footer-ribbon-dot{color:var(--v4-line)}
@media (max-width:900px){
  .v5-footer-ribbon{justify-content:flex-start}
}
@media (max-width: 720px){
  .v4-container{padding-left: 20px !important; padding-right: 20px !important;}
  .v5-footer-spine-text{font-size: clamp(28px, 8vw, 44px) !important; line-height: 1.04 !important;}
  .v5-footer-grid{padding: 48px 0 32px !important;}
  .v5-footer-list a{font-size: 14px;}
  .v5-footer-ribbon{flex-direction: column !important; align-items: flex-start !important; gap: 8px; font-size:var(--zn-label);}
  .v5-footer-ribbon-dot{display: none;}
}
@media (max-width: 480px){
  .v4-container{padding-left: 16px !important; padding-right: 16px !important;}
  .v5-footer-spine-text{font-size: clamp(22px, 9vw, 32px) !important;}
}
a.v5-footer-pin .v5-footer-pin-val{transition:color .3s ease}
a.v5-footer-pin:hover .v5-footer-pin-val{color:var(--v4-accent)}
.v5-footer .v5-footer-feature-meta, .v5-footer .v5-footer-feature-cta{font-size:var(--zn-label);letter-spacing:var(--zn-label-track)}
.v5-footer .v5-footer-feature-arr{font-size:inherit}
.v5-footer .v5-footer-feature-note{font-size:15px}
.v5-footer .v5-footer-feature-name{font-size:28px}
@media (max-width:720px){
  .v5-footer .v5-footer-feature-name{font-size:22px}
}
.zn-foot-field{position:relative;height:160px;overflow:hidden;background:var(--v4-paper)}
.zn-foot-field .zn-ascii-field{position:absolute;inset:0;z-index:0;pointer-events:none;overflow:hidden}
.zn-foot-field canvas{display:block;width:100%;height:100%}
.zn-404-page .zn-foot-field{display:none}
@media (max-width:1023px){
  .zn-foot-field{display:none}
}
.v5-footer-cta{position:relative;overflow:hidden;isolation:isolate}
.v5-footer-cta::after{content:"";position:absolute;inset:0;z-index:-1;border-radius:inherit;pointer-events:none; background:radial-gradient(circle 72px at var(--mx,50%) var(--my,50%),color-mix(in srgb,currentColor 18%,transparent),transparent 100%); opacity:0;transition:opacity .18s ease;}
@media (hover:hover) and (pointer:fine){
  .v5-footer-cta:hover::after{opacity:1}
}
@media (prefers-reduced-motion:reduce){
  .v5-footer-cta::after{display:none}
}

/* ---- from src/v5-featured.css: the In-focus card (.v5-footer-feature-*) — its rules live here, not in v5-styles.css ---- */
.v5-footer-col-showcase{}
.v5-footer-feature{display:flex; flex-direction:column; gap:6px; padding:18px 18px 20px; margin:6px 0 26px; border:0; border-radius:8px; background:color-mix(in oklab, var(--v4-paper) 92%, var(--v4-accent) 8%); text-decoration:none; color:inherit; transition:border-color .3s ease, transform .3s cubic-bezier(.22,.7,.2,1), background .3s ease; position:relative;}
.v5-footer-feature::before{content:""; position:absolute; top:14px; right:14px; width:8px; height:8px; border-radius:50%; background:var(--v4-accent); box-shadow:0 0 0 3px color-mix(in oklab, var(--v4-accent) 22%, transparent); animation:v5-ft-rec 2.4s ease-in-out infinite;}
.v5-footer-feature:hover{border-color:var(--v4-accent); transform:translateY(-2px); background:color-mix(in oklab, var(--v4-paper) 86%, var(--v4-accent) 14%);}
.v5-footer-feature-meta{display:flex; align-items:center; gap:10px; font-family:var(--mono); font-size:10px; letter-spacing:.22em; text-transform:uppercase; color:var(--v4-mute);}
.v5-footer-feature-year{color:var(--v4-mute);}
.v5-footer-feature-name{font-family:var(--serif); font-size:28px; line-height:1; color:var(--v4-ink); letter-spacing:-.018em; margin-top:4px; font-variation-settings:"opsz" 36;}
.v5-footer-feature-note{font-family:var(--serif); font-style:italic; font-size:14.5px; line-height:1.35; color:var(--v4-ink-2); margin-top:2px;}
.v5-footer-feature-cta{display:inline-flex; align-items:center; gap:8px; margin-top:10px; font-family:var(--mono); font-size:11px; letter-spacing:.16em; text-transform:uppercase; color:var(--v4-ink);}
.v5-footer-feature-arr{display:inline-block; transition:transform .3s ease; color:var(--v4-accent);}
.v5-footer-feature:hover .v5-footer-feature-arr{transform:translateX(4px);}
.v5-footer-artifacts{list-style:none; padding:0; margin:6px 0 22px; display:flex; flex-direction:column; border-top:1px solid var(--v4-line-soft);}
.v5-footer-artifacts li{border-bottom:1px solid var(--v4-line-soft);}
.v5-footer-artifacts a{display:grid; grid-template-columns:30px 1fr auto; gap:14px; align-items:baseline; padding:11px 2px; text-decoration:none; color:var(--v4-ink); font-family:var(--serif); font-size:15.5px; line-height:1.3; letter-spacing:-.005em; transition:color .25s ease, padding-left .25s ease;}
.v5-footer-artifacts a:hover{color:var(--v4-accent); padding-left:6px;}
.v5-footer-artifact-n{font-family:var(--mono); font-size:10px; letter-spacing:.22em; text-transform:uppercase; color:var(--v4-mute);}
.v5-footer-artifact-meta{font-family:var(--mono); font-size:10px; letter-spacing:.16em; text-transform:uppercase; color:var(--v4-mute); text-align:right;}
.v5-footer-artifacts a:hover .v5-footer-artifact-meta{color:var(--v4-ink-2);}
@media (max-width:560px){
  .v5-footer-artifacts a{grid-template-columns:30px 1fr;}
  .v5-footer-artifact-meta{grid-column:2; text-align:left; padding-top:2px;}
}
@keyframes v5-ft-rec{0%, 100%{ opacity:1; box-shadow:0 0 0 3px rgba(var(--zn-accent-alt-rgb,192,86,59),0.18); } 50%{ opacity:.4; box-shadow:0 0 0 5px rgba(var(--zn-accent-alt-rgb,192,86,59),0.08); }}

/* ---- from src/v5-ornaments.css: the In-focus card hover bloom ---- */
.v5-footer-feature{isolation:isolate; overflow:hidden;}
.v5-footer-feature::before{content:""; position:absolute; left:-40px; top:-40px; width:200px; height:200px; border-radius:50%; background:radial-gradient(circle at 50% 50%, rgba(var(--zn-accent-hi-rgb,216,106,72),0.55) 0%, rgba(var(--zn-accent-rgb,185,88,60),0.18) 40%, rgba(var(--zn-accent-rgb,185,88,60),0)    72%); filter:blur(12px); opacity:0; pointer-events:none; z-index:-1; transition:opacity .55s ease, transform .9s cubic-bezier(.22,.7,.2,1);}
.v5-footer-feature:hover::before{opacity:.9; transform:scale(1.1); animation:cz-bloom-breath 7s ease-in-out infinite;}
@media (prefers-reduced-motion: reduce){
  .v5-footer-feature:hover::before{animation:none;}
}
@keyframes cz-bloom-breath{0%, 100%{ transform:scale(1);   opacity:.85; } 50%    { transform:scale(1.06); opacity:.95; }}
