/* ===========================================================
   SCHĒMA — FRONT DOOR EXTENSION
   New surfaces only. Everything in schema.css is untouched:
   same tokens, same letterpress idiom, no radii, no shadows,
   no gradients. Borders and small caps do all the work.
   =========================================================== */

:root{
  --ease: cubic-bezier(.2,.6,.2,1);
  --focus: #7a1f22;
}

/* ---------- focus: printed, not neon ---------- */
a:focus-visible,
button:focus-visible,
input:focus-visible,
textarea:focus-visible,
select:focus-visible,
summary:focus-visible,
[tabindex]:focus-visible{
  outline:2px solid var(--focus);
  outline-offset:3px;
}

/* ---------- small shared bits ---------- */
.tnum{ font-variant-numeric:tabular-nums; }

.kind{
  font-family:var(--sc); text-transform:uppercase; letter-spacing:.12em;
  font-size:.66rem; color:var(--ink);
  border:var(--hair); padding:.22rem .5rem;
  display:inline-block; line-height:1.5; white-space:nowrap;
}
.kind--strong{ border-color:rgba(27,22,17,.42); }

.chip{
  font-family:var(--sc); text-transform:uppercase; letter-spacing:.12em;
  font-size:.62rem; color:var(--ink-mute);
  border:var(--hair); padding:.16rem .45rem; display:inline-block;
  line-height:1.5; white-space:nowrap;
}
.chip--new{ color:var(--red); border-color:rgba(157,42,46,.45); }
.chip--on{ color:var(--ink); border-color:rgba(27,22,17,.42); }
.chip--off{ color:var(--ink-mute); }

/* Text-forward action: square, hairline, no fill. */
.act{
  display:inline-block;
  font-family:var(--sc); text-transform:uppercase; letter-spacing:.16em;
  font-size:.68rem; color:var(--ink);
  border:var(--hair-strong); background:transparent;
  padding:.62rem 1.1rem; text-decoration:none; cursor:pointer;
  transition:background .18s var(--ease), color .18s var(--ease);
  min-height:44px; line-height:1.6;
}
.act:hover{ background:var(--parchment-deep); }
.act:active{ transform:translateY(1px); }
.act[disabled]{ opacity:.45; cursor:progress; }
.act--quiet{ border-color:transparent; padding-left:0; padding-right:0; color:var(--red); }
.act--quiet:hover{ background:transparent; text-decoration:underline; }
.act--danger{ color:var(--red); }

.linkish{
  font-family:var(--sc); text-transform:uppercase; letter-spacing:.14em;
  font-size:.68rem; color:var(--red); text-decoration:none;
  background:none; border:0; padding:0; cursor:pointer;
}
.linkish:hover{ text-decoration:underline; }

.actions{ display:flex; gap:.8rem; flex-wrap:wrap; align-items:center; margin-top:1.1rem; }

/* ---------- gatherings ---------- */
.event .event-top{ display:flex; gap:.8rem; align-items:baseline; flex-wrap:wrap; }
.event .event-top h3{ margin:0; }
.event .where{
  margin:.4rem 0 0; font-style:italic; color:var(--ink-mute); font-size:.98rem;
}
.event .seats{
  margin-top:.9rem; font-size:.9rem; color:var(--ink-soft);
  font-variant-numeric:tabular-nums;
}
.event .seats b{ font-weight:400; color:var(--gold); }
.event .seats--full{ color:var(--red); }
.event .seats--full .after{ color:var(--ink-mute); font-family:var(--sc);
  text-transform:uppercase; letter-spacing:.12em; font-size:.66rem; }
.event.is-past{ opacity:.72; }
.event .tbc{ font-style:italic; color:var(--ink-mute); }

/* detail page */
.gathering-meta{ border-top:var(--hair-strong); border-bottom:var(--hair-strong);
  padding:1.4rem 0; margin:2rem 0; display:grid; gap:1rem;
  grid-template-columns:repeat(3,1fr); }
@media (max-width:620px){ .gathering-meta{ grid-template-columns:1fr; gap:1.1rem; } }
.gathering-meta dt{ font-family:var(--sc); text-transform:uppercase;
  letter-spacing:.14em; font-size:.66rem; color:var(--ink-mute); margin-bottom:.3rem; }
