/* Repository pages: nav, ref picker, summary, tree, blob, refs, Markdown. */ .mono { font-family: var(--font-mono); } .icon { width: 16px; height: 16px; flex: none; } /* ---- Repository bar: [ SUMMARY ] TREE REFS ยท ref picker ------------- */ .repo-bar { display: flex; flex-wrap: wrap; align-items: center; justify-content: space-between; gap: var(--space-sm) var(--space-md); padding-top: var(--space-sm); } .bracket-nav { overflow-x: auto; scrollbar-width: none; } .bracket-nav a { white-space: nowrap; } .ref-picker { position: relative; } .ref-picker summary { display: inline-flex; align-items: center; gap: var(--space-sm); min-height: 44px; padding: 0 var(--space-md); border: 1px solid var(--border-visible); border-radius: 999px; list-style: none; cursor: pointer; color: var(--text-secondary); transition: border-color var(--dur-micro) var(--ease); } .ref-picker summary::-webkit-details-marker { display: none; } .ref-picker summary:hover, .ref-picker[open] summary { border-color: var(--text-secondary); } .ref-current { max-width: 24ch; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; font-family: var(--font-mono); font-size: var(--caption); color: var(--text-primary); } .ref-picker[open] .chevron { transform: rotate(180deg); } .ref-menu { position: absolute; z-index: 10; right: 0; top: calc(100% + var(--space-xs)); width: max-content; min-width: 240px; max-width: min(360px, calc(100vw - 2 * var(--gutter))); max-height: 60vh; overflow-y: auto; padding: var(--space-sm) 0; border: 1px solid var(--border-visible); border-radius: 8px; background: var(--surface-raised); } .ref-group { padding: var(--space-sm) var(--space-md) var(--space-xs); color: var(--text-disabled); } .ref-menu ul { list-style: none; } .ref-menu li a { display: flex; align-items: center; min-height: 44px; padding: 0 var(--space-md); border-left: 2px solid transparent; font-family: var(--font-mono); font-size: var(--caption); color: var(--text-primary); overflow-wrap: anywhere; } .ref-menu li a:hover { color: var(--text-display); text-decoration: none; } .ref-menu li a.active { border-left-color: var(--accent); color: var(--text-display); } .ref-all { display: flex; align-items: center; min-height: 44px; padding: 0 var(--space-md); margin-top: var(--space-xs); border-top: 1px solid var(--border); } /* ---- Breadcrumb: secondary path, current segment in display ------------ */ .crumbs { padding-top: var(--space-2xl); font-size: var(--heading); font-weight: 400; line-height: 1.25; color: var(--text-secondary); overflow-wrap: anywhere; } .crumbs a { color: var(--text-secondary); } .crumbs a:hover { color: var(--text-display); } .crumb-sep { padding: 0 var(--space-sm); color: var(--text-disabled); } .crumb-here { color: var(--text-display); } /* ---- Summary ------------------------------------------------------------ */ .repo-hero { padding-top: var(--space-2xl); } .repo-title { font-weight: 500; overflow-wrap: anywhere; } .repo-about { margin-top: var(--space-sm); max-width: 60ch; color: var(--text-secondary); } .repo-grid { display: grid; grid-template-columns: minmax(0, 1fr); gap: var(--space-2xl); margin-top: var(--space-xl); } @media (min-width: 768px) { .repo-grid { grid-template-columns: minmax(0, 1fr) var(--rail); gap: var(--space-xl); } } @media (min-width: 1200px) { .repo-grid { gap: var(--space-2xl); } } .rail { display: flex; flex-direction: column; gap: var(--space-xl); min-width: 0; } .stats { border-top: 1px solid var(--border); } .stat { display: flex; align-items: baseline; justify-content: space-between; gap: var(--space-md); padding-block: 12px; border-bottom: 1px solid var(--border); } .stat dd { margin: 0; font-family: var(--font-mono); font-size: var(--body-sm); color: var(--text-primary); text-align: right; overflow-wrap: anywhere; } .rail-head { display: flex; align-items: center; justify-content: space-between; gap: var(--space-sm); min-height: 30px; } .rail-block > .label { display: block; } .clone-row { display: flex; align-items: center; gap: var(--space-xs); margin-top: var(--space-sm); } .clone-input { flex: 1; min-width: 0; min-height: 44px; padding: 0; border: 0; border-bottom: 1px solid var(--border-visible); border-radius: 0; background: transparent; font-family: var(--font-mono); font-size: var(--caption); color: var(--text-primary); outline: none; text-overflow: ellipsis; } .clone-input:focus { border-bottom-color: var(--text-primary); } .icon-btn { display: inline-flex; align-items: center; justify-content: center; width: 44px; height: 44px; flex: none; padding: 0; border: 0; background: none; color: var(--text-secondary); transition: color var(--dur-micro) var(--ease); } .icon-btn:hover { color: var(--text-display); } /* Copying and switching protocols need JS; without it every URL shows. */ html:not(.js) .clone-switch, html:not(.js) [data-copy], html:not(.js) .copy-status { display: none; } .copy-status { min-height: 1.4em; margin-top: var(--space-xs); } /* The one break on the summary: a segmented language bar. */ .lang-bar { display: grid; grid-template-columns: repeat(40, 1fr); gap: 2px; margin-top: var(--space-sm); } .lang-bar i { aspect-ratio: 1; } .lang-bar i, .lang-legend i { background: var(--text-display); } .lang-bar .o1, .lang-legend .o1 { opacity: 0.7; } .lang-bar .o2, .lang-legend .o2 { opacity: 0.45; } .lang-bar .o3, .lang-legend .o3 { opacity: 0.25; } .lang-legend { list-style: none; margin-top: var(--space-sm); } .lang-legend li { display: flex; align-items: center; gap: var(--space-sm); padding-block: 2px; } .lang-legend i { width: 8px; height: 8px; flex: none; } .lang-legend .label { flex: 1; } .lang-pct { font-family: var(--font-mono); font-size: var(--caption); color: var(--text-secondary); } .latest-subject { margin-top: var(--space-sm); color: var(--text-primary); overflow-wrap: anywhere; } .latest-meta { margin-top: var(--space-xs); font-family: var(--font-mono); font-size: var(--caption); color: var(--text-secondary); } .sha { font-family: var(--font-mono); } /* ---- Tree listing --------------------------------------------------------- */ .tree { list-style: none; margin-top: var(--space-lg); border-top: 1px solid var(--border); } .repo-main > .tree:first-child { margin-top: 0; } .tree-row { display: flex; align-items: center; justify-content: space-between; gap: var(--space-md); min-height: 44px; border-bottom: 1px solid var(--border); } .tree-name { display: flex; align-items: center; gap: var(--space-sm); flex: 1; min-width: 0; min-height: 44px; color: var(--text-primary); overflow-wrap: anywhere; } .tree-name .icon { color: var(--text-disabled); } .tree-name .icon-folder { color: var(--text-secondary); } .tree-meta { flex: none; font-family: var(--font-mono); font-size: var(--caption); color: var(--text-disabled); white-space: nowrap; } .tree-foot { margin-top: var(--space-md); } /* ---- README ------------------------------------------------------------- */ .readme { margin-top: var(--space-2xl); } .readme-name { display: inline-block; margin-bottom: var(--space-md); color: var(--text-secondary); } /* ---- Blob --------------------------------------------------------------- */ .blob-bar { display: flex; flex-wrap: wrap; align-items: center; justify-content: space-between; gap: var(--space-sm) var(--space-md); margin-top: var(--space-md); } .blob-actions { display: flex; flex-wrap: wrap; align-items: center; gap: var(--space-md); } .blob-note { padding-block: var(--space-2xl); border-top: 1px solid var(--border); overflow-wrap: anywhere; } .code-wrap { margin-top: var(--space-sm); border-top: 1px solid var(--border); border-bottom: 1px solid var(--border); overflow-x: auto; } .code { width: 100%; border-collapse: collapse; font-family: var(--font-code); font-size: 13px; line-height: 20px; tab-size: 4; } .code td { padding: 0; vertical-align: top; } .code .ln { width: 1%; border-left: 2px solid transparent; text-align: right; user-select: none; -webkit-user-select: none; } .code .ln a { display: block; padding: 0 var(--space-md) 0 var(--space-sm); color: var(--text-disabled); } .code .ln a:hover { color: var(--text-secondary); text-decoration: none; } .code .lc { padding: 0 var(--space-md); white-space: pre; color: var(--text-primary); } .code tr:first-child td { padding-top: var(--space-sm); } .code tr:last-child td { padding-bottom: var(--space-sm); } /* Selected lines: #L12 (CSS) or #L12-L20 (JS). */ .code tr:target, .code tr.selected { background: var(--surface-raised); } .code tr:target .ln, .code tr.selected .ln { border-left-color: var(--accent); } .code tr:target .ln a, .code tr.selected .ln a { color: var(--text-display); } /* The one break on the blob page: images float on a dot grid. */ .image-view { display: flex; justify-content: center; margin-top: var(--space-sm); padding: var(--space-xl) var(--space-md); border: 1px solid var(--border); border-radius: 4px; background-image: radial-gradient(circle, var(--border-visible) 1px, transparent 1px); background-size: 16px 16px; } .image-view img { max-height: 70vh; object-fit: contain; } .blob-markdown { margin-top: var(--space-xl); } /* ---- Refs --------------------------------------------------------------- */ .refs-section { margin-top: var(--space-2xl); } .table-wrap { overflow-x: auto; } .data-table { width: 100%; border-collapse: collapse; } .data-table th { padding: 12px 16px 12px 0; border-bottom: 1px solid var(--border-visible); text-align: left; font-weight: 400; white-space: nowrap; } .data-table td { padding: 12px 16px 12px 0; border-bottom: 1px solid var(--border); vertical-align: baseline; } .data-table .num { padding-right: 0; text-align: right; white-space: nowrap; font-family: var(--font-mono); font-size: var(--caption); color: var(--text-disabled); } .data-table th.num { font-size: var(--label); color: var(--text-secondary); } .ref-name { font-family: var(--font-mono); font-size: var(--body-sm); overflow-wrap: anywhere; } .ref-subject { color: var(--text-secondary); overflow-wrap: anywhere; } .ref-archives { display: flex; gap: var(--space-md); margin-top: var(--space-xs); } .ref-archives a { color: var(--text-secondary); } .ref-archives a:hover { color: var(--text-display); } .chip { display: inline-block; margin-left: var(--space-sm); padding: 2px var(--space-sm); border: 1px solid var(--border-visible); border-radius: 999px; font-family: var(--font-mono); font-size: var(--label); letter-spacing: 0.08em; text-transform: uppercase; color: var(--text-secondary); white-space: nowrap; } /* ---- Log ------------------------------------------------------------------ */ .log-tools { margin-top: var(--space-lg); max-width: 420px; } .log-day { margin-top: var(--space-xl); } .log { list-style: none; border-top: 1px solid var(--border); } .log-row { display: flex; align-items: baseline; justify-content: space-between; gap: var(--space-md); padding-block: 12px; border-bottom: 1px solid var(--border); } .log-main { min-width: 0; } .log-subject { color: var(--text-primary); overflow-wrap: anywhere; } .log-meta { margin-top: var(--space-2xs); font-family: var(--font-mono); font-size: var(--caption); color: var(--text-secondary); } .log-sha { flex: none; font-size: var(--caption); color: var(--interactive); } .log-note { margin-top: var(--space-lg); } .pager { display: flex; justify-content: space-between; gap: var(--space-md); margin-top: var(--space-xl); } .pager a, .pager span { display: inline-flex; align-items: center; min-height: 44px; } /* ---- Commit --------------------------------------------------------------- */ .commit-head { margin-top: var(--space-lg); } .commit-subject { font-size: var(--heading); font-weight: 400; line-height: 1.25; color: var(--text-display); overflow-wrap: anywhere; } .commit-body { max-width: 72ch; margin-top: var(--space-md); font-family: var(--font-body); font-size: var(--body); white-space: pre-wrap; overflow-wrap: anywhere; color: var(--text-secondary); } .commit-grid { display: grid; gap: var(--space-xl); margin-top: var(--space-xl); } @media (min-width: 768px) { .commit-grid { grid-template-columns: minmax(0, 1fr) auto; align-items: end; } } /* The one break on the commit page: a hero diffstat. */ .diffstat-hero { text-align: right; } .diffstat-num { font-family: var(--font-mono); font-size: 48px; line-height: 1; letter-spacing: -0.02em; color: var(--text-display); white-space: nowrap; } .diffstat-hero .label { margin-top: var(--space-sm); } .add { color: var(--success); } .del { color: var(--accent); } .commit-actions { display: flex; flex-wrap: wrap; align-items: center; justify-content: space-between; gap: var(--space-md); margin-top: var(--space-xl); } .context-ctl { display: inline-flex; align-items: center; gap: var(--space-sm); } .context-ctl a, .context-ctl > span:first-child, .context-ctl > span:last-child { display: inline-flex; align-items: center; justify-content: center; min-width: 28px; min-height: 28px; } .file-list { list-style: none; margin-top: var(--space-lg); border-top: 1px solid var(--border); } .file-row { display: flex; align-items: center; gap: var(--space-md); min-height: 40px; padding-block: var(--space-xs); border-bottom: 1px solid var(--border); } .file-status { flex: none; width: 1.5em; font-family: var(--font-mono); font-size: var(--caption); color: var(--text-secondary); } .file-path { flex: 1; min-width: 0; font-family: var(--font-mono); font-size: var(--body-sm); color: var(--text-primary); overflow-wrap: anywhere; } .file-path .dim, .diff-path .dim { color: var(--text-disabled); } .file-counts { flex: none; font-family: var(--font-mono); font-size: var(--caption); white-space: nowrap; } .blocks { display: inline-flex; flex: none; gap: 2px; } .blocks i { width: 8px; height: 8px; background: var(--segment-empty); } .blocks i.add { background: var(--success); } .blocks i.del { background: var(--accent); } .diff-file { margin-top: var(--space-2xl); } .diff-head { position: sticky; top: 0; z-index: 1; display: flex; align-items: center; gap: var(--space-md); min-height: 44px; background: var(--black); border-bottom: 1px solid var(--border-visible); } .diff-path { flex: 1; min-width: 0; font-family: var(--font-mono); font-size: var(--body-sm); color: var(--text-display); overflow-wrap: anywhere; } .diff-view { flex: none; } .diff-note { padding-block: var(--space-md); border-bottom: 1px solid var(--border); overflow-wrap: anywhere; } .diff-file .code-wrap { margin-top: 0; border-top: 0; } .code.diff .ln { padding: 0 var(--space-sm); color: var(--text-disabled); font-size: 12px; } .code.diff .ln + .ln { border-left: 0; } .code.diff .sign { width: 1%; padding: 0 var(--space-xs) 0 var(--space-sm); color: var(--text-disabled); user-select: none; -webkit-user-select: none; } .code.diff .lc { padding-left: 0; } .code.diff tr.add .ln:first-child { border-left-color: var(--success); } .code.diff tr.add .sign { color: var(--success); } .code.diff tr.del .ln:first-child { border-left-color: var(--accent); } .code.diff tr.del .sign { color: var(--accent); } .code.diff tr.del .lc { opacity: 0.55; } .code.diff tr.hunk td { padding-block: var(--space-xs); color: var(--text-disabled); } .code.diff tr.hunk .lc { font-family: var(--font-mono); font-size: 12px; } .code.diff tr.hunk:not(:first-child) td { border-top: 1px solid var(--border); } /* ---- Find ----------------------------------------------------------------- */ .find-count { margin-top: var(--space-lg); } .find-list { margin-top: var(--space-sm); } .find-dir { color: var(--text-disabled); } /* ---- Blame ---------------------------------------------------------------- */ .code.blame .blame-meta { width: 1%; max-width: 320px; padding: 0 var(--space-md) 0 var(--space-sm); border-left: 2px solid transparent; font-family: var(--font-mono); font-size: var(--caption); line-height: 20px; color: var(--text-secondary); white-space: nowrap; vertical-align: top; overflow: hidden; text-overflow: ellipsis; } .code.blame .blame-meta .sha { color: var(--interactive); } .code.blame .blame-meta time { color: var(--text-disabled); } .code.blame tr.hunk-start td { border-top: 1px solid var(--border); } .code.blame tr:first-child td { border-top: 0; } /* The one break on the blame page: heat by opacity, newest to oldest. */ .code.blame .age-8 { border-left-color: var(--text-display); } .code.blame .age-7 { border-left-color: color-mix(in srgb, var(--text-display) 90%, transparent); } .code.blame .age-6 { border-left-color: color-mix(in srgb, var(--text-display) 80%, transparent); } .code.blame .age-5 { border-left-color: color-mix(in srgb, var(--text-display) 70%, transparent); } .code.blame .age-4 { border-left-color: color-mix(in srgb, var(--text-display) 60%, transparent); } .code.blame .age-3 { border-left-color: color-mix(in srgb, var(--text-display) 50%, transparent); } .code.blame .age-2 { border-left-color: color-mix(in srgb, var(--text-display) 40%, transparent); } .code.blame .age-1 { border-left-color: color-mix(in srgb, var(--text-display) 30%, transparent); } .code.blame .age-0 { border-left-color: color-mix(in srgb, var(--text-display) 20%, transparent); } /* ---- Markdown ------------------------------------------------------------ */ .markdown { max-width: 72ch; overflow-wrap: break-word; color: var(--text-primary); } .markdown > * + * { margin-top: var(--space-md); } .markdown h1, .markdown h2, .markdown h3, .markdown h4, .markdown h5, .markdown h6 { margin-top: var(--space-xl); line-height: 1.25; } .markdown > :first-child { margin-top: 0; } .markdown h1 { font-size: var(--heading); } .markdown h2 { font-size: var(--subheading); } .markdown h3, .markdown h4, .markdown h5, .markdown h6 { font-size: var(--body); } .markdown a.anchor { display: none; } .markdown ul, .markdown ol { padding-left: var(--space-lg); } .markdown li + li, .markdown li > ul, .markdown li > ol { margin-top: var(--space-xs); } .markdown .contains-task-list { list-style: none; padding-left: var(--space-xs); } .markdown input[type="checkbox"] { margin: 0 var(--space-sm) 0 0; vertical-align: middle; accent-color: var(--text-display); } .markdown code { padding: 1px var(--space-xs); border-radius: 4px; background: var(--surface-raised); font-size: 0.875em; } .markdown pre { padding: var(--space-md); border: 1px solid var(--border); border-radius: 8px; background: var(--surface); overflow-x: auto; line-height: 20px; tab-size: 4; } .markdown pre code { padding: 0; background: none; font-size: 13px; } .markdown pre.plain { max-width: none; white-space: pre-wrap; } .markdown blockquote { padding-left: var(--space-md); border-left: 2px solid var(--border-visible); color: var(--text-secondary); } .markdown hr { border: 0; border-top: 1px solid var(--border); } .markdown img { display: inline-block; } .markdown table { display: block; max-width: 100%; overflow-x: auto; border-collapse: collapse; } .markdown th, .markdown td { padding: var(--space-sm) var(--space-md) var(--space-sm) 0; border-bottom: 1px solid var(--border); } .markdown th { border-bottom-color: var(--border-visible); font-weight: 500; text-align: left; } .markdown .markdown-alert { padding-left: var(--space-md); border-left: 2px solid var(--border-visible); } .markdown .markdown-alert-warning, .markdown .markdown-alert-caution { border-left-color: var(--accent); } .markdown .markdown-alert-title { font-family: var(--font-mono); font-size: var(--label); letter-spacing: 0.08em; text-transform: uppercase; color: var(--text-secondary); } .markdown .footnotes { font-size: var(--body-sm); color: var(--text-secondary); border-top: 1px solid var(--border); padding-top: var(--space-md); }