/* --- themes (semantic tokens — no blue-on-blue panels) --- */ :root, [data-theme="light"] { color-scheme: light; --paper: #f6f3ee; --surface: #fffefb; --panel: #ebe8e2; --ink: #121211; --muted: #3d3b37; --rule: #c5bfb4; --link: #0b4a75; --link-hover: #083558; --path: #0b4a75; --nav-active: #e4e0d8; --nav-active-border: #0b4a75; --code-bg: #e8e5df; --code-fg: #1a2e28; --table-head: #e4e0d8; --badge-ok-bg: #c8e6ce; --badge-ok-fg: #0f3d1a; --badge-ok-border: #6b9e74; --badge-post-bg: #f0e0d0; --badge-post-fg: #5a2e0a; --badge-post-border: #c49a6a; --focus: #0b4a75; --skip-bg: #121211; --skip-fg: #f6f3ee; } [data-theme="dim"] { color-scheme: light; --paper: #c9c3b8; --surface: #e3ded4; --panel: #d6d0c6; --ink: #12110f; --muted: #363430; --rule: #a39d92; --link: #094264; --link-hover: #062f48; --path: #094264; --nav-active: #bab4a8; --nav-active-border: #5c584f; --code-bg: #d8d2c8; --code-fg: #1a2822; --table-head: #d0cac0; --badge-ok-bg: #a8c8ae; --badge-ok-fg: #0a3318; --badge-ok-border: #4a7a54; --badge-post-bg: #dcc8b4; --badge-post-fg: #4a2808; --badge-post-border: #a07850; --focus: #094264; --skip-bg: #12110f; --skip-fg: #e3ded4; } [data-theme="dark"] { color-scheme: dark; --paper: #10100f; --surface: #1a1a18; --panel: #242422; --ink: #eeece8; --muted: #c4c0b8; --rule: #3a3834; --link: #7ec8f4; --link-hover: #a8e0ff; --path: #9ed4f8; --nav-active: #2a2a28; --nav-active-border: #7ec8f4; --code-bg: #1e1e1c; --code-fg: #c0d8cc; --table-head: #242422; --badge-ok-bg: #1a3d28; --badge-ok-fg: #b8e8c4; --badge-ok-border: #4a8a5c; --badge-post-bg: #3d2a1c; --badge-post-fg: #f0d8c0; --badge-post-border: #8a6a48; --focus: #7ec8f4; --skip-bg: #eeece8; --skip-fg: #10100f; } @media (prefers-contrast: more) { :root, [data-theme="light"], [data-theme="dim"] { --muted: #1a1816; --rule: #5a5650; --badge-ok-border: #0f3d1a; --badge-post-border: #5a2e0a; } [data-theme="dark"] { --muted: #eeece8; --rule: #8a8680; --badge-ok-border: #b8e8c4; --badge-post-border: #f0d8c0; } } :root { --font-scale: 1; --mono: 'IBM Plex Mono', ui-monospace, monospace; --serif: 'Literata', Georgia, serif; --focus-ring: 0 0 0 3px color-mix(in srgb, var(--focus) 35%, transparent); } * { box-sizing: border-box; margin: 0; padding: 0; } html { font-size: calc(100% * var(--font-scale)); scroll-behavior: smooth; } @media (prefers-reduced-motion: reduce) { html { scroll-behavior: auto; } } body { display: grid; grid-template-columns: minmax(12rem, 220px) 1fr; min-height: 100vh; background: var(--paper); color: var(--ink); font-family: var(--serif); font-size: 1.05rem; line-height: 1.65; } /* screen reader only */ .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; } .skip-link { position: absolute; top: 0.5rem; left: 0.5rem; z-index: 100; padding: 0.6rem 1rem; background: var(--skip-bg); color: var(--skip-fg); font-family: var(--mono); font-size: 0.8rem; text-decoration: none; border-radius: 2px; transform: translateY(-200%); transition: transform 0.15s; } .skip-link:focus { transform: translateY(0); outline: 3px solid var(--focus); outline-offset: 2px; } a:focus-visible, button:focus-visible, input:focus-visible, .code-block:focus-visible { outline: 3px solid var(--focus); outline-offset: 2px; } a { color: var(--link); text-decoration: underline; text-decoration-thickness: 1px; text-underline-offset: 0.15em; } a:hover { color: var(--link-hover); } .rfc p a, .spec-table a, .endpoint a { text-decoration-thickness: 1.5px; } .toc nav a, .contact-card, .back, .theme-option span { text-decoration: none; } @media (max-width: 800px) { body { grid-template-columns: 1fr; } .toc { position: static !important; height: auto !important; border-bottom: 1px solid var(--rule); padding: 1rem 1.5rem !important; } .toc nav { display: flex; flex-wrap: wrap; gap: 0.5rem 1rem; } .toc .meta { display: none; } } .toc { position: sticky; top: 0; height: 100vh; overflow-y: auto; padding: 2rem 1.25rem; border-right: 1px solid var(--rule); font-family: var(--mono); font-size: 0.7rem; display: flex; flex-direction: column; gap: 0.5rem; } .back { display: block; color: var(--muted); text-decoration: none; margin-bottom: 0.5rem; min-height: 2.75rem; line-height: 2.75rem; } .back:hover { color: var(--link); } .toc-title { font-size: 0.65rem; font-weight: 500; letter-spacing: 0.12em; text-transform: uppercase; color: var(--muted); margin-bottom: 0.25rem; } .toc nav { display: flex; flex-direction: column; gap: 0.15rem; } .toc nav a { color: var(--ink); text-decoration: none; padding: 0.35rem 0.25rem; min-height: 2.75rem; display: flex; align-items: center; border-radius: 2px; } .toc nav a:hover { color: var(--link); } .toc nav a.is-active { font-weight: 600; color: var(--ink); background: var(--nav-active); padding: 0.35rem 0.5rem; box-shadow: inset 0 0 0 1px var(--rule); } /* preferences */ .prefs { margin-top: auto; padding-top: 1rem; border-top: 1px solid var(--rule); } .prefs-heading { font-size: 0.65rem; font-weight: 500; letter-spacing: 0.12em; text-transform: uppercase; color: var(--muted); margin-bottom: 0.6rem; } .theme-field { border: 0; margin: 0 0 0.75rem; padding: 0; } .theme-legend { font-size: 0.62rem; color: var(--muted); margin-bottom: 0.35rem; } .theme-options { display: flex; gap: 0.25rem; } .theme-option { flex: 1; cursor: pointer; } .theme-option input { position: absolute; opacity: 0; width: 0; height: 0; } .theme-option span { display: flex; align-items: center; justify-content: center; min-height: 2.75rem; padding: 0.35rem 0.25rem; border: 1px solid var(--rule); background: var(--surface); color: var(--ink); text-align: center; border-radius: 2px; transition: background 0.12s, border-color 0.12s; } .theme-option input:checked + span { border-color: var(--nav-active-border); background: var(--nav-active); font-weight: 600; color: var(--ink); } .theme-option input:focus-visible + span { outline: 3px solid var(--focus); outline-offset: 2px; } .font-controls { display: flex; flex-wrap: wrap; align-items: center; gap: 0.35rem 0.5rem; } .font-label { width: 100%; font-size: 0.62rem; color: var(--muted); } .font-buttons { display: flex; gap: 0.25rem; } .font-btn { font-family: var(--mono); font-size: 0.75rem; min-width: 2.75rem; min-height: 2.75rem; padding: 0.35rem 0.5rem; border: 1px solid var(--rule); background: var(--surface); color: var(--ink); cursor: pointer; border-radius: 2px; } .font-btn:hover:not(:disabled) { background: var(--nav-active); border-color: var(--nav-active-border); } .font-btn:disabled { opacity: 0.45; cursor: not-allowed; } .font-scale-readout { font-size: 0.62rem; color: var(--muted); min-width: 2.5rem; } .meta { margin-top: 0.75rem; color: var(--muted); line-height: 1.5; } .main { min-width: 0; } .rfc { max-width: 42rem; padding: 3rem 2.5rem 5rem; } @media (max-width: 600px) { .rfc { padding: 2rem 1.25rem 4rem; } } .rfc-header { margin-bottom: 2.5rem; padding-bottom: 1.5rem; border-bottom: 2px solid var(--ink); } .category { font-family: var(--mono); font-size: 0.7rem; letter-spacing: 0.1em; text-transform: uppercase; color: var(--muted); margin-bottom: 0.5rem; } .rfc-header h1 { font-size: 1.75rem; font-weight: 600; line-height: 1.25; margin-bottom: 1.25rem; } .rfc-meta { width: 100%; font-size: 0.85rem; border-collapse: collapse; } .rfc-meta th { text-align: left; font-family: var(--mono); font-weight: 500; color: var(--muted); padding: 0.25rem 1rem 0.25rem 0; width: 5rem; } .badge { font-family: var(--mono); font-size: 0.65rem; padding: 0.15rem 0.45rem; background: var(--badge-ok-bg); color: var(--badge-ok-fg); border: 1px solid var(--badge-ok-border); letter-spacing: 0.04em; } .badge.muted { background: var(--panel); color: var(--muted); border-color: var(--rule); } section { margin-bottom: 2.5rem; scroll-margin-top: 2rem; } section h2 { font-size: 1.15rem; font-weight: 600; margin-bottom: 0.75rem; display: flex; align-items: baseline; gap: 0.35rem; } .sec-num { font-family: var(--mono); font-weight: 500; color: var(--muted); } section p { margin-bottom: 0.75rem; color: var(--ink); } .code-block { background: var(--code-bg); border: 1px solid var(--rule); padding: 1rem 1.25rem; margin: 1rem 0; overflow-x: auto; } .code-block code { font-family: var(--mono); font-size: 0.8rem; line-height: 1.5; color: var(--code-fg); } .endpoint { border: 1px solid var(--rule); margin: 1.25rem 0; background: var(--surface); } .endpoint-head { display: flex; flex-wrap: wrap; align-items: center; gap: 0.5rem 0.75rem; padding: 0.75rem 1rem; background: var(--panel); border-bottom: 1px solid var(--rule); font-family: var(--mono); font-size: 0.8rem; } .method { font-weight: 600; color: var(--badge-ok-fg); background: var(--badge-ok-bg); border: 1px solid var(--badge-ok-border); padding: 0.15rem 0.4rem; font-size: 0.7rem; } .path { color: var(--path); font-weight: 500; } .ext { margin-left: auto; font-size: 0.75rem; } .ext a { color: var(--muted); } .ext a:hover { color: var(--link); } .endpoint > p, .endpoint > ul { padding: 0.75rem 1rem; font-size: 0.95rem; } .endpoint ul { padding-top: 0; padding-left: 2rem; color: var(--muted); font-size: 0.85rem; } .table-wrap { overflow-x: auto; margin-top: 0.75rem; -webkit-overflow-scrolling: touch; } .spec-table { width: 100%; min-width: 20rem; border-collapse: collapse; font-size: 0.9rem; } .spec-table th, .spec-table td { border: 1px solid var(--rule); padding: 0.5rem 0.75rem; text-align: left; } .spec-table th { font-family: var(--mono); font-size: 0.75rem; background: var(--table-head); font-weight: 500; } .spec-table code { font-family: var(--mono); font-size: 0.8rem; color: var(--code-fg); } .spec-table a { color: var(--link); } .contact-grid { display: grid; grid-template-columns: 1fr 1fr; gap: 1rem; margin: 1.25rem 0; } @media (max-width: 500px) { .contact-grid { grid-template-columns: 1fr; } } .contact-card { display: flex; flex-direction: column; gap: 0.25rem; padding: 1rem; border: 2px solid var(--ink); text-decoration: none; color: var(--ink); font-family: var(--mono); font-size: 0.85rem; transition: background 0.15s; min-height: 2.75rem; } .contact-card:hover, .contact-card:focus-visible { background: var(--panel); } .method.post { font-weight: 600; color: var(--badge-post-fg); background: var(--badge-post-bg); border: 1px solid var(--badge-post-border); align-self: flex-start; padding: 0.1rem 0.35rem; font-size: 0.65rem; } .back-top { display: inline-block; margin-top: 1.5rem; font-family: var(--mono); font-size: 0.75rem; color: var(--muted); text-decoration: none; } .back-top:hover { color: var(--link); } .contact-card .desc { font-family: var(--serif); font-size: 0.9rem; color: var(--muted); } .copyright { font-size: 0.8rem; color: var(--muted); margin-top: 2rem; } @media print { .skip-link, .prefs, .back { display: none !important; } body { display: block; background: #fff; color: #000; } .toc { position: static; height: auto; border: none; padding: 0 0 1rem; } .toc nav a.is-active { font-weight: 700; box-shadow: none; } a { color: #000; text-decoration: underline; } .rfc { max-width: none; padding: 0; } section { break-inside: avoid; } }