.gathering-meta dd{ margin:0; font-size:1.02rem; color:var(--ink); }

/* ---------- panels ---------- */
.panel{
  border:var(--hair-strong); background:var(--parchment-warm);
  padding:2rem 1.8rem;
}
.panel > *:last-child{ margin-bottom:0; }
.panel h3{ margin:0 0 .7rem; }
.panel p{ color:var(--ink-soft); font-size:1rem; line-height:1.6; }
@media (max-width:520px){ .panel{ padding:1.6rem 1.2rem; } }

/* the PDF handout block */
.handbill{ border:var(--hair-strong); background:var(--parchment-warm);
  padding:2rem 1.8rem; text-align:center; }
.handbill .eyebrow{ justify-content:center; }
.handbill .eyebrow::after{ display:none; }
.handbill h3{ margin:0 0 .6rem; }
.handbill p{ color:var(--ink-soft); font-size:.98rem; max-width:26rem;
  margin:0 auto 1.4rem; }
.handbill .orn{ width:100%; max-width:min(18rem,70vw); margin:1.4rem auto 0;
  aspect-ratio:1730/320; opacity:.6;
  background:var(--img-divider) center/contain no-repeat; }

/* ---------- newsletter ---------- */
.nl{ max-width:var(--measure); margin:0 auto; }
.nl h3{ margin:0 0 .5rem; }
.nl p.promise{ color:var(--ink-soft); font-size:1rem; margin-bottom:1.4rem; }
.nl form{ display:flex; gap:1rem; align-items:flex-end; flex-wrap:wrap; }
.nl .field{ flex:1 1 16rem; margin-bottom:0; }

/* ---------- forms ---------- */
.field .err{
  display:block; margin-top:.45rem; color:var(--red); font-size:.9rem;
}
.field .err .lab{ font-family:var(--sc); text-transform:uppercase;
  letter-spacing:.14em; font-size:.64rem; margin-right:.45rem; }
.field input[aria-invalid="true"],
.field textarea[aria-invalid="true"]{ border-bottom-color:var(--red); }
.field .hint{ display:block; margin-top:.4rem; color:var(--ink-mute);
  font-size:.86rem; font-style:italic; }
.field select{
  width:100%; font-family:var(--body); font-size:1.02rem; color:var(--ink);
  background:var(--parchment); border:0; border-bottom:var(--hair-strong);
  padding:.6rem .1rem; line-height:1.5;
}
.field-narrow{ max-width:9rem; }

.notice{
  border-left:3px solid var(--red); padding:.2rem 0 .2rem 1.1rem;
  color:var(--ink-soft); font-size:.95rem; margin:1.4rem 0;
}
.notice.ok{ border-left-color:var(--gold); }

/* ---------- visit ---------- */
.door-figure{ margin:2.6rem auto 0; max-width:var(--wide); padding:0 1.5rem;
  text-align:center; }
.door-figure img{ display:block; margin:0 auto;
  max-height:400px; width:auto; max-width:100%; height:auto;
  object-fit:contain; }
@media (max-width:620px){ .door-figure img{ max-height:260px; } }
.door-figure figcaption{ margin-top:1.4rem; }
.door-figure figcaption .lab{ display:block; font-family:var(--sc);
  text-transform:uppercase; letter-spacing:.18em; font-size:.66rem;
  color:var(--ink-mute); margin-bottom:.5rem; }
.door-figure figcaption .say{ font-family:var(--display); font-size:1.3rem;
  color:var(--ink); }

.step{ display:grid; grid-template-columns:2.4rem 1fr; gap:1.2rem;
  padding:1.5rem 0; border-top:var(--hair); }
.step:first-of-type{ border-top:var(--hair-strong); }
.step:last-of-type{ border-bottom:var(--hair-strong); }
.step .n{ font-family:var(--display); font-size:1.5rem; color:var(--red);
  line-height:1.1; }
.step h3{ margin:0 0 .4rem; font-size:1.15rem; }
.step p{ margin:0; color:var(--ink-soft); font-size:1rem; line-height:1.6; }

