@font-face{font-family:'Infeas Mono';font-style:normal;font-weight:400;font-display:swap;src:url(../fonts/InfeasMono-Regular.woff2) format('woff2')}@font-face{font-family:'Infeas Mono';font-style:normal;font-weight:500;font-display:swap;src:url(../fonts/InfeasMono-Medium.woff2) format('woff2')}@font-face{font-family:'Infeas Mono';font-style:normal;font-weight:600;font-display:swap;src:url(../fonts/InfeasMono-SemiBold.woff2) format('woff2')}@font-face{font-family:'Infeas Sans';font-style:normal;font-weight:400;font-display:swap;src:url(../fonts/InfeasSans-Regular.woff2) format('woff2')}@font-face{font-family:'Infeas Sans';font-style:normal;font-weight:500;font-display:swap;src:url(../fonts/InfeasSans-Medium.woff2) format('woff2')}@font-face{font-family:'Infeas Sans';font-style:normal;font-weight:600;font-display:swap;src:url(../fonts/InfeasSans-SemiBold.woff2) format('woff2')}@font-face{font-family:'Infeas Serif';font-style:normal;font-weight:400;font-display:swap;src:url(../fonts/InfeasSerif-Regular.woff2) format('woff2')}@font-face{font-family:'Infeas Serif';font-style:normal;font-weight:600;font-display:swap;src:url(../fonts/InfeasSerif-SemiBold.woff2) format('woff2')}/* One theme. The site is dark; @media print restores the light palette below,
   because an instance page is a table of numbers someone will put on paper. */
:root{
  color-scheme:dark;

  --paper:#0F1116;
  --raise:#161922;
  --ink:#E6E8EF;
  --muted:#959BAC;
  --muted-strong:#B2B8C7;
  --rule:#272B37;
  --rule-soft:#1E222C;
  --primal:#8B99EC;
  --primal-wash:#1B1F35;
  --dual:#E0A458;
  --dual-wash:#2A2015;
  --shared:#6BD48F;
  --shared-wash:#13251A;
  --on-view:#0F1116;

  --shadow-near:rgba(0,0,0,.4);
  --shadow-far:rgba(0,0,0,.8);
  --shadow:0 1px 2px var(--shadow-near),0 8px 24px -16px var(--shadow-far);

  /* Shared by the top bar and desktop sticky offsets. */
  --topbar-h:56px;

  /* Shared by the top bar and pages; narrower tables scroll inside .table-wrap. */
  --page:1320px;

  --f-serif:"Infeas Serif","IBM Plex Serif",Georgia,"Times New Roman",serif;
  --f-sans:"Infeas Sans","IBM Plex Sans",-apple-system,BlinkMacSystemFont,"Segoe UI",
    Roboto,sans-serif;
  --f-mono:"Infeas Mono","IBM Plex Mono",ui-monospace,SFMono-Regular,Menlo,Consolas,
    monospace;
}

/* Paper is not a screen. Printing the dark palette either burns ink or gets
   force-inverted into something no one chose, and these pages are mostly
   tables. Every colour token is restated here, so a token added above and not
   here prints as whatever it happens to inherit. */
@media print{
  :root{
    color-scheme:light;

    --paper:#FAFAFB;
    --raise:#FFFFFF;
    --ink:#14161D;
    --muted:#676C7C;
    --muted-strong:#4E5361;
    --rule:#DEE0E7;
    --rule-soft:#EBECF1;
    --primal:#3B4CC0;
    --primal-wash:#EEF0FC;
    --dual:#B45309;
    --dual-wash:#FBF1E5;
    --shared:#166534;
    --shared-wash:#E8F3EB;
    --on-view:#FFFFFF;

    --shadow-near:rgba(20,22,29,.05);
    --shadow-far:rgba(20,22,29,.25);
  }
}

/* Grid and flex children need an explicit zero minimum to shrink around long content. */
*{box-sizing:border-box}
html,body{max-width:100%}
body{
  margin:0;
  background:var(--paper);
  color:var(--ink);
  font-family:var(--f-sans);
  font-size:15px;
  line-height:1.6;
  -webkit-font-smoothing:antialiased;
}
a{color:inherit}

