/* pg.ddx.io -- the one stylesheet for the 25 static pages.
 *
 * 2026-10 redesign in the agents-txt.com idiom: Inter for text, JetBrains Mono for
 * paths/code/labels, near-monochrome greys, 1px #e5e5e5 rules, square corners, no
 * shadows. One accent: PostgreSQL blue #336791.
 *
 * Scope is structural: /m/* and /gitweb* build their own <head> and CSS in agora_ex
 * and never load this file.
 *
 * Every text colour below was checked by calculation (WCAG 2.x relative luminance),
 * not by eye. Light: worst text pair is --ink-3 on --accent-bg, 4.73:1. Dark: worst is
 * --bad on --accent-bg, 5.57:1. #999/#bbb-style greys appear ONLY as borders.
 */

@font-face{
  font-family:"Inter"; font-style:normal; font-weight:400 700; font-display:swap;
  src:url("/fonts/inter-latin.woff2") format("woff2");
}
@font-face{
  font-family:"JetBrains Mono"; font-style:normal; font-weight:400 600; font-display:swap;
  src:url("/fonts/jetbrains-mono-latin.woff2") format("woff2");
}

*{ margin:0; padding:0; box-sizing:border-box; }

:root{
  --paper:#ffffff;     /* page */
  --paper-2:#fafafa;   /* panels, table heads */
  --paper-3:#f4f4f4;   /* code, hover */
  --rule:#e5e5e5;      /* every 1px border */
  --rule-2:#d4d4d4;    /* stronger divider; border only, never text */

  --ink:#111111;       /* 18.9:1 on paper */
  --ink-2:#555555;     /*  7.5:1 */
  --ink-3:#6b6b6b;     /*  5.3:1; lightest text grey. Their #777 (4.48) and #999 fail AA */

  --accent:#336791;    /*  6.0:1; PostgreSQL blue */
  --accent-ink:#24496a;
  --accent-bg:#edf2f7;

  --ok:#16794a; --warn:#8a5a00; --bad:#b42318;

  --font-sans:"Inter",ui-sans-serif,system-ui,-apple-system,"Segoe UI",Roboto,sans-serif;
  --font-mono:"JetBrains Mono",ui-monospace,"SF Mono",Menlo,Consolas,monospace;

  --max:1280px;        /* page container */
  --col:820px;         /* docs content column */
  --measure:72ch;
  --hdr-h:56px;

  /* Aliases: page-level <style> blocks and the community/status JS reference these. */
  --font:var(--font-sans); --font-ui:var(--font-sans);
  --link:var(--accent); --phosphor:var(--accent); --dim:var(--ink-3);
  --bg:var(--paper); --fg:var(--ink); --fg-dim:var(--ink-2); --fg-faint:var(--ink-3);
  --border:var(--rule); --up:var(--ok); --down:var(--bad);
}

/* Dark mode follows the OS. Contrast on --paper #111: ink 16.1, ink-2 9.5, ink-3 6.7,
   accent 8.2, ok 7.3, warn 7.1, bad 6.5. */
@media (prefers-color-scheme:dark){
  :root{
    --paper:#111111; --paper-2:#181818; --paper-3:#202020;
    --rule:#2a2a2a; --rule-2:#3a3a3a;
    --ink:#ededed; --ink-2:#b8b8b8; --ink-3:#9a9a9a;
    --accent:#7fb0dc; --accent-ink:#a9cbea; --accent-bg:#17222d;
    --ok:#4fb47e; --warn:#d1922f; --bad:#f07167;
  }
}

html{
  background:var(--paper); color:var(--ink); color-scheme:light dark;
  font-family:var(--font-sans); font-size:16px; line-height:1.65;
  -webkit-text-size-adjust:100%; text-rendering:optimizeLegibility;
  font-variant-numeric:tabular-nums;
}
body{ min-height:100vh; display:flex; flex-direction:column; font-size:15px; }
[id]{ scroll-margin-top:calc(var(--hdr-h) + 1rem); }

a{ color:var(--accent); text-decoration:underline; text-underline-offset:2px;
   text-decoration-color:color-mix(in srgb,var(--accent) 35%,transparent); }
a:hover{ text-decoration-color:currentColor; }
:focus-visible{ outline:2px solid var(--accent); outline-offset:2px; }

