| /* figures: pointer (features/json_pointer.md, json_patch.md, merge_patch.md; widgets in js/fig-pointer.js) */ | |
| /* value types: the colours of the code highlighting (brand.css), so a string looks the same everywhere */ | |
| .nj-pointer-walk, .nj-pointer-fl, .nj-patch { | |
| --nj-pointer-s: var(--nj-hl-string); | |
| --nj-pointer-n: var(--nj-hl-number); | |
| --nj-pointer-b: var(--nj-hl-function); | |
| --nj-pointer-line: color-mix(in srgb, var(--md-default-fg-color) 28%, var(--md-default-bg-color)); | |
| --nj-pointer-ok: #23793a; | |
| --nj-pointer-ok-soft: #e6f4ea; | |
| } | |
| [data-md-color-scheme="slate"] :is(.nj-pointer-walk, .nj-pointer-fl, .nj-patch) { | |
| --nj-pointer-ok: #7ed491; | |
| --nj-pointer-ok-soft: #14301d; | |
| } | |
| /* ---------- pointer walker ---------- */ | |
| .md-typeset .nj-pointer-walk { | |
| display: grid; | |
| grid-template-columns: minmax(0, 1fr); | |
| gap: 1rem 1.6rem; | |
| margin: 1.5rem 0; | |
| padding: 1rem 1.1rem; | |
| border: 1px solid var(--md-default-fg-color--lightest); | |
| border-radius: 6px; | |
| font-size: .75rem; | |
| } | |
| @media screen and (min-width: 45em) { | |
| .md-typeset .nj-pointer-walk--js { | |
| grid-template-columns: minmax(0, 1fr) minmax(0, 1.1fr); | |
| } | |
| .md-typeset .nj-pointer-walk--js .nj-pointer-panel { order: 2; } | |
| } | |
| .md-typeset .nj-pointer-static { | |
| margin: 0; | |
| color: var(--md-default-fg-color--light); | |
| } | |
| .md-typeset .nj-pointer-walk code { | |
| font-size: .95em; | |
| } | |
| /* tree: elbow lines drawn by each item (::before up to its row, ::after down to the next sibling) */ | |
| .md-typeset .nj-pointer-walk ul.nj-pointer-tree, | |
| .md-typeset .nj-pointer-walk .nj-pointer-tree ul { | |
| margin: 0; | |
| padding: 0; | |
| list-style: none; | |
| } | |
| .md-typeset .nj-pointer-walk .nj-pointer-tree ul { | |
| padding-left: 1.5rem; | |
| } | |
| .md-typeset .nj-pointer-walk .nj-pointer-tree li { | |
| position: relative; | |
| margin: 0; | |
| padding: 0; | |
| list-style: none; | |
| --nj-pointer-mid: .95rem; | |
| } | |
| .md-typeset .nj-pointer-walk .nj-pointer-tree li::before, | |
| .md-typeset .nj-pointer-walk .nj-pointer-tree li::after { | |
| content: none; | |
| } | |
| .md-typeset .nj-pointer-walk .nj-pointer-tree ul > li::before { | |
| content: ""; | |
| position: absolute; | |
| top: 0; | |
| left: -1rem; | |
| width: .8rem; | |
| height: var(--nj-pointer-mid); | |
| border: 0 solid var(--nj-pointer-line); | |
| border-width: 0 0 2px 2px; | |
| border-bottom-left-radius: 4px; | |
| background: none; | |
| } | |
| .md-typeset .nj-pointer-walk .nj-pointer-tree ul > li:not(:last-child)::after { | |
| content: ""; | |
| position: absolute; | |
| top: 0; | |
| bottom: 0; | |
| left: -1rem; | |
| border-left: 2px solid var(--nj-pointer-line); | |
| } | |
| .md-typeset .nj-pointer-walk .nj-pointer-tree ul > li.is-on::before { | |
| z-index: 1; | |
| border-color: var(--md-typeset-a-color); | |
| } | |
| .md-typeset .nj-pointer-walk .nj-pointer-tree ul > li.is-pass::after { | |
| z-index: 1; | |
| border-left-color: var(--md-typeset-a-color); | |
| } | |
| .md-typeset .nj-pointer-walk .nj-pointer-n { | |
| display: inline-block; | |
| margin: .15rem 0; | |
| padding: .2rem .5rem; | |
| border: 1px solid transparent; | |
| border-radius: 6px; | |
| background: none; | |
| color: var(--md-default-fg-color); | |
| font: inherit; | |
| font-family: var(--md-code-font-family), monospace; | |
| font-size: .95em; | |
| line-height: 1.5; | |
| text-align: left; | |
| } | |
| .md-typeset .nj-pointer-walk button.nj-pointer-n { | |
| cursor: pointer; | |
| } | |
| .md-typeset .nj-pointer-walk button.nj-pointer-n:hover { | |
| border-color: var(--md-default-fg-color--lightest); | |
| } | |
| .md-typeset .nj-pointer-walk :is(button):focus-visible { | |
| outline: 2px solid var(--md-typeset-a-color); | |
| outline-offset: 2px; | |
| } | |
| .nj-pointer-k { color: var(--nj-hl-key); } | |
| .nj-pointer-t { | |
| color: var(--md-default-fg-color--light); | |
| font-family: var(--md-text-font-family), sans-serif; | |
| font-size: .88em; | |
| font-style: italic; | |
| } | |
| .nj-pointer-v--s { color: var(--nj-pointer-s); } | |
| .nj-pointer-v--n { color: var(--nj-pointer-n); } | |
| .nj-pointer-v--b { color: var(--nj-pointer-b); } | |
| .md-typeset .nj-pointer-walk li.is-on > .nj-pointer-n { | |
| border-color: color-mix(in srgb, var(--md-typeset-a-color) 45%, transparent); | |
| } | |
| .md-typeset .nj-pointer-walk li.is-target > .nj-pointer-n { | |
| border-color: var(--md-typeset-a-color); | |
| background-color: var(--nj-blue-soft); | |
| box-shadow: 0 0 0 1px var(--md-typeset-a-color); | |
| } | |
| /* the value a container pointer identifies includes its subtree */ | |
| .md-typeset .nj-pointer-walk li.is-target li > .nj-pointer-n { | |
| background-color: var(--nj-blue-soft); | |
| } | |
| .md-typeset .nj-pointer-walk li.is-miss > .nj-pointer-n { | |
| border-color: var(--nj-red); | |
| border-style: dashed; | |
| } | |
| /* panel: pointer bar, result, example pointers */ | |
| .nj-pointer-lbl { | |
| margin: 0 0 .35rem; | |
| color: var(--md-default-fg-color--light); | |
| font-size: .62rem; | |
| font-weight: 600; | |
| letter-spacing: .04em; | |
| text-transform: uppercase; | |
| } | |
| .nj-pointer-lbl span { | |
| font-weight: 500; | |
| letter-spacing: 0; | |
| text-transform: none; | |
| } | |
| .nj-pointer-bar { | |
| display: flex; | |
| flex-wrap: wrap; | |
| margin-bottom: .6rem; | |
| } | |
| .md-typeset .nj-pointer-seg { | |
| margin: 0 -1px 0 0; | |
| padding: .3rem .55rem; | |
| border: 1px solid var(--md-typeset-a-color); | |
| background-color: var(--md-default-bg-color); | |
| color: var(--md-typeset-a-color); | |
| cursor: pointer; | |
| font: inherit; | |
| } | |
| .md-typeset .nj-pointer-seg:first-child { border-radius: 6px 0 0 6px; } | |
| .md-typeset .nj-pointer-seg:last-child { border-radius: 0 6px 6px 0; } | |
| .md-typeset .nj-pointer-seg:only-child { border-radius: 6px; } | |
| .md-typeset .nj-pointer-seg code { color: inherit; font-size: 1em; } | |
| .md-typeset .nj-pointer-seg--root code { color: var(--md-default-fg-color--light); } | |
| .md-typeset .nj-pointer-seg.is-after { | |
| border-color: var(--md-default-fg-color--lighter); | |
| color: var(--md-default-fg-color--light); | |
| border-style: dashed; | |
| } | |
| .md-typeset .nj-pointer-seg[aria-pressed="true"] { | |
| position: relative; | |
| background-color: var(--md-typeset-a-color); | |
| color: var(--md-default-bg-color); | |
| } | |
| .md-typeset .nj-pointer-seg--root[aria-pressed="true"] code { color: inherit; } | |
| .nj-pointer-out { | |
| min-height: 3.2em; | |
| margin-bottom: .9rem; | |
| padding: .5rem .7rem; | |
| border-left: 3px solid var(--md-typeset-a-color); | |
| border-radius: 0 6px 6px 0; | |
| background-color: var(--md-code-bg-color); | |
| line-height: 1.6; | |
| overflow-wrap: anywhere; | |
| } | |
| .md-typeset .nj-pointer-out .nj-pointer-val { color: var(--md-typeset-a-color); font-weight: 600; } | |
| .nj-pointer-out .nj-pointer-note { color: var(--md-default-fg-color--light); } | |
| .nj-pointer-out .nj-pointer-err { color: var(--nj-red); font-weight: 600; } | |
| .nj-pointer-presets { | |
| display: flex; | |
| flex-wrap: wrap; | |
| gap: .35rem; | |
| } | |
| .md-typeset .nj-pointer-chip { | |
| padding: .2rem .5rem; | |
| border: 1px solid var(--md-default-fg-color--lightest); | |
| border-radius: 6px; | |
| background-color: var(--md-default-bg-color); | |
| color: var(--md-default-fg-color); | |
| cursor: pointer; | |
| font: inherit; | |
| } | |
| .md-typeset .nj-pointer-chip:hover { border-color: var(--md-typeset-a-color); } | |
| .md-typeset .nj-pointer-chip[aria-pressed="true"] { | |
| border-color: var(--md-typeset-a-color); | |
| background-color: var(--nj-blue-soft); | |
| color: var(--md-typeset-a-color); | |
| } | |
| .md-typeset .nj-pointer-chip code { color: inherit; font-size: 1em; } | |
| @media (pointer: coarse), screen and (max-width: 44.984375em) { | |
| .md-typeset :is(.nj-pointer-seg, .nj-pointer-chip, .nj-patch-btn) { min-height: 44px; min-width: 44px; } | |
| .md-typeset .nj-pointer-walk button.nj-pointer-n { min-height: 40px; } | |
| } | |
| /* ---------- flatten / unflatten figure (scripts/figures/json_pointer_flatten.py) ---------- */ | |
| .md-typeset svg.nj-pointer-fl { min-width: 28rem; max-width: 44rem; } | |
| .nj-pointer-fl .nj-pointer-fl-edge { fill: none; stroke: var(--fg-line); stroke-width: 1.5; } | |
| .nj-pointer-fl .nj-pointer-fl-link { fill: none; stroke-width: 1.5; stroke-opacity: .75; } | |
| .nj-pointer-fl .nj-pointer-fl-link.nj-pointer-fl--s, .nj-pointer-fl .nj-pointer-fl-dot.nj-pointer-fl--s { stroke: var(--nj-pointer-s); } | |
| .nj-pointer-fl .nj-pointer-fl-link.nj-pointer-fl--n, .nj-pointer-fl .nj-pointer-fl-dot.nj-pointer-fl--n { stroke: var(--nj-pointer-n); } | |
| .nj-pointer-fl .nj-pointer-fl-link.nj-pointer-fl--b, .nj-pointer-fl .nj-pointer-fl-dot.nj-pointer-fl--b { stroke: var(--nj-pointer-b); } | |
| .nj-pointer-fl .nj-pointer-fl-dot { fill: var(--md-default-bg-color); stroke-width: 2; } | |
| .nj-pointer-fl tspan.nj-pointer-fl--s { fill: var(--nj-pointer-s); } | |
| .nj-pointer-fl tspan.nj-pointer-fl--n { fill: var(--nj-pointer-n); } | |
| .nj-pointer-fl tspan.nj-pointer-fl--b { fill: var(--nj-pointer-b); } | |
| .nj-pointer-fl .nj-pointer-fl-k, .nj-pointer-fl .nj-pointer-fl-inner, .nj-pointer-fl .nj-pointer-fl-key { fill: var(--nj-hl-key); } | |
| .nj-pointer-fl .nj-pointer-fl-op { | |
| fill: var(--md-typeset-a-color); | |
| font-family: var(--md-code-font-family), monospace; | |
| font-size: 15px; | |
| font-weight: 600; | |
| text-anchor: middle; | |
| } | |
| /* ---------- JSON Patch stepper ---------- */ | |
| .md-typeset .nj-patch--js .md-typeset__scrollwrap, | |
| .md-typeset .nj-patch--js > .md-typeset__table, | |
| .md-typeset .nj-patch--js > table { | |
| display: none; | |
| } | |
| .md-typeset .nj-patch-stage { | |
| margin: 1.5rem 0; | |
| padding: 1rem 1.1rem; | |
| border: 1px solid var(--md-default-fg-color--lightest); | |
| border-radius: 6px; | |
| font-size: .75rem; | |
| } | |
| .nj-patch-cols { | |
| display: grid; | |
| grid-template-columns: minmax(0, 1fr); | |
| gap: 1rem 1.4rem; | |
| } | |
| @media screen and (min-width: 50em) { | |
| .nj-patch-cols { grid-template-columns: minmax(0, .8fr) minmax(0, 1.2fr); } | |
| } | |
| .nj-patch-h { | |
| margin: 0 0 .35rem; | |
| color: var(--md-default-fg-color--light); | |
| font-size: .62rem; | |
| font-weight: 600; | |
| letter-spacing: .04em; | |
| text-transform: uppercase; | |
| } | |
| .nj-patch-doc { | |
| --nj-patch-lh: 1.9rem; | |
| --nj-patch-pad: .5rem; | |
| position: relative; | |
| padding: var(--nj-patch-pad) .6rem var(--nj-patch-pad) 2rem; | |
| border: 1px solid var(--md-default-fg-color--lightest); | |
| border-radius: 6px; | |
| background-color: var(--md-code-bg-color); | |
| font-family: var(--md-code-font-family), monospace; | |
| font-size: .95em; | |
| } | |
| .nj-patch-line { | |
| display: flex; | |
| flex-wrap: wrap; | |
| align-items: center; | |
| gap: 0 .6rem; | |
| min-height: var(--nj-patch-lh); | |
| margin: 0 -.3rem; | |
| padding: 0 .3rem; | |
| border-radius: 4px; | |
| white-space: pre; | |
| } | |
| .nj-patch-code { white-space: pre; } | |
| .nj-patch-k { color: var(--nj-hl-key); } | |
| .nj-patch-s { color: var(--nj-pointer-s); } | |
| .nj-patch-note { | |
| padding: 0 .4rem; | |
| border-radius: 4px; | |
| font-family: var(--md-text-font-family), sans-serif; | |
| font-size: .82em; | |
| font-weight: 600; | |
| white-space: nowrap; | |
| } | |
| .nj-patch-line--add { background-color: var(--nj-pointer-ok-soft); box-shadow: inset 3px 0 0 var(--nj-pointer-ok); } | |
| .nj-patch-line--add .nj-patch-note { color: var(--nj-pointer-ok); } | |
| .nj-patch-line--del { background-color: var(--nj-red-soft); box-shadow: inset 3px 0 0 var(--nj-red); } | |
| .nj-patch-line--del .nj-patch-code { text-decoration: line-through; text-decoration-color: var(--nj-red); text-decoration-thickness: 2px; opacity: .75; } | |
| .nj-patch-line--del .nj-patch-note { color: var(--nj-red); } | |
| .nj-patch-line--mod .nj-patch-note { color: var(--nj-pointer-ok); } | |
| .nj-patch-line--test { background-color: var(--nj-blue-soft); box-shadow: inset 3px 0 0 var(--md-typeset-a-color); } | |
| .nj-patch-line--test .nj-patch-note { color: var(--md-typeset-a-color); } | |
| .nj-patch-ins { padding: .05rem .15rem; border-radius: 3px; background-color: var(--nj-pointer-ok-soft); box-shadow: 0 0 0 1.5px var(--nj-pointer-ok); } | |
| .nj-patch-src { padding: .05rem .15rem; border-radius: 3px; box-shadow: 0 0 0 1.5px var(--md-typeset-a-color); } | |
| /* move/copy connector in the left gutter: a bracket from the source line to the target line */ | |
| .nj-patch-arc { | |
| position: absolute; | |
| left: .55rem; | |
| width: .8rem; | |
| border: 2px solid var(--md-typeset-a-color); | |
| border-right: 0; | |
| border-radius: 6px 0 0 6px; | |
| } | |
| .nj-patch-arc::after { | |
| content: ""; | |
| position: absolute; | |
| right: -2px; | |
| border: 5px solid transparent; | |
| border-left: 7px solid var(--md-typeset-a-color); | |
| } | |
| .nj-patch-arc--down::after { bottom: -6px; } | |
| .nj-patch-arc--up::after { top: -6px; } | |
| .md-typeset .nj-patch-ops { | |
| margin: 0; | |
| padding: 0; | |
| list-style: none; | |
| counter-reset: nj-patch; | |
| } | |
| .md-typeset .nj-patch-ops > li { | |
| position: relative; | |
| margin: 0 0 .3rem; | |
| padding: .35rem .5rem .35rem 2rem; | |
| border: 1px solid transparent; | |
| border-radius: 6px; | |
| counter-increment: nj-patch; | |
| line-height: 1.5; | |
| } | |
| .md-typeset .nj-patch-ops > li::before { | |
| content: counter(nj-patch); | |
| position: absolute; | |
| top: .35rem; | |
| left: .6rem; | |
| color: var(--md-default-fg-color--lighter); | |
| font-weight: 600; | |
| font-variant-numeric: tabular-nums; | |
| } | |
| .md-typeset .nj-patch-ops code { font-size: .9em; overflow-wrap: anywhere; } | |
| .md-typeset .nj-patch-ops > li.is-done { opacity: .6; } | |
| .md-typeset .nj-patch-ops > li.is-cur { | |
| border-color: var(--md-typeset-a-color); | |
| background-color: var(--nj-blue-soft); | |
| } | |
| .md-typeset .nj-patch-ops > li.is-cur::before { color: var(--md-typeset-a-color); } | |
| .nj-patch-op { color: var(--nj-hl-keyword); font-weight: 600; } | |
| .nj-patch-path { color: var(--nj-pointer-s); } | |
| .md-typeset .nj-patch-ops > li.is-cur .nj-patch-path { | |
| padding: 0 .15rem; | |
| border-radius: 3px; | |
| background-color: var(--md-typeset-a-color); | |
| color: var(--md-default-bg-color); | |
| } | |
| .nj-patch-ctrl { | |
| display: flex; | |
| flex-wrap: wrap; | |
| align-items: center; | |
| gap: .4rem; | |
| margin-top: .9rem; | |
| } | |
| .md-typeset .nj-patch-btn { | |
| padding: .3rem .9rem; | |
| border: 1px solid var(--md-default-fg-color--lighter); | |
| border-radius: 6px; | |
| background-color: var(--md-default-bg-color); | |
| color: var(--md-default-fg-color); | |
| cursor: pointer; | |
| font: inherit; | |
| font-weight: 600; | |
| } | |
| .md-typeset .nj-patch-btn--primary { | |
| border-color: var(--md-typeset-a-color); | |
| background-color: var(--md-typeset-a-color); | |
| color: var(--md-default-bg-color); | |
| } | |
| .md-typeset .nj-patch-btn:disabled { opacity: .45; cursor: default; } | |
| .md-typeset .nj-patch-btn:focus-visible { outline: 2px solid var(--md-typeset-a-color); outline-offset: 2px; } | |
| .nj-patch-count { | |
| margin-left: auto; | |
| color: var(--md-default-fg-color--light); | |
| font-variant-numeric: tabular-nums; | |
| } | |
| .md-typeset .nj-patch-status { | |
| min-height: 3.2em; | |
| margin: .6rem 0 0; | |
| color: var(--md-default-fg-color--light); | |
| } | |
| @media (prefers-reduced-motion: no-preference) { | |
| .nj-patch-doc--anim :is(.nj-patch-line--add, .nj-patch-line--del, .nj-patch-line--test, .nj-patch-ins, .nj-patch-arc) { | |
| animation: nj-patch-in 450ms ease-out; | |
| } | |
| } | |
| @keyframes nj-patch-in { | |
| from { opacity: 0; transform: translateX(-.4rem); } | |
| to { opacity: 1; transform: none; } | |
| } | |
| /* ---------- merge patch table ---------- */ | |
| .nj-pointer-mpt { | |
| --nj-pointer-mp-set: var(--nj-hl-keyword); | |
| --nj-pointer-mp-add: #23793a; | |
| --nj-pointer-mp-del: var(--nj-red); | |
| --nj-pointer-mp-rec: var(--nj-hl-function); | |
| --nj-pointer-mp-arr: var(--nj-hl-number); | |
| --nj-pointer-mp-keep: var(--md-default-fg-color--light); | |
| } | |
| [data-md-color-scheme="slate"] .nj-pointer-mpt { --nj-pointer-mp-add: #7ed491; } | |
| .md-typeset .nj-pointer-mpt td { vertical-align: top; } | |
| .md-typeset .nj-pointer-mpt td:first-child { white-space: nowrap; } | |
| .nj-pointer-mp { | |
| display: inline-block; | |
| padding: .05rem .5rem; | |
| border: 1px solid currentColor; | |
| border-radius: 999px; | |
| background-color: color-mix(in srgb, currentColor 10%, var(--md-default-bg-color)); | |
| font-size: .92em; | |
| font-weight: 600; | |
| line-height: 1.5; | |
| white-space: nowrap; | |
| } | |
| .nj-pointer-mp--set { color: var(--nj-pointer-mp-set); } | |
| .nj-pointer-mp--add { color: var(--nj-pointer-mp-add); } | |
| .nj-pointer-mp--del { color: var(--nj-pointer-mp-del); } | |
| .nj-pointer-mp--rec { color: var(--nj-pointer-mp-rec); } | |
| .nj-pointer-mp--arr { color: var(--nj-pointer-mp-arr); } | |
| .nj-pointer-mp--keep { color: var(--nj-pointer-mp-keep); } | |
| .nj-pointer-mp-none { color: var(--md-default-fg-color--light); font-style: italic; } | |
| .md-typeset .nj-pointer-mpt table:not([class]) td code { white-space: normal; } | |
| .md-typeset .nj-pointer-mpt table:not([class]) td:nth-child(-n+2) code { white-space: nowrap; } | |
| /* the result cell takes a tint of the rule's colour */ | |
| .md-typeset .nj-pointer-mpt tr:has(.nj-pointer-mp--set) td:last-child { background-color: color-mix(in srgb, var(--nj-pointer-mp-set) 8%, transparent); } | |
| .md-typeset .nj-pointer-mpt tr:has(.nj-pointer-mp--add) td:last-child { background-color: color-mix(in srgb, var(--nj-pointer-mp-add) 8%, transparent); } | |
| .md-typeset .nj-pointer-mpt tr:has(.nj-pointer-mp--del) td:last-child { background-color: color-mix(in srgb, var(--nj-pointer-mp-del) 8%, transparent); } | |
| .md-typeset .nj-pointer-mpt tr:has(.nj-pointer-mp--rec) td:last-child { background-color: color-mix(in srgb, var(--nj-pointer-mp-rec) 8%, transparent); } | |
| .md-typeset .nj-pointer-mpt tr:has(.nj-pointer-mp--arr) td:last-child { background-color: color-mix(in srgb, var(--nj-pointer-mp-arr) 8%, transparent); } |