/* =========================================================================
   Political Philosophers — a reference guide
   Design: the scholarly apparatus made navigable.
   Palette: ink on warm laid paper; oxblood accent (cloth binding);
            a reserved brick-red for caveats (they carry real meaning).
   ========================================================================= */

:root{
  --paper:      #f3efe6;   /* warm laid paper */
  --paper-deep: #ece6d8;   /* panel fill */
  --ink:        #211d1a;   /* near-black brown-ink */
  --ink-soft:   #4a433c;   /* secondary text */
  --faint:      #8a8073;   /* captions, apparatus */
  --rule:       #d3caba;   /* hairlines */
  --oxblood:    #6d1f2c;   /* primary accent — cloth binding */
  --oxblood-lo: #8a3a44;
  --caveat:     #9a3412;   /* editorial warning — misattribution boxes */
  --gold:       #9c7a2e;   /* rare highlight */
  --link:       #6d1f2c;
  --maxw:       1180px;
}
:root{ --caveat-bg:#f7ece5; }

*{ box-sizing:border-box; }
html{ -webkit-text-size-adjust:100%; }
body{
  margin:0; background:var(--paper); color:var(--ink);
  font-family:"Newsreader", Georgia, serif;
  font-optical-sizing:auto;
  font-size:19px; line-height:1.62;
  text-rendering:optimizeLegibility;
}
/* subtle paper tooth */
body::before{
  content:""; position:fixed; inset:0; pointer-events:none; z-index:0;
  background-image:
    radial-gradient(circle at 20% 30%, rgba(0,0,0,.015) 0, transparent 60%),
    radial-gradient(circle at 80% 70%, rgba(0,0,0,.012) 0, transparent 55%);
  mix-blend-mode:multiply;
}
main, .topbar, .foot{ position:relative; z-index:1; }

a{ color:var(--link); text-decoration:none; }
a:hover{ text-decoration:underline; text-underline-offset:2px; }

.skip{ position:absolute; left:-999px; }
.skip:focus{ left:12px; top:12px; background:var(--ink); color:var(--paper); padding:8px 14px; z-index:99; }

/* ---------- top bar ------------------------------------------------------ */
.topbar{ border-bottom:1px solid var(--rule); background:rgba(243,239,230,.9);
  backdrop-filter:saturate(120%) blur(3px); position:sticky; top:0; z-index:20; }
.topbar-inner{ max-width:var(--maxw); margin:0 auto; padding:14px 28px;
  display:grid; grid-template-columns:auto 1fr auto; gap:26px; align-items:center; }
.wordmark{ display:flex; flex-direction:column; line-height:1.05; color:var(--ink); }
.wordmark:hover{ text-decoration:none; }
.wordmark-main{ font-family:"Fraunces",serif; font-weight:600; font-size:21px;
  letter-spacing:.2px; }
.wordmark-sub{ font-family:"Spline Sans Mono",monospace; font-size:10.5px;
  letter-spacing:.14em; text-transform:uppercase; color:var(--faint); margin-top:3px; }
.topnav{ display:flex; gap:22px; justify-self:center; }
.topnav a{ font-family:"Spline Sans Mono",monospace; font-size:12px;
  letter-spacing:.09em; text-transform:uppercase; color:var(--ink-soft); }
.topnav a:hover{ color:var(--oxblood); text-decoration:none; }
.search-mini input{ font-family:"Spline Sans Mono",monospace; font-size:13px;
  padding:7px 12px; border:1px solid var(--rule); background:var(--paper);
  border-radius:0; color:var(--ink); width:150px; }
.search-mini input:focus{ outline:2px solid var(--oxblood); border-color:var(--oxblood); }

/* ---------- generic layout ---------------------------------------------- */
.wrap{ max-width:var(--maxw); margin:0 auto; padding:0 28px; }
.lead{ max-width:760px; }

/* ---------- home -------------------------------------------------------- */
.hero{ max-width:var(--maxw); margin:0 auto; padding:70px 28px 30px;
  border-bottom:1px solid var(--rule); }
.hero h1{ font-family:"Fraunces",serif; font-weight:900; font-size:clamp(38px,6vw,72px);
  line-height:1.02; letter-spacing:-.01em; margin:0 0 18px; max-width:14ch; }
.hero h1 em{ font-style:italic; color:var(--oxblood); }
.hero p{ max-width:60ch; font-size:20px; color:var(--ink-soft); margin:0; }
.hero .apparatus{ font-family:"Spline Sans Mono",monospace; font-size:11.5px;
  letter-spacing:.14em; text-transform:uppercase; color:var(--faint);
  margin:0 0 26px; display:flex; gap:20px; flex-wrap:wrap; }

.controls{ max-width:var(--maxw); margin:0 auto; padding:22px 28px;
  display:flex; gap:8px; align-items:baseline; }
.controls .lbl{ font-family:"Spline Sans Mono",monospace; font-size:11px;
  letter-spacing:.12em; text-transform:uppercase; color:var(--faint); margin-right:8px; }
.controls a{ font-family:"Spline Sans Mono",monospace; font-size:12px; padding:4px 11px;
  border:1px solid var(--rule); color:var(--ink-soft); letter-spacing:.05em; }
.controls a.active{ background:var(--ink); color:var(--paper); border-color:var(--ink); }
.controls a:hover{ text-decoration:none; border-color:var(--oxblood); }

/* entry index — a typeset list, not cards */
.index{ max-width:var(--maxw); margin:0 auto; padding:14px 28px 90px; }
.index-row{ display:grid; grid-template-columns:54px 1fr auto; gap:22px;
  align-items:baseline; padding:16px 0; border-bottom:1px solid var(--rule);
  transition:background .12s; }
.index-row:hover{ background:var(--paper-deep); }
.index-row .num{ font-family:"Spline Sans Mono",monospace; font-size:13px;
  color:var(--faint); }
.index-row .who{ font-family:"Fraunces",serif; }
.index-row .who .nm{ font-size:26px; font-weight:600; color:var(--ink); }
.index-row .who .nm:hover{ color:var(--oxblood); text-decoration:none; }
.index-row .who .joint{ font-size:18px; }
.index-row .dts{ font-family:"Spline Sans Mono",monospace; font-size:13px;
  color:var(--faint); white-space:nowrap; }
.index-row .gloss{ grid-column:2 / 3; color:var(--ink-soft); font-size:16.5px;
  margin-top:2px; max-width:70ch; }

/* ---------- entry page -------------------------------------------------- */
.entry-head{ border-bottom:2px solid var(--ink); }
.entry-head-inner{ max-width:var(--maxw); margin:0 auto; padding:52px 28px 26px;
  display:grid; grid-template-columns:1fr auto; gap:20px; align-items:end; }
.entry-head .kicker{ font-family:"Spline Sans Mono",monospace; font-size:11.5px;
  letter-spacing:.16em; text-transform:uppercase; color:var(--oxblood); margin-bottom:14px; }
.entry-head h1{ font-family:"Fraunces",serif; font-weight:900;
  font-size:clamp(34px,5.5vw,64px); line-height:1.02; margin:0; letter-spacing:-.01em; }
.entry-head h1.joint{ font-size:clamp(26px,3.6vw,40px); line-height:1.08; }
.entry-head .dts{ font-family:"Spline Sans Mono",monospace; font-size:15px;
  color:var(--faint); }

/* layout: sticky contents rail + reading column */
.entry-body{ max-width:var(--maxw); margin:0 auto; padding:0 28px;
  display:grid; grid-template-columns:200px 1fr; gap:52px; }
.toc{ position:sticky; top:84px; align-self:start; padding:34px 0 40px;
  max-height:calc(100vh - 90px); overflow:auto; }
.toc ol{ list-style:none; margin:0; padding:0; counter-reset:sec; }
.toc li{ counter-increment:sec; margin:0 0 3px; }
.toc a{ display:grid; grid-template-columns:26px 1fr; gap:6px; padding:5px 0;
  font-size:13.5px; color:var(--ink-soft); line-height:1.25; border:none; }
.toc a::before{ content:counter(sec,decimal-leading-zero);
  font-family:"Spline Sans Mono",monospace; font-size:11px; color:var(--faint); }
.toc a:hover{ color:var(--oxblood); text-decoration:none; }
.toc a.is-active{ color:var(--oxblood); font-weight:600; }
.toc .toc-meta{ font-family:"Spline Sans Mono",monospace; font-size:10.5px;
  letter-spacing:.12em; text-transform:uppercase; color:var(--faint);
  margin:0 0 14px; }

.reading{ padding:34px 0 90px; min-width:0; max-width:74ch; }
.reading .intro{ font-size:20px; color:var(--ink-soft); border-left:3px solid var(--oxblood);
  padding-left:22px; margin:0 0 8px; }
.reading .intro em{ color:var(--ink); }

.sec{ padding:34px 0 8px; border-top:1px solid var(--rule); margin-top:26px; }
.sec:first-of-type{ border-top:none; }
.sec > h2{ font-family:"Fraunces",serif; font-weight:600; font-size:15px;
  letter-spacing:.02em; margin:0 0 20px; display:flex; gap:12px; align-items:baseline;
  color:var(--ink); }
.sec > h2 .sn{ font-family:"Spline Sans Mono",monospace; font-size:12px;
  color:var(--oxblood); font-weight:500; }
.sec h4{ font-family:"Fraunces",serif; font-weight:600; font-size:20px;
  margin:26px 0 8px; color:var(--ink); }
.sec p{ margin:0 0 16px; }
.sec .term{ font-family:"Fraunces",serif; font-weight:600; font-style:normal;
  color:var(--oxblood); }
.entry-list{ margin:0 0 16px; padding:0; list-style:none; }
.entry-list li{ position:relative; padding-left:20px; margin:0 0 12px; }
.entry-list li::before{ content:"—"; position:absolute; left:0; color:var(--faint); }
.smallcaps{ font-variant:small-caps; letter-spacing:.03em; }

/* quotes */
.quote-block{ margin:0 0 30px; padding:0 0 0 26px; border-left:2px solid var(--oxblood); }
.quote-block .qlabel{ font-family:"Spline Sans Mono",monospace; font-size:11px;
  letter-spacing:.12em; text-transform:uppercase; color:var(--faint); margin-bottom:8px; }
.quote-block .qtext{ font-family:"Fraunces",serif; font-size:22px; font-weight:400;
  line-height:1.4; font-style:italic; color:var(--ink); margin:0 0 12px; }
.quote-block .qsource{ font-size:16px; color:var(--ink-soft); }

/* caveat / editorial note */
.caveat{ background:var(--caveat-bg); border:1px solid #e6c9b8;
  border-left:4px solid var(--caveat); padding:16px 20px; margin:0 0 26px;
  font-size:16.5px; color:#5a2e1c; }
.caveat .cav-tag{ font-family:"Spline Sans Mono",monospace; font-size:10.5px;
  letter-spacing:.14em; text-transform:uppercase; color:var(--caveat);
  display:block; margin-bottom:6px; }
.caveat strong{ color:#7a2410; }
.caveat em{ color:#5a2e1c; }

/* tables */
.tbl-wrap{ overflow-x:auto; margin:0 0 22px; }
table.data{ width:100%; border-collapse:collapse; font-size:15.5px; }
table.data th{ text-align:left; font-family:"Spline Sans Mono",monospace;
  font-size:10.5px; letter-spacing:.1em; text-transform:uppercase; color:var(--faint);
  font-weight:500; padding:0 16px 8px 0; border-bottom:1.5px solid var(--ink);
  vertical-align:bottom; }
table.data td{ padding:12px 16px 12px 0; border-bottom:1px solid var(--rule);
  vertical-align:top; line-height:1.45; }
table.data td:first-child{ font-family:"Fraunces",serif; font-weight:600;
  color:var(--ink); font-size:16px; }
table.data tr:hover td{ background:var(--paper-deep); }

/* apparatus: prev/next + incoming refs */
.entry-foot{ border-top:2px solid var(--ink); margin-top:20px; }
.entry-foot-inner{ max-width:var(--maxw); margin:0 auto; padding:30px 28px 70px;
  display:grid; grid-template-columns:200px 1fr; gap:52px; }
.refs-in{ }
.refs-in h3, .neighbours h3{ font-family:"Spline Sans Mono",monospace; font-size:11px;
  letter-spacing:.13em; text-transform:uppercase; color:var(--faint); margin:0 0 12px; }
.refs-in .chips{ display:flex; flex-wrap:wrap; gap:8px; }
.refs-in .chip{ font-family:"Spline Sans Mono",monospace; font-size:12px;
  padding:4px 10px; border:1px solid var(--rule); color:var(--ink-soft); }
.refs-in .chip:hover{ border-color:var(--oxblood); color:var(--oxblood); text-decoration:none; }
.pager{ display:flex; justify-content:space-between; gap:20px; margin-top:10px; }
.pager a{ font-family:"Fraunces",serif; font-size:19px; color:var(--ink); max-width:45%; }
.pager a .dir{ display:block; font-family:"Spline Sans Mono",monospace; font-size:10.5px;
  letter-spacing:.12em; text-transform:uppercase; color:var(--faint); margin-bottom:3px; }
.pager a:hover{ color:var(--oxblood); text-decoration:none; }
.pager a.next{ text-align:right; margin-left:auto; }

.xref{ border-bottom:1px dotted var(--oxblood-lo); color:var(--oxblood); }
.xref:hover{ text-decoration:none; background:var(--paper-deep); }

/* ---------- collection pages (quotes / concepts / caveats / search) ----- */
.page-head{ max-width:var(--maxw); margin:0 auto; padding:56px 28px 24px;
  border-bottom:1px solid var(--rule); }
.page-head .kicker{ font-family:"Spline Sans Mono",monospace; font-size:11.5px;
  letter-spacing:.16em; text-transform:uppercase; color:var(--oxblood); margin-bottom:12px; }
.page-head h1{ font-family:"Fraunces",serif; font-weight:900; font-size:clamp(32px,5vw,54px);
  margin:0 0 12px; letter-spacing:-.01em; }
.page-head p{ max-width:62ch; color:var(--ink-soft); margin:0; font-size:18px; }

.collection{ max-width:var(--maxw); margin:0 auto; padding:30px 28px 90px; }
.q-entry{ padding:26px 0; border-bottom:1px solid var(--rule);
  display:grid; grid-template-columns:180px 1fr; gap:36px; }
.q-entry .who{ font-family:"Spline Sans Mono",monospace; font-size:12px;
  letter-spacing:.06em; color:var(--faint); }
.q-entry .who a{ color:var(--oxblood); }
.q-entry .qtext{ font-family:"Fraunces",serif; font-size:21px; font-style:italic;
  line-height:1.42; margin:0 0 10px; }
.q-entry .qsource{ font-size:15.5px; color:var(--ink-soft); }

.concept-row{ padding:18px 0; border-bottom:1px solid var(--rule);
  display:grid; grid-template-columns:210px 1fr 150px; gap:28px; align-items:baseline; }
.concept-row .cn{ font-family:"Fraunces",serif; font-weight:600; font-size:19px; }
.concept-row .cd{ color:var(--ink-soft); font-size:16px; }
.concept-row .cwho{ font-family:"Spline Sans Mono",monospace; font-size:12px;
  color:var(--faint); text-align:right; }
.alpha{ display:flex; flex-wrap:wrap; gap:4px; margin:18px 0 4px; }
.alpha a{ font-family:"Spline Sans Mono",monospace; font-size:12px; width:26px; height:26px;
  display:grid; place-items:center; border:1px solid var(--rule); color:var(--ink-soft); }
.alpha a.active{ background:var(--ink); color:var(--paper); }
.alpha a:hover{ border-color:var(--oxblood); text-decoration:none; }

/* search */
.sr-group{ margin:0 0 42px; }
.sr-group h2{ font-family:"Spline Sans Mono",monospace; font-size:12px; letter-spacing:.12em;
  text-transform:uppercase; color:var(--oxblood); border-bottom:1px solid var(--rule);
  padding-bottom:8px; margin:0 0 16px; }
.sr-item{ padding:12px 0; border-bottom:1px solid var(--rule); }
.sr-item .who{ font-family:"Spline Sans Mono",monospace; font-size:11.5px; color:var(--faint); }
mark{ background:#f4e2b8; color:inherit; padding:0 2px; }

.big-search{ max-width:var(--maxw); margin:0 auto; padding:20px 28px 0; }
.big-search form{ display:flex; gap:0; max-width:620px; }
.big-search input{ flex:1; font-family:"Newsreader",serif; font-size:20px; padding:12px 16px;
  border:1.5px solid var(--ink); background:var(--paper); border-radius:0; }
.big-search button{ font-family:"Spline Sans Mono",monospace; font-size:13px;
  letter-spacing:.08em; text-transform:uppercase; padding:0 22px; border:1.5px solid var(--ink);
  border-left:none; background:var(--ink); color:var(--paper); cursor:pointer; }

/* ---------- map --------------------------------------------------------- */
#graph{ width:100%; height:calc(100vh - 220px); min-height:520px; }
.graph-note{ font-family:"Spline Sans Mono",monospace; font-size:11.5px; color:var(--faint);
  max-width:var(--maxw); margin:0 auto; padding:0 28px 20px; }
.node circle{ cursor:pointer; }
.node text{ font-family:"Spline Sans Mono",monospace; font-size:10px; fill:var(--ink-soft);
  pointer-events:none; }
.link{ stroke:var(--oxblood); stroke-opacity:.28; fill:none; }
.node:hover circle{ stroke:var(--oxblood); stroke-width:2.5; }

/* ---------- footer ------------------------------------------------------ */
.foot{ border-top:1px solid var(--rule); }
.foot-inner{ max-width:var(--maxw); margin:0 auto; padding:24px 28px;
  display:flex; justify-content:space-between; gap:20px;
  font-family:"Spline Sans Mono",monospace; font-size:11px; letter-spacing:.06em;
  color:var(--faint); text-transform:uppercase; }

/* ---------- responsive -------------------------------------------------- */
@media (max-width: 900px){
  body{ font-size:18px; }
  .topbar-inner{ grid-template-columns:1fr auto; row-gap:12px; }
  .topnav{ order:3; grid-column:1 / -1; justify-self:start; flex-wrap:wrap; gap:16px; }
  .search-mini{ justify-self:end; }
  .entry-body{ grid-template-columns:1fr; gap:0; }
  .toc{ position:static; max-height:none; border-bottom:1px solid var(--rule);
    padding:20px 0; }
  .toc ol{ display:flex; flex-wrap:wrap; gap:4px 16px; }
  .entry-foot-inner{ grid-template-columns:1fr; gap:30px; }
  .q-entry{ grid-template-columns:1fr; gap:8px; }
  .concept-row{ grid-template-columns:1fr; gap:4px; }
  .concept-row .cwho{ text-align:left; }
}
@media (prefers-reduced-motion: reduce){
  *{ animation:none !important; transition:none !important; }
}

/* ---------- auth -------------------------------------------------------- */
.topbar-inner.topbar-bare{ grid-template-columns:1fr; }
.signout{ font-family:"Spline Sans Mono",monospace; font-size:11px; letter-spacing:.08em;
  text-transform:uppercase; color:var(--faint); margin-left:14px; white-space:nowrap; }
.signout:hover{ color:var(--oxblood); text-decoration:none; }

.login-wrap{ min-height:calc(100vh - 130px); display:grid; place-items:center;
  padding:40px 24px; }
.login-card{ width:100%; max-width:400px; }
.login-card .kicker{ font-family:"Spline Sans Mono",monospace; font-size:11px;
  letter-spacing:.16em; text-transform:uppercase; color:var(--oxblood); margin-bottom:14px; }
.login-card h1{ font-family:"Fraunces",serif; font-weight:900; font-size:38px;
  line-height:1.05; margin:0 0 8px; letter-spacing:-.01em; }
.login-sub{ color:var(--ink-soft); margin:0 0 28px; font-size:18px; }
.login-card form{ display:flex; flex-direction:column; gap:16px; }
.login-card label{ display:flex; flex-direction:column; gap:6px;
  font-family:"Spline Sans Mono",monospace; font-size:11px; letter-spacing:.1em;
  text-transform:uppercase; color:var(--faint); }
.login-card input{ font-family:"Newsreader",serif; font-size:18px; padding:11px 14px;
  border:1.5px solid var(--rule); background:var(--paper); border-radius:0; color:var(--ink); }
.login-card input:focus{ outline:2px solid var(--oxblood); border-color:var(--oxblood); }
.login-card button{ font-family:"Spline Sans Mono",monospace; font-size:13px;
  letter-spacing:.1em; text-transform:uppercase; padding:13px; margin-top:6px;
  border:1.5px solid var(--ink); background:var(--ink); color:var(--paper);
  cursor:pointer; }
.login-card button:hover{ background:var(--oxblood); border-color:var(--oxblood); }
.login-error{ background:var(--caveat-bg); border-left:4px solid var(--caveat);
  padding:12px 16px; margin:0 0 20px; font-size:15px; color:#7a2410; }
.login-foot{ font-family:"Spline Sans Mono",monospace; font-size:11px; color:var(--faint);
  margin-top:24px; letter-spacing:.04em; }
