@font-face {
	font-family: 'Noto Color Emoji';
	font-style: normal;
	font-weight: 400;
	font-display: swap;
	src: url(/fonts/NotoColorEmoji.subset.woff2) format('woff2');
}

:root {
	--main-bg: white;
	--main-fg: black;
	--table-fg: black;
	--table-bg: white;
	--table-head-bg: #d7efff;
	--table-head-fg: black;
	--table-head-bg-hover: #93d4ff;
	--table-row-bg-hover: #6fe7b0;
	--table-odd-row-bg: #f0f0f0;
	--table-cell-border: 1px solid #d0d0d0;
	--link-fg: #00319f;
	--link-fg-visited: #7f009f;
	--argtype-fg: #006e8f;
}

/* @media (prefers-color-scheme: dark) is detected through JS if needed. */
body[data-theme="dark"] {
	--main-bg: black;
	--main-fg: white;
	--table-fg: #d9d9d9;
	--table-bg: black;
	--table-head-bg: #003a60;
	--table-head-fg: white;
	--table-head-bg-hover: #0066a8;
	--table-odd-row-bg: #0e0e0e;
	--table-row-bg-hover: #002909;
	--table-cell-border: 1px solid #303030;
	--link-fg: #39a7c6;
	--link-fg-visited: #d69ce7;
	--argtype-fg: #15c1c1;
}