/* Blue is primal, orange dual, and green shared. */
body{--view:var(--shared);--view-wash:var(--shared-wash)}
body[data-view="primal"]{--view:var(--primal);--view-wash:var(--primal-wash)}
body[data-view="dual"]{--view:var(--dual);--view-wash:var(--dual-wash)}
h1,h2,h3{font-family:var(--f-serif);text-wrap:balance;margin:0;font-weight:600;letter-spacing:-.01em}
.mono{font-family:var(--f-mono);font-variant-numeric:tabular-nums}
.num{font-family:var(--f-mono);font-variant-numeric:tabular-nums;text-align:right}
.sr-only{
  position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;
  clip:rect(0,0,0,0);white-space:nowrap;border:0;
}
html{scroll-padding-top:calc(var(--topbar-h) + 16px)}
:focus-visible{outline:2px solid var(--view);outline-offset:2px;border-radius:2px}
@media (prefers-reduced-motion:reduce){*{transition:none!important;animation:none!important}}

/* ---------- chrome ---------- */
.topbar{
  position:sticky;top:0;z-index:20;
  background:var(--paper);
  background:color-mix(in srgb,var(--paper) 88%,transparent);
  backdrop-filter:blur(8px);
  border-bottom:1px solid var(--rule);
}
.skip-link{
  position:fixed;z-index:100;top:8px;left:8px;padding:8px 12px;border-radius:5px;
  background:var(--ink);color:var(--paper);font-weight:600;text-decoration:none;
  transform:translateY(calc(-100% - 16px));
}
.skip-link:focus{transform:none}
.topbar-inner{
  max-width:var(--page);margin:0 auto;padding:0 24px;
  height:var(--topbar-h);display:flex;align-items:center;gap:28px;
}
.wordmark{font-family:var(--f-mono);font-weight:600;font-size:14px;letter-spacing:.02em;text-decoration:none;white-space:nowrap}
nav.top{display:flex;gap:2px;margin-left:auto;flex-wrap:wrap;min-width:0}
nav.top a{
  font-size:13.5px;color:var(--muted);text-decoration:none;
  padding:7px 11px;border-radius:5px;transition:color .12s,background .12s;
}
nav.top a:hover{color:var(--ink);background:var(--rule-soft)}
nav.top a[aria-current="page"]{color:var(--ink);font-weight:500}
/* both labels ship on every link that has two; only one is ever displayed */
.nav-short{display:none}
/* the duality hairline: which side of the pair you are looking at */
.hairline{height:2px;display:flex}
.hairline span{flex:1;background:var(--rule);transition:background .2s}
body[data-view="primal"] .hairline span:first-child{background:var(--primal)}
body[data-view="dual"] .hairline span:last-child{background:var(--dual)}

/* One reading measure for prose; narrow pages already provide their own cap. */
main{--measure:34rem;width:100%;max-width:var(--page);margin:0 auto;padding:44px 24px 96px}
main.narrow{--measure:none;--page:900px}
.prose,.note,.cite-note,.masthead .sub,.browse-head .desc{
  max-width:var(--measure);overflow-wrap:break-word;
}
.prose p{margin:0 0 14px}
.muted{color:var(--muted)}
.note{font-size:13px;color:var(--muted);margin-top:26px}
.cite-note{font-size:13px;color:var(--muted);margin-top:12px}
.cite-note a,.hint a{color:var(--view);overflow-wrap:anywhere}

.eyebrow{
  font-family:var(--f-mono);font-size:11px;font-weight:500;
  letter-spacing:.09em;text-transform:uppercase;color:var(--muted);
}

/* ---------- home ---------- */
.masthead{display:flex;flex-direction:column;gap:14px}
.masthead + .pair{margin-top:32px}
.masthead + .section{margin-top:38px}
.masthead h1{font-size:40px;line-height:1.12}
.masthead .sub{font-size:18px;color:var(--muted);font-family:var(--f-serif)}
.masthead .sub a{color:var(--view);text-decoration:none;border-bottom:1px solid var(--rule)}
.masthead .sub a:hover{border-bottom-color:var(--view)}


/* Shared raised surface. */
.subset,.file,.table-wrap,.panel,.card{
  border:1px solid var(--rule);border-radius:8px;background:var(--raise);
}

