| 1 |
|
| 2 |
|
| 3 |
|
| 4 |
|
| 5 |
|
| 6 |
@font-face { font-family: "Barlow"; font-weight: 300; font-display: swap; src: url(/static/fonts/Barlow-300.woff2) format("woff2"); } |
| 7 |
@font-face { font-family: "Barlow"; font-weight: 400; font-display: swap; src: url(/static/fonts/Barlow-400.woff2) format("woff2"); } |
| 8 |
@font-face { font-family: "Barlow"; font-weight: 500; font-display: swap; src: url(/static/fonts/Barlow-500.woff2) format("woff2"); } |
| 9 |
@font-face { font-family: "Barlow"; font-weight: 600; font-display: swap; src: url(/static/fonts/Barlow-600.woff2) format("woff2"); } |
| 10 |
@font-face { font-family: "Press Start 2P"; font-weight: 400; font-display: swap; src: url(/static/fonts/PressStart2P-400.woff2) format("woff2"); } |
| 11 |
|
| 12 |
:root { |
| 13 |
--bg:#0b0b16; --panel:#141430; --soft:#1c1c3c; --ink:#e8e8f0; --mute:#8a8aa0; --line:#2c2c5a; --dim:#4a4a68; |
| 14 |
--acc:#ffc83c; --band:#3a5fd0; --band-ink:#ffffff; --band-line:rgba(11,11,22,.45); --now:#ffc83c; --now-ink:#0b0b16; |
| 15 |
--ok:#7dd87d; --bad:#ff5a5a; --warn:#ffb347; |
| 16 |
--add:#123a22; --del:#3f1520; --add-ink:#9fe8a8; --del-ink:#ffa5a5; |
| 17 |
--m1:#ffdd00; --m2:#d6d6e0; --m3:#d29a55; --m4:#c07a5a; --m5:#9a9ab8; |
| 18 |
|
| 19 |
--sy-kw:#ff9de6; --sy-str:#a8e39b; --sy-num:#ffd479; --sy-cmt:#6e6e8c; --sy-fn:#8ad8ff; --sy-ty:#ffc83c; --sy-var:#e8e8f0; --sy-const:#ffb347; |
| 20 |
color-scheme: dark; |
| 21 |
} |
| 22 |
:root[data-theme="light"] { |
| 23 |
--bg:#f5f7f2; --panel:#ffffff; --soft:#eef2ea; --ink:#2b2f2a; --mute:#7a807a; --line:#d9ddd6; --dim:#b9bfb5; |
| 24 |
--acc:#5b9c1c; --band:#6aa91f; --band-ink:#ffffff; --band-line:rgba(255,255,255,.25); --now:#3e5f8f; --now-ink:#ffffff; |
| 25 |
--ok:#2e8b3a; --bad:#c8322b; --warn:#b8651b; |
| 26 |
--add:#e3f5e1; --del:#fbe3e1; --add-ink:#1f6b2a; --del-ink:#a12b25; |
| 27 |
--m1:#c9931a; --m2:#7a8290; --m3:#b0693a; --m4:#a25c46; --m5:#8a8f9c; |
| 28 |
--sy-kw:#a626a4; --sy-str:#50a14f; --sy-num:#986801; --sy-cmt:#9a9a9a; --sy-fn:#4078f2; --sy-ty:#c18401; --sy-var:#2b2f2a; --sy-const:#b8651b; |
| 29 |
color-scheme: light; |
| 30 |
} |
| 31 |
|
| 32 |
* { box-sizing: border-box; } |
| 33 |
html { background: var(--bg); } |
| 34 |
body { margin: 0; min-height: 100vh; display: flex; flex-direction: column; background: var(--bg); color: var(--ink); font: 15px/1.45 "Barlow", "IBM Plex Sans", system-ui, sans-serif; } |
| 35 |
a { color: var(--acc); text-decoration: none; } |
| 36 |
a:hover { text-decoration: underline; } |
| 37 |
code, pre, kbd, .mono { font-family: "IBM Plex Mono", ui-monospace, SFMono-Regular, Menlo, Consolas, monospace; font-size: 13px; } |
| 38 |
.px { font-family: "Press Start 2P", "Silkscreen", monospace; font-size: 13px; } |
| 39 |
.pxs { font-family: "Press Start 2P", "Silkscreen", monospace; font-size: 11px; } |
| 40 |
h1, h2, h3 { margin: 0; } |
| 41 |
h2 { font-size: 16px; font-weight: 600; margin: 0 0 8px; } |
| 42 |
h3 { font-size: 12px; text-transform: uppercase; letter-spacing: .08em; color: var(--mute); margin: 14px 0 6px; } |
| 43 |
p { margin: 0 0 10px; } |
| 44 |
.small { font-size: 12px; } |
| 45 |
.mute { color: var(--mute); } |
| 46 |
.dim { color: var(--dim); } |
| 47 |
.center { text-align: center; } |
| 48 |
.right { text-align: right; } |
| 49 |
.empty { color: var(--mute); padding: 22px; text-align: center; border: 1px dashed var(--line); } |
| 50 |
.lead { font-size: 16px; } |
| 51 |
kbd { background: var(--soft); border: 1px solid var(--line); padding: 1px 5px; font-size: 11px; } |
| 52 |
|
| 53 |
|
| 54 |
header { background: var(--panel); border-bottom: 1px solid var(--line); padding: 14px 22px; display: flex; align-items: center; gap: 16px; } |
| 55 |
header .brand span, footer .brand span { color: var(--acc); } |
| 56 |
header .brand, footer .brand { color: var(--ink); } |
| 57 |
header nav { margin-left: auto; display: flex; gap: 8px; } |
| 58 |
form.find { margin: 0; flex: 0 1 320px; } |
| 59 |
form.find input { width: 100%; background: var(--bg); border: 1px solid var(--line); color: var(--ink); padding: 6px 10px; font: inherit; } |
| 60 |
form.find input:focus { outline: 2px solid var(--band); outline-offset: 0; } |
| 61 |
.band { background: var(--band); display: flex; align-items: stretch; padding: 0 22px; } |
| 62 |
.band a { color: var(--band-ink); font-size: 12px; font-weight: 600; text-transform: uppercase; letter-spacing: .08em; padding: 9px 14px; border-right: 1px solid var(--band-line); } |
| 63 |
.band a:first-child { border-left: 1px solid var(--band-line); } |
| 64 |
.band a.on { box-shadow: inset 0 -3px 0 var(--acc); } |
| 65 |
.band a:hover { text-decoration: none; background: rgba(0,0,0,.12); } |
| 66 |
.band .grow { flex: 1; } |
| 67 |
.band a.dim { opacity: .6; border: 0; } |
| 68 |
.tabs { background: var(--panel); border-bottom: 1px solid var(--line); } |
| 69 |
.tabs-in { max-width: 1180px; margin: 0 auto; padding: 0 22px; display: flex; align-items: center; gap: 2px; flex-wrap: wrap; } |
| 70 |
.tabs .crumb { margin-right: 18px; padding: 10px 0; font-size: 16px; } |
| 71 |
.tabs a:not(.crumb a) { padding: 10px 12px; color: var(--ink); font-size: 13px; } |
| 72 |
.tabs a.on { border-bottom: 2px solid var(--acc); font-weight: 600; } |
| 73 |
.tabs a:hover { text-decoration: none; background: var(--soft); } |
| 74 |
main { flex: 1; width: 100%; max-width: 1180px; margin: 0 auto; padding: 14px 22px 28px; } |
| 75 |
main.wide { max-width: none; } |
| 76 |
footer { background: var(--panel); border-top: 1px solid var(--line); margin-top: 28px; } |
| 77 |
.foot { max-width: 1180px; margin: 0 auto; padding: 22px; display: grid; grid-template-columns: 1fr auto; gap: 22px; } |
| 78 |
.foot .cols { display: flex; gap: 32px; } |
| 79 |
.foot .cols a { display: block; font-size: 13px; } |
| 80 |
.head { border-bottom: 2px solid var(--band); margin: 6px 0 16px; padding-bottom: 6px; } |
| 81 |
.head h1 { font-size: 30px; font-weight: 300; color: var(--mute); } |
| 82 |
.head h1 small { display: block; font-size: 13px; color: var(--acc); font-weight: 400; } |
| 83 |
.strip { padding: 8px 12px; margin: 0 0 12px; border: 1px solid; font-size: 13px; } |
| 84 |
.strip.warn { border-color: var(--warn); color: var(--warn); background: color-mix(in srgb, var(--warn) 10%, transparent); } |
| 85 |
.strip.bad { border-color: var(--bad); color: var(--bad); background: color-mix(in srgb, var(--bad) 10%, transparent); } |
| 86 |
.strip a { color: inherit; text-decoration: underline; } |
| 87 |
.sheet { position: fixed; right: 22px; bottom: 22px; background: var(--panel); border: 1px solid var(--line); padding: 14px 18px; box-shadow: 0 2px 12px rgba(0,0,0,.35); } |
| 88 |
.sheet td { padding: 2px 8px 2px 0; font-size: 13px; } |
| 89 |
|
| 90 |
|
| 91 |
button, a.go, button.go { font: inherit; font-size: 12px; font-weight: 600; text-transform: uppercase; letter-spacing: .08em; background: var(--panel); color: var(--acc); border: 1px solid var(--acc); padding: 5px 10px; cursor: pointer; } |
| 92 |
button:hover, a.go:hover { background: var(--acc); color: var(--bg); text-decoration: none; } |
| 93 |
button.small, a.go.small { padding: 2px 8px; font-size: 11px; } |
| 94 |
.tag { display: inline-block; font-size: 11px; text-transform: uppercase; letter-spacing: .06em; color: var(--acc); background: var(--soft); padding: 1px 6px; vertical-align: middle; } |
| 95 |
.tag.bad { color: var(--bad); } |
| 96 |
.tag.warn { color: var(--warn); } |
| 97 |
.tag.head { color: var(--now-ink); background: var(--now); } |
| 98 |
.chip { font-family: "IBM Plex Mono", ui-monospace, monospace; font-size: 12px; background: var(--soft); padding: 1px 6px; border: 1px solid var(--line); } |
| 99 |
.lbl { display: inline-block; font-size: 11px; padding: 1px 7px; margin-right: 4px; border: 1px solid; vertical-align: middle; } |
| 100 |
.lbl-bm { color: var(--band-ink); background: var(--band); border-color: var(--band); } |
| 101 |
.lbl-tag { color: var(--acc); border-color: var(--acc); } |
| 102 |
.sig { display: inline-block; width: 1.2em; text-align: center; font-weight: 600; } |
| 103 |
.sig-valid { color: var(--ok); } |
| 104 |
.sig-unsigned { color: var(--dim); } |
| 105 |
.sig-invalid { color: var(--bad); } |
| 106 |
.sig-revoked { color: var(--warn); } |
| 107 |
|
| 108 |
|
| 109 |
ul.plain { list-style: none; margin: 0; padding: 0; } |
| 110 |
ul.plain li { padding: 2px 0; } |
| 111 |
ul.rows { list-style: none; margin: 0; padding: 0; } |
| 112 |
ul.rows li { display: flex; justify-content: space-between; align-items: center; gap: 14px; background: var(--panel); border: 1px solid var(--line); padding: 12px 14px; margin-bottom: 6px; } |
| 113 |
ul.rows .name { font-size: 16px; } |
| 114 |
ul.rows p { margin: 4px 0 0; color: var(--mute); } |
| 115 |
.table { border: 1px solid var(--line); overflow-x: auto; } |
| 116 |
table { border-collapse: collapse; width: 100%; } |
| 117 |
th { text-align: left; font-size: 11px; text-transform: uppercase; letter-spacing: .06em; color: var(--mute); padding: 8px 10px; border-bottom: 1px solid var(--line); background: var(--soft); } |
| 118 |
td { padding: 7px 10px; background: var(--panel); border-bottom: 1px solid var(--line); vertical-align: top; } |
| 119 |
td.px { color: var(--acc); } |
| 120 |
.panel { background: var(--panel); border: 1px solid var(--line); padding: 14px 16px; margin-bottom: 14px; } |
| 121 |
dl.facts { display: grid; grid-template-columns: max-content 1fr; gap: 6px 18px; background: var(--panel); border: 1px solid var(--line); padding: 12px 16px; margin: 0 0 14px; } |
| 122 |
dl.facts dt { font-size: 11px; text-transform: uppercase; letter-spacing: .06em; color: var(--mute); padding-top: 3px; } |
| 123 |
dl.facts dd { margin: 0; } |
| 124 |
code.full { word-break: break-all; } |
| 125 |
pre.msg { background: var(--panel); border: 1px solid var(--line); padding: 10px 12px; white-space: pre-wrap; font-family: inherit; font-size: 14px; } |
| 126 |
pre.marked { background: var(--panel); border: 1px solid var(--bad); padding: 10px 12px; overflow-x: auto; } |
| 127 |
|
| 128 |
|
| 129 |
.side-layout { display: grid; grid-template-columns: 1fr 280px; gap: 22px; } |
| 130 |
.side h3:first-child { margin-top: 0; } |
| 131 |
.clone { display: flex; gap: 6px; align-items: center; } |
| 132 |
.clone code { background: var(--bg); border: 1px solid var(--line); padding: 4px 8px; flex: 1; overflow-x: auto; white-space: nowrap; } |
| 133 |
.bar { display: flex; align-items: center; gap: 14px; flex-wrap: wrap; margin-bottom: 10px; } |
| 134 |
.ref { color: var(--acc); } |
| 135 |
.crumbs a { color: var(--ink); } |
| 136 |
table.tree td { padding: 6px 10px; } |
| 137 |
table.tree td.g { width: 1.6em; color: var(--acc); text-align: center; } |
| 138 |
table.tree td.last { color: var(--mute); max-width: 520px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } |
| 139 |
table.tree td.last a { color: var(--mute); } |
| 140 |
table.tree td.age { width: 9em; text-align: right; white-space: nowrap; } |
| 141 |
article.doc { max-width: 60rem; background: var(--panel); border: 1px solid var(--line); padding: 18px 24px; margin-top: 14px; } |
| 142 |
article.doc h1 { font-size: 26px; font-weight: 500; margin: 0 0 12px; } |
| 143 |
article.doc h2 { font-size: 20px; margin: 18px 0 8px; } |
| 144 |
article.doc h3 { text-transform: none; letter-spacing: 0; font-size: 16px; color: var(--ink); } |
| 145 |
article.doc pre { background: var(--bg); border: 1px solid var(--line); padding: 10px 12px; overflow-x: auto; } |
| 146 |
article.doc code { background: var(--soft); padding: 0 3px; } |
| 147 |
article.doc pre code { background: none; padding: 0; } |
| 148 |
article.doc table { width: auto; } |
| 149 |
article.doc img { max-width: 100%; } |
| 150 |
article.doc blockquote { border-left: 3px solid var(--band); margin: 0; padding: 2px 12px; color: var(--mute); } |
| 151 |
|
| 152 |
|
| 153 |
.filebox { background: var(--panel); border: 1px solid var(--line); } |
| 154 |
.filebox > header { display: flex; justify-content: space-between; align-items: center; gap: 12px; flex-wrap: wrap; padding: 8px 12px; border-bottom: 1px solid var(--line); background: var(--soft); } |
| 155 |
.modes a { font-size: 12px; padding: 2px 8px; border: 1px solid var(--line); margin-left: 4px; color: var(--ink); } |
| 156 |
.modes a.on { border-color: var(--acc); color: var(--acc); } |
| 157 |
table.code { width: 100%; } |
| 158 |
table.code td { padding: 0 8px; border: 0; background: transparent; line-height: 1.5; font-family: "IBM Plex Mono", ui-monospace, monospace; font-size: 13px; } |
| 159 |
table.code td.n { width: 1%; min-width: 3em; text-align: right; color: var(--dim); user-select: none; cursor: pointer; padding-right: 12px; } |
| 160 |
table.code td.n:hover { color: var(--acc); } |
| 161 |
table.code td.t pre { margin: 0; white-space: pre; } |
| 162 |
table.code tr.hl td { background: color-mix(in srgb, var(--acc) 18%, transparent); } |
| 163 |
table.code td.blame { width: 1%; white-space: nowrap; border-right: 1px solid var(--line); border-bottom: 1px solid var(--line); background: var(--soft); font-family: "Barlow", sans-serif; font-size: 12px; padding: 0 10px; vertical-align: top; line-height: 1.5; } |
| 164 |
table.code td.blame .px { font-size: 9px; } |
| 165 |
table.code td.blame .who { color: var(--ink); } |
| 166 |
table.diff td.s { width: 1%; user-select: none; color: var(--mute); } |
| 167 |
table.diff tr.add td { background: var(--add); color: var(--add-ink); } |
| 168 |
table.diff tr.del td { background: var(--del); color: var(--del-ink); } |
| 169 |
table.diff tr.gap td { background: var(--soft); color: var(--mute); font-family: "Barlow", sans-serif; font-size: 12px; padding: 2px 8px; } |
| 170 |
.file-diff { background: var(--panel); border: 1px solid var(--line); margin: 0 0 14px; } |
| 171 |
.file-diff > header { display: flex; align-items: center; gap: 10px; padding: 8px 12px; background: var(--soft); border-bottom: 1px solid var(--line); } |
| 172 |
.file-diff .counts { margin-left: auto; font-family: ui-monospace, monospace; font-size: 12px; } |
| 173 |
.counts .add { color: var(--add-ink); } |
| 174 |
.counts .del { color: var(--del-ink); } |
| 175 |
.kind { font-size: 11px; text-transform: uppercase; letter-spacing: .06em; padding: 1px 6px; border: 1px solid var(--line); color: var(--mute); } |
| 176 |
.kind-added { color: var(--ok); border-color: var(--ok); } |
| 177 |
.kind-removed { color: var(--bad); border-color: var(--bad); } |
| 178 |
.kind-renamed, .kind-modified { color: var(--acc); border-color: var(--acc); } |
| 179 |
nav.files { display: flex; flex-wrap: wrap; gap: 4px 14px; margin: 0 0 12px; } |
| 180 |
|
| 181 |
|
| 182 |
.hist { background: var(--panel); border: 1px solid var(--line); } |
| 183 |
.hrow { display: flex; align-items: stretch; border-bottom: 1px solid var(--line); } |
| 184 |
.hrow:last-child { border-bottom: 0; } |
| 185 |
.hrow svg.lanes { flex: 0 0 auto; display: block; } |
| 186 |
.lane { stroke: var(--band); stroke-width: 2; fill: none; } |
| 187 |
.lane.none { stroke: none; } |
| 188 |
.lane.dashed { stroke-dasharray: 3 3; stroke: var(--dim); } |
| 189 |
.node { fill: var(--acc); } |
| 190 |
.node.head { fill: var(--now); stroke: var(--ink); stroke-width: 1.5; } |
| 191 |
.node.res { fill: var(--ok); } |
| 192 |
.chg { display: flex; justify-content: space-between; align-items: center; gap: 14px; padding: 8px 12px; flex: 1; min-width: 0; } |
| 193 |
.chg + .chg, .chg:only-child { border-bottom: 1px solid var(--line); } |
| 194 |
.hrow .chg { border-bottom: 0; } |
| 195 |
.chg .title { color: var(--ink); font-weight: 500; } |
| 196 |
.chg .meta { color: var(--mute); font-size: 12px; margin-top: 2px; } |
| 197 |
.chg-side { display: flex; align-items: center; gap: 10px; white-space: nowrap; } |
| 198 |
.chg .hash { font-size: 9px; } |
| 199 |
.pager { display: flex; gap: 8px; justify-content: center; margin-top: 12px; } |
| 200 |
|
| 201 |
@media (max-width: 760px) { |
| 202 |
header { flex-wrap: wrap; } |
| 203 |
.side-layout { grid-template-columns: 1fr; } |
| 204 |
.foot { grid-template-columns: 1fr; } |
| 205 |
main { padding: 10px 14px 20px; } |
| 206 |
.band { padding: 0 8px; overflow-x: auto; } |
| 207 |
.tabs-in { padding: 0 8px; } |
| 208 |
} |
| 209 |
|
| 210 |
|
| 211 |
.source .keyword, .source .storage { color: var(--sy-kw); } |
| 212 |
.source .string { color: var(--sy-str); } |
| 213 |
.source .constant.numeric, .source .constant.language { color: var(--sy-num); } |
| 214 |
.source .constant { color: var(--sy-const); } |
| 215 |
.source .comment { color: var(--sy-cmt); font-style: italic; } |
| 216 |
.source .entity.name.function, .source .support.function, .source .meta.function-call .variable.function { color: var(--sy-fn); } |
| 217 |
.source .entity.name.type, .source .storage.type, .source .support.type, .source .entity.name.struct, .source .entity.name.enum, .source .entity.name.class { color: var(--sy-ty); } |
| 218 |
.source .variable { color: var(--sy-var); } |
| 219 |
.source .entity.name.tag { color: var(--sy-kw); } |
| 220 |
.source .entity.other.attribute-name { color: var(--sy-const); } |
| 221 |
.source .markup.heading { color: var(--sy-ty); font-weight: 600; } |
| 222 |
.source .markup.bold { font-weight: 600; } |
| 223 |
.source .markup.italic { font-style: italic; } |
| 224 |
.source .markup.raw { color: var(--sy-str); } |
| 225 |
.source .markup.underline.link { color: var(--sy-fn); } |