#theme-toggle {
	display: inline-block;
	vertical-align: middle;
	width: 40px;
	height: 20px;
	cursor: pointer;
	background-repeat: no-repeat;
	background-image: url("data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHNoYXBlLXJlbmRlcmluZz0iZ2VvbWV0cmljUHJlY2lzaW9uIiB0ZXh0LXJlbmRlcmluZz0iZ2VvbWV0cmljUHJlY2lzaW9uIiBpbWFnZS1yZW5kZXJpbmc9Im9wdGltaXplUXVhbGl0eSIgZmlsbC1ydWxlPSJldmVub2RkIiBjbGlwLXJ1bGU9ImV2ZW5vZGQiIHZpZXdCb3g9IjAgMCA1MTIgMjU2LjA0Ij48cGF0aCBkPSJNMTI4LjAyIDBoLjE4YzIyLjAzIDAgNDIuODMgNS42NiA2MSAxNS42aDIxMC4zOGMzMC44OSAwIDU5IDEyLjY1IDc5LjM4IDMzLjA0QzQ5OS4zNSA2OC45OSA1MTIgOTcuMSA1MTIgMTI4LjAyYzAgMzAuOTItMTIuNjYgNTkuMDMtMzMuMDIgNzkuNGwtLjQyLjM4Yy0yMC4zNCAyMC4xNS00OC4yOSAzMi42NC03OC45OCAzMi42NEgxODkuMjRjLTE4LjE3IDkuOTMtMzguOTggMTUuNi02MS4wNCAxNS42aC0uMThjLTM1LjIgMC02Ny4yMi0xNC40MS05MC40Mi0zNy42QzE0LjQxIDE5NS4yNSAwIDE2My4yNCAwIDEyOC4wMnMxNC40LTY3LjI0IDM3LjU5LTkwLjQzbC45MS0uODNDNjEuNjUgMTQuMDUgOTMuMjkgMCAxMjguMDIgMHptLTUuOTUgNTQuNDJjMC0xLjk1LjgtMy43MyAyLjA4LTUgMi43NC0yLjc3IDcuMjctMi43NiAxMC4wMi0uMDFsLjE0LjE2YTcuMDQyIDcuMDQyIDAgMCAxIDEuOTQgNC44NXYxMi45NWMwIDEuOTUtLjggMy43My0yLjA4IDUuMDEtMi43NSAyLjc1LTcuMjcgMi43NS0xMC4wMiAwYTcuMDg0IDcuMDg0IDAgMCAxLTIuMDgtNS4wMVY1NC40MnptNi4wNSAzMS4xN2MxMS43MiAwIDIyLjMyIDQuNzUgMzAgMTIuNDMgNy42NyA3LjY4IDEyLjQzIDE4LjI5IDEyLjQzIDMwIDAgMTEuNzItNC43NSAyMi4zMi0xMi40MyAzMHMtMTguMjggMTIuNDMtMzAgMTIuNDNjLTExLjcyIDAtMjIuMzItNC43NS0zMC4wMS0xMi40My03LjY3LTcuNjgtMTIuNDMtMTguMjgtMTIuNDMtMzAgMC0xMS43MiA0Ljc2LTIyLjMyIDEyLjQzLTMwIDcuNjktNy42NyAxOC4zLTEyLjQzIDMwLjAxLTEyLjQzem0tNTYuMzMtNS4zNGE3LjExNCA3LjExNCAwIDAgMS0yLjA3LTUuMDFjMC0zLjkgMy4xOC03LjA5IDcuMDktNy4wOSAxLjgxIDAgMy42Mi42OSA1IDIuMDdsOS4xNiA5LjE2YTcuMDY1IDcuMDY1IDAgMCAxIDIuMDggNS4wMWMwIDEuOC0uNyAzLjYyLTIuMDggNS4wMWE3LjA1NyA3LjA1NyAwIDAgMS01LjAxIDIuMDhjLTEuOCAwLTMuNjEtLjctNS0yLjA3bC05LjE3LTkuMTZ6bS0xNy4yOCA1My44MWMtMS45NSAwLTMuNzMtLjgtNS0yLjA4LTIuNzctMi43NC0yLjc2LTcuMjctLjAxLTEwLjAxbC4xNS0uMTRhNy4wNCA3LjA0IDAgMCAxIDQuODYtMS45NGgxMi45NGE3LjA4MiA3LjA4MiAwIDAgMSA3LjA5IDcuMDljMCAxLjk1LS44IDMuNzMtMi4wNyA1LjAxYTcuMDk5IDcuMDk5IDAgMCAxLTUuMDIgMi4wN0g1NC41MXptMjUuODIgNTAuMjhhNy4wNDkgNy4wNDkgMCAwIDEtNSAyLjA3Yy0zLjkxIDAtNy4wOS0zLjE2LTcuMDktNy4wOCAwLTEuODEuNjgtMy42MiAyLjA3LTUuMDFsOS4zMS05LjI5YTcuMDIgNy4wMiAwIDAgMSA0Ljg2LTEuOTQgNy4wOSA3LjA5IDAgMCAxIDcuMDkgNy4wOWMwIDEuNzktLjY5IDMuNi0yLjA4IDQuOTlsLTkuMTYgOS4xN3ptNTMuODIgMTcuMjljMCAxLjk0LS44IDMuNzMtMi4wOCA1LTIuNzQgMi43Ni03LjI3IDIuNzUtMTAuMDIgMGwtLjEzLS4xNWE3LjAzMyA3LjAzMyAwIDAgMS0xLjk0LTQuODV2LTEyLjk1YzAtMS45Ni44LTMuNzMgMi4wNy01LjAxIDIuNzYtMi43NSA3LjI3LTIuNzUgMTAuMDMgMGE3LjEgNy4xIDAgMCAxIDIuMDcgNS4wMXYxMi45NXptNTAuMjgtMjUuODNhNy4wNTUgNy4wNTUgMCAwIDEgMi4wNyA1LjAxYzAgMy44OS0zLjE4IDcuMDktNy4wOCA3LjA5LTEuODEgMC0zLjYzLS42OS01LjAxLTIuMDdsLTkuMTYtOS4xNmE3LjA5NSA3LjA5NSAwIDAgMS0yLjA3LTUuMDJjMC0zLjkgMy4xOC03LjA5IDcuMDgtNy4wOSAxLjggMCAzLjYxLjcgNSAyLjA4bDkuMTcgOS4xNnptMTcuMjktNTMuODJjMS45MyAwIDMuNzMuODEgNSAyLjA4IDIuNzYgMi43NSAyLjc1IDcuMjcgMCAxMC4wMmwtLjE1LjE0YTcuMDk4IDcuMDk4IDAgMCAxLTQuODUgMS45NGgtMTIuOTVjLTEuOTYgMC0zLjc0LS44LTUuMDEtMi4wOC0yLjc2LTIuNzUtMi43Ni03LjI3IDAtMTAuMDJhNy4wNDkgNy4wNDkgMCAwIDEgNS4wMS0yLjA4aDEyLjk1ek0xNzUuODkgNzEuN2E3LjA3NCA3LjA3NCAwIDAgMSA1LTIuMDdjMy45IDAgNy4xIDMuMTkgNy4xIDcuMDkgMCAxLjgxLS42OSAzLjYyLTIuMDcgNWwtOS4zMiA5LjMxYTcuMTIgNy4xMiAwIDAgMS00Ljg2IDEuOTNjLTMuOTEgMC03LjA5LTMuMTgtNy4wOS03LjA5IDAtMS44LjctMy42MSAyLjA4LTVsOS4xNi05LjE3em0zNC4xNy00MS44N2MyLjk2IDIuNDcgNS44MSA1LjA3IDguNTMgNy44IDIzLjIyIDIzLjE1IDM3LjYzIDU1LjE3IDM3LjYzIDkwLjM5cy0xNC40MiA2Ny4yMy0zNy42IDkwLjQyYTEzMC4yIDEzMC4yIDAgMCAxLTguNSA3Ljc3aDE4OS40NmMyNi44MyAwIDUxLjI0LTEwLjkxIDY5LjAyLTI4LjVsLjMyLS4zNWMxNy43OS0xNy43OSAyOC44NS00Mi4zNSAyOC44NS02OS4zNCAwLTI2Ljk5LTExLjA2LTUxLjU1LTI4Ljg1LTY5LjM1LTE3Ljc3LTE3LjgtNDIuMzMtMjguODQtNjkuMzQtMjguODRIMjEwLjA2em0tODIuMDQtMTQuNzFoLjE4YzYyLjA5IDAgMTEyLjg5IDUwLjgxIDExMi44OSAxMTIuOSAwIDYyLjEtNTAuODYgMTEyLjktMTEyLjg5IDExMi45aC0uMThjLTYyLjAzIDAtMTEyLjktNTAuOC0xMTIuOS0xMTIuOSAwLTYyLjA5IDUwLjgxLTExMi45IDExMi45LTExMi45eiIvPjwvc3ZnPg==");
}