h1{ font-size:28px; line-height:1.2; font-weight:700; letter-spacing:-0.02em; margin:0 0 .75rem; }
h2{ font-size:20px; line-height:1.3; font-weight:700; letter-spacing:-0.01em; margin:2.5rem 0 .6rem; }
h3{ font-size:15px; line-height:1.4; font-weight:600; margin:1.5rem 0 .4rem; }
h4{ font-size:14px; font-weight:600; margin:1.2rem 0 .3rem; }
p{ margin:0 0 .9rem; }
ul,ol{ margin:0 0 .9rem 1.4rem; }
li{ margin:0 0 .35rem; }
li::marker{ color:var(--ink-3); }
hr{ border:0; border-top:1px solid var(--rule); margin:2.5rem 0; }
b,strong{ font-weight:600; }
img,svg{ max-width:100%; }

code,kbd,samp,pre,.mono{ font-family:var(--font-mono); }
code,kbd,samp{
  font-size:.86em; background:var(--paper-3); border:1px solid var(--rule);
  border-radius:3px; padding:.08em .35em; color:var(--ink);
}
pre,.code-block{
  display:block; font-family:var(--font-mono); font-size:13px; line-height:1.6;
  background:var(--paper-3); border:1px solid var(--rule); color:var(--ink);
  padding:.9rem 1.1rem; margin:0 0 1rem; overflow-x:auto; white-space:pre;
}
pre code,.code-block code{ background:none; border:0; padding:0; font-size:inherit; }

.lede{ font-size:16px; color:var(--ink-2); line-height:1.6; max-width:68ch; }
.muted{ color:var(--ink-3); }
.small,.lbl,.num-cell,.uptime-pct{ font-size:13px; }
.eyebrow{
  font-family:var(--font-mono); font-size:11px; font-weight:600; line-height:1.4;
  text-transform:uppercase; letter-spacing:.1em; color:var(--ink-3); margin:0 0 .5rem;
}

/* ---- skip link ---- */
.skip{ position:absolute; left:-9999px; }
.skip:focus{ left:1rem; top:.5rem; z-index:100; background:var(--paper); padding:.4rem .7rem;
             border:1px solid var(--ink); color:var(--ink); }

/* ---- site header: sticky, slim, mark + breadcrumb left, mono file links + Pages right ---- */
.hdr{ position:sticky; top:0; z-index:50; background:var(--paper); border-bottom:1px solid var(--rule); }
.hdr__in{
  max-width:var(--max); margin:0 auto; padding:0 1.5rem; height:var(--hdr-h);
  display:flex; align-items:center; gap:.75rem;
}
.hdr a{ text-decoration:none; }
.mark{ font-family:var(--font-mono); font-weight:600; color:var(--ink); letter-spacing:-0.02em; white-space:nowrap; }
.mark b{ color:var(--accent); font-weight:700; }
.hdr__brand{ font-size:17px; }
.hdr__sep{ color:var(--rule-2); user-select:none; }
.hdr__crumb{ font-size:14px; color:var(--ink-2); white-space:nowrap; overflow:hidden; text-overflow:ellipsis; }
.hdr__crumb:hover{ color:var(--ink); }
.hdr__nav{ margin-left:auto; display:flex; align-items:center; gap:1.1rem; }
.hdr__file{ font-family:var(--font-mono); font-size:12px; color:var(--ink-2); }
.hdr__file:hover{ color:var(--ink); }
.hdr__div{ width:1px; height:20px; background:var(--rule); }
.hdr__search{ display:flex; }
.hdr__search input[type=search]{
  font:inherit; font-size:13px; width:13rem; padding:.3rem .55rem;
  border:1px solid var(--rule); border-right:0; background:var(--paper); color:var(--ink);
}
.hdr__search input[type=search]:focus{ outline:none; border-color:var(--ink); }
.hdr__search button{
  font:inherit; font-size:11px; font-weight:600; letter-spacing:.06em; text-transform:uppercase;
  padding:0 .7rem; border:1px solid var(--ink); background:var(--ink); color:var(--paper); cursor:pointer;
}

/* Pages menu: native <details>, no JS. */
.menu{ position:relative; }
.menu>summary{
  list-style:none; cursor:pointer; font-size:13px; color:var(--ink-2);
  display:flex; align-items:center; gap:.35rem; user-select:none;
}
.menu>summary::-webkit-details-marker{ display:none; }
.menu>summary::after{
  content:""; width:5px; height:5px; border:solid currentColor; border-width:0 1.2px 1.2px 0;
  transform:translateY(-2px) rotate(45deg);
}
.menu[open]>summary::after{ transform:translateY(1px) rotate(-135deg); }
.menu>summary:hover,.menu[open]>summary{ color:var(--ink); }
.menu__panel{
  position:absolute; right:0; top:calc(100% + .9rem); min-width:190px; z-index:60;
  background:var(--paper); border:1px solid var(--rule); padding:.25rem 0;
}
.menu__panel a{
  display:block; padding:.45rem 1rem; font-size:13px; color:var(--ink-2);
  border-left:2px solid transparent;
}
.menu__panel a:hover{ color:var(--ink); background:var(--paper-2); }
.menu__panel a[aria-current="page"]{ color:var(--ink); border-left-color:var(--accent); font-weight:500; }
.menu__panel hr{ margin:.25rem 0; }