/* intrinsic, so the pair holds two columns until the cards genuinely stop
   fitting rather than at whatever width the other grids happen to need */
.pair{display:grid;grid-template-columns:repeat(auto-fit,minmax(min(100%,300px),1fr));gap:18px;margin:34px 0}
.subset{
  padding:20px 22px 18px;display:flex;flex-direction:column;gap:11px;
  border-top:3px solid var(--accent);color:var(--ink);
  text-decoration:none;transition:box-shadow .14s,transform .14s;min-width:0;
}
.subset:hover{box-shadow:var(--shadow);transform:translateY(-1px)}
.subset.p{--accent:var(--primal)}
.subset.d{--accent:var(--dual)}
.subset h2{font-size:20px}
.subset .count{font-family:var(--f-mono);font-variant-numeric:tabular-nums;font-size:13px;color:var(--accent);font-weight:500}
.subset p{margin:0;font-size:14px;color:var(--muted);line-height:1.55}
.subset .go{font-size:13px;color:var(--accent);font-weight:500;margin-top:auto}

.section{margin-top:52px}
.section > h2{font-size:24px;margin-bottom:6px}
.section > .eyebrow{margin-bottom:10px}

/* The collection's portrait, in one file per medium: the screen gets the dark
   figure the rest of the site is drawn in, paper gets the light one, for the
   same reason the palette above keeps a light set for print. */
.figure{margin:0;display:flex;flex-direction:column;gap:12px}
.masthead + .figure{margin-top:34px}
.figure + .pair{margin-top:30px}
.figure img{width:100%;max-width:560px;height:auto;align-self:center}
.figure .on-paper{display:none}
.figure figcaption{font-size:13.5px;line-height:1.65;color:var(--muted)}
@media print{
  .figure .on-screen{display:none}
  .figure .on-paper{display:block}
}

/* file cards */
.files{display:grid;grid-template-columns:repeat(auto-fit,minmax(min(100%,240px),1fr));gap:16px;margin-top:18px}
.file{padding:16px 18px;min-width:0}
.file .fn{font-family:var(--f-mono);font-size:12.5px;color:var(--view);margin-bottom:9px;overflow-wrap:anywhere}
.file p{margin:0;font-size:13.5px;color:var(--muted);line-height:1.55}

.cite{
  margin-top:20px;border:1px solid var(--rule);border-left:3px solid var(--muted);
  border-radius:0 6px 6px 0;background:var(--raise);padding:15px 18px;
  font-family:var(--f-mono);font-size:12.5px;line-height:1.7;color:var(--muted);
  overflow-wrap:anywhere;
}

/* ---------- browse ---------- */
.browse-head{display:flex;align-items:flex-end;justify-content:space-between;gap:20px;flex-wrap:wrap;margin-bottom:22px}
.browse-head > *{min-width:0}
.browse-head h1{font-size:29px}
.browse-head .desc{font-size:14px;color:var(--muted);margin-top:5px}
/* The table scrolls inside its zero-minimum track instead of widening the page. */
.browse{display:grid;grid-template-columns:196px minmax(0,1fr);gap:28px;align-items:start}
.browse > *{min-width:0}
.facets{
  position:sticky;top:calc(var(--topbar-h) + 22px);
  max-height:calc(100dvh - var(--topbar-h) - 44px);overflow-y:auto;
}
.facets > summary{display:none}
.facet-groups{display:flex;flex-direction:column;gap:22px}
.facet{border:0;margin:0;padding:0;min-inline-size:0}
.facet-selected{margin-left:auto;font-family:var(--f-mono);font-size:11.5px;color:var(--muted);font-weight:400}
.facet .eyebrow{margin-bottom:8px;display:block}
.facet label{display:flex;align-items:center;gap:8px;font-size:13.5px;padding:3px 0;cursor:pointer;color:var(--muted)}
.facet label:hover{color:var(--ink)}
.facet input{accent-color:var(--view);margin:0}
.facet .n{margin-left:auto;font-family:var(--f-mono);font-size:11.5px;font-variant-numeric:tabular-nums}

