/* ===================================================================
   spoke.css — shared chrome for the portfolio spoke pages (/services/,
   /about/, /research/). Loads AFTER /site.css and reuses its tokens +
   section classes (.wrap, .label, h2.h, .svc, .pub, .tl-item, .by, .mil…).
   These are real, indexable pages that fold out of the single-page home.
   =================================================================== */

/* reading pages: re-enable the text selection + iOS callout that site.css kills site-wide */
.spoke-main, .spoke-main *{ -webkit-user-select:text; user-select:text; -webkit-touch-callout:default; }

/* the home wraps its own footer; give the spokes' footer its own frame */
footer{ max-width:1180px; margin:0 auto; padding:34px 28px; }

/* ---- shared cross-linking header ---- */
.spoke-mast{ position:sticky; top:0; z-index:100; background:rgba(15,14,19,.92); backdrop-filter:blur(12px); border-bottom:1px solid var(--line); }
.spoke-mast .bar{ max-width:1180px; margin:0 auto; padding:14px 28px; display:flex; align-items:center; gap:16px 22px; flex-wrap:wrap; }
.spoke-home{ font-weight:900; letter-spacing:-.01em; font-size:1rem; color:var(--ink); text-decoration:none; white-space:nowrap; }
.spoke-home:hover{ color:var(--lime); }
.spoke-nav{ display:flex; flex-wrap:wrap; gap:6px 20px; margin-left:auto; }
.spoke-nav a{ font-family:var(--mono,ui-monospace,'Roboto Mono',monospace); font-size:.72rem; font-weight:800; letter-spacing:.13em; text-transform:uppercase; color:var(--muted); text-decoration:none; transition:color .2s; }
.spoke-nav a:hover, .spoke-nav a:focus-visible{ color:var(--ink); outline:none; }
.spoke-nav a[aria-current="page"]{ color:var(--lime); }
.spoke-cta{ font-size:.78rem; font-weight:800; color:#0f0e13; background:var(--lime); padding:9px 15px; border-radius:6px; text-decoration:none; white-space:nowrap; }
.spoke-cta:hover{ filter:brightness(1.08); }

/* ---- page head block (kicker + big title + lede) ---- */
.spoke-head{ max-width:var(--maxw); margin:0 auto; padding:56px 28px 8px; }
.spoke-kick{ font-family:var(--mono,ui-monospace,'Roboto Mono',monospace); font-size:.7rem; font-weight:800; letter-spacing:.2em; text-transform:uppercase; color:var(--lime); }
.spoke-kick .dim{ color:var(--muted); }
.spoke-title{ font-size:clamp(2.4rem,7vw,4.6rem); font-weight:900; letter-spacing:-.035em; text-transform:uppercase; line-height:.96; margin:12px 0 14px; }
.spoke-title .lime{ color:var(--lime); }
.spoke-lede{ color:var(--faint); font-size:clamp(1.05rem,2vw,1.2rem); line-height:1.6; max-width:60ch; }
.spoke-lede a{ color:var(--lime); text-decoration:none; border-bottom:1px solid rgba(214,255,63,.4); }

/* publication abstract line under each citation */
.pub-abs{ color:var(--faint); font-size:.92rem; line-height:1.6; margin-top:8px; max-width:64ch; }

/* ---- cross-link footer band (hub-and-spoke internal linking) ---- */
.spoke-cross{ border-top:1px solid var(--line); margin-top:40px; }
.spoke-cross .wrap{ display:grid; grid-template-columns:repeat(3,1fr); gap:16px; padding-top:40px; padding-bottom:20px; }
.spoke-cross a{ display:block; border:1px solid var(--line-2); border-radius:10px; background:var(--card); padding:20px 22px; text-decoration:none; color:inherit; transition:border-color .2s var(--ease),transform .2s var(--ease); }
.spoke-cross a:hover, .spoke-cross a:focus-visible{ border-color:var(--lime); transform:translateY(-3px); outline:none; }
.spoke-cross .k{ font-family:var(--mono,ui-monospace,'Roboto Mono',monospace); font-size:.64rem; font-weight:800; letter-spacing:.16em; text-transform:uppercase; color:var(--lime); }
.spoke-cross h3{ font-size:1.05rem; font-weight:900; margin:7px 0 4px; color:var(--ink); }
.spoke-cross p{ color:var(--muted); font-size:.88rem; line-height:1.5; }

@media(max-width:720px){
  .spoke-head{ padding:40px 20px 6px; }
  .spoke-cross .wrap{ grid-template-columns:1fr; }
}