body[data-theme="dark"] #theme-toggle {
	background-image: url("data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CjxzdmcKICAgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIgogICB4bWxuczpjYz0iaHR0cDovL2NyZWF0aXZlY29tbW9ucy5vcmcvbnMjIgogICB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiCiAgIHhtbG5zOnN2Zz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciCiAgIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIKICAgeG1sbnM6c29kaXBvZGk9Imh0dHA6Ly9zb2RpcG9kaS5zb3VyY2Vmb3JnZS5uZXQvRFREL3NvZGlwb2RpLTAuZHRkIgogICB4bWxuczppbmtzY2FwZT0iaHR0cDovL3d3dy5pbmtzY2FwZS5vcmcvbmFtZXNwYWNlcy9pbmtzY2FwZSIKICAgc2hhcGUtcmVuZGVyaW5nPSJnZW9tZXRyaWNQcmVjaXNpb24iCiAgIHRleHQtcmVuZGVyaW5nPSJnZW9tZXRyaWNQcmVjaXNpb24iCiAgIGltYWdlLXJlbmRlcmluZz0ib3B0aW1pemVRdWFsaXR5IgogICBmaWxsLXJ1bGU9ImV2ZW5vZGQiCiAgIGNsaXAtcnVsZT0iZXZlbm9kZCIKICAgdmlld0JveD0iMCAwIDUxMiAyNjIuODYiCiAgIHZlcnNpb249IjEuMSIKICAgaWQ9InN2Zzk3MSIKICAgc29kaXBvZGk6ZG9jbmFtZT0iZGFyay1tb2RlLXRvZ2dsZS1pY29uLXdoaXRlLnN2ZyIKICAgaW5rc2NhcGU6dmVyc2lvbj0iMS4wLjIgKGU4NmM4NzA4NzksIDIwMjEtMDEtMTUpIj4KICA8bWV0YWRhdGEKICAgICBpZD0ibWV0YWRhdGE5NzciPgogICAgPHJkZjpSREY+CiAgICAgIDxjYzpXb3JrCiAgICAgICAgIHJkZjphYm91dD0iIj4KICAgICAgICA8ZGM6Zm9ybWF0PmltYWdlL3N2Zyt4bWw8L2RjOmZvcm1hdD4KICAgICAgICA8ZGM6dHlwZQogICAgICAgICAgIHJkZjpyZXNvdXJjZT0iaHR0cDovL3B1cmwub3JnL2RjL2RjbWl0eXBlL1N0aWxsSW1hZ2UiIC8+CiAgICAgICAgPGRjOnRpdGxlPjwvZGM6dGl0bGU+CiAgICAgIDwvY2M6V29yaz4KICAgIDwvcmRmOlJERj4KICA8L21ldGFkYXRhPgogIDxkZWZzCiAgICAgaWQ9ImRlZnM5NzUiIC8+CiAgPHNvZGlwb2RpOm5hbWVkdmlldwogICAgIHBhZ2Vjb2xvcj0iI2ZmZmZmZiIKICAgICBib3JkZXJjb2xvcj0iIzY2NjY2NiIKICAgICBib3JkZXJvcGFjaXR5PSIxIgogICAgIG9iamVjdHRvbGVyYW5jZT0iMTAiCiAgICAgZ3JpZHRvbGVyYW5jZT0iMTAiCiAgICAgZ3VpZGV0b2xlcmFuY2U9IjEwIgogICAgIGlua3NjYXBlOnBhZ2VvcGFjaXR5PSIwIgogICAgIGlua3NjYXBlOnBhZ2VzaGFkb3c9IjIiCiAgICAgaW5rc2NhcGU6d2luZG93LXdpZHRoPSIyNTYwIgogICAgIGlua3NjYXBlOndpbmRvdy1oZWlnaHQ9IjEzNjciCiAgICAgaWQ9Im5hbWVkdmlldzk3MyIKICAgICBzaG93Z3JpZD0iZmFsc2UiCiAgICAgaW5rc2NhcGU6em9vbT0iMi4wNjQ0NTMxIgogICAgIGlua3NjYXBlOmN4PSIxNzcuNzcxMDUiCiAgICAgaW5rc2NhcGU6Y3k9IjEzMS40Mjk5OSIKICAgICBpbmtzY2FwZTp3aW5kb3cteD0iMCIKICAgICBpbmtzY2FwZTp3aW5kb3cteT0iNDgwIgogICAgIGlua3NjYXBlOndpbmRvdy1tYXhpbWl6ZWQ9IjEiCiAgICAgaW5rc2NhcGU6Y3VycmVudC1sYXllcj0ic3ZnOTcxIiAvPgogIDxwYXRoCiAgICAgZmlsbC1ydWxlPSJub256ZXJvIgogICAgIGQ9Ik0zMTYuNzggMTYuNTVoLTIwNS45Yy0zMC41IDAtNTguMjIgMTIuNDgtNzguMzEgMzIuNTdDMTIuNDcgNjkuMjEgMCA5Ni45MyAwIDEyNy40NGMwIDMwLjUgMTIuNDcgNTguMjIgMzIuNTcgNzguMzEgMjAuMDkgMjAuMSA0Ny44MSAzMi41NyA3OC4zMSAzMi41N2gxOTMuMjVjMjEuNTQgMTUuNDMgNDcuOSAyNC41NCA3Ni4yNiAyNC41NGguMThjMzYuMTQgMCA2OS4wMi0xNC43OSA5Mi44My0zOC42IDIzLjgtMjMuODEgMzguNi01Ni42NyAzOC42LTkyLjgzIDAtMzYuMTUtMTQuNzgtNjkuMDMtMzguNjMtOTIuOEM0NDkuNTMgMTQuOCA0MTYuNjcgMCAzODAuNTcgMGgtLjE4Yy0yMy4wMiAwLTQ0LjcyIDYuMDItNjMuNjEgMTYuNTV6bTcwLjYyIDk3LjE3LjQzLjA5Yy44Mi0zLjQ1IDIuODMtNi4xOSA2LjA0LTguMTYgMy4yLTEuOTggNi41My0yLjU3IDEwLjAxLTEuNzVsLjEtLjQzYy0zLjQ3LS44Mi02LjItMi44My04LjE3LTYuMDMtMS45OC0zLjIyLTIuNTctNi41NS0xLjc1LTEwLjAxbC0uNDMtLjFjLS44MiAzLjQ3LTIuODMgNi4yLTYuMDMgOC4xOC0zLjIxIDEuOTgtNi41NSAyLjU2LTEwLjAyIDEuNzRsLS4xLjQzYzMuNDcuODIgNi4yIDIuODQgOC4xOCA2LjA0IDEuOTkgMy4xOSAyLjU2IDYuNTIgMS43NCAxMHptMzYuODcgMTYuNzcuNTMuMTJjMS4wMi00LjM1IDMuNTUtNy43OCA3LjU4LTEwLjI2IDQuMDItMi40OSA4LjItMy4yMiAxMi41Ni0yLjE5bC4xMy0uNTNjLTQuMzUtMS4wMy03Ljc4LTMuNTUtMTAuMjYtNy41OS0yLjQ5LTQuMDMtMy4yMi04LjIyLTIuMi0xMi41NmwtLjUzLS4xMmMtMS4wMiA0LjM1LTMuNTUgNy43Ny03LjU4IDEwLjI2LTQuMDIgMi40OS04LjIxIDMuMjItMTIuNTYgMi4xOWwtLjEzLjUzYzQuMzYgMS4wMyA3Ljc4IDMuNTUgMTAuMjYgNy41OCAyLjQ5IDQuMDIgMy4yMiA4LjIyIDIuMiAxMi41N3ptLTM4Ljc5LTYxLjAxYy0xNS42OSA3LjY3LTI2Ljk4IDIzLjI2LTI4LjI5IDQxLjkzLTEuOTYgMjcuODggMTkuMDUgNTIuMDYgNDYuOTIgNTQuMDIgMTMuMjMuOTMgMjUuNjQtMy4zMiAzNS4yMi0xMS4wMiA0Ljc1LTMuODIgOS42Ni0uNDUgNy41OSA0LjM2LTExLjMzIDI2LjQyLTM4LjQ1IDQ0LjA0LTY4Ljc0IDQxLjkxLTM4LjI5LTIuNjktNjcuMTQtMzUuOTEtNjQuNDUtNzQuMTlDMzE2LjMgODkuOCAzNDcuMDUgNjEuNjcgMzgzLjQ0IDYyYzYuNzEuMDYgOC4xMyA0LjUgMi4wNCA3LjQ4em0tNS4wOS01My45NWguMThjNjMuNzUgMCAxMTUuOTEgNTIuMTUgMTE1LjkxIDExNS45IDAgNjMuNzUtNTIuMjMgMTE1LjkxLTExNS45MSAxMTUuOTFoLS4xOGMtNjMuNjggMC0xMTUuOTEtNTIuMTYtMTE1LjkxLTExNS45MXM1Mi4xNi0xMTUuOSAxMTUuOTEtMTE1Ljl6IgogICAgIGlkPSJwYXRoOTY5IgogICAgIHN0eWxlPSJmaWxsOiNmZmZmZmY7ZmlsbC1vcGFjaXR5OjEiIC8+Cjwvc3ZnPgo=");
}