.table-search{margin-bottom:12px}
.search-input{
  width:100%;max-width:320px;font:inherit;font-size:13.5px;
  padding:8px 11px;border:1px solid var(--rule);border-radius:6px;
  background:var(--raise);color:var(--ink);
}
.search-input::placeholder{color:var(--muted)}
.table-wrap{max-width:100%;overflow-x:auto}
.table-wrap:focus-visible{outline-offset:3px}
table{border-collapse:collapse;width:100%;font-size:13.5px}
/* Headings may wrap while the numeric body cells remain on one line. */
thead th{
  position:static;background:var(--raise);
  font-family:var(--f-sans);font-weight:500;font-size:11.5px;letter-spacing:.05em;
  text-transform:uppercase;color:var(--muted);text-align:left;vertical-align:bottom;
  padding:11px 13px;border-bottom:1px solid var(--rule);
}
thead th.r{text-align:right}
.sort-button{
  display:block;margin:0;padding:0;border:0;background:none;color:inherit;
  font:inherit;letter-spacing:inherit;text-transform:inherit;text-align:inherit;cursor:pointer;
}
thead th.r .sort-button{margin-left:auto}
.sort-button:hover{color:var(--ink)}
.sort-button:focus-visible{outline-offset:3px}
/* Keep the sort arrow with the heading. */
thead th[aria-sort="ascending"] .sort-button::after{content:"\00a0\2191"}
thead th[aria-sort="descending"] .sort-button::after{content:"\00a0\2193"}
tbody th,tbody td{padding:9px 13px;border-bottom:1px solid var(--rule-soft);white-space:nowrap}
tbody th{font-weight:400;text-align:left}
tbody tr:last-child th,tbody tr:last-child td{border-bottom:0}
tbody tr:hover th,tbody tr:hover td{background:var(--rule-soft)}
th.name a{font-family:var(--f-mono);font-size:13px;text-decoration:none;color:var(--ink);border-bottom:1px solid var(--rule)}
th.name a:hover{border-bottom-color:var(--view);color:var(--view)}
.dl{
  font-family:var(--f-mono);font-size:12px;text-decoration:none;color:var(--view);
  border:1px solid var(--rule);border-radius:4px;padding:3px 8px;white-space:nowrap;
}
.dl:hover{background:var(--view-wash);border-color:var(--view)}
.dl[aria-disabled="true"]{color:var(--muted);border-style:dashed;cursor:not-allowed}
.dl[aria-disabled="true"]:hover{background:transparent;border-color:var(--rule)}
.table-foot{font-size:12.5px;color:var(--muted);margin-top:11px}

/* ---------- detail ---------- */
.detail-head{border-bottom:1px solid var(--rule);padding-bottom:20px;margin-bottom:26px}
.crumb{font-size:12.5px;color:var(--muted);margin-bottom:9px;overflow-wrap:anywhere}
.crumb a{color:var(--muted)}
.detail-head h1{font-family:var(--f-mono);font-size:30px;font-weight:600;letter-spacing:-.02em;overflow-wrap:anywhere}
.badges{display:flex;gap:7px;margin-top:11px;flex-wrap:wrap}
.badge{
  font-family:var(--f-mono);font-size:11.5px;padding:3px 9px;border-radius:11px;
  border:1px solid var(--accent);color:var(--accent);background:var(--wash);
}
.badge.p{--accent:var(--primal);--wash:var(--primal-wash)}
.badge.d{--accent:var(--dual);--wash:var(--dual-wash)}
.badge.n{--accent:var(--rule);--wash:transparent;color:var(--muted)}

.detail{display:grid;grid-template-columns:minmax(0,1fr) 292px;gap:30px;align-items:start}
.detail > *{min-width:0}
.panel{margin-bottom:18px;overflow:hidden}
.panel > header{
  padding:13px 18px;border-bottom:1px solid var(--rule-soft);
  display:flex;align-items:baseline;justify-content:space-between;gap:12px;
}
.panel > header h2{min-width:0;font-size:15px;font-family:var(--f-sans);font-weight:600;overflow-wrap:anywhere}
.panel > header .eyebrow{flex:none}
.panel .body{padding:16px 18px}
.lede{margin:0 0 13px;font-size:13.5px;color:var(--muted)}

