/* gitbay stylesheet. One file, light and dark via prefers-color-scheme. Tokens first; components use tokens only. No external requests. */ :root { /* declare native light+dark support: correct form controls and scrollbars per scheme, and opt out of browser auto-darkening */ color-scheme: light dark; /* palette */ --bg: #ffffff; --fg: #1f2328; --muted: #667079; --faint: #eceff1; /* hairlines, row separators */ --line: #d7dde2; /* control borders, card edges */ --surface: #f6f8fa; /* cards, code, table hover */ --accent: #0b6c80; /* sea blue: links, active tab, primary */ --accent-fg: #ffffff; /* text on accent */ --ok: #1a7f37; --warn: #9a6700; --bad: #cf222e; --done: #8250df; /* merged */ --neutral: #667079; --code-bg: #f6f8fa; /* type */ --sans: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif; --mono: ui-monospace, "SF Mono", SFMono-Regular, Menlo, Consolas, "Liberation Mono", monospace; --fs-0: 0.8rem; /* 12.8px: chips, fine print */ --fs-1: 0.866rem; /* ~13px: metadata, mono in tables */ --fs-2: 0.933rem; /* 14px: dense table text */ --fs-3: 1rem; /* 15px: body */ --fs-4: 1.135rem; /* ~17px: h2 */ --fs-5: 1.335rem; /* ~20px: h1 */ /* spacing */ --sp-1: 0.25rem; --sp-2: 0.5rem; --sp-3: 0.75rem; --sp-4: 1rem; --sp-5: 1.5rem; --sp-6: 2.5rem; /* radii */ --r-sm: 4px; --r-md: 6px; --r-lg: 8px; --r-pill: 999px; } @media (prefers-color-scheme: dark) { :root { --bg: #0d1117; --fg: #e6edf3; --muted: #8d96a0; --faint: #1d242c; --line: #30363d; --surface: #161b22; --accent: #58b7c9; --accent-fg: #06272e; --ok: #3fb950; --warn: #d29922; --bad: #f85149; --done: #a371f7; --neutral: #8d96a0; --code-bg: #161b22; } } * { box-sizing: border-box; } html { font-size: 15px; } body { margin: 0; background: var(--bg); color: var(--fg); font: var(--fs-3)/1.6 var(--sans); min-height: 100vh; display: flex; flex-direction: column; } main { flex: 1; } a { color: var(--accent); text-decoration: none; } a:hover { text-decoration: underline; } h1 { font-size: var(--fs-5); font-weight: 600; line-height: 1.3; margin: var(--sp-5) 0 var(--sp-3); letter-spacing: -0.01em; } h2 { font-size: var(--fs-4); font-weight: 600; line-height: 1.35; margin: var(--sp-5) 0 var(--sp-3); } h3 { font-size: var(--fs-3); font-weight: 600; margin: var(--sp-5) 0 var(--sp-2); } code, pre, .code, td.mode, td.size { font-family: var(--mono); font-size: var(--fs-1); } /* layout: one shared container aligns header, content, and footer */ .container { max-width: 64rem; margin: 0 auto; padding: 0 var(--sp-5); } header { border-bottom: 1px solid var(--faint); padding: var(--sp-3) 0; } a.site { font-weight: 650; color: var(--fg); letter-spacing: -0.01em; display: inline-flex; align-items: center; gap: var(--sp-2); } a.site:hover { text-decoration: none; color: var(--accent); } a.site svg.mark { display: block; } main.container { width: 100%; padding-top: var(--sp-3); padding-bottom: var(--sp-6); } /* tables */ table { border-collapse: collapse; width: 100%; } td { padding: var(--sp-2) var(--sp-4) var(--sp-2) 0; border-bottom: 1px solid var(--faint); vertical-align: top; font-size: var(--fs-2); } td:last-child { padding-right: 0; } td.size, td.mode { color: var(--muted); white-space: nowrap; } /* repo header */ .repohead { margin-bottom: var(--sp-4); } h1.repotitle { margin: var(--sp-4) 0 var(--sp-1); font-weight: 400; } h1.repotitle a { color: var(--fg); } h1.repotitle a:last-of-type { font-weight: 650; } h1.repotitle a:hover { color: var(--accent); text-decoration: none; } h1.repotitle .sep { color: var(--muted); margin: 0 0.15em; } .repohead .desc { margin: 0 0 var(--sp-2); } /* repo tabs */ nav.tabs { display: flex; flex-wrap: wrap; gap: var(--sp-1); border-bottom: 1px solid var(--faint); margin-top: var(--sp-3); } nav.tabs a { color: var(--muted); padding: var(--sp-1) var(--sp-2); border-radius: var(--r-md) var(--r-md) 0 0; border-bottom: 2px solid transparent; margin-bottom: -1px; font-size: var(--fs-2); } nav.tabs a:hover { color: var(--fg); background: var(--surface); text-decoration: none; } nav.tabs a.active { color: var(--fg); border-bottom-color: var(--accent); font-weight: 550; } .clone { color: var(--muted); font-size: var(--fs-2); } .clone code { background: var(--surface); border: 1px solid var(--faint); padding: 0.15rem 0.5rem; border-radius: var(--r-sm); } /* path bar on tree and blob pages */ .pathbar { display: flex; flex-wrap: wrap; align-items: center; gap: var(--sp-2) var(--sp-3); margin: var(--sp-3) 0; font-size: var(--fs-2); } .pathbar .spacer { flex: 1; } .refchip { display: inline-flex; align-items: center; gap: 0.3rem; background: var(--surface); border: 1px solid var(--faint); border-radius: var(--r-md); padding: 0.1rem 0.55rem; font-family: var(--mono); font-size: var(--fs-1); color: var(--fg); } .pathbar .crumbs strong { color: var(--fg); } /* file and refs tables: bordered cards, rows inside */ table.tree, table.refs { border: 1px solid var(--line); border-radius: var(--r-lg); border-collapse: separate; border-spacing: 0; overflow: hidden; margin-bottom: var(--sp-4); } table.tree td, table.refs td { padding: var(--sp-2) var(--sp-4); border-bottom: 1px solid var(--faint); } table.tree tr:last-child td, table.refs tr:last-child td { border-bottom: none; } table.tree tr:hover td, table.refs tr:hover td { background: var(--surface); } table.tree td.name { width: 100%; } table.tree td.name a { color: var(--fg); } table.tree td.name a:hover { color: var(--accent); } table.tree td.size { text-align: right; } table.tree td.empty, table.refs td.empty, li.empty, ul.loglist li.empty { color: var(--muted); } /* refs page */ table.refs td.name { width: 100%; } table.refs td.sha { color: var(--muted); } /* card header (README) */ .cardhead { font-family: var(--mono); font-size: var(--fs-1); color: var(--muted); border-bottom: 1px solid var(--faint); margin: calc(-1 * var(--sp-4)) calc(-1 * var(--sp-5)) var(--sp-4); padding: var(--sp-2) var(--sp-5); background: var(--surface); border-radius: var(--r-lg) var(--r-lg) 0 0; } /* log */ ul.loglist { list-style: none; margin: var(--sp-3) 0; padding: 0; border: 1px solid var(--line); border-radius: var(--r-lg); overflow: hidden; } ul.loglist li { display: flex; align-items: baseline; gap: var(--sp-3); padding: var(--sp-2) var(--sp-4); border-bottom: 1px solid var(--faint); } ul.loglist li:last-child { border-bottom: none; } ul.loglist li:hover { background: var(--surface); } ul.loglist .commitmain { flex: 1; min-width: 0; } ul.loglist p { margin: 0; } ul.loglist .subject a { color: var(--fg); font-weight: 550; } ul.loglist .subject a:hover { color: var(--accent); } ul.loglist .commitside { display: flex; align-items: baseline; gap: var(--sp-2); white-space: nowrap; } p.pager { margin-top: var(--sp-4); } /* commit page */ .commithead p { margin: var(--sp-1) 0; } .commithead h2 { margin-bottom: var(--sp-1); } code.fullsha { color: var(--muted); overflow-wrap: anywhere; } .empty-note { color: var(--muted); } .crumbs { color: var(--muted); font-size: var(--fs-2); } .desc, td.desc { color: var(--muted); } .error { color: var(--bad); } .meta { color: var(--muted); font-size: var(--fs-1); } svg.icon { vertical-align: -0.125em; } .lede { font-size: var(--fs-3); margin: var(--sp-2) 0; } /* repo listings (index, owner pages): responsive card grid */ .repogrid { display: grid; grid-template-columns: repeat(auto-fill, minmax(19rem, 1fr)); gap: var(--sp-3); margin: var(--sp-3) 0 var(--sp-5); } .repogrid .empty { color: var(--muted); grid-column: 1 / -1; } .repocard { display: flex; flex-direction: column; gap: var(--sp-1); border: 1px solid var(--line); border-radius: var(--r-lg); padding: var(--sp-3) var(--sp-4); min-width: 0; } .repocard p { margin: 0; } .repocard .reponame { font-weight: 550; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } .repocard .desc { font-size: var(--fs-2); display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden; } .repocard .meta { margin-top: auto; padding-top: var(--sp-1); } .repocard .reponame .sep { color: var(--muted); margin: 0 0.1em; } /* owner profile header */ .profilehead { border-bottom: 1px solid var(--faint); padding-bottom: var(--sp-4); margin-bottom: var(--sp-4); } .profilehead h1 { margin: var(--sp-4) 0 var(--sp-1); } .profilehead .lede { margin: 0 0 var(--sp-1); } .profilehead .meta { margin: var(--sp-1) 0 0; } h2 .count { color: var(--muted); font-weight: 400; font-size: var(--fs-2); } /* heading row with actions on the right */ .headrow { display: flex; align-items: baseline; gap: var(--sp-4); flex-wrap: wrap; } .headrow .spacer { flex: 1; } /* member and org chips on owner pages */ a.memberchip { display: inline-block; border: 1px solid var(--line); border-radius: var(--r-pill); padding: 0.05rem 0.6rem; color: var(--fg); font-size: var(--fs-1); margin: 0 0.15rem 0.15rem 0; } a.memberchip:hover { text-decoration: none; border-color: var(--accent); color: var(--accent); } a.memberchip .role { color: var(--muted); } /* index toolbar */ p.toolbar { color: var(--muted); font-size: var(--fs-2); margin-top: var(--sp-4); } form.inline { display: inline; } button.linklike { background: none; border: none; color: var(--accent); padding: 0; font: inherit; font-size: var(--fs-2); cursor: pointer; } button.linklike:hover { text-decoration: underline; filter: none; } /* cards: README, comments */ .readme, .code { border: 1px solid var(--faint); border-radius: var(--r-lg); padding: var(--sp-4) var(--sp-5); margin-top: var(--sp-4); overflow-x: auto; } /* chroma emits inline styles for a light background; pin code blocks to light colors in both schemes so unstyled tokens stay legible. */ .code { background: #f8f8f8; color: #1a1a1a; padding: var(--sp-3) var(--sp-4); color-scheme: light; } .code pre { margin: 0; background: transparent !important; } @media (prefers-color-scheme: dark) { .code { border-color: var(--line); } } /* rendered markdown / org / html */ .rendered { max-width: 100%; overflow-wrap: anywhere; } .rendered pre { background: var(--code-bg); border: 1px solid var(--faint); padding: var(--sp-3) var(--sp-4); border-radius: var(--r-md); overflow-x: auto; } .rendered code { background: var(--code-bg); padding: 0.1rem 0.35rem; border-radius: var(--r-sm); } .rendered pre code { background: transparent; padding: 0; } .rendered blockquote { border-left: 3px solid var(--line); margin-left: 0; padding-left: var(--sp-4); color: var(--muted); } .rendered img { max-width: 100%; } .rendered h1, .rendered h2 { border-bottom: 1px solid var(--faint); padding-bottom: var(--sp-1); } pre.message { background: var(--code-bg); border: 1px solid var(--faint); padding: var(--sp-3) var(--sp-4); border-radius: var(--r-md); white-space: pre-wrap; overflow-wrap: anywhere; } /* diffs */ pre.diff { background: var(--code-bg); border: 1px solid var(--faint); padding: var(--sp-3) var(--sp-4); border-radius: var(--r-md); overflow-x: auto; line-height: 1.5; } pre.diff .add { color: var(--ok); } pre.diff .del { color: var(--bad); } pre.diff .hunk { color: var(--accent); } pre.diff .meta { color: var(--muted); } /* badges: signature and check states. Semantic colors stay distinct: green verified/success, amber pending/stale, red bad/failure, muted unsigned. */ .badge, .chip { --chip: var(--neutral); display: inline-block; padding: 0.05rem 0.55rem; border-radius: var(--r-pill); font-size: var(--fs-0); font-weight: 500; line-height: 1.5; color: var(--chip); border: 1px solid color-mix(in srgb, var(--chip) 35%, transparent); background: color-mix(in srgb, var(--chip) 7%, transparent); white-space: nowrap; vertical-align: middle; } .chip-open { --chip: var(--ok); } .chip-closed { --chip: var(--bad); } .chip-merged, .chip-done { --chip: var(--done); } .chip-neutral, .chip-source_gone { --chip: var(--neutral); } .chip-stale { --chip: var(--warn); } .chip.label { font-weight: 500; } .chip.topic { --chip: var(--accent); } .repohead .topics { margin: 0 0 var(--sp-2); } .badge-verified { --chip: var(--ok); } .badge-unsigned { --chip: var(--neutral); } .badge-signed_unknown_key { --chip: var(--warn); } .badge-signed_email_mismatch { --chip: var(--bad); } .badge-signed_key_expired { --chip: var(--warn); } .badge-signed_key_revoked { --chip: var(--bad); } .badge-bad_signature { --chip: var(--bad); } .badge.check-success { --chip: var(--ok); } .badge.check-pending { --chip: var(--warn); } .badge.check-failure, .badge.check-error { --chip: var(--bad); } span.check-success { color: var(--ok); } span.check-pending { color: var(--warn); } span.check-failure, span.check-error { color: var(--bad); } /* issue and MR listings */ .listhead { display: flex; align-items: baseline; gap: var(--sp-4); flex-wrap: wrap; } .listhead h2 { margin-bottom: var(--sp-2); } nav.filters { display: flex; gap: var(--sp-1); } nav.filters a { color: var(--muted); font-size: var(--fs-2); padding: 0.05rem var(--sp-2); border-radius: var(--r-pill); } nav.filters a:hover { color: var(--fg); background: var(--surface); text-decoration: none; } nav.filters a.active { color: var(--accent); background: color-mix(in srgb, var(--accent) 10%, transparent); } ul.issuelist { list-style: none; margin: var(--sp-2) 0; padding: 0; border: 1px solid var(--line); border-radius: var(--r-lg); overflow: hidden; } ul.issuelist li { display: flex; align-items: baseline; gap: var(--sp-3); padding: var(--sp-3) var(--sp-4); border-bottom: 1px solid var(--faint); } ul.issuelist li:last-child { border-bottom: none; } ul.issuelist li:hover { background: var(--surface); } ul.issuelist li.empty { display: block; color: var(--muted); } ul.issuelist .issuemain { flex: 1; min-width: 0; } ul.issuelist p { margin: 0; } ul.issuelist .title a { color: var(--fg); font-weight: 550; } ul.issuelist .title a:hover { color: var(--accent); } /* issue / MR detail */ h2.issuetitle { margin-bottom: var(--sp-1); font-size: var(--fs-5); } .issuenumber { color: var(--muted); font-weight: 400; } .issuemeta { color: var(--muted); font-size: var(--fs-2); margin-top: 0; } .review { font-size: var(--fs-2); } /* comment cards; discussion stays at a readable measure */ article.comment, form.commentform { max-width: 48rem; } article.comment { border: 1px solid var(--faint); border-radius: var(--r-lg); margin: var(--sp-4) 0; } article.comment .commenthead { background: var(--surface); border-bottom: 1px solid var(--faint); border-radius: var(--r-lg) var(--r-lg) 0 0; padding: var(--sp-2) var(--sp-4); font-size: var(--fs-2); } article.comment .commenthead .when { color: var(--muted); } article.comment .rendered { padding: 0 var(--sp-4); } article.comment .rendered > :first-child { margin-top: var(--sp-3); } article.comment .rendered > :last-child { margin-bottom: var(--sp-3); } form.commentform { margin: var(--sp-4) 0; } /* review threads under diff lines */ .thread { border: 1px solid var(--faint); border-left: 3px solid var(--accent); border-radius: var(--r-md); padding: var(--sp-2) var(--sp-4); margin: var(--sp-2) 0 var(--sp-2) var(--sp-6); } .thread.resolved { border-left-color: var(--ok); opacity: 0.75; } .thread.stale { border-left-color: var(--warn); } .thread p.commenthead { font-size: var(--fs-2); margin: var(--sp-2) 0 0; } .thread .when { color: var(--muted); } .thread .rendered p { margin: var(--sp-1) 0; } .thread .threadstate { color: var(--muted); font-size: var(--fs-1); margin: var(--sp-1) 0 0; } /* forms */ input, textarea, button, select { font: inherit; color: inherit; } input[type="text"], input:not([type]), textarea { background: var(--bg); border: 1px solid var(--line); border-radius: var(--r-md); padding: var(--sp-2) var(--sp-3); } textarea { width: 100%; resize: vertical; } textarea[name="content"] { font-family: var(--mono); font-size: var(--fs-1); } input:focus, textarea:focus { outline: 2px solid color-mix(in srgb, var(--accent) 45%, transparent); border-color: var(--accent); } button { background: var(--accent); color: var(--accent-fg); border: none; border-radius: var(--r-md); padding: var(--sp-1) var(--sp-3); font-weight: 500; cursor: pointer; } button:hover { filter: brightness(1.08); } /* 404 */ .notfound { text-align: center; padding: var(--sp-6) 0; } .notfound .bigcode { font-family: var(--mono); font-size: 4rem; color: var(--faint); -webkit-text-stroke: 1px var(--line); margin: 0; line-height: 1; } .notfound h1 { margin-top: var(--sp-3); } /* footer */ footer { border-top: 1px solid var(--faint); padding: var(--sp-4) 0; color: var(--muted); font-size: var(--fs-1); } footer p { margin: 0; } footer a { color: var(--muted); text-decoration: underline; } footer a:hover { color: var(--accent); } /* search */ form.searchform { display: flex; gap: var(--sp-2); margin: var(--sp-3) 0 var(--sp-4); } form.searchform input[type="search"] { flex: 1; max-width: 32rem; } form.searchform.compact { margin: 0; } form.searchform.compact input[type="search"] { padding: var(--sp-1) var(--sp-3); font-size: var(--fs-2); min-width: 18rem; } ul.matchlist { list-style: none; margin: var(--sp-3) 0; padding: 0; } ul.matchlist li { margin-bottom: var(--sp-3); } ul.matchlist .matchpath { font-family: var(--mono); font-size: var(--fs-1); } pre.matchline { background: var(--code-bg); border: 1px solid var(--faint); border-radius: var(--r-md); padding: var(--sp-1) var(--sp-3); margin: var(--sp-1) 0 0; overflow-x: auto; } pre.matchline mark { background: color-mix(in srgb, var(--warn) 25%, transparent); color: inherit; border-radius: 2px; } /* blame */ .blame { border: 1px solid var(--line); border-radius: var(--rad-2, 6px); overflow: hidden; } .blamehunk { display: flex; gap: var(--sp-3); border-top: 1px solid var(--line); align-items: flex-start; } .blamehunk:first-child { border-top: none; } .blameinfo { flex: none; width: 17rem; padding: var(--sp-2) var(--sp-3); min-width: 0; } .blameinfo .subject { margin: 0; font-size: var(--fs-1); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; } .blameinfo .meta { margin: 0; font-size: var(--fs-1); color: var(--muted); } .blamecode { flex: 1; margin: 0; padding: var(--sp-2) var(--sp-3) var(--sp-2) 0; overflow-x: auto; border-left: 1px solid var(--line); align-self: stretch; } .lineno { display: inline-block; min-width: 3.5em; padding-right: 1em; text-align: right; color: var(--muted); user-select: none; } /* mobile */ @media (max-width: 40rem) { .container { padding-left: var(--sp-4); padding-right: var(--sp-4); } main.container { padding-top: var(--sp-2); } .repogrid { grid-template-columns: 1fr; } .thread { margin-left: var(--sp-3); } table.tree td.mode { display: none; } .readme, .code { padding: var(--sp-3); } .blamehunk { flex-direction: column; gap: 0; } .blameinfo { width: auto; } .blamecode { border-left: none; padding-left: var(--sp-3); width: 100%; } .cardhead { margin: calc(-1 * var(--sp-3)) calc(-1 * var(--sp-3)) var(--sp-3); padding: var(--sp-2) var(--sp-3); } }