.qa{ border-top:var(--hair); padding:0; }
.qa:first-of-type{ border-top:var(--hair-strong); }
.qa:last-of-type{ border-bottom:var(--hair-strong); }
.qa > summary{
  list-style:none; cursor:pointer; padding:1.15rem 2rem 1.15rem 0;
  font-family:var(--display); font-size:1.1rem; color:var(--ink);
  position:relative; line-height:1.35;
}
.qa > summary::-webkit-details-marker{ display:none; }
.qa > summary::after{
  content:"+"; position:absolute; right:.2rem; top:1.1rem;
  font-family:var(--body); color:var(--red); font-size:1.1rem; line-height:1;
}
.qa[open] > summary::after{ content:"–"; }
.qa > summary:hover{ color:var(--red-deep); }
.qa .a{ padding:0 2rem 1.4rem 0; color:var(--ink-soft); font-size:1rem;
  line-height:1.66; margin:0; }

/* ---------- circles ---------- */
.circle{ border-top:var(--hair); padding:1.8rem 0; }
.circle:first-of-type{ border-top:var(--hair-strong); }
.circle:last-of-type{ border-bottom:var(--hair-strong); }
.circle .ctop{ display:flex; gap:.9rem; align-items:baseline; flex-wrap:wrap; }
.circle h3{ margin:0; }
.circle .meta{ margin:.5rem 0 0; color:var(--ink-mute); font-size:.92rem;
  font-family:var(--sc); text-transform:uppercase; letter-spacing:.12em; }
.circle p.desc{ margin:.8rem 0 0; color:var(--ink-soft); font-size:1rem;
  line-height:1.6; }

/* ---------- admin ---------- */
body.admin{ background:var(--parchment); }
.admin-shell{ max-width:78rem; margin:0 auto; padding:0 1.5rem 5rem; }
.admin-top{
  display:flex; align-items:baseline; gap:1.2rem; flex-wrap:wrap;
  padding:1.6rem 0 1.2rem; border-bottom:var(--hair-strong); margin-bottom:0;
}
.admin-top .amark{ font-family:var(--display); font-size:1.4rem;
  text-decoration:none; color:var(--ink); }
.admin-top .who{ font-family:var(--sc); text-transform:uppercase;
  letter-spacing:.14em; font-size:.64rem; color:var(--ink-mute);
  margin-right:auto; }
.admin-nav{ display:flex; gap:0; flex-wrap:wrap; border-bottom:var(--hair-strong);
  margin-bottom:2.2rem; }
.admin-nav button{
  background:transparent; border:0; border-bottom:2px solid transparent;
  font-family:var(--sc); text-transform:uppercase; letter-spacing:.14em;
  font-size:.68rem; color:var(--ink-mute); cursor:pointer;
  padding:.9rem 1.1rem; min-height:44px;
  transition:color .18s var(--ease);
}
.admin-nav button:first-child{ padding-left:0; }
.admin-nav button:hover{ color:var(--ink); }
.admin-nav button[aria-current="true"]{ color:var(--ink); border-bottom-color:var(--red); }
.admin-nav .count{ color:var(--red); margin-left:.4rem; }

.stats{ display:grid; grid-template-columns:repeat(4,1fr); gap:1px;
  background:rgba(27,22,17,.3); border:var(--hair-strong); margin-bottom:2.4rem; }
@media (max-width:900px){ .stats{ grid-template-columns:repeat(2,1fr); } }
.stat{ background:var(--parchment); padding:1.3rem 1.2rem; }
.stat .k{ font-family:var(--sc); text-transform:uppercase; letter-spacing:.14em;
  font-size:.62rem; color:var(--ink-mute); display:block; margin-bottom:.5rem; }
.stat .v{ font-family:var(--display); font-size:2rem; line-height:1;
  color:var(--ink); font-variant-numeric:tabular-nums; }
.stat .sub{ display:block; margin-top:.5rem; font-size:.85rem; color:var(--ink-mute); }

.admin-sec{ margin-bottom:3rem; }
.admin-sec > header{
  display:flex; align-items:baseline; gap:1rem; flex-wrap:wrap;
  margin-bottom:1.2rem;
}
.admin-sec > header h2{ font-size:clamp(1.5rem,3vw,2rem); margin-right:auto; }
.admin-help{ color:var(--ink-mute); font-size:.92rem; font-style:italic;
  margin:-.4rem 0 1.4rem; max-width:42rem; line-height:1.6; }

