/* ============================================================
   NYC Sidewalk Violation Lookup — public site

   Built on the visual language of municipal records, refined
   for a premium, modern feel. The rules:

     1. Depth is earned. Hairlines separate; soft elevation is
        reserved for surfaces that hold something (records,
        the finder, the menu).
     2. Mono means data. Addresses, dates, identifiers and
        measurements only. Never prose, never a form label,
        never navigation — it costs readability there.
     3. Yellow is a flag. Three appearances per page.
     4. Motion is smooth and quiet. One easing curve, one
        reveal, generous durations, nothing that loops.
     5. Text is set to be read: 17px body, 1.7 leading, a
        measured column, real contrast.

   Colour tokens named --blue, --blue-700, --hazard, --ink,
   --concrete, --open and --clear are overridden per site from
   Settings, so keep those names.
   ============================================================ */

/* ---- Vito Extended Black (Latinotype, commercial) ----------
   Self-host VitoExtended-Black.woff2 in /assets/fonts/.
   Archivo 900 stands in until it is present. */
@font-face{
  font-family:"Vito Extended";
  src:url("/assets/fonts/VitoExtended-Black.woff2") format("woff2");
  font-weight:900;
  font-style:normal;
  font-display:swap;
}

:root{
  /* Set from Settings > Brand & theme */
  --concrete:#F7F7F4;
  --ink:#14171B;
  --blue:#12386B;
  --blue-700:#0E2C55;
  --hazard:#F2C230;
  --open:#B23A0E;
  --clear:#1C7A46;

  --surface:#FFFFFF;
  --sunken:#EFEFEA;
  --body:#3A3F47;
  --muted:#666C75;
  --rule:#E4E4DF;
  --rule-firm:#CFD0CA;
  --open-bg:#FBEEE8;
  --clear-bg:#E9F4EE;
  --neutral:#3B4656;
  --neutral-bg:#EFF1F3;
  --wa:#25D366;

  --radius:10px;
  --radius-sm:8px;
  --radius-lg:14px;

  /* Elevation, used sparingly. */
  --lift:0 1px 2px rgba(20,23,27,.04), 0 4px 12px rgba(20,23,27,.05);
  --lift-md:0 2px 4px rgba(20,23,27,.05), 0 10px 28px rgba(20,23,27,.07);
  --lift-lg:0 4px 10px rgba(20,23,27,.06), 0 20px 48px rgba(20,23,27,.1);

  --maxw:1120px;
  --display:"Vito Extended","Archivo",sans-serif;
  --sans:"Inter",system-ui,-apple-system,sans-serif;
  --mono:"Space Mono",ui-monospace,SFMono-Regular,Menlo,monospace;

  /* One curve, one set of durations. Everything moves the same way. */
  --ease:cubic-bezier(.22,.61,.36,1);
  --t-fast:.18s;
  --t:.28s;
  --t-slow:.5s;

  --gutter:clamp(20px,4vw,44px);
  --gap:clamp(18px,2.4vw,26px);
  --band:clamp(56px,7vw,96px);
  --band-tight:clamp(36px,4.4vw,56px);
}

*{box-sizing:border-box;}
html{scroll-behavior:smooth;scroll-padding-top:88px;-webkit-text-size-adjust:100%;}

body{
  margin:0;background:var(--concrete);color:var(--body);
  font-family:var(--sans);
  font-size:1.0625rem;      /* 17px — set to be read */
  line-height:1.7;
  -webkit-font-smoothing:antialiased;text-rendering:optimizeLegibility;
  overflow-x:hidden;
}
img{max-width:100%;height:auto;display:block;}
a{color:var(--blue);}
::selection{background:var(--hazard);color:var(--ink);}

/* A focus ring that is visible without being loud. */
:focus-visible{outline:2px solid var(--blue);outline-offset:3px;border-radius:2px;}