body {
	font-family: ui-monospace, consolas, monospace, courier;
	font-size: 12px;
	color: var(--main-fg);
	background-color: var(--main-bg);
	padding-bottom: 3em;
}

select {
	font-size: inherit;
}

a, a:visited {
	color: var(--main-fg);
}

table {
	padding: 5px;
	color: var(--table-fg);
	border-collapse: collapse;
	border-bottom: var(--table-cell-border);
}

table th, table td {
	border-left: var(--table-cell-border);
	border-right: var(--table-cell-border);
}

table th {
	top: 0;
	position: sticky;
	text-align: left;
	padding: 5px;
	color: var(--table-head-fg);
	background-color: var(--table-head-bg);
	border-top: var(--table-cell-border);
	border-bottom: var(--table-cell-border);
	/* Avoid ugly text selection while clicking to sort/collapse */
	user-select: none;
	-moz-user-select: none;
	-webkit-user-select: none;
	-ms-user-select: none;
	/* Avoid collapsed columns overlapping with table headers... for whatever reason*/
	z-index: 1;
}

table th.pad {
	background-color: transparent;
	border: none;
}

table th.sortable {
	cursor: pointer;
}

table td {
	text-align: left;
	padding: 3px 5px 3px;
	background-color: var(--table-bg);
}