.tbl{ width:100%; border-collapse:collapse; font-size:.95rem; }
.tbl th{
  text-align:left; font-family:var(--sc); text-transform:uppercase;
  letter-spacing:.13em; font-size:.62rem; color:var(--ink-mute);
  font-weight:400; padding:.7rem .8rem .7rem 0; border-bottom:var(--hair-strong);
  white-space:nowrap;
}
.tbl td{ padding:.9rem .8rem .9rem 0; border-bottom:var(--hair);
  color:var(--ink-soft); vertical-align:top; }
.tbl td.num{ font-variant-numeric:tabular-nums; white-space:nowrap; }
.tbl td .t{ color:var(--ink); font-family:var(--display); font-size:1.05rem; }
/* Columns need real gutters, or a right-aligned count runs into the next
   heading and the two read as one word. */
.tbl th + th, .tbl td + td{ padding-left:1.4rem; }
.tbl td.right, .tbl th.right{ text-align:right; }
.tbl th:last-child, .tbl td:last-child{ padding-right:0; }
.tbl .rowacts{ display:flex; gap:.9rem; justify-content:flex-end; flex-wrap:wrap; }

/* At 390px a table is a lie. Stack into row-cards. */
.stack{ display:none; }
@media (max-width:760px){
  .tbl{ display:none; }
  .stack{ display:block; }
  .rowcard{ border-top:var(--hair); padding:1.2rem 0; }
  .rowcard:first-of-type{ border-top:var(--hair-strong); }
  .rowcard:last-of-type{ border-bottom:var(--hair-strong); }
  .rowcard .rt{ font-family:var(--display); font-size:1.15rem; color:var(--ink);
    margin-bottom:.4rem; }
  .rowcard dl{ margin:.6rem 0 0; display:grid; grid-template-columns:auto 1fr;
    gap:.3rem .9rem; }
  .rowcard dt{ font-family:var(--sc); text-transform:uppercase;
    letter-spacing:.12em; font-size:.6rem; color:var(--ink-mute); }
  .rowcard dd{ margin:0; font-size:.95rem; color:var(--ink-soft); }
  .rowcard .rowacts{ justify-content:flex-start; margin-top:1rem; }
  .admin-shell{ padding:0 1.1rem 4rem; }
}

/* admin forms */
.adm-form{ border:var(--hair-strong); background:var(--parchment-warm);
  padding:1.8rem 1.6rem; margin-bottom:2.4rem; }
.adm-form fieldset{ border:0; padding:0; margin:0 0 1.6rem; }
.adm-form fieldset:last-of-type{ margin-bottom:0; }
.adm-form legend{ font-family:var(--sc); text-transform:uppercase;
  letter-spacing:.14em; font-size:.64rem; color:var(--red);
  padding:0 0 .9rem; margin:0; }
.adm-form .row3{ display:grid; grid-template-columns:repeat(3,1fr); gap:1.4rem; }
@media (max-width:760px){ .adm-form .row3{ grid-template-columns:1fr; } }
.adm-form .field input, .adm-form .field textarea, .adm-form .field select{
  background:var(--parchment);
}
.check{ display:flex; gap:.7rem; align-items:flex-start; margin-bottom:1rem; }
.check input{ margin-top:.45rem; width:auto; accent-color:var(--red); }
.check label{ font-family:var(--body); text-transform:none; letter-spacing:0;
  font-size:1rem; color:var(--ink); margin:0; }
.check .hint{ margin-top:.2rem; }

/* words (editable page copy) */
.admin-subnav{
  display:flex; gap:.3rem; flex-wrap:wrap; margin:0 0 1.8rem;
  border-bottom:var(--hair);
}
.admin-subnav button{
  background:transparent; border:0; border-bottom:2px solid transparent;
  font-family:var(--sc); text-transform:uppercase; letter-spacing:.13em;
  font-size:.64rem; color:var(--ink-mute); cursor:pointer;
  padding:.7rem .9rem; min-height:44px;
  transition:color .18s var(--ease);
}
.admin-subnav button:first-child{ padding-left:0; }
.admin-subnav button:hover{ color:var(--ink); }
.admin-subnav button[aria-current="true"]{
  color:var(--ink); border-bottom-color:var(--gold);
}

