/* =====================================================================
   Boots to Sabatons: the whole look, in one file (public pages + app).
   Taken from The Stoic Light's noir.css (Robert, 2026-10-18: "use the css
   styling from my thestoiclight.com page, the color, font and all that"):
   black and white only, nothing but the photographs has tone; Cormorant
   Garamond for headings, Inter for text; hairline white rules; square
   outline buttons in small spaced capitals that invert on hover.
   Hierarchy comes from type (size, weight, spacing), never from grey.
   ===================================================================== */

:root{
  --black:#000;
  --white:#fff;
  --serif:'Cormorant Garamond', Georgia, serif;
  --sans:'Inter', system-ui, sans-serif;
  --wrap:1180px;
  --gutter:28px;

  /* Names the app pages (admin.html) use. */
  --bg:#000; --surface:#000; --surface-alt:#000; --ink:#fff; --muted:#fff; --line:#fff;
  --hunter:#fff; --hunter-dark:#fff; --brass:#fff; --leather:#fff; --leather-dark:#fff;
  --success:#fff; --danger:#fff; --radius:0; --shadow:none;
}

*{margin:0;padding:0;box-sizing:border-box;}
html{scroll-behavior:smooth;}
html,body{background:#000;color:#fff;}
body{font-family:var(--sans);font-weight:300;line-height:1.65;-webkit-font-smoothing:antialiased;overflow-x:hidden;}
a{color:inherit;text-decoration:none;}
img{max-width:100%;display:block;}
::selection{background:#fff;color:#000;}
:focus-visible{outline:1px solid #fff;outline-offset:4px;}
[hidden]{display:none !important;}
.wrap{max-width:var(--wrap);margin:0 auto;padding:0 var(--gutter);}
.skip-link{position:absolute;left:-999px;top:8px;background:#fff;color:#000;padding:10px 16px;z-index:200;}
.skip-link:focus{left:8px;}

/* ---------- type ---------- */
h1,h2,h3,h4{font-family:var(--serif);font-weight:400;letter-spacing:0.01em;line-height:1.1;}
h1{font-weight:300;}
p{max-width:68ch;}
.eyebrow{
  display:flex;align-items:center;gap:14px;margin-bottom:16px;
  font-family:var(--sans);font-size:0.8rem;font-weight:500;letter-spacing:0.22em;text-transform:uppercase;
}
.eyebrow::before{content:"";width:32px;height:1px;background:#fff;flex:none;}
.lede{font-size:1.1rem;}

/* ---------- header ---------- */
.site-header{
  position:fixed;top:0;left:0;right:0;z-index:100;padding:18px 0;
  border-bottom:1px solid transparent;transition:background .3s ease,padding .3s ease,border-color .3s ease;
}
.site-header.scrolled,.site-header.solid{background:rgba(0,0,0,0.94);border-color:#fff;padding:10px 0;}
.site-header .wrap{display:flex;align-items:center;justify-content:space-between;gap:16px;}
.wordmark{
  display:inline-flex;align-items:center;gap:12px;min-width:0;
  font-family:var(--serif);font-weight:500;font-size:1.05rem;letter-spacing:0.32em;text-transform:uppercase;
}
.wordmark img{width:56px;height:56px;transition:width .3s ease,height .3s ease;flex:none;}
.site-header.scrolled .wordmark img{width:44px;height:44px;}
.wordmark .wm-small{display:block;font-family:var(--sans);font-size:0.62rem;font-weight:400;letter-spacing:0.3em;margin-top:2px;}

/* Menu: a details/summary dropdown, same as thestoiclight.com's. */
.site-nav{position:relative;}
.site-nav summary{
  list-style:none;cursor:pointer;user-select:none;display:flex;align-items:center;gap:10px;
  border:1px solid #fff;padding:12px 20px;font-size:0.8rem;font-weight:500;letter-spacing:0.22em;text-transform:uppercase;
  transition:background .3s ease,color .3s ease;
}
.site-nav summary::-webkit-details-marker{display:none;}
.site-nav summary:hover,.site-nav[open] summary{background:#fff;color:#000;}
.site-nav .caret{font-size:0.9em;transition:transform .15s ease;}
.site-nav[open] .caret{transform:rotate(180deg);}
.site-nav-menu{
  position:absolute;top:calc(100% + 6px);right:0;min-width:260px;list-style:none;
  background:#000;border:1px solid #fff;padding:8px;z-index:40;
}
.site-nav-menu a{
  display:block;padding:12px 14px;font-size:0.8rem;font-weight:500;letter-spacing:0.18em;text-transform:uppercase;
  transition:background .25s ease,color .25s ease;
}
.site-nav-menu a:hover,.site-nav-menu a:focus-visible{background:#fff;color:#000;outline:none;}
.site-nav-menu .divider{height:1px;background:#fff;margin:8px 0;}

/* ---------- buttons ---------- */
.btn,.btn-primary,.btn-ghost{
  display:inline-block;cursor:pointer;font-family:var(--sans);font-size:0.8rem;font-weight:500;line-height:1.2;
  letter-spacing:0.2em;text-transform:uppercase;text-align:center;
  border:1px solid #fff;background:transparent;color:#fff;padding:16px 34px;border-radius:0;
  transition:background .35s ease,color .35s ease;
}
.btn:hover,.btn-ghost:hover,.btn:focus-visible{background:#fff;color:#000;}
/* The one main action on a page is solid white. */
.btn-primary,.btn-solid{background:#fff;color:#000;}
.btn-primary:hover,.btn-solid:hover{background:#000;color:#fff;}
.btn[disabled],.btn-primary[disabled]{opacity:0.35;cursor:not-allowed;}

/* ---------- sections ---------- */
section{padding:clamp(72px,10vw,120px) 0;}
.rule-top{border-top:1px solid #fff;}
.section-head{max-width:62ch;margin-bottom:48px;}
.section-head h2{font-size:clamp(2rem,4.4vw,3.2rem);margin-bottom:16px;}

/* ---------- home: banner, then hero ----------
   Robert's banner photo runs edge to edge across the top (2026-10-18), in
   colour: the one picture on the page that isn't greyscale. The fixed header
   sits on its black top edge. */
.banner-wrap{position:relative;container-type:inline-size;}
.top-banner{position:relative;width:100%;aspect-ratio:3 / 1;overflow:hidden;background:#000;}
.top-banner img{width:100%;height:100%;object-fit:cover;}
/* Title + crest in the V between the swords. The banner is always 3:1, so
   positions are % of its width (cqw): the blades cross at 48.5% across, and the
   open V above the cross runs from ~10% to ~18% of the width down the page. */
.banner-title{
  position:absolute;z-index:2;left:48.6%;top:11.4cqw;transform:translateX(-50%);
  display:flex;flex-direction:column;align-items:center;gap:0.9cqw;text-align:center;pointer-events:none;
}
.bt-name{font-family:var(--serif);font-weight:500;font-size:1.95cqw;line-height:1;letter-spacing:0.3em;padding-left:0.3em;text-transform:uppercase;white-space:nowrap;}
.bt-crest{width:5.3cqw;height:5.3cqw;}
/* The header's own logo + name hide on the home page until you scroll past the banner title. */
.home .site-header:not(.scrolled) .wordmark{opacity:0;pointer-events:none;}
.home .site-header .wordmark{transition:opacity .3s ease;}
/* Fade the bottom of the photo into the page so it doesn't end on a hard edge. */
.top-banner::after{content:"";position:absolute;inset:auto 0 0 0;height:22%;background:linear-gradient(180deg,rgba(0,0,0,0),#000);}

/* Hero, right under the banner: Tooth-Pick's portrait fills the right side;
   the heading sits over the dark left half (as built on 2026-10-18). */
.hero{position:relative;min-height:min(92svh,860px);display:flex;align-items:flex-end;overflow:hidden;background:#000;}
.hero-img{position:absolute;top:0;right:0;height:100%;width:auto;max-width:none;object-fit:cover;object-position:right top;opacity:0.85;}
.hero-scrim{position:absolute;inset:0;background:
  linear-gradient(90deg,rgba(0,0,0,0.95) 0%,rgba(0,0,0,0.75) 38%,rgba(0,0,0,0.05) 72%),
  linear-gradient(180deg,#000 0%,rgba(0,0,0,0) 18%,rgba(0,0,0,0) 55%,#000 100%);}
.hero-content{position:relative;z-index:2;width:100%;padding-top:120px;padding-bottom:clamp(48px,9vh,96px);}
.hero h1{font-size:clamp(2.9rem,6.6vw,5.8rem);line-height:0.98;max-width:13ch;margin-bottom:24px;}
.hero p{font-size:1.15rem;max-width:40ch;margin-bottom:34px;}
.hero-actions{display:flex;flex-wrap:wrap;gap:14px;}

/* ---------- home: about ---------- */
.about-grid{display:grid;grid-template-columns:minmax(0,1.4fr) minmax(0,1fr);gap:clamp(36px,6vw,96px);align-items:start;}
.about-copy h2{font-size:clamp(2rem,4.4vw,3.2rem);margin-bottom:22px;}
.about-copy p{font-size:1.08rem;margin-bottom:18px;}
.pillars{list-style:none;display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:0;margin-top:40px;border-top:1px solid #fff;}
.pillars li{padding:22px 18px 0 0;font-family:var(--serif);font-size:1.35rem;line-height:1.2;}
.pillars li span{display:block;font-family:var(--sans);font-size:0.95rem;margin-top:8px;}
.founder{border:1px solid #fff;padding:22px;}
.founder img{width:100%;height:auto;margin-bottom:18px;}
.founder h3{font-size:1.7rem;margin-bottom:4px;}
.founder .role{font-size:0.8rem;font-weight:500;letter-spacing:0.18em;text-transform:uppercase;margin-bottom:14px;display:block;}
.founder p{font-size:1rem;margin-bottom:16px;}
.text-link{border-bottom:1px solid #fff;padding-bottom:2px;transition:opacity .25s ease;}
.text-link:hover{opacity:0.6;}

/* ---------- home: moments (photo strip; hidden until photos exist) ---------- */
.moments-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:6px;}
.moments-grid button{border:0;padding:0;background:#000;cursor:zoom-in;aspect-ratio:4/3;overflow:hidden;}
.moments-grid img{width:100%;height:100%;object-fit:cover;filter:grayscale(1) contrast(1.06);transition:opacity .3s ease;}
.moments-grid button:hover img{opacity:0.75;}

/* ---------- home: events ---------- */
.events-list{list-style:none;border-top:1px solid #fff;}
.event{border-bottom:1px solid #fff;}
.event summary{list-style:none;cursor:pointer;display:grid;grid-template-columns:132px minmax(0,1fr) auto;gap:24px;align-items:center;padding:26px 0;}
.event summary::-webkit-details-marker{display:none;}
.event-date{font-family:var(--serif);line-height:1;}
.event-date .d{display:block;font-size:3rem;font-weight:300;}
.event-date .m{display:block;font-family:var(--sans);font-size:0.8rem;font-weight:500;letter-spacing:0.2em;text-transform:uppercase;margin-top:6px;}
.event-title{font-family:var(--serif);font-size:clamp(1.4rem,2.6vw,1.9rem);line-height:1.15;}
.event-when{display:block;font-size:0.95rem;margin-top:6px;}
.event-toggle{font-size:0.8rem;font-weight:500;letter-spacing:0.2em;text-transform:uppercase;border:1px solid #fff;padding:10px 16px;white-space:nowrap;transition:background .3s ease,color .3s ease;}
.event summary:hover .event-toggle,.event[open] .event-toggle{background:#fff;color:#000;}
.event-body{padding:0 0 28px 156px;}
.event-body p{white-space:pre-line;margin-bottom:12px;}
.event-past .event-title,.event-past .event-date{opacity:0.62;}
.events-sub{font-family:var(--sans);font-size:0.8rem;font-weight:500;letter-spacing:0.2em;text-transform:uppercase;margin:48px 0 0;padding-bottom:14px;}
.events-empty{border-top:1px solid #fff;border-bottom:1px solid #fff;padding:32px 0;font-family:var(--serif);font-size:1.5rem;}
.events-empty p{font-family:var(--sans);font-size:1rem;margin-top:8px;}
.events-cta{display:flex;flex-wrap:wrap;gap:14px;margin-top:40px;}

/* ---------- home: video + donate ---------- */
.split{display:grid;grid-template-columns:minmax(0,1.3fr) minmax(0,1fr);gap:clamp(36px,6vw,96px);align-items:center;}
.video{position:relative;aspect-ratio:16/9;border:1px solid #fff;}
.video iframe{position:absolute;inset:0;width:100%;height:100%;border:0;}
.donate{border:1px solid #fff;padding:clamp(28px,5vw,56px);display:grid;grid-template-columns:minmax(0,1fr) auto;gap:32px;align-items:center;}
.donate h2{font-size:clamp(1.9rem,4vw,2.8rem);margin-bottom:12px;}

/* ---------- home: visit / contact ---------- */
.visit-grid{display:grid;grid-template-columns:minmax(0,1.1fr) minmax(0,0.9fr);gap:clamp(36px,6vw,96px);align-items:start;}
.visit-grid h2{font-size:clamp(2.2rem,5vw,3.6rem);margin-bottom:18px;max-width:14ch;}
.visit-details{display:flex;flex-direction:column;gap:14px;align-items:flex-start;font-size:1.1rem;}
.visit-details a{border-bottom:1px solid #fff;padding-bottom:2px;transition:opacity .25s ease;}
.visit-details a:hover{opacity:0.6;}
.hours{border-collapse:collapse;margin-top:10px;width:100%;max-width:340px;}
.hours th,.hours td{padding:9px 0;border-bottom:1px solid #fff;text-align:left;font-weight:300;}
.hours th{font-weight:500;width:5.5em;}

/* ---------- inner page banner ---------- */
.page-hero{padding:clamp(140px,18vh,200px) 0 48px;border-bottom:1px solid #fff;}
.page-hero h1{font-size:clamp(2.6rem,6.4vw,4.8rem);line-height:1;margin-bottom:18px;max-width:16ch;}
.page-hero p{font-size:1.1rem;max-width:56ch;}

/* ---------- forms: underlined fields, like a printed form ---------- */
.form-section{padding-top:56px;}
.form-layout{display:grid;grid-template-columns:minmax(0,0.8fr) minmax(0,1.6fr);gap:clamp(36px,6vw,96px);align-items:start;}
.form-aside h2{font-size:1.9rem;margin-bottom:14px;}
.form-aside p{margin-bottom:14px;}
.steps{list-style:none;counter-reset:s;margin-top:22px;border-top:1px solid #fff;}
.steps li{counter-increment:s;display:grid;grid-template-columns:2.2em 1fr;padding:14px 0;border-bottom:1px solid #fff;}
.steps li::before{content:counter(s);font-family:var(--serif);font-size:1.4rem;line-height:1.1;}
.card-form{border:1px solid #fff;padding:clamp(22px,4vw,40px);}
.card-form fieldset{border:0;margin:0 0 30px;}
.card-form legend{font-size:0.8rem;font-weight:500;letter-spacing:0.22em;text-transform:uppercase;margin-bottom:18px;display:flex;align-items:center;gap:14px;}
.card-form legend::before{content:"";width:32px;height:1px;background:#fff;}
.field-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:22px 26px;}
.field{display:flex;flex-direction:column;gap:8px;min-width:0;}
.field.full{grid-column:1 / -1;}
label{font-size:0.8rem;font-weight:500;letter-spacing:0.16em;text-transform:uppercase;}
label .hint,label .opt{letter-spacing:0;text-transform:none;font-weight:300;}
input,select,textarea{
  font:inherit;font-weight:300;width:100%;background:transparent;color:#fff;
  border:none;border-bottom:1px solid #fff;border-radius:0;padding:12px 2px;
}
textarea{border:1px solid #fff;padding:12px;min-height:140px;resize:vertical;}
input:focus,select:focus,textarea:focus{outline:none;border-bottom-width:2px;padding-bottom:11px;}
input::placeholder,textarea::placeholder{color:#fff;opacity:0.45;}
input[type="date"],input[type="time"]{color-scheme:dark;}
select{appearance:none;-webkit-appearance:none;cursor:pointer;padding-right:30px;
  background-image:linear-gradient(45deg,transparent 50%,#fff 50%),linear-gradient(135deg,#fff 50%,transparent 50%);
  background-position:calc(100% - 14px) 55%,calc(100% - 9px) 55%;background-size:5px 5px;background-repeat:no-repeat;}
select option{background:#000;color:#fff;}
input[type="checkbox"]{width:20px;height:20px;accent-color:#fff;padding:0;}
.check{display:flex;align-items:center;gap:12px;font-size:0.95rem;letter-spacing:0;text-transform:none;font-weight:400;cursor:pointer;}
.field.invalid input,.field.invalid select,.field.invalid textarea{border-bottom:2px dashed #fff;}
.field-error{font-style:italic;font-size:0.92rem;min-height:0;}
.field-error:empty{display:none;}
.hp{position:absolute;left:-9999px;width:1px;height:1px;overflow:hidden;}
.form-actions{display:flex;flex-wrap:wrap;align-items:center;gap:14px 20px;margin-top:8px;}
.form-status{font-size:0.95rem;}
.form-status.error{font-style:italic;}
.form-success{display:none;border:1px solid #fff;border-left-width:3px;padding:clamp(22px,4vw,40px);}
.form-success h3{font-size:2rem;margin-bottom:10px;}
.form-success p{margin-bottom:16px;}

/* ---------- sponsors & affiliates ---------- */
.links-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:clamp(36px,6vw,96px);}
.links-group h2{font-size:clamp(2rem,4vw,2.8rem);margin-bottom:10px;}
.links-group .lede{margin-bottom:24px;}
.link-list{list-style:none;border-top:1px solid #fff;}
.link-list li{border-bottom:1px solid #fff;}
.link-list a,.link-list .slot{display:flex;justify-content:space-between;align-items:center;gap:18px;padding:22px 4px;transition:background .3s ease,color .3s ease;}
.link-list a:hover,.link-list a:focus-visible{background:#fff;color:#000;outline:none;padding-left:14px;padding-right:14px;}
.link-name{display:block;font-family:var(--serif);font-size:1.6rem;line-height:1.15;}
.link-sub{display:block;font-size:0.8rem;font-weight:500;letter-spacing:0.12em;text-transform:uppercase;margin-top:6px;}
.link-arrow{font-size:1.3rem;flex:none;}
.slot{font-style:italic;}

/* ---------- footer ---------- */
footer{border-top:1px solid #fff;padding:44px 0;}
footer .wrap{display:flex;justify-content:space-between;align-items:center;flex-wrap:wrap;gap:16px 28px;}
footer p{font-size:0.9rem;}
.foot-links{display:flex;flex-wrap:wrap;gap:10px 22px;list-style:none;font-size:0.9rem;}
.foot-links a{border-bottom:1px solid #fff;padding-bottom:2px;transition:opacity .25s ease;}
.foot-links a:hover{opacity:0.6;}

/* ---------- photo viewer ---------- */
.lightbox{border:0;padding:0;background:rgba(0,0,0,0.97);color:#fff;width:100vw;height:100vh;max-width:none;max-height:none;}
.lightbox::backdrop{background:rgba(0,0,0,0.97);}
.lightbox[open]{display:grid;place-items:center;}
.lightbox img{max-width:92vw;max-height:84vh;object-fit:contain;}
.lightbox-btn{position:fixed;width:46px;height:46px;border:1px solid #fff;background:transparent;color:#fff;font-size:1.4rem;cursor:pointer;transition:background .3s ease,color .3s ease;}
.lightbox-btn:hover{background:#fff;color:#000;}
.lightbox-close{top:18px;right:18px;}
.lightbox-prev{left:18px;top:50%;}
.lightbox-next{right:18px;top:50%;}
.lightbox.single .lightbox-prev,.lightbox.single .lightbox-next{display:none;}

/* ---------- phones and tablets ---------- */
@media (max-width:900px){
  .about-grid,.split,.visit-grid,.form-layout,.links-grid{grid-template-columns:minmax(0,1fr);}
  .founder{max-width:460px;}
  .donate{grid-template-columns:minmax(0,1fr);}
}
@media (max-width:680px){
  :root{--gutter:18px;}
  .site-header{padding:12px 0;}
  .wordmark{font-size:0.82rem;letter-spacing:0.22em;gap:10px;}
  .wordmark img{width:42px;height:42px;}
  .wordmark .wm-small{display:none;}
  .site-nav summary{padding:10px 14px;}
  /* Phones: the banner starts below the header so the header doesn't cover the boots. */
  .top-banner{margin-top:66px;}
  .hero{min-height:0;}
  .hero-img{height:auto;width:100%;top:0;object-position:center top;opacity:0.9;}
  .hero-scrim{background:linear-gradient(180deg,#000 0%,rgba(0,0,0,0) 12%,rgba(0,0,0,0.25) 35%,rgba(0,0,0,0.85) 62%,#000 80%);}
  .hero-content{padding-top:62vw;}
  /* Too small to read inside the V on a phone: the title and crest sit
     centred just under the banner instead. */
  .banner-title{position:static;transform:none;flex-direction:column-reverse;gap:10px;padding:18px var(--gutter) 0;}
  .bt-name{font-size:1.25rem;letter-spacing:0.24em;padding-left:0.24em;}
  .bt-crest{width:56px;height:56px;}
  .hero-actions > *{flex:1 1 100%;}
  .pillars{grid-template-columns:minmax(0,1fr);}
  .pillars li{padding:16px 0;border-bottom:1px solid #fff;}
  .moments-grid{grid-template-columns:repeat(2,minmax(0,1fr));}
  .event summary{grid-template-columns:70px minmax(0,1fr);gap:16px;}
  .event-toggle{display:none;}
  .event-date .d{font-size:2.2rem;}
  .event-body{padding-left:86px;}
  .field-grid{grid-template-columns:minmax(0,1fr);}
  .link-name{font-size:1.35rem;}
  .lightbox-prev,.lightbox-next{top:auto;bottom:18px;}
}
@media (prefers-reduced-motion:reduce){
  html{scroll-behavior:auto;}
  *{transition:none !important;}
}