.kv{display:grid;grid-template-columns:minmax(0,max-content) minmax(0,1fr);gap:0}
.kv dt{font-size:13px;color:var(--muted);padding:7px 0;border-bottom:1px solid var(--rule-soft)}
.kv dd{
  margin:0;padding:7px 0;text-align:right;border-bottom:1px solid var(--rule-soft);
  min-width:0;font-family:var(--f-mono);font-variant-numeric:tabular-nums;font-size:13px;
  overflow-wrap:anywhere;
}
.kv dt:last-of-type,.kv dd:last-of-type{border-bottom:0}

.recipe{
  font-family:var(--f-mono);font-size:13px;line-height:1.85;
  background:var(--view-wash);border:1px solid var(--rule);border-radius:6px;
  padding:13px 15px;margin-bottom:14px;overflow-wrap:anywhere;
}
.recipe .k{color:var(--muted)}
.recipe b{font-weight:600}

/* Intrinsic columns avoid viewport-specific path breakpoints. */
.path{font-family:var(--f-mono);font-size:12.5px;line-height:1.9;columns:11rem 3;column-gap:22px}
.path span{display:block;color:var(--muted);overflow-wrap:anywhere;break-inside:avoid}
.path span b{color:var(--ink);font-weight:500}
.more{font-size:12.5px;color:var(--muted);margin-top:12px;border-top:1px solid var(--rule-soft);padding-top:11px}

.aside{position:sticky;top:calc(var(--topbar-h) + 22px);display:flex;flex-direction:column;gap:18px}
.card{min-width:0;overflow:hidden}
.card.p{--view:var(--primal);--view-wash:var(--primal-wash)}
.card.d{--view:var(--dual);--view-wash:var(--dual-wash)}
.card > header{padding:12px 16px;border-bottom:1px solid var(--rule-soft)}
.card > header .eyebrow{display:block}
.card .body{padding:14px 16px}
.btn{
  display:flex;align-items:center;justify-content:space-between;gap:10px;
  text-decoration:none;font-size:13.5px;font-weight:500;
  padding:11px 14px;border-radius:6px;border:1px solid var(--view);
  color:var(--on-view);background:var(--view);transition:filter .12s;
}
.btn-label{min-width:0;overflow-wrap:anywhere}
.btn:hover{filter:brightness(1.08)}
.btn .sz{flex:none;font-family:var(--f-mono);font-size:12px;font-weight:400}
.btn[aria-disabled="true"]{
  color:var(--muted-strong);background:var(--rule-soft);border-color:var(--rule);
  cursor:not-allowed;
}
.btn[aria-disabled="true"]:hover{filter:none}
.btn.ghost{background:transparent;color:var(--ink);border-color:var(--rule);margin-top:9px}
.btn.ghost:hover{background:var(--rule-soft);filter:none}
.card .hint{font-size:12px;color:var(--muted);margin-top:11px;line-height:1.5;overflow-wrap:anywhere}
.fields{display:grid;grid-template-columns:1fr;gap:0;margin-top:16px}
.fields dt{display:flex;align-items:baseline;gap:10px;flex-wrap:wrap;
padding:14px 0 5px;border-top:1px solid var(--rule-soft)}
.fields dt .mono{font-size:13px;color:var(--ink);font-weight:500}
.fields .ftype{font-size:11px;color:var(--muted);letter-spacing:.04em}
.fields dd{margin:0 0 16px;font-size:13.5px;line-height:1.65}
.srctags{display:flex;flex-wrap:wrap;gap:5px;margin:11px 0 4px}
.srctag{font-family:var(--f-mono);font-size:11.5px;letter-spacing:.02em;
padding:3px 7px;border-radius:3px;background:var(--rule-soft);color:var(--muted-strong)}
/* no opacity here: muted already carries the de-emphasis, and multiplying the
   two put this below the contrast floor */
.credit{font-size:11.5px;font-style:italic;color:var(--muted-strong);margin-top:6px}
.src-row{display:flex;justify-content:space-between;align-items:flex-start;gap:12px;font-size:13px;padding:5px 0}
.src-row span:first-child{flex:none;color:var(--muted)}
.src-row span:last-child{min-width:0;text-align:right;overflow-wrap:anywhere;font-family:var(--f-mono);font-variant-numeric:tabular-nums}
/* the Terms row's value: mono like the rest of the column, a link when the
   licence has a canonical text to point at */
