@font-face{font-family:Inter;src:url('/fonts/inter-var-latin.woff2') format('woff2');font-weight:100 900;font-display:swap}
:root{color-scheme:light;--ink:#263b31;--muted:#5d675d;--paper:#f6f4ed;--line:#d8ded1;--green:#2f6d4f;--purple:#685783}
*{box-sizing:border-box}html{scroll-behavior:smooth;scroll-padding-top:28px}body{margin:0;background:var(--paper);color:var(--ink);font-family:Inter,Arial,sans-serif;-webkit-font-smoothing:antialiased}a{color:var(--green);text-underline-offset:.22em}a:hover{color:#163b28}a:focus-visible{outline:3px solid var(--purple);outline-offset:5px}::selection{background:#cfdcc4}.skip{position:absolute;top:-80px;left:20px;padding:12px;background:white;z-index:10}.skip:focus{top:10px}.site-bar,.paper-head,.reading-layout,.artifact-box,.paper-footer{width:min(1220px,calc(100% - 80px));margin-inline:auto}.site-bar{display:flex;align-items:center;justify-content:space-between;padding:32px 0;border-bottom:1px solid var(--line);font-size:13px}.site-bar a{text-decoration:none}.wordmark{font-size:19px;font-weight:650;letter-spacing:-.04em}.wordmark span{font-size:12px;font-weight:450;color:var(--muted);letter-spacing:.02em;margin-left:14px}.paper-head{padding:72px 0 52px}.eyebrow{font-size:11px;font-weight:600;text-transform:uppercase;letter-spacing:.17em;color:var(--green);margin:0 0 25px}h1{font-family:Georgia,'Times New Roman',serif;font-weight:400;font-size:clamp(48px,7.2vw,92px);line-height:1.04;letter-spacing:-.065em;max-width:1050px;margin:0 0 30px}.subtitle{font-family:Georgia,'Times New Roman',serif;font-size:clamp(23px,3vw,32px);line-height:1.35;margin:0 0 34px;color:#56684f}.byline{display:flex;flex-wrap:wrap;gap:10px 22px;align-items:center;font-size:12px;color:var(--muted)}.byline strong{color:var(--ink);font-weight:650}.status{color:var(--muted);font-size:11px;line-height:1.6;margin:16px 0 30px}.downloads{display:flex;align-items:center;gap:12px 22px;flex-wrap:wrap}.downloads a{font-size:12px;text-decoration:none;border-bottom:1px solid #aebdaf;padding:9px 0}.downloads .primary{border:1px solid var(--green);border-radius:4px;padding:12px 17px;background:var(--green);color:#fff}.downloads .primary span{margin-left:20px}.reading-layout{display:grid;grid-template-columns:220px minmax(0,780px);gap:60px;padding:55px 0 60px;border-top:1px solid var(--line);align-items:start}.contents{position:sticky;top:28px;max-height:calc(100vh - 56px);overflow:auto}.contents .eyebrow{margin:0 0 18px}.contents ol{list-style:none;padding:0;margin:0}.contents li{margin-bottom:12px;line-height:1.5}.contents a{font-size:11px;text-decoration:none;color:var(--muted)}.contents a:hover{color:var(--green);text-decoration:underline}.back-top{display:inline-block;margin-top:20px}.prose{font-family:Georgia,'Times New Roman','Songti SC',serif;font-size:18px;line-height:1.82;min-width:0}.prose h2,.prose h3{font-family:Inter,Arial,sans-serif;line-height:1.4;letter-spacing:-.035em;color:var(--ink)}.prose h2{font-size:27px;font-weight:600;margin:64px 0 23px;scroll-margin-top:30px}.prose h2:first-child{margin-top:0}.prose h3{font-size:19px;font-weight:600;margin:34px 0 14px}.prose p{margin:0 0 22px}.prose p:has(+h2){margin-bottom:0}.prose strong{font-weight:700}.prose a[href^="#ref-"]{font-family:Inter,Arial,sans-serif;font-size:12px;vertical-align:super;line-height:0;text-decoration:none;font-weight:650}.prose li{padding-left:3px;margin:7px 0}.prose ol,.prose ul{padding-left:23px}.prose pre{font-family:'SFMono-Regular',Consolas,monospace;font-size:12px;line-height:1.65;padding:22px;background:#e9eee4;border:1px solid #d5dfcf;border-radius:6px;overflow-x:auto;white-space:pre-wrap;overflow-wrap:anywhere;margin:28px 0}.prose code{font-family:'SFMono-Regular',Consolas,monospace;font-size:.78em;background:#e9eee4;padding:2px 4px;border-radius:3px;overflow-wrap:anywhere}.prose pre code{font-size:inherit;padding:0;background:transparent}.table-scroll{overflow-x:auto;margin:30px 0;border:1px solid var(--line);border-radius:5px}.prose table{border-collapse:collapse;width:100%;font-family:Inter,Arial,sans-serif;font-size:11px;line-height:1.55;min-width:560px}.prose th{text-align:left;font-weight:650;background:#e8eee2;color:var(--ink)}.prose th,.prose td{padding:13px 14px;border-bottom:1px solid var(--line);vertical-align:top}.prose tr:last-child td{border-bottom:0}.prose td:first-child{font-weight:550}.prose img{max-width:100%;height:auto}.prose figure{margin:44px 0}.prose figcaption{font-family:Inter,Arial,sans-serif;font-size:11px;line-height:1.6;color:var(--muted);margin-top:12px}.architecture{padding:20px;border:1px solid var(--line);background:#fcfcf8;border-radius:6px}.prose p[id^="ref-"]{font-family:Inter,Arial,sans-serif;font-size:12px;line-height:1.7;margin:0 0 20px;overflow-wrap:anywhere}.prose p[id^="ref-"]:target{background:#e8eee2;box-shadow:0 0 0 10px #e8eee2;border-radius:2px}.artifact-box{background:#e9eee3;border-top:1px solid var(--line);padding:38px 44px;margin-bottom:60px;border-radius:5px}.artifact-box .eyebrow{margin-bottom:15px}.artifact-box h2{font:400 31px Georgia,serif;letter-spacing:-.035em;margin:0 0 15px}.artifact-box p:not(.eyebrow){font-size:13px;line-height:1.7;max-width:650px;color:var(--muted)}.artifact-links{display:flex;flex-wrap:wrap;gap:12px 26px;margin-top:22px;font-size:12px}.paper-footer{border-top:1px solid var(--line);display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:15px;padding:25px 0 40px;font-size:11px;color:var(--muted)}.paper-footer a{text-decoration:none}.prose [lang="zh-CN"]{font-family:Inter,'PingFang SC','Microsoft YaHei',sans-serif}
@media(max-width:1050px){.reading-layout{grid-template-columns:170px minmax(0,1fr);gap:35px}.contents a{font-size:10px}.prose{font-size:17px}.prose h2{font-size:24px}}
@media(max-width:760px){.site-bar,.paper-head,.reading-layout,.artifact-box,.paper-footer{width:calc(100% - 40px)}.site-bar{padding:22px 0}.paper-head{padding:42px 0 35px}.wordmark span{display:none}.desktop-break{display:none}h1{font-size:clamp(44px,12vw,66px);letter-spacing:-.06em;line-height:1.08;margin-bottom:23px}.subtitle{font-size:24px;margin-bottom:24px}.byline{font-size:11px;gap:8px 15px}.status{font-size:10px}.downloads{gap:10px 18px}.downloads a{font-size:11px}.reading-layout{display:block;padding-top:30px}.contents{position:static;max-height:none;border-bottom:1px solid var(--line);margin-bottom:34px;padding-bottom:22px}.contents ol{display:grid;grid-template-columns:1fr 1fr;gap:0 18px}.contents li{margin-bottom:9px}.contents a{font-size:10px}.back-top{display:none}.prose{font-size:17px;line-height:1.8}.prose h2{font-size:24px;margin-top:47px}.prose h3{font-size:18px}.prose pre{font-size:10px;padding:14px}.prose th,.prose td{padding:10px}.architecture{padding:8px}.artifact-box{padding:28px 22px;margin-bottom:36px}.artifact-box h2{font-size:27px}.artifact-links{font-size:11px}.paper-footer{font-size:10px}.paper-footer p{width:100%;order:3}}
@media(prefers-reduced-motion:reduce){html{scroll-behavior:auto}}
@media print{@page{size:A4;margin:20mm 18mm 21mm}html{scroll-behavior:auto}body{background:white;color:#18251e}.site-bar,.contents,.downloads,.artifact-box,.paper-footer,.skip{display:none}.paper-head,.reading-layout{width:100%;margin:0;padding:0;border:0;display:block}.paper-head{padding:6mm 0 8mm;border-bottom:1px solid #a9b7a5;margin-bottom:8mm}.eyebrow{font-size:8pt;margin-bottom:5mm}h1{font-size:38pt;letter-spacing:-.045em;line-height:1.08;margin-bottom:6mm}.desktop-break{display:none}.subtitle{font-size:19pt;margin-bottom:7mm}.byline{font-size:8pt;gap:5mm}.status{font-size:7pt;margin:4mm 0 0}.prose{font-size:10.5pt;line-height:1.6}.prose h2{font-size:15pt;margin:8mm 0 4mm;break-after:avoid}.prose h3{font-size:11pt;margin:6mm 0 3mm;break-after:avoid}.prose p{margin:0 0 4mm;orphans:3;widows:3}.prose li{margin:1.5mm 0}.prose pre{font-size:7.5pt;padding:4mm;margin:5mm 0;break-inside:avoid}.table-scroll{overflow:visible;border-radius:0;margin:5mm 0;break-inside:avoid}.prose p:has(+.table-scroll){break-after:avoid}.prose table{min-width:0;font-size:7pt;line-height:1.5}.prose th,.prose td{padding:2.4mm}.prose tr{break-inside:avoid}.prose thead{display:table-header-group}.prose a{color:#244f39;text-decoration:none}.prose a[href^="#ref-"]{font-size:7pt}.prose p[id^="ref-"]{font-size:8pt;line-height:1.6;break-inside:avoid}.prose figure{break-inside:avoid;margin:6mm 0}.prose figcaption{font-size:7pt}.architecture{padding:3mm}.prose img{max-height:75mm}*{-webkit-print-color-adjust:exact;print-color-adjust:exact}}
/* Additions for "Who May Read the Web?", appended to the shared paper.css at build time.
   The shared sheet styles the page frame and prose; this file styles what a measurement
   paper adds: data figures, wide tables, number hints, grouped citations. */

/* Anchor targets inside the body stop a little below the top edge, like the section headings. */
.prose h3,.prose h4,.table-caption,.paper-figure{scroll-margin-top:30px}

.prose h4{font-family:Inter,Arial,sans-serif;font-size:16px;font-weight:600;line-height:1.4;letter-spacing:-.02em;color:var(--ink);margin:28px 0 10px}
.prose blockquote{margin:28px 0;padding:2px 0 2px 20px;border-left:3px solid #b9c7b4;color:#3d5045}
.prose blockquote p:last-child{margin-bottom:0}
.prose hr{border:0;border-top:1px solid var(--line);margin:44px 0}
/* A long URL or path in running text wraps instead of widening the page on a phone. */
.prose p,.prose li,.prose blockquote{overflow-wrap:break-word}

/* Figures placed with {{FIGURE:id}}. The image sits in its own scroller so that a wide
   chart keeps a readable size on a phone and scrolls sideways instead of shrinking. */
.paper-figure .figure-scroll{overflow-x:auto;padding:20px;border:1px solid var(--line);background:#fcfcf8;border-radius:6px}
.paper-figure img{display:block;margin-inline:auto}
.paper-figure--wide img{min-width:560px}
.paper-figure figcaption p{margin:0}
.figure-scroll:focus-visible,.table-scroll:focus-visible{outline:3px solid var(--purple);outline-offset:3px}

/* Tables: aligned digits everywhere, and more room for tables with many columns
   (the --wide, --xwide and --long classes are set from the table's size by the build). */
.prose table{font-variant-numeric:tabular-nums}
.table-scroll--wide table{min-width:760px}
.table-scroll--xwide table{min-width:980px}
.prose .table-caption{margin-bottom:0}
.prose .table-caption+.table-scroll{margin-top:14px}

/* A number that comes from numbers.json. When it has a fraction or an interval behind
   it, hovering shows them; the faint dotted line says there is something to see. */
.num[title]{text-decoration:underline dotted #9fb3a3 1px;text-underline-offset:.22em;cursor:help}

/* The comma between grouped citation numbers, raised to match them. */
.prose sup.cite-sep{font-family:Inter,Arial,sans-serif;font-size:12px;font-weight:650;line-height:0;vertical-align:super;color:var(--green)}

@media(max-width:760px){
  .prose h4{font-size:15px}
  .paper-figure .figure-scroll{padding:8px}
}

@media print{
  .prose h4{font-size:10pt;margin:5mm 0 2mm;break-after:avoid}
  .prose blockquote{margin:4mm 0;padding-left:4mm}
  .prose hr{margin:6mm 0}
  /* On paper nothing scrolls: every figure and table is fitted to the page width. */
  .paper-figure .figure-scroll{overflow:visible;padding:3mm}
  /* The shared sheet caps images at 75mm, sized for one diagram; a chart may use most of
     a page. object-fit keeps its proportions if the height limit is reached. */
  .paper-figure img,.paper-figure--wide img{min-width:0;max-height:200mm;object-fit:contain}
  .table-scroll--wide table,.table-scroll--xwide table{min-width:0}
  .table-scroll--xwide table{font-size:6pt}
  .table-scroll--xwide th,.table-scroll--xwide td{padding:1.6mm}
  /* A caption stays whole and stays with its table. */
  .prose .table-caption{break-inside:avoid;break-after:avoid}
  .prose .table-caption+.table-scroll{margin-top:3mm}
  /* A table too long for one page continues on the next, between rows, with its header
     row repeated. Shorter tables keep the shared sheet's "do not break" rule. */
  .table-scroll--long{break-inside:auto}
  .num[title]{text-decoration:none}
  .prose sup.cite-sep{font-size:7pt;color:#244f39}
}