@media (max-width:760px){
  .hdr__search,.hdr__div{ display:none; }
}
@media (max-width:480px){
  .hdr__in{ padding:0 1rem; gap:.5rem; }
  .hdr__nav{ gap:.8rem; }
  .hdr__sep,.hdr__crumb{ display:none; }
}

/* ---- page container ---- */
main{ flex:1; width:100%; }
.page{ max-width:var(--max); margin:0 auto; padding:3rem 1.5rem 5rem; }
@media (min-width:640px){ .page,.hdr__in,.ftr__in{ padding-left:2.5rem; padding-right:2.5rem; } }

/* Docs layout: content column + sticky "On this page" TOC on the right. */
.doc{ display:block; }
@media (min-width:1024px){
  .doc{ display:grid; grid-template-columns:minmax(0,var(--col)) 15rem; justify-content:space-between; gap:4rem; }
  .doc__toc{ order:2; }
  .doc__toc .toc{ position:sticky; top:calc(var(--hdr-h) + 1.5rem);
                  max-height:calc(100vh - var(--hdr-h) - 3rem); overflow-y:auto; }
}
.doc__body{ min-width:0; }
.page:not(.page--wide) > .section, .page:not(.page--wide) > .header{ max-width:var(--col); }

/* Page title block (.header in the older pages). */
.header{ margin:0 0 2rem; padding:0 0 1.75rem; border-bottom:1px solid var(--rule); }
.header h1{ margin:0 0 .5rem; }
.header h1 a{ color:var(--ink-2); text-decoration:none; font-weight:500; }
.header h1 a:hover{ color:var(--ink); }
.header p{ color:var(--ink-2); max-width:68ch; margin:0; }
.animation-wrap{ display:none; }

/* Content blocks. h2 gets the spec-page underline rule. */
.section{ margin:0 0 1rem; }
.section>h2,.prose>h2,.doc__body>h2{
  padding-bottom:.5rem; border-bottom:1px solid var(--rule); margin-top:3rem; margin-bottom:1rem;
}
.section:first-of-type>h2:first-child{ margin-top:0; }
.section p,.section li,.prose p,.prose li{ max-width:var(--measure); }
.section>h3{ margin-top:1.75rem; }

/* "On this page" TOC. <details open> so it collapses on narrow screens without JS. */
.toc{ margin:0 0 2rem; font-size:13px; }
.toc>summary,.toc__lbl{
  list-style:none; cursor:pointer; font-family:var(--font-mono); font-size:11px; font-weight:600;
  text-transform:uppercase; letter-spacing:.1em; color:var(--ink-3); margin:0 0 .6rem; padding-left:.75rem;
}
.toc>summary::-webkit-details-marker{ display:none; }
.toc>summary::before{ content:"+ "; }
.toc[open]>summary::before{ content:"\2212 "; }
.toc ul{ list-style:none; margin:0; border-left:1px solid var(--rule); }
.toc li{ margin:0; max-width:none; }
.toc a{
  display:block; padding:.22rem .75rem; margin-left:-1px; border-left:2px solid transparent;
  color:var(--ink-2); text-decoration:none; line-height:1.4;
}
.toc a:hover{ color:var(--ink); border-left-color:var(--rule-2); }
.toc .toc__sub a{ padding-left:1.5rem; font-size:12px; color:var(--ink-3); }
@media (max-width:1023px){
  .toc{ border:1px solid var(--rule); background:var(--paper-2); padding:.75rem .75rem .5rem; }
  .toc>summary{ margin-bottom:.4rem; }
}