table tr:nth-child(odd) td {
	background-color: var(--table-odd-row-bg);
}

table tr.highlight td {
	background-color: var(--table-row-bg-hover);
}

table a {
	color: var(--link-fg);
	text-decoration: none;
}

table a:visited {
	color: var(--link-fg-visited);
}

table span.argtype {
	font-weight: bold;
	color: var(--argtype-fg);
}

.invisible {
	display: none;
}

table td.unknown {
	font-family: sans-serif;
	font-style: italic;
}

#compact-sig-toggle {
	text-decoration: underline;
}

#compact-sig-toggle::before { display: inline-block; content: '['; }
#compact-sig-toggle::after  { display: inline-block; content: ']'; }

/* Collapse columns through CSS trickery so that JS only has to add/remove words
 * from the table's data-collapse attribute. */

table th > .collapse-toggle::before {
	content: '[-]';
}

/* Show [+] instead of [-] for collapsed columns */
table[data-collapse~="name"]      th[data-column="name"]      > .collapse-toggle::before,
table[data-collapse~="symbol"]    th[data-column="symbol"]    > .collapse-toggle::before,
table[data-collapse~="location"]  th[data-column="location"]  > .collapse-toggle::before,
table[data-collapse~="kconfig"]   th[data-column="kconfig"]   > .collapse-toggle::before,
table[data-collapse~="signature"] th[data-column="signature"] > .collapse-toggle::before {
	content: '[+]';
}