.skip{position:absolute;left:-999px;top:0;background:var(--ink);color:#fff;padding:12px 18px;border-radius:0 0 var(--radius-sm) 0;z-index:200;}
.skip:focus{left:0;}

/* Flag 1 of 3. */
.hazard-stripe{height:6px;background:repeating-linear-gradient(-45deg,var(--hazard) 0 16px,var(--ink) 16px 32px);}

.wrap{max-width:var(--maxw);margin:0 auto;padding:0 var(--gutter);}

/* ---------- typography ---------- */
h1,h2,h3,h4{font-family:var(--display);color:var(--ink);text-wrap:balance;margin:0;}
h1{font-size:clamp(2.1rem,4.4vw,3.15rem);line-height:1.08;letter-spacing:-.032em;margin-bottom:18px;}
h2{font-size:clamp(1.5rem,3vw,2.05rem);line-height:1.14;letter-spacing:-.028em;margin-bottom:16px;}
h3{font-size:1.12rem;line-height:1.35;letter-spacing:-.018em;margin-bottom:8px;}

p{max-width:68ch;margin:0;}
.lead{font-size:clamp(1.08rem,1.5vw,1.2rem);line-height:1.62;color:var(--muted);max-width:56ch;margin:0 0 8px;}

/* The register label: the one place small uppercase mono earns its keep. */
.eyebrow{
  display:flex;align-items:center;gap:13px;
  font-family:var(--mono);font-size:.73rem;letter-spacing:.14em;text-transform:uppercase;
  color:var(--muted);margin:0 0 18px;
}
.eyebrow::after{content:"";flex:1;height:1px;background:var(--rule);}

.prose{color:var(--body);}
.prose p{margin-bottom:1.1em;}
.prose p:last-child{margin-bottom:0;}
.prose h2{margin-top:clamp(34px,4.5vw,52px);}
.prose h3{margin-top:clamp(24px,3.2vw,32px);font-size:1.08rem;}
.prose ul,.prose ol{padding-left:24px;margin:0 0 1.1em;}
.prose li{margin:.45em 0;}
.prose a{color:var(--blue);text-decoration:underline;text-underline-offset:3px;text-decoration-thickness:1px;transition:text-decoration-thickness var(--t-fast) var(--ease);}
.prose a:hover{text-decoration-thickness:2px;}
.prose img{border:1px solid var(--rule);border-radius:var(--radius);margin:28px 0;}
.prose blockquote{margin:28px 0;padding:4px 0 4px 22px;border-left:3px solid var(--rule-firm);color:var(--muted);}

/* ---------- header ---------- */
.site-header{
  background:rgba(255,255,255,.92);
  -webkit-backdrop-filter:saturate(180%) blur(14px);
  backdrop-filter:saturate(180%) blur(14px);
  border-bottom:1px solid var(--rule);position:sticky;top:0;z-index:100;
}
.site-header::after{
  content:"";position:absolute;left:0;right:0;top:100%;height:14px;pointer-events:none;
  background:linear-gradient(rgba(20,23,27,.055),rgba(20,23,27,0));
  opacity:0;transition:opacity var(--t) var(--ease);
}
.site-header.is-stuck::after{opacity:1;}

.nav{display:flex;align-items:center;justify-content:space-between;gap:18px;padding:14px var(--gutter);max-width:var(--maxw);margin:0 auto;}
.brand{display:flex;align-items:center;gap:10px;font-family:var(--display);font-size:1.14rem;letter-spacing:-.02em;color:var(--ink);text-decoration:none;white-space:nowrap;}
.brand .dot{color:var(--hazard);}
.brand-logo{height:clamp(36px,4.4vw,44px);width:auto;display:block;}
.footer-brand{color:#fff;}
.footer-brand img{height:32px;width:32px;display:block;}

.nav-links{display:flex;align-items:center;gap:2px;list-style:none;margin:0;padding:0;}
.nav-links a{
  position:relative;font-size:.945rem;color:var(--muted);text-decoration:none;
  padding:10px 14px;border-radius:var(--radius-sm);
  transition:color var(--t-fast) var(--ease),background-color var(--t-fast) var(--ease);
}
.nav-links a:hover{color:var(--ink);background-color:var(--sunken);}
.nav-links a[aria-current="page"]{color:var(--ink);font-weight:600;}

.nav-cta{
  font-family:var(--display);font-size:.9rem;background:var(--blue);color:#fff !important;
  padding:11px 19px !important;border-radius:var(--radius-sm);
  transition:background-color var(--t-fast) var(--ease),transform var(--t-fast) var(--ease);
}
.nav-cta:hover{background:var(--blue-700) !important;transform:translateY(-1px);}

.nav-toggle{display:none;background:none;border:1px solid var(--rule-firm);border-radius:var(--radius-sm);padding:10px 12px;cursor:pointer;}
.nav-toggle span{display:block;width:19px;height:2px;background:var(--ink);margin:4px 0;border-radius:2px;transition:transform var(--t) var(--ease),opacity var(--t-fast) var(--ease);}
.nav-toggle[aria-expanded="true"] span:nth-child(1){transform:translateY(6px) rotate(45deg);}
.nav-toggle[aria-expanded="true"] span:nth-child(2){opacity:0;}
.nav-toggle[aria-expanded="true"] span:nth-child(3){transform:translateY(-6px) rotate(-45deg);}

/* ---------- bands ---------- */
main{display:block;}
.section{padding:var(--band) 0;}
.section.tight{padding:var(--band-tight) 0;}
.section.alt{background:var(--surface);border-top:1px solid var(--rule);border-bottom:1px solid var(--rule);}

/* ---------- buttons ---------- */
.btn{
  display:inline-flex;align-items:center;justify-content:center;gap:10px;
  font-family:var(--display);font-size:.98rem;
  padding:15px clamp(22px,2.6vw,28px);border-radius:var(--radius-sm);
  text-decoration:none;cursor:pointer;border:1px solid transparent;min-height:52px;
  transition:background-color var(--t-fast) var(--ease),border-color var(--t-fast) var(--ease),
             color var(--t-fast) var(--ease),transform var(--t-fast) var(--ease),box-shadow var(--t) var(--ease);
}
.btn:active{transform:translateY(1px);}
.btn-primary{background:var(--blue);color:#fff;box-shadow:0 2px 8px rgba(18,56,107,.18);}
.btn-primary:hover{background:var(--blue-700);box-shadow:0 6px 18px rgba(18,56,107,.24);transform:translateY(-1px);}
.btn-hazard{background:var(--hazard);color:var(--ink);box-shadow:0 2px 8px rgba(242,194,48,.28);}
.btn-hazard:hover{background:#EFBE2A;box-shadow:0 6px 18px rgba(242,194,48,.34);transform:translateY(-1px);}
.btn-ghost{background:var(--surface);color:var(--ink);border-color:var(--rule-firm);}
.btn-ghost:hover{border-color:var(--ink);transform:translateY(-1px);box-shadow:var(--lift);}
.btn-wa{background:var(--wa);color:#08301A;box-shadow:0 2px 8px rgba(37,211,102,.24);}
.btn-wa:hover{background:#1FBF5B;transform:translateY(-1px);}

/* ---------- the finder ---------- */
.tool-hero{background:var(--surface);border-bottom:1px solid var(--rule);}
.tool-hero.on-concrete{background:var(--concrete);}
.tool-hero .wrap{padding-top:clamp(50px,6.5vw,84px);padding-bottom:clamp(50px,6.5vw,84px);}
.tool-hero h1{max-width:18ch;}
/* Flag 2 of 3. */
.tool-hero h1 .u{background:linear-gradient(transparent 60%,var(--hazard) 60% 92%,transparent 92%);padding:0 .05em;}
.tool-hero .lead{max-width:52ch;}

.search{
  background:var(--surface);border:1px solid var(--rule);border-radius:var(--radius-lg);
  box-shadow:var(--lift-md);padding:clamp(20px,2.8vw,26px);
  margin-top:clamp(28px,3.6vw,36px);max-width:680px;
}
.search label{
  display:block;font-family:var(--mono);font-size:.7rem;letter-spacing:.14em;text-transform:uppercase;
  color:var(--muted);margin-bottom:11px;
}
.field-row{display:flex;gap:10px;flex-wrap:wrap;}
/* Mono here because what goes in is a record query. */
.field-row input{
  flex:1 1 300px;min-width:0;font-family:var(--mono);font-size:.97rem;color:var(--ink);
  padding:16px 17px;border:1px solid var(--rule-firm);border-radius:var(--radius-sm);background:var(--concrete);
  transition:border-color var(--t-fast) var(--ease),box-shadow var(--t-fast) var(--ease),background-color var(--t-fast) var(--ease);
}
.tool-hero.on-concrete .field-row input{background:var(--surface);}
.field-row input::placeholder{color:#9AA1A9;}
.field-row input:focus{outline:none;border-color:var(--blue);background:var(--surface);box-shadow:0 0 0 4px rgba(18,56,107,.1);}
.field-row .btn{flex:0 0 auto;}
.hint{font-size:.88rem;line-height:1.6;color:var(--muted);margin:14px 0 0;}
.hint code{font-family:var(--mono);background:var(--sunken);border:1px solid var(--rule);padding:2px 6px;border-radius:4px;font-size:.82rem;}

/* Sans, not mono — these are read, not scanned as data. */
.hero-trust{display:flex;flex-wrap:wrap;gap:9px clamp(16px,2.6vw,26px);margin-top:22px;max-width:680px;}
.hero-trust span{display:inline-flex;align-items:center;gap:8px;font-size:.91rem;color:var(--muted);}
.hero-trust svg{width:15px;height:15px;flex:0 0 auto;color:var(--clear);}

/* ---------- returned records ---------- */
.results{margin-top:28px;}
.status-msg{font-size:.97rem;color:var(--muted);padding:6px 2px 14px;}
.loader{display:inline-flex;align-items:center;gap:11px;color:var(--ink);}
.spinner{width:16px;height:16px;border:2px solid var(--rule);border-top-color:var(--blue);border-radius:50%;animation:spin .7s linear infinite;}
@keyframes spin{to{transform:rotate(360deg);}}
.summary{font-family:var(--display);font-size:1.1rem;color:var(--ink);margin:4px 0 16px;}

/* The one thing that animates on arrival, because it just changed. */
.card,.empty{animation:recordIn .42s var(--ease) both;}
@keyframes recordIn{from{opacity:0;transform:translate3d(0,8px,0);}to{opacity:1;transform:none;}}
.card:nth-child(3){animation-delay:.05s;}
.card:nth-child(4){animation-delay:.1s;}
.card:nth-child(5){animation-delay:.15s;}
.card:nth-child(6){animation-delay:.2s;}

.card{
  background:var(--surface);border:1px solid var(--rule);border-left:3px solid var(--rule-firm);
  border-radius:var(--radius);padding:20px 22px;margin-bottom:12px;box-shadow:var(--lift);
  transition:box-shadow var(--t) var(--ease);
}
.card:hover{box-shadow:var(--lift-md);}
.card.open{border-left-color:var(--open);}
.card.clear{border-left-color:var(--clear);}
.card.rec{border-left-color:var(--neutral);}
.card-top{display:flex;justify-content:space-between;align-items:flex-start;gap:16px;flex-wrap:wrap;}
.addr{font-family:var(--display);font-size:1.08rem;letter-spacing:-.022em;color:var(--ink);overflow-wrap:anywhere;}
.cross{font-size:.88rem;color:var(--muted);margin-top:4px;overflow-wrap:anywhere;}

.badge{
  display:inline-flex;align-items:center;gap:7px;font-size:.72rem;font-weight:600;
  letter-spacing:.06em;text-transform:uppercase;padding:6px 11px;border-radius:999px;white-space:nowrap;
}
.badge::before{content:"";width:6px;height:6px;border-radius:50%;background:currentColor;}
.badge.open{background:var(--open-bg);color:var(--open);}
.badge.clear{background:var(--clear-bg);color:var(--clear);}
.badge.rec{background:var(--neutral-bg);color:var(--neutral);}

/* A labelled field list, so two records read against each other. */
.meta{
  display:grid;grid-template-columns:repeat(auto-fit,minmax(min(100%,138px),1fr));
  gap:15px 24px;margin-top:18px;padding-top:16px;border-top:1px solid var(--rule);
}
.meta .kv .k{font-size:.7rem;font-weight:600;letter-spacing:.07em;text-transform:uppercase;color:var(--muted);display:block;}
.meta .kv .v{font-family:var(--mono);font-size:.93rem;font-variant-numeric:tabular-nums;color:var(--ink);display:block;margin-top:4px;overflow-wrap:anywhere;}
.defects{display:flex;flex-wrap:wrap;gap:7px;margin-top:16px;}
.chip{font-size:.83rem;background:var(--sunken);border:1px solid var(--rule);padding:5px 11px;border-radius:999px;color:var(--muted);}

.empty{background:var(--surface);border:1px dashed var(--rule-firm);border-radius:var(--radius);padding:34px 24px;text-align:center;}
.empty .big{font-family:var(--display);font-size:1.18rem;color:var(--ink);margin-bottom:8px;}
.empty p{color:var(--muted);margin:6px auto 0;max-width:52ch;font-size:.95rem;}

.callout{background:var(--surface);border:1px solid var(--rule);border-radius:var(--radius);padding:18px 20px;margin-top:18px;font-size:.93rem;line-height:1.65;color:var(--muted);}
.callout b{color:var(--ink);font-weight:600;}
.callout.warn{border-left:3px solid var(--hazard);}

/* ---------- the full report ----------
   Same cards as a sidewalk result, grouped under the agency that filed them,
   with the open tally carried up to each heading so the shape of a property
   reads before any single record does. */
.property{background:var(--surface);border:1px solid var(--rule-firm);border-radius:var(--radius);padding:18px 22px;margin-bottom:22px;box-shadow:var(--lift);}
.property-head{display:flex;justify-content:space-between;align-items:flex-start;gap:16px;flex-wrap:wrap;}
.property .cross{font-family:var(--mono);font-size:.8rem;}

.property-actions{display:flex;flex-wrap:wrap;gap:8px 18px;margin-top:14px;padding-top:13px;border-top:1px solid var(--rule);font-size:.86rem;}
.property-actions a{color:var(--blue);text-decoration:none;border-bottom:1px solid transparent;transition:border-color var(--t-fast) var(--ease);}
.property-actions a:hover{border-bottom-color:var(--blue);}
.agency{margin-top:30px;}
.agency-head{display:flex;justify-content:space-between;align-items:baseline;gap:14px;flex-wrap:wrap;padding-bottom:10px;margin-bottom:14px;border-bottom:1px solid var(--rule);}
.agency-head h3{font-size:1.02rem;letter-spacing:-.02em;margin:0;}
.agency-head p{font-size:.85rem;color:var(--muted);margin:4px 0 0;max-width:56ch;}
.agency-counts{display:flex;gap:8px;flex:0 0 auto;}

/* Tallies are counts, so they are set in the same figures as the record fields. */
.tally{
  font-family:var(--mono);font-size:.76rem;font-variant-numeric:tabular-nums;white-space:nowrap;
  background:var(--sunken);border:1px solid var(--rule);color:var(--muted);padding:4px 10px;border-radius:999px;
}
.tally.is-open{background:var(--open-bg);border-color:transparent;color:var(--open);font-weight:600;}

.record-desc{font-size:.93rem;line-height:1.62;color:var(--muted);margin:12px 0 0;overflow-wrap:anywhere;}
.agency .status-msg{padding:2px 2px 6px;}

/* ---------- call / whatsapp panel ---------- */
.contact-cta{margin-top:32px;border-radius:var(--radius-lg);overflow:hidden;background:var(--ink);color:#fff;box-shadow:var(--lift-lg);}
/* Flag 3 of 3. */
.contact-cta .stripe{height:6px;background:repeating-linear-gradient(-45deg,var(--hazard) 0 16px,var(--ink) 16px 32px);}
.contact-cta .body{padding:clamp(26px,3.6vw,40px);}
.contact-cta h2{color:#fff;margin-bottom:14px;}
.contact-cta p{color:#C8CCD3;margin:0 0 14px;max-width:62ch;}
.contact-cta .phone{color:var(--hazard);font-weight:600;text-decoration:none;border-bottom:1px solid rgba(242,194,48,.4);white-space:nowrap;transition:border-color var(--t-fast) var(--ease);}
.contact-cta .phone:hover{border-bottom-color:var(--hazard);}
.cta-buttons{display:flex;flex-wrap:wrap;gap:12px;margin-top:26px;}
.cta-note{font-size:.89rem;color:#8C939C;margin:20px 0 0;}

/* ---------- grids and tiles ---------- */
.grid{display:grid;gap:var(--gap);}
.grid.cols-3{grid-template-columns:repeat(3,minmax(0,1fr));}
.grid.cols-2{grid-template-columns:repeat(2,minmax(0,1fr));}

.tile{
  background:var(--surface);border:1px solid var(--rule);border-radius:var(--radius);
  padding:clamp(22px,2.6vw,28px);box-shadow:var(--lift);
  transition:transform var(--t) var(--ease),box-shadow var(--t) var(--ease),border-color var(--t) var(--ease);
}
.tile:hover{transform:translateY(-3px);box-shadow:var(--lift-md);border-color:var(--rule-firm);}
.tile p{color:var(--muted);font-size:.97rem;margin:8px 0 0;}
.tile .num{display:block;font-family:var(--mono);font-size:.72rem;letter-spacing:.12em;text-transform:uppercase;color:var(--blue);margin-bottom:12px;}

/* Facts set as a register rather than as features. */
.field-list{border-top:1px solid var(--rule);margin-top:30px;}
.field-list .row{
  display:grid;grid-template-columns:minmax(0,15rem) minmax(0,1fr);gap:6px clamp(24px,4vw,48px);
  padding:22px 0;border-bottom:1px solid var(--rule);align-items:baseline;
  transition:background-color var(--t) var(--ease);
}
.field-list .row:hover{background-color:rgba(20,23,27,.015);}
.field-list .row .t{font-weight:600;color:var(--ink);font-size:1rem;}
.field-list .row .d{color:var(--muted);font-size:.97rem;margin:0;max-width:58ch;}
@media (max-width:640px){.field-list .row{grid-template-columns:1fr;padding:18px 0;gap:4px;}}

.chips-row{display:flex;flex-wrap:wrap;gap:9px;margin-top:6px;}
.pill{
  font-size:.92rem;background:var(--surface);border:1px solid var(--rule);padding:9px 16px;
  border-radius:999px;color:var(--body);box-shadow:var(--lift);
  transition:transform var(--t-fast) var(--ease),border-color var(--t-fast) var(--ease);
}
.pill:hover{transform:translateY(-2px);border-color:var(--rule-firm);}

/* ---------- stats ---------- */
.stat-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(min(100%,180px),1fr));gap:var(--gap);margin-top:30px;}
.stat{background:var(--surface);border:1px solid var(--rule);border-radius:var(--radius);padding:26px 24px;box-shadow:var(--lift);}
.section.alt .stat{background:var(--concrete);}
.stat .figure{font-family:var(--display);font-size:clamp(1.9rem,3.6vw,2.6rem);line-height:1;letter-spacing:-.035em;color:var(--ink);font-variant-numeric:tabular-nums;}
.stat .label{font-size:.95rem;font-weight:600;color:var(--ink);margin-top:12px;}
.stat .sub{font-size:.88rem;color:var(--muted);margin-top:4px;}

/* ---------- image + text ---------- */
.media-text{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:clamp(30px,4.5vw,56px);align-items:center;}
.media-text.is-flipped .mt-media{order:2;}
.mt-media img,.mt-media svg{width:100%;border:1px solid var(--rule);border-radius:var(--radius-lg);box-shadow:var(--lift-md);display:block;}
.mt-body h2{margin-bottom:14px;}
.mt-list{list-style:none;margin:22px 0 0;padding:0;border-top:1px solid var(--rule);}
.mt-list li{display:flex;gap:12px;align-items:flex-start;padding:13px 0;border-bottom:1px solid var(--rule);font-size:.97rem;color:var(--body);}
.mt-list svg{width:17px;height:17px;color:var(--clear);flex:0 0 auto;margin-top:5px;}

/* ---------- blog ---------- */
.post-grid{display:grid;gap:var(--gap);grid-template-columns:repeat(3,minmax(0,1fr));}
.post-card{
  background:var(--surface);border:1px solid var(--rule);border-radius:var(--radius);
  display:flex;flex-direction:column;text-decoration:none;color:inherit;box-shadow:var(--lift);
  transition:transform var(--t) var(--ease),box-shadow var(--t) var(--ease),border-color var(--t) var(--ease);
}
.post-card:hover{transform:translateY(-4px);box-shadow:var(--lift-md);border-color:var(--rule-firm);}
.pc-thumb{display:block;overflow:hidden;border-radius:var(--radius) var(--radius) 0 0;}
.post-card .thumb{display:block;aspect-ratio:16/9;width:100%;object-fit:cover;background:var(--sunken);transition:transform var(--t-slow) var(--ease);}
.post-card:hover .thumb{transform:scale(1.04);}
.post-card .pc-body{padding:22px;display:flex;flex-direction:column;gap:9px;flex:1;}
.post-card .cat{font-size:.75rem;font-weight:600;letter-spacing:.09em;text-transform:uppercase;color:var(--blue);}
.post-card h3{margin:0;font-size:1.08rem;transition:color var(--t-fast) var(--ease);}
.post-card:hover h3{color:var(--blue);}
.post-card .excerpt{color:var(--muted);font-size:.95rem;margin:0;}
.post-card .date{margin-top:auto;padding-top:10px;font-size:.85rem;color:var(--muted);}

.featured{
  display:grid;grid-template-columns:1.1fr 1fr;gap:0;background:var(--surface);
  border:1px solid var(--rule);border-radius:var(--radius-lg);overflow:hidden;box-shadow:var(--lift);
  transition:transform var(--t) var(--ease),box-shadow var(--t) var(--ease);
}
.featured:hover{transform:translateY(-3px);box-shadow:var(--lift-md);}
.featured img{width:100%;height:100%;object-fit:cover;min-height:clamp(210px,28vw,290px);}
.featured .thumb{min-height:clamp(210px,28vw,290px);background:var(--sunken);}
.featured .f-body{padding:clamp(26px,3.4vw,38px);}

.cat-filter{display:flex;flex-wrap:wrap;gap:9px;margin:26px 0 clamp(26px,3.4vw,34px);}
.cat-filter button,.cat-filter .cat-btn{
  font-family:var(--sans);font-size:.92rem;background:var(--surface);border:1px solid var(--rule);
  border-radius:999px;padding:9px 18px;cursor:pointer;color:var(--muted);text-decoration:none;display:inline-block;
  transition:background-color var(--t-fast) var(--ease),color var(--t-fast) var(--ease),
             border-color var(--t-fast) var(--ease),transform var(--t-fast) var(--ease);
}
.cat-filter .cat-btn:hover{border-color:var(--rule-firm);color:var(--ink);transform:translateY(-2px);}
.cat-filter button[aria-pressed="true"],.cat-filter .cat-btn[aria-pressed="true"]{background:var(--ink);color:#fff;border-color:var(--ink);}
.cat-filter .cat-btn[aria-pressed="true"]:hover{background:var(--ink);color:#fff;}

/* ---------- article ---------- */
.article-head{max-width:760px;margin:0 auto;}
.article-body{max-width:760px;margin:0 auto;font-size:1.08rem;line-height:1.75;}
.article-meta{display:flex;flex-wrap:wrap;gap:6px 18px;font-size:.9rem;color:var(--muted);margin:16px 0 26px;}
.article-body img{border:1px solid var(--rule);border-radius:var(--radius);margin:28px 0;}

.toc{background:var(--surface);border:1px solid var(--rule);border-radius:var(--radius);padding:24px 28px;margin:30px 0;box-shadow:var(--lift);}
.toc strong{font-family:var(--mono);font-size:.71rem;letter-spacing:.13em;text-transform:uppercase;color:var(--muted);display:block;margin-bottom:12px;font-weight:400;}
.toc ol{margin:0;padding-left:22px;}
.toc li{margin:8px 0;}
.toc a{color:var(--blue);text-decoration:none;border-bottom:1px solid transparent;transition:border-color var(--t-fast) var(--ease);}
.toc a:hover{border-bottom-color:var(--blue);}

/* ---------- forms ---------- */
.form{background:var(--surface);border:1px solid var(--rule);border-radius:var(--radius-lg);padding:clamp(24px,3.2vw,36px);max-width:640px;box-shadow:var(--lift);}
.form .fld{margin-bottom:20px;}
/* Sentence case sans: a form label is read, not scanned. */
.form label{display:block;font-size:.94rem;font-weight:600;color:var(--ink);margin-bottom:8px;}
.form input,.form textarea,.form select{
  width:100%;font-family:var(--sans);font-size:1rem;padding:14px 16px;border:1px solid var(--rule-firm);
  border-radius:var(--radius-sm);background:#fff;color:var(--ink);
  transition:border-color var(--t-fast) var(--ease),box-shadow var(--t-fast) var(--ease);
}
.form input:focus,.form textarea:focus{outline:none;border-color:var(--blue);box-shadow:0 0 0 4px rgba(18,56,107,.1);}
.form .err{color:var(--open);font-size:.87rem;margin-top:6px;display:none;}
.form .fld.invalid .err{display:block;}
.form .fld.invalid input,.form .fld.invalid textarea{border-color:var(--open);box-shadow:0 0 0 4px rgba(178,58,14,.08);}
.form-note{font-size:.9rem;color:var(--muted);margin-top:14px;}
.form-msg{padding:15px 18px;border-radius:var(--radius-sm);margin-bottom:20px;font-size:.95rem;display:none;}
.form-msg.ok{display:block;background:var(--clear-bg);color:var(--clear);border:1px solid #CBE5D6;}
.form-msg.bad{display:block;background:var(--open-bg);color:var(--open);border:1px solid #F0D6CB;}

/* ---------- misc ---------- */
.notice{background:var(--neutral-bg);border-radius:var(--radius);padding:18px 22px;font-size:.95rem;color:var(--neutral);}
.breadcrumb{font-size:.88rem;color:var(--muted);padding:18px 0 0;}
.breadcrumb a{color:var(--muted);text-decoration:none;transition:color var(--t-fast) var(--ease);}
.breadcrumb a:hover{color:var(--ink);}
.two-col{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:var(--gap);}

.faq-item{
  background:var(--surface);border:1px solid var(--rule);border-radius:var(--radius);margin-bottom:10px;
  transition:border-color var(--t) var(--ease),box-shadow var(--t) var(--ease);
}
.faq-item:hover{border-color:var(--rule-firm);}
.faq-item[open]{border-color:var(--rule-firm);box-shadow:var(--lift);}
.faq-item summary{
  cursor:pointer;padding:19px 22px;font-family:var(--display);font-size:1.04rem;color:var(--ink);
  list-style:none;display:flex;justify-content:space-between;gap:18px;align-items:center;
}
.faq-item summary::-webkit-details-marker{display:none;}
.faq-item summary::after{
  content:"";flex:0 0 auto;width:13px;height:13px;
  background-image:linear-gradient(var(--muted),var(--muted)),linear-gradient(var(--muted),var(--muted));
  background-size:13px 1.6px,1.6px 13px;background-position:center;background-repeat:no-repeat;
  transition:background-size var(--t) var(--ease),transform var(--t) var(--ease);
}
.faq-item[open] summary::after{background-size:13px 1.6px,0 0;transform:rotate(180deg);}
.faq-item .a{padding:0 22px 20px;color:var(--body);animation:faqOpen var(--t) var(--ease);}
.faq-item .a p{margin:0;}
@keyframes faqOpen{from{opacity:0;transform:translate3d(0,-6px,0);}to{opacity:1;transform:none;}}

.cta-band{background:var(--blue);color:#fff;border-radius:var(--radius-lg);padding:clamp(38px,4.6vw,56px) clamp(24px,3.6vw,44px);text-align:center;box-shadow:var(--lift-md);}
.cta-band h2{color:#fff;}
.cta-band p{color:#C7D3E4;margin:0 auto 26px;max-width:52ch;font-size:1.05rem;}

.indep{background:var(--neutral-bg);border-left:3px solid var(--hazard);border-radius:var(--radius-sm);padding:16px 20px;font-size:.91rem;line-height:1.65;color:var(--neutral);margin-top:18px;}

.pager{display:flex;align-items:center;justify-content:center;gap:14px;margin-top:44px;flex-wrap:wrap;}
.pager-btn{font-size:.93rem;font-weight:600;color:var(--ink);background:var(--surface);border:1px solid var(--rule-firm);border-radius:var(--radius-sm);padding:11px 20px;text-decoration:none;
  transition:border-color var(--t-fast) var(--ease),transform var(--t-fast) var(--ease),box-shadow var(--t) var(--ease);}
.pager-btn:hover{border-color:var(--ink);transform:translateY(-2px);box-shadow:var(--lift);}
.pager-btn.is-disabled{opacity:.4;pointer-events:none;}
.pager-status{font-size:.9rem;color:var(--muted);}

/* ---------- footer ---------- */
.site-footer{background:var(--ink);color:#B7BCC4;}
.site-footer .top{
  display:grid;grid-template-columns:1.5fr repeat(4,1fr);gap:clamp(24px,3.2vw,34px);
  padding:clamp(44px,5.5vw,64px) var(--gutter) clamp(30px,3.6vw,40px);max-width:var(--maxw);margin:0 auto;
}
.site-footer h4{font-size:.74rem;font-weight:700;letter-spacing:.13em;text-transform:uppercase;color:#fff;margin:0 0 15px;font-family:var(--sans);}
.site-footer ul{list-style:none;margin:0;padding:0;}
.site-footer li{margin:10px 0;}
.site-footer a{color:#B7BCC4;text-decoration:none;font-size:.94rem;display:inline-block;
  transition:color var(--t-fast) var(--ease),transform var(--t-fast) var(--ease);}
.site-footer a:hover{color:#fff;transform:translateX(3px);}
.site-footer .brand{color:#fff;margin-bottom:14px;}
.site-footer .fdesc{font-size:.92rem;color:#8B929B;max-width:34ch;line-height:1.7;}
.site-footer .bottom{border-top:1px solid rgba(255,255,255,.09);padding:22px var(--gutter) clamp(32px,4vw,46px);max-width:var(--maxw);margin:0 auto;font-size:.87rem;line-height:1.65;color:#8B929B;display:flex;flex-wrap:wrap;gap:16px;justify-content:space-between;}
.site-footer .bottom .disc{max-width:72ch;}

/* ---------- scroll reveal ----------
   Whole bands ease in, rather than every element popping on its
   own. Applied by site.js so the page is never blank without JS. */
.reveal{opacity:0;transform:translate3d(0,18px,0);}
.reveal-in{opacity:1;transform:none;transition:opacity var(--t-slow) var(--ease),transform var(--t-slow) var(--ease);}

/* ---------- responsive ---------- */
@media (max-width:960px){
  .nav-toggle{display:block;}
  .nav-links{
    position:absolute;top:100%;left:0;right:0;flex-direction:column;align-items:stretch;gap:2px;
    background:var(--surface);border-bottom:1px solid var(--rule);padding:14px 18px 20px;display:none;
    box-shadow:var(--lift-md);max-height:calc(100vh - 76px);overflow-y:auto;
  }
  .nav-links.open{display:flex;animation:menuIn var(--t) var(--ease);}
  .nav-links a{padding:14px 13px;}
  .nav-cta{text-align:center;margin-top:10px;}
  .site-footer .top{grid-template-columns:repeat(2,1fr);}
  .site-footer .top > div:first-child{grid-column:1 / -1;}
}
@keyframes menuIn{from{opacity:0;transform:translate3d(0,-8px,0);}to{opacity:1;transform:none;}}

@media (max-width:900px){
  .grid.cols-3,.post-grid{grid-template-columns:repeat(2,minmax(0,1fr));}
  .media-text,.featured{grid-template-columns:1fr;}
  .media-text.is-flipped .mt-media{order:0;}
}
@media (max-width:620px){
  .grid.cols-3,.grid.cols-2,.post-grid,.two-col{grid-template-columns:1fr;}
  .field-row .btn,.cta-buttons .btn{flex:1 1 100%;width:100%;}
  .site-footer .bottom{flex-direction:column;gap:12px;}
  body{font-size:1.02rem;}
}
@media (max-width:420px){
  .site-footer .top{grid-template-columns:1fr;}
}

/* ---------- motion and print ---------- */
@media (prefers-reduced-motion:reduce){
  html{scroll-behavior:auto;}
  *,*::before,*::after{animation-duration:.01ms !important;animation-iteration-count:1 !important;transition-duration:.01ms !important;}
  .reveal{opacity:1;transform:none;}
  .tile:hover,.post-card:hover,.pill:hover,.featured:hover,.btn:hover,.pager-btn:hover,.cat-filter .cat-btn:hover{transform:none;}
  .post-card:hover .thumb{transform:none;}
}
@media print{
  .site-header,.site-footer,.contact-cta,.cta-band,.btn{display:none !important;}
  body{background:#fff;color:#000;}
}