/* ---- buttons: square, uppercase, small ---- */
.btn{
  display:inline-flex; align-items:center; gap:.4rem; padding:.6rem 1rem;
  font-family:var(--font-sans); font-size:12px; font-weight:600; letter-spacing:.06em;
  text-transform:uppercase; text-decoration:none; line-height:1.2;
  border:1px solid var(--ink); color:var(--ink); background:transparent; cursor:pointer;
}
.btn:hover{ background:var(--ink); color:var(--paper); }
.btn--primary{ background:var(--ink); color:var(--paper); }
.btn--primary:hover{ background:var(--paper); color:var(--ink); }
.btn--text{ border-color:transparent; color:var(--ink-2); }
.btn--text:hover{ background:none; color:var(--ink); }
.btns{ display:flex; flex-wrap:wrap; gap:.75rem; margin:1.5rem 0 0; }

/* ---- search boxes ---- */
.searchbox{ display:flex; margin:1rem 0 .6rem; max-width:44rem; }
.searchbox input[type=search]{
  flex:1; min-width:0; font:inherit; font-size:15px; padding:.65rem .85rem;
  border:1px solid var(--rule-2); border-right:0; background:var(--paper); color:var(--ink);
}
.searchbox input[type=search]:focus{ outline:none; border-color:var(--ink); }
.searchbox button{
  font:inherit; font-size:12px; font-weight:600; letter-spacing:.06em; text-transform:uppercase;
  padding:0 1.2rem; border:1px solid var(--ink); background:var(--ink); color:var(--paper); cursor:pointer;
}
.searchbox button:hover{ background:var(--paper); color:var(--ink); }
.tries{ font-size:13px; color:var(--ink-3); }
.tries a{ font-family:var(--font-mono); font-size:12px; }

/* ---- tables: bordered box, #fafafa head with small uppercase labels ---- */
table{ border-collapse:collapse; width:100%; font-size:14px; margin:0 0 1rem; }
th,td{ text-align:left; padding:.55rem .9rem; border-bottom:1px solid var(--rule); vertical-align:top; }
thead th,tr:first-child>th{
  background:var(--paper-2); color:var(--ink-3); font-size:11px; font-weight:600;
  text-transform:uppercase; letter-spacing:.08em;
}
tbody tr:hover{ background:var(--paper-2); }
td.num,th.num{ text-align:right; }
.section table,.prose table,.doc__body table,main>table{ border:1px solid var(--rule); }
.section table td:first-child{ white-space:nowrap; }
.table-wrap{ overflow-x:auto; -webkit-overflow-scrolling:touch; border:1px solid var(--rule); margin:0 0 1rem; }
.table-wrap>table{ border:0; margin:0; }

/* ---- square cards ---- */
.cards{ display:grid; gap:1rem; grid-template-columns:1fr; margin:1.5rem 0 0; }
@media (min-width:640px){ .cards{ grid-template-columns:repeat(2,minmax(0,1fr)); } }
@media (min-width:1024px){ .cards--3{ grid-template-columns:repeat(3,minmax(0,1fr)); } }
.card{ border:1px solid var(--rule); padding:1.1rem 1.25rem; min-width:0; }
.card>h3:first-child,.card>.eyebrow+h3{ margin-top:0; }
.card p,.card li{ font-size:14px; color:var(--ink-2); }
.card b{ color:var(--ink); }
.card ol,.card ul{ margin-bottom:0; }
.card .code-block,.card pre{ font-size:12px; margin:.5rem 0; }
a.card{ display:block; text-decoration:none; color:inherit; }
a.card:hover{ border-color:var(--ink); }

/* ---- home: two-column hero with a code panel ---- */
.hero{ display:grid; gap:2.5rem 3rem; grid-template-columns:1fr; margin:0 0 3.5rem; }
@media (min-width:1024px){ .hero{ grid-template-columns:minmax(0,1fr) minmax(0,443px); } }
.hero__main{ min-width:0; }
.wordmark{
  font-family:var(--font-mono); font-weight:600; font-size:clamp(40px,7vw,64px); line-height:1;
  letter-spacing:-0.04em; color:var(--ink); margin:0 0 .6rem;
}
.wordmark b{ color:var(--accent); font-weight:700; }
.hero h1{ font-size:clamp(22px,3vw,30px); margin:1.5rem 0 .75rem; }
.block{ margin:0 0 3.5rem; }
.block>h2{ margin-top:0; }
.block>.lede{ margin-bottom:1.25rem; }