/* No column title for collapsed columns, just the toggle */
table[data-collapse~="name"]      th[data-column="name"]      > .collapsible,
table[data-collapse~="symbol"]    th[data-column="symbol"]    > .collapsible,
table[data-collapse~="location"]  th[data-column="location"]  > .collapsible,
table[data-collapse~="kconfig"]   th[data-column="kconfig"]   > .collapsible,
table[data-collapse~="signature"] th[data-column="signature"] > .collapsible {
	display: none;
}

/* Hide the content of collapsed columns */
table[data-collapse~="name"]      td[data-column="name"],
table[data-collapse~="symbol"]    td[data-column="symbol"],
table[data-collapse~="location"]  td[data-column="location"],
table[data-collapse~="kconfig"]   td[data-column="kconfig"],
table[data-collapse~="signature"] td[data-column="signature"] {
	overflow: hidden;
	white-space: nowrap;
	text-overflow: ellipsis;
	max-width: 0px;
	opacity: 0.5;
}

/* Emojis! Use U+202f (narrow no-break space) to space header sort arrows and
   U+2002 (en space) to space emojis for bad locations and esoteric syscalls. */

table th.ascending::before, table th.descending::before, table td.bad::after, table td.esoteric::after {
	font-family: 'Noto Color Emoji';
}

table th.ascending::before  { content: '\2b07\fe0f\202f';  }
table th.descending::before { content: '\2b06\fe0f\202f';  }
table td.bad::after         { content: '\2002\26a0\fe0f';  }
table td.esoteric::after    { content: '\2002\1f984\fe0f'; }

/* Hover effects */

@media (any-hover: hover) {
	table th.sortable:hover {
		cursor: pointer;
		background-color: var(--table-head-bg-hover);
	}

	table tr:hover td {
		background-color: var(--table-row-bg-hover);
	}

	table a:hover {
		text-decoration: underline;
	}

	table .collapse-toggle:hover {
		cursor: pointer;
		text-shadow: 0px 0px 3px var(--main-fg);
	}

	#compact-sig-toggle:hover {
		cursor: pointer;
	}

	#compact-sig-toggle:hover::before,
	#compact-sig-toggle:hover::after {
		text-decoration: none;
		text-shadow: 0px 0px 3px var(--main-fg);
	}
}