.copy-fields{ border-top:var(--hair-strong); max-width:50rem; }
.copy-field{
  border-bottom:var(--hair); padding:1.3rem 0 1.4rem;
  border-left:2px solid transparent; padding-left:0;
  transition:border-color .18s var(--ease), padding-left .18s var(--ease);
}
/* An unsaved line marks itself in the margin, the way a proof does. */
.copy-field.dirty{ border-left-color:var(--red); padding-left:1rem; }
.cf-head{
  display:flex; align-items:baseline; gap:1rem; margin-bottom:.6rem;
}
.cf-head label{
  font-family:var(--sc); text-transform:uppercase; letter-spacing:.13em;
  font-size:.64rem; color:var(--ink-mute); margin:0; margin-right:auto;
}
.copy-field input[type="text"],
.copy-field textarea{
  width:100%; background:var(--parchment-warm);
  border:var(--hair); border-bottom:var(--hair-strong);
  font-family:var(--body); font-size:1rem; line-height:1.6; color:var(--ink);
  padding:.7rem .8rem; resize:vertical;
}
.copy-field input[type="text"]:hover,
.copy-field textarea:hover{ background:var(--parchment-deep); }
.cf-was{
  margin:.7rem 0 0; font-size:.88rem; font-style:italic; color:var(--ink-mute);
  line-height:1.6;
}
.cf-was .lab{
  font-family:var(--sc); font-style:normal; text-transform:uppercase;
  letter-spacing:.12em; font-size:.6rem; color:var(--red); margin-right:.6rem;
}

.admin-savebar{
  position:sticky; bottom:0; z-index:20; max-width:50rem;
  display:flex; align-items:center; gap:1.2rem; flex-wrap:wrap;
  padding:1.1rem 0; margin-top:.4rem;
  border-top:var(--hair-strong);
  background:var(--parchment);
}
@media (max-width:760px){
  .admin-savebar{ padding:1rem 0 1.2rem; }
  .admin-savebar .act{ flex:1 1 auto; text-align:center; }
}

/* login gate */
.gate{ min-height:100svh; display:flex; align-items:center; justify-content:center;
  padding:2rem 1.5rem; position:relative; overflow:hidden; }
.gate .ghost{
  position:absolute; inset:0; pointer-events:none; z-index:0; opacity:.05;
  background:var(--img-door) center/contain no-repeat;
}
.gate .inner{ position:relative; z-index:2; width:100%; max-width:26rem;
  text-align:center; }
.gate .glogo{ width:74px; aspect-ratio:1; margin:0 auto 1.6rem; opacity:.9;
  background:var(--img-logo) center/contain no-repeat; }
.gate h1{ font-size:clamp(2rem,7vw,2.8rem); line-height:1.05; margin-bottom:.8rem; }
.gate p{ color:var(--ink-soft); font-size:1rem; margin-bottom:2rem; }
.gate .field{ text-align:left; }

/* integrations */
.wires{ border:var(--hair-strong); }
.wire{ padding:1.3rem 1.4rem; border-top:var(--hair); }
.wire:first-child{ border-top:0; }
.wire .wtop{ display:flex; gap:.9rem; align-items:baseline; flex-wrap:wrap;
  margin-bottom:.5rem; }
.wire .wtop h3{ margin:0; font-size:1.1rem; }
.wire p{ margin:0; color:var(--ink-soft); font-size:.94rem; line-height:1.6; }
.wire code{ font-family:ui-monospace,SFMono-Regular,Menlo,monospace;
  font-size:.84rem; background:var(--parchment-deep); padding:.1rem .35rem; }

/* ---------- spinner-free loading ---------- */
.loading{ text-align:center; padding:4rem 1.5rem; font-family:var(--sc);
  text-transform:uppercase; letter-spacing:.2em; font-size:.68rem;
  color:var(--ink-mute); }

/* ---------- misc ---------- */
.center{ text-align:center; }
.mt0{ margin-top:0; }
.stackgap > * + *{ margin-top:1.2rem; }

/* The hero ornaments are bled off-canvas by design; on a narrow screen pull
   them back in so nothing hangs past the right edge. */
@media (max-width:620px){
  .hero-scatter{ width:min(62vw,300px); }
  .hero-scatter.tl{ top:-2vw; left:-10vw; }
  .hero-scatter.br{ bottom:-2vw; right:-10vw; }
}

@media (prefers-reduced-motion:reduce){
  *,*::before,*::after{ transition:none !important; animation:none !important; }
}