.src-row>a:last-child{min-width:0;text-align:right;overflow-wrap:anywhere;font-family:var(--f-mono);font-size:13px;color:var(--view);text-decoration:none;border-bottom:1px solid var(--rule)}
.src-row>a:last-child:hover{border-bottom-color:var(--view)}
/* why an instance has no licence, in MIPLIB's own words, under the row it explains */
.terms-note{margin-top:2px;padding-bottom:4px}
.extlink{
  display:inline-block;margin-top:12px;font-size:12.5px;color:var(--view);
  text-decoration:none;border-bottom:1px solid var(--rule);
}
.extlink:hover{border-bottom-color:var(--view)}
.crosslink{
  display:flex;align-items:center;flex-wrap:wrap;gap:10px;text-decoration:none;
  border:1px solid var(--rule);border-left:3px solid var(--to);border-radius:0 6px 6px 0;
  background:var(--raise);padding:12px 15px;font-size:13.5px;
}
.crosslink > span:first-child{min-width:0;overflow-wrap:anywhere}
.crosslink.p{--to:var(--primal);--to-wash:var(--primal-wash)}
.crosslink.d{--to:var(--dual);--to-wash:var(--dual-wash)}
.crosslink:hover{background:var(--to-wash)}
.crosslink .mono{flex:none;font-size:12.5px;color:var(--muted);margin-left:auto}

/* .pair and .files size themselves, so they are not listed here */
/* Touch targets. The desktop density is deliberate, so the taller hit areas are
   scoped to pointers that cannot land on a 25px row. */
@media (pointer:coarse){
  nav.top a{padding:12px 13px}
  .facet label{min-height:44px;padding:0}
  .facet input{width:18px;height:18px}
  .dl{display:inline-flex;align-items:center;min-height:40px;padding:0 12px}
  .search-input{min-height:44px}
  tbody th,tbody td{padding:13px}
  th.name a{display:inline-block;padding:6px 0}
  .extlink{display:inline-flex;align-items:center;min-height:44px}
}
/* Sticky table headers are enabled only when the wrapper needs no overflow. */
@media (min-width:1200px){
  .table-wrap{overflow:visible}
  thead th{position:sticky;top:var(--topbar-h);z-index:5}
}
@media (max-width:880px){
  .detail{grid-template-columns:minmax(0,1fr)}
  .aside{position:static}
}
@media (max-width:780px){
  .browse{grid-template-columns:minmax(0,1fr)}
  .facets{
    position:static;max-height:none;overflow:visible;
    border:1px solid var(--rule);border-radius:8px;background:var(--raise);
  }
  .facets > summary{
    display:flex;align-items:center;gap:10px;min-height:46px;padding:10px 14px;
    cursor:pointer;list-style:none;font-weight:500;
  }
  .facets > summary::-webkit-details-marker{display:none}
  .facets > summary::after{content:"+";margin-left:2px;font-family:var(--f-mono);color:var(--view)}
  .facets[open] > summary{border-bottom:1px solid var(--rule-soft)}
  .facets[open] > summary::after{content:"-"}
  .facet-groups{gap:18px;padding:14px 16px 16px}
  html{scroll-padding-top:0}
  .topbar{position:static}
  .topbar-inner{
    height:auto;min-height:var(--topbar-h);padding:8px 16px 7px;
    display:grid;grid-template-columns:minmax(0,1fr);gap:4px;
  }
  .wordmark{display:block;width:max-content;max-width:100%;justify-self:start}
  nav.top{
    width:100%;margin:0;display:grid;
    grid-template-columns:repeat(3,minmax(0,1fr));gap:2px;
  }
  nav.top a{
    min-width:0;min-height:44px;padding:10px 2px;
    display:flex;align-items:center;justify-content:center;
    font-size:clamp(11px,3.2vw,12.5px);line-height:1.2;white-space:nowrap;
  }
  nav.top .nav-full{display:none}
  nav.top .nav-short{display:inline}
  main{padding:32px 16px 72px}
}
@media (max-width:640px){.masthead h1{font-size:32px}}
@media (max-width:460px){
  .kv{grid-template-columns:minmax(0,1fr) minmax(0,1fr)}
}