/* Code panel: tab bar + mono content. Without JS every pane is shown, stacked. */
.panel{ border:1px solid var(--rule); background:var(--paper-2); min-width:0; align-self:start; }
.panel__bar{ display:flex; align-items:stretch; border-bottom:1px solid var(--rule); background:var(--paper); }
.panel__tab{
  font-family:var(--font-mono); font-size:12px; font-weight:600; color:var(--ink-3);
  background:none; border:0; border-bottom:2px solid transparent; padding:.7rem 1rem; cursor:pointer;
}
.panel__tab[aria-selected="true"]{ color:var(--ink); border-bottom-color:var(--ink); }
.panel__raw{
  margin-left:auto; align-self:center; padding:0 1rem; font-family:var(--font-mono); font-size:11px;
  letter-spacing:.08em; text-transform:uppercase; color:var(--ink-3); text-decoration:none;
}
.panel__raw:hover{ color:var(--ink); }
.pane__title{
  font-family:var(--font-mono); font-size:12px; font-weight:600; color:var(--ink);
  padding:.6rem 1rem; border-bottom:1px solid var(--rule); background:var(--paper);
}
.pane+.pane .pane__title{ border-top:1px solid var(--rule); }
.js-tabs .pane__title{ display:none; }
.js-tabs .pane[hidden]{ display:none; }
.pane pre{ background:none; border:0; margin:0; font-size:11.5px; line-height:1.7; padding:1rem; color:var(--ink); }
.pane .c{ color:var(--ink-3); }

/* ---- list rows (archive index) ---- */
.rows{ border:1px solid var(--rule); margin:0 0 1rem; }
.row{ display:flex; align-items:baseline; gap:1rem; padding:.55rem .9rem; border-bottom:1px solid var(--rule); }
.row:last-child{ border-bottom:0; }
.row:hover{ background:var(--paper-2); }
.row__name{ font-family:var(--font-mono); font-size:13px; font-weight:500; min-width:20ch; text-decoration:none; }
.row__desc{ color:var(--ink-2); flex:1; font-size:14px; }
.row__count{ color:var(--ink-3); font-size:13px; white-space:nowrap; }
.row__fresh{ width:1.2rem; text-align:center; }
details.group{ border:1px solid var(--rule); margin:0 0 1rem; }
details.group>summary{
  cursor:pointer; padding:.65rem .9rem; font-weight:600; list-style:none; display:flex; gap:1rem;
  background:var(--paper-2);
}
details.group>summary::-webkit-details-marker{ display:none; }
details.group>summary::after{ content:"+"; margin-left:auto; font-family:var(--font-mono); color:var(--ink-3); }
details.group[open]>summary::after{ content:"\2212"; }
details.group[open]>summary{ border-bottom:1px solid var(--rule); }
details.group .rows{ border:0; margin:0; }

/* ---- status bits ---- */
.dot{ display:inline-block; width:8px; height:8px; border-radius:50%; vertical-align:middle; }
.dot--ok{ background:var(--ok); } .dot--warn{ background:var(--warn); }
.dot--bad{ background:var(--bad); } .dot--idle{ background:var(--ink-3); }
.banner{ padding:.6rem .9rem; margin:0 0 1rem; font-size:14px; border:1px solid; }
.banner--warn{ background:color-mix(in srgb,var(--warn) 8%,var(--paper)); border-color:var(--warn); }
.banner--bad{ background:color-mix(in srgb,var(--bad) 8%,var(--paper)); border-color:var(--bad); }
.stats{ display:flex; flex-wrap:wrap; gap:2rem; margin:1rem 0 1.5rem; }
.stat__num{ font-size:24px; font-weight:700; letter-spacing:-0.02em; }
.stat__lbl{ font-size:13px; color:var(--ink-3); }

/* ---- footer ---- */
footer{ border-top:1px solid var(--rule); margin-top:auto; }
.ftr__in{
  max-width:var(--max); margin:0 auto; padding:2rem 1.5rem;
  display:flex; flex-wrap:wrap; align-items:baseline; justify-content:space-between; gap:.75rem 2rem;
  font-size:12px; color:var(--ink-3);
}
.ftr__links{ display:flex; flex-wrap:wrap; align-items:baseline; gap:.3rem .9rem; margin:0; }
.ftr__links .mark{ font-size:13px; margin-right:.25rem; }
.ftr a{ color:var(--ink-2); text-decoration:none; }
.ftr a:hover{ color:var(--ink); text-decoration:underline; }
.ftr p{ margin:0; }

/* ---- narrow screens ---- */
@media (max-width:640px){
  .page{ padding-top:2rem; }
  h1{ font-size:24px; }
  main table{ display:block; overflow-x:auto; -webkit-overflow-scrolling:touch; max-width:100%; }
  code,kbd,samp{ overflow-wrap:anywhere; }
  .row{ flex-wrap:wrap; gap:.25rem 1rem; }
  .row__name{ min-width:0; }
}
