@import './tokens.css'; /* Every value here is a token from tokens.css; a new one goes there first. Rules come in the order the pages are built up: the document, the page's frame, the parts any page uses, then each kind of page's own. */ /* ── Document ─────────────────────────────────────────────────────── */ @view-transition { navigation: auto; } * { box-sizing: border-box; } html { -webkit-text-size-adjust: 100%; } body { margin: 0; background: var(--bg); color: var(--fg); font: var(--text-base)/var(--leading) var(--font-sans); -webkit-font-smoothing: antialiased; min-height: 100vh; display: flex; flex-direction: column; } a { color: inherit; text-decoration: none; } a:hover { color: var(--fg); } :focus-visible { outline: 2px solid var(--primary); outline-offset: 2px; } h1, h2, h3 { letter-spacing: var(--tracking-tight); margin: 0; font-weight: var(--weight-semibold); } h1 { font-size: var(--text-2xl); } h2 { font-size: var(--text-lg); } h3 { font-size: var(--text-base); } p { margin: 0; } code, pre, .mono { font-family: var(--font-mono); font-size: var(--text-sm); } input, select, textarea { font-size: var(--text-field); } /* ── Utilities ────────────────────────────────────────────────────── */ .mute { color: var(--mute); } .zoneless { visibility: hidden; } .end { margin-left: auto; } .grow { flex: 1; min-width: 0; } .clip { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } /* A line of meta cut short ends in an ellipsis, which only a block draws. */ .meta.clip { display: block; } .center { text-align: center; } .scroll { overflow-x: auto; } .title { font-weight: var(--weight-semibold); } .add { color: var(--add); } .rem { color: var(--rem); } /* ── Frame: header, footer, the column between ────────────────────── */ .wrap { width: 100%; max-width: var(--page); margin: 0 auto; padding: 0 var(--space-6); } .top { view-transition-name: top; position: relative; z-index: var(--z-menu); } .top .wrap { display: flex; align-items: center; gap: var(--space-6); height: var(--header); } .brand { display: flex; align-items: center; gap: var(--space-2); font: var(--weight-semibold) var(--text-base) var(--font-mono); } .top nav { margin-left: auto; display: flex; gap: var(--space-5); color: var(--mute); font: var(--text-sm) var(--font-mono); } .search { display: flex; align-items: center; gap: var(--space-2); flex: 0 1 20rem; min-width: 0; height: var(--control); padding: 0 var(--space-2); border: var(--border); border-radius: var(--radius-md); background: var(--panel); color: var(--faint); font: var(--text-sm) var(--font-mono); } .search:hover { color: var(--mute); } .search span { flex: 1; } kbd { font: var(--text-2xs)/1.5 var(--font-mono); color: var(--mute); border: var(--border); border-radius: var(--radius-sm); padding: 0 var(--space-1); } main.wrap { flex: 1; padding-top: var(--space-6); padding-bottom: var(--space-16); } .foot { display: flex; flex-wrap: wrap; justify-content: space-between; gap: var(--space-2) var(--space-4); color: var(--faint); font: var(--text-xs) var(--font-mono); padding-top: var(--space-5); padding-bottom: var(--space-8); border-top: 1px dashed var(--line); } .foot nav { display: flex; gap: var(--space-4); } .foot a { color: var(--faint); } .foot a:hover { color: var(--fg); } /* ── Atoms ────────────────────────────────────────────────────────── */ time { white-space: nowrap; } svg.i { width: var(--icon); height: var(--icon); flex: none; fill: currentColor; vertical-align: -3px; } .av { display: inline-grid; place-items: center; flex: none; width: var(--avatar); height: var(--avatar); border-radius: 50%; font: var(--weight-semibold) 10px var(--font-sans); color: #fff; background: hsl(var(--h) 45% 52%); text-transform: uppercase; } img.av { object-fit: cover; background: var(--soft); } .av.lg { width: var(--avatar-md); height: var(--avatar-md); font-size: 13px; } .av.xl { width: var(--avatar-lg); height: var(--avatar-lg); font-size: 34px; } .av.id { background: var(--soft); } .av.id rect { fill: hsl(var(--h) 45% 52%); } /* A bot's picture and its robot, in one round mark (Avatar). */ .av.bot { position: relative; background: var(--soft); } .av.bot > img, .av.bot > svg { width: 100%; height: 100%; border-radius: 50%; } .av.bot > img { object-fit: cover; } .av-badge { position: absolute; right: -2px; bottom: -2px; display: grid; place-items: center; width: max(10px, 36%); height: max(10px, 36%); border-radius: 50%; background: var(--bg); color: var(--mute); box-shadow: 0 0 0 1px var(--line); } .av-badge .i { width: 80%; height: 80%; vertical-align: 0; } /* The robot after a bot's name (BotMark). */ .bot-mark { display: inline-flex; margin-left: var(--space-1); color: var(--mute); vertical-align: -2px; } .bot-mark .i { vertical-align: 0; } .avs { display: inline-flex; flex-direction: row-reverse; flex: none; } .avs .av { position: relative; } .avs .av + .av { margin-right: calc(-1 * var(--space-1-5)); box-shadow: 0 0 0 2px var(--bg); } .btn { display: inline-flex; align-items: center; gap: var(--space-1-5); height: var(--control); padding: 0 var(--space-3); border: var(--border); border-radius: var(--radius-md); background: var(--bg); font: var(--weight-medium) var(--text-sm) var(--font-sans); color: var(--fg); cursor: pointer; white-space: nowrap; } .btn:hover { background: var(--hover); color: var(--fg); } .btn:disabled { opacity: 0.6; cursor: default; } .btn.primary { background: var(--primary); border-color: var(--primary); color: var(--on-primary); } .btn.primary:hover { background: var(--primary); color: var(--on-primary); opacity: 0.85; } .btn.primary:disabled { opacity: 0.5; } :is(.btn, .menu-item, .text-button, .reaction)[aria-busy='true'], :is(.btn, .menu-item, .text-button, .reaction)[aria-busy='true']:disabled { opacity: 1; cursor: progress; } :is(.btn, .menu-item, .text-button, .reaction)[aria-busy='true'] > svg.i { display: none; } :is(.btn, .menu-item, .text-button, .reaction)[aria-busy='true']::before, .spinner { content: ''; display: inline-block; flex: none; box-sizing: border-box; width: var(--icon); height: var(--icon); border: var(--spinner) solid currentColor; border-right-color: transparent; border-radius: var(--radius-full); } .text-button[aria-busy='true']::before { margin-right: var(--space-1); vertical-align: -3px; } @media (prefers-reduced-motion: no-preference) { :is(.btn, .menu-item, .text-button, .reaction)[aria-busy='true']::before, .spinner { animation: spin var(--spin) linear infinite; } } @keyframes spin { to { transform: rotate(360deg); } } .sha { font: var(--text-xs) var(--font-mono); color: var(--mute); padding: var(--space-0-5) var(--space-1-5); border: var(--border); border-radius: var(--radius-sm); } .sha:hover { color: var(--accent); } .ref { font: var(--text-xs) var(--font-mono); padding: var(--space-0-5) var(--space-1-5); border-radius: var(--radius-sm); background: var(--accent-soft); color: var(--accent); } .count { font-size: var(--text-2xs); line-height: 18px; padding: 0 var(--space-1-5); border-radius: var(--radius-full); background: var(--soft); color: var(--mute); } .tag { font: var(--weight-medium) var(--text-2xs) var(--font-sans); padding: 1px var(--space-1-5); border-radius: var(--radius-full); border: var(--border); color: var(--mute); } .tag:is(.private, .archived) { display: inline-flex; align-items: center; gap: var(--space-1); } .tag:is(.private, .archived) svg.i { width: var(--icon-sm); height: var(--icon-sm); } .label { --label: var(--faint); font-size: var(--text-xs); font-weight: var(--weight-medium); line-height: 20px; padding: 0 var(--space-2); border-radius: var(--radius-full); white-space: nowrap; color: var(--fg); background: color-mix(in srgb, var(--label) 18%, transparent); border: 1px solid color-mix(in srgb, var(--label) 55%, transparent); } a.label { text-decoration: none; } a.label:hover { border-color: var(--label); } .labels { display: inline-flex; flex-wrap: wrap; gap: var(--space-1); vertical-align: middle; max-width: 100%; } li .title:has(+ .labels) { margin-right: var(--space-2); } .bars { display: inline-flex; gap: 1px; vertical-align: -1px; } .bars i { width: 7px; height: 7px; border-radius: var(--radius-xs); background: var(--line); } .bars i.a { background: var(--add); } .bars i.d { background: var(--rem); } /* What a pull or issue is in: as text, and as a filled pill. */ .st.open { color: var(--open); } .st.merged { color: var(--merged); } .st.closed { color: var(--closed-issue); } .st.closed.pull { color: var(--closed-pull); } .st.draft { color: var(--neutral); } .pill { display: inline-flex; align-items: center; gap: var(--space-1-5); height: var(--control); padding: 0 var(--space-3); border-radius: var(--radius-full); color: var(--on-solid); font-weight: var(--weight-medium); font-size: var(--text-sm); } .pill.open { background: var(--open); } .pill.merged { background: var(--merged); } .pill.closed { background: var(--closed-issue); } .pill.closed.pull { background: var(--closed-pull); } .pill.draft { background: var(--neutral); } /* What a check or a commit's checks came to. */ .checks { display: inline-flex; align-items: center; gap: var(--space-1); font: var(--weight-normal) var(--text-sm) var(--font-sans); color: var(--mute); font-variant-numeric: tabular-nums; } .checks.success svg.i, .mark.success, .head.success svg.i { color: var(--open); } .checks.failure svg.i, .mark.failure, .mark.error, .head.failure svg.i { color: var(--closed-pull); } .checks.running svg.i, .mark.running, .head.running svg.i, .checks.queued svg.i, .mark.queued, .head.queued svg.i { color: var(--running); } .mark.skipped, .mark.cancelled, .checks.cancelled svg.i, .head.cancelled svg.i { color: var(--faint); } .verdict { display: inline-flex; align-items: center; gap: var(--space-1); font-weight: var(--weight-semibold); font-size: var(--text-sm); } .verdict.approve { color: var(--open); } .verdict.changes { color: var(--closed-pull); } .verdict.dismissed { color: var(--mute); } /* ── Boxes and lists ──────────────────────────────────────────────── */ .box { border: var(--border); border-radius: var(--radius-md); overflow: hidden; background: var(--bg); } .box:has(.checks-menu[open], .member-menu[open], .mention-list) { overflow: visible; } .checks-menu > .menu { color: var(--fg); } .box + .box { margin-top: var(--space-4); } .boxhead { display: flex; flex-wrap: wrap; align-items: center; gap: var(--space-2) var(--space-3); padding: var(--row-y) var(--pad-x); border-bottom: var(--border); min-height: 2.75rem; } .boxhead:last-child, .boxhead.boxfoot { border-bottom: 0; } .boxfoot { border-top: var(--border); } .boxhead > a.end { display: inline-flex; align-items: center; gap: var(--space-1-5); color: var(--mute); } .list { list-style: none; margin: 0; padding: 0; } .list li { display: flex; gap: var(--space-3); align-items: center; padding: var(--row-y) var(--pad-x); border-top: var(--border); } .list li:first-child { border-top: 0; } .list li:hover { background: var(--hover); } .list li > .mute { display: inline-flex; align-items: center; gap: var(--space-1); } /* A name too long for its row ends in an ellipsis, rather than running past it. */ .list .grow > a.clip { display: inline-block; max-width: 100%; vertical-align: bottom; } .list li > svg.i { color: var(--faint); margin-top: 2px; } a.row { color: inherit; text-decoration: none; } a.row:hover { background: var(--hover); } .meta { color: var(--mute); font-size: var(--text-sm); margin-top: var(--space-0-5); display: flex; flex-wrap: wrap; align-items: center; gap: var(--space-1-5); } .from { display: inline-flex; align-items: center; gap: var(--space-1); } /* What a list or page says where its rows would be (Empty). */ .empty { padding: var(--space-10) var(--pad-x); text-align: center; color: var(--mute); } .empty-title { color: var(--fg); font-size: var(--text-lg); font-weight: var(--weight-semibold); letter-spacing: var(--tracking-tight); } .empty-title + p { margin-top: var(--space-2); } .empty a, .empty .link, .search-count a { color: var(--fg); text-decoration: underline; text-decoration-color: var(--link-line); text-underline-offset: var(--underline-offset); } .empty .link { padding: 0; border: 0; background: none; font: inherit; cursor: pointer; } .empty-cmd { max-width: 32rem; margin: var(--space-4) auto 0; text-align: left; } .list li.blank { display: block; padding: 0; } .list li.blank:hover { background: none; } .note { padding: var(--pad-x); color: var(--mute); text-align: center; } .more { display: flex; justify-content: center; margin-top: var(--space-5); } .section { display: flex; flex-wrap: wrap; align-items: center; gap: var(--space-3); margin: 0 0 var(--space-4); } .toolbar { display: flex; flex-wrap: wrap; align-items: center; gap: var(--space-2-5) var(--space-4); margin: 0 0 var(--space-4); } .committed-short { display: none; } /* A commit in a list by who wrote it and when it was committed: who committed it, and when it was written, are on its page. */ .list .meta .archive { color: inherit; text-decoration: underline; text-decoration-color: var(--link-line); text-underline-offset: var(--underline-offset); } .list .meta .archive:hover { color: var(--fg); text-decoration-color: currentColor; } .list .meta .committed-long { display: none; } .list .meta .committed-short { display: inline; } /* A command to copy. */ .cmd { display: flex; align-items: flex-start; gap: var(--space-2); border: var(--border); border-radius: var(--radius-md); background: var(--bg); padding: var(--space-2) var(--space-2) var(--space-2) var(--space-3); } .cmd + .cmd { margin-top: var(--space-2); } .cmd pre { flex: 1; min-width: 0; margin: 0; padding: var(--space-1) 0; white-space: pre-wrap; overflow-wrap: anywhere; } .cmd .btn { height: var(--control-sm); padding: 0 var(--space-2); font-size: var(--text-xs); } /* ── Menus: a summary that opens to a list of links ───────────────── */ .popover { position: relative; display: flex; align-items: center; } .popover > summary { list-style: none; cursor: pointer; } .popover > summary::-webkit-details-marker { display: none; } .popover > .menu { position: absolute; z-index: var(--z-menu); top: calc(100% + var(--space-1-5)); left: 0; min-width: 16rem; max-width: calc(100vw - 2rem); padding: var(--space-1) 0; background: var(--panel); border: var(--border); border-radius: var(--radius-md); box-shadow: var(--shadow-pop); font-size: var(--text-sm); } .menu-head { padding: var(--space-2) var(--space-3); margin: calc(-1 * var(--space-1)) 0 var(--space-1); border-bottom: var(--border); font-weight: var(--weight-semibold); color: var(--fg); } .menu a { display: flex; align-items: center; gap: var(--space-2); padding: var(--space-2) var(--space-3); color: inherit; white-space: nowrap; } .menu a:hover { background: var(--hover); color: inherit; } .menu b { font-weight: var(--weight-semibold); } .menu-item { display: flex; align-items: center; gap: var(--space-2); width: 100%; padding: var(--space-2) var(--space-3); border: 0; background: none; font: inherit; color: inherit; text-align: left; cursor: pointer; } .menu-item:hover { background: var(--hover); } .menu-item:disabled { opacity: 0.6; cursor: default; } .menu-item:disabled:has(.spinner) { opacity: 1; cursor: progress; } .menu hr { border: 0; border-top: var(--border); margin: var(--space-1) 0; } .account .menu .i { color: var(--mute); } .account > summary { display: flex; align-items: center; gap: var(--space-1); color: var(--mute); } .bell { position: relative; display: flex; align-items: center; color: var(--mute); } .bell:hover { color: var(--fg); } .new-link { display: flex; align-items: center; color: var(--mute); } .new-link:hover { color: var(--fg); } .bell .count { position: absolute; top: calc(-1 * var(--space-1-5)); left: var(--space-2-5); min-width: var(--icon); padding: 0 var(--space-1); border-radius: var(--radius-full); background: var(--unread); color: var(--bg); font: var(--weight-semibold) var(--text-2xs) var(--font-sans); text-align: center; } .notifications li { position: relative; } .notifications .unread::before { content: ''; position: absolute; left: calc(var(--space-1-5) - 1px); top: 50%; width: var(--space-1-5); height: var(--space-1-5); margin-top: calc(-1 * var(--space-0-5) - 1px); border-radius: var(--radius-full); background: var(--unread); } .notifications li:not(.unread, .blank) p { color: var(--mute); } .notifications p a { color: var(--fg); font-weight: var(--weight-semibold); } .notifications p a:hover { text-decoration: underline; text-underline-offset: var(--underline-offset); } .notifications p { overflow-wrap: anywhere; } .notifications li.invite { flex-wrap: wrap; row-gap: var(--space-2); } .notifications .invite-answer { display: flex; flex-wrap: wrap; align-items: center; gap: var(--space-2) var(--space-3); flex-basis: 100%; padding-left: calc(var(--avatar-md) + var(--space-3)); font-size: var(--text-sm); } .notifications .invite-answer p { flex-basis: 100%; } .notifications li p.invite-said { color: var(--fg); } .notifications li p.problem { color: var(--danger); } .notifications li p.row-said { margin-top: var(--space-1); color: var(--fg); font-size: var(--text-sm); } .notifications li > .beside { display: flex; align-items: baseline; gap: var(--space-3); } .notifications .row-mute { font-size: var(--text-sm); opacity: 0; } .notifications li:hover .row-mute, .notifications .row-mute:focus-visible { opacity: 1; } @media (hover: none) { .notifications .row-mute { opacity: 1; } } .notifications-head .gear { display: flex; margin-left: auto; color: var(--mute); } .notifications-head .gear:hover { color: var(--fg); } .notification-kinds { margin: 0 0 var(--space-2); } .notifications li { align-items: flex-start; } .notifications-when { font-size: var(--text-sm); font-weight: var(--weight-semibold); color: var(--mute); margin: var(--space-6) 0 var(--space-2); } .notifications .unread::before { top: calc(var(--row-y) + var(--avatar-md) / 2); margin-top: calc(-1 * var(--space-1-5) / 2); } .notifications .grow, .notifications li > .beside { padding-top: var(--space-1); } .notifications .crowd { margin-top: calc(-1 * var(--space-1)); } .notifications .crowd .faces { gap: 0; overflow: visible; } .notifications .crowd .faces .av { width: var(--avatar-md); height: var(--avatar-md); box-shadow: 0 0 0 2px var(--bg); } .notifications .crowd .faces .av + .av { margin-left: calc(-1 * var(--space-1-5)); } .notifications li:hover .crowd .faces .av { box-shadow: 0 0 0 2px var(--hover); } .notifications .crowd li { padding: 0; border: 0; } .notifications .crowd li:hover { background: none; } .notifications .crowd + p { margin-top: var(--space-1-5); } .notifications .feed-quote { overflow-wrap: anywhere; display: -webkit-box; -webkit-box-orient: vertical; -webkit-line-clamp: 3; line-clamp: 3; overflow: hidden; } .notifications p.below { display: none; margin-top: var(--space-1); color: var(--mute); font-size: var(--text-sm); } @media (max-width: 640px) { .notifications li > .beside { display: none; } .notifications p.below { display: block; } } .notifications p.failed { margin-top: var(--space-0-5); color: var(--mute); font-size: var(--text-sm); } .account > .menu { left: auto; right: 0; min-width: 12rem; font-family: var(--font-sans); } .account .menu-head { display: flex; align-items: center; gap: var(--space-2); font-weight: var(--weight-medium); } .account .menu-head span, .account .switch span { min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } .account .menu .av { width: var(--icon); height: var(--icon); font-size: var(--text-2xs); } .account .switch { color: var(--mute); } .account .switch:hover { color: var(--fg); } .top nav { align-items: center; } .top nav a, .brand { white-space: nowrap; } .branch { display: inline-flex; align-items: center; gap: var(--space-1-5); height: var(--control); padding: 0 var(--space-3); border: var(--border); border-radius: var(--radius-md); background: var(--panel); font: var(--weight-medium) var(--text-sm) var(--font-sans); max-width: 14rem; } .branch span { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } .branch-menu > summary:hover { border-color: var(--faint); } .branch-menu > summary .i:last-child { color: var(--mute); } .branch-menu > .menu { width: 18rem; } .ref-tabs { padding: 0 var(--space-3); } .ref-tabs button { display: inline-flex; align-items: center; gap: var(--space-1); } .repo-switch > summary { display: inline-flex; align-items: center; justify-content: center; width: var(--control-sm); height: var(--control-sm); margin-left: calc(-1 * var(--space-1)); border-radius: var(--radius-md); color: var(--mute); } .repo-switch > summary:hover, .repo-switch[open] > summary { background: var(--hover); color: var(--fg); } .repo-switch > .menu { width: 18rem; font-weight: var(--weight-normal); } .repo-switch li .i:not(:first-child) { color: var(--mute); } :is(.branch-menu, .repo-switch) input { display: block; width: calc(100% - 2 * var(--space-2-5)); margin: var(--space-2-5); padding: var(--space-1-5) var(--space-2); border: var(--border); border-radius: var(--radius-md); background: var(--bg); color: var(--fg); font: var(--text-field) var(--font-sans); } :is(.branch-menu, .repo-switch) ul { list-style: none; margin: 0; padding: 0; max-height: 20rem; overflow-y: auto; } :is(.branch-menu, .repo-switch) .name { flex: 1; min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } :is(.branch-menu, .repo-switch) li .i:first-child { color: var(--accent); } :is(.branch-menu, .repo-switch) li a:not([aria-current]) .i:first-child { visibility: hidden; } :is(.branch-menu, .repo-switch) .none { padding: var(--space-2) var(--space-3) var(--space-3); color: var(--mute); } .filter-menu > summary { display: flex; align-items: center; gap: var(--space-1); color: var(--mute); } .filter-menu > summary:hover, .filter-menu[open] > summary { color: var(--fg); } .filter-menu > .menu { left: auto; right: 0; min-width: 15rem; max-height: 22rem; overflow: auto; } .filter-menu .tick { display: inline-flex; width: var(--icon); flex: none; color: var(--accent); } .filter-menu .dot { --label: var(--faint); width: 10px; height: 10px; flex: none; border-radius: 50%; background: var(--label); } /* ── Profiles and repositories ────────────────────────────────────── */ .profile-page { display: flex; flex-wrap: wrap; align-items: flex-start; gap: var(--space-8) var(--space-10); margin-top: var(--space-3); } .profile { flex: 1 1 var(--side); max-width: var(--side); display: flex; flex-direction: column; gap: var(--space-3); min-width: 0; } .profile .av.xl { width: var(--avatar-xl); height: var(--avatar-xl); font-size: 56px; } .profile h1 { font-size: var(--text-3xl); letter-spacing: var(--tracking-tighter); overflow-wrap: anywhere; } .profile .who { color: var(--mute); font-size: var(--text-lg); overflow-wrap: anywhere; } .profile h1 .bot-mark { margin-left: var(--space-2); vertical-align: 0; } .profile h1 .bot-mark .i { width: 0.7em; height: 0.7em; } .profile .bio { white-space: pre-line; overflow-wrap: anywhere; } .profile .follow { justify-content: center; width: 100%; } .profile .follows { display: flex; align-items: center; gap: var(--space-1-5); color: var(--mute); font-size: var(--text-sm); } .profile .follows a { color: inherit; } .profile .follows a:hover { color: var(--primary); } .profile .follows b { color: var(--fg); font-weight: var(--weight-semibold); } .profile .links { display: flex; flex-direction: column; gap: var(--space-1); margin: 0; padding: 0; list-style: none; overflow-wrap: anywhere; } .profile .links li { display: flex; align-items: center; gap: var(--space-2); min-width: 0; } .profile .links .i { color: var(--mute); } .profile .links a { min-width: 0; text-decoration: underline; text-decoration-color: var(--line); text-underline-offset: var(--underline-offset); } .profile .orgs { display: flex; flex-direction: column; gap: var(--space-2); padding-top: var(--space-4); border-top: var(--border); } .profile .orgs h2 { font-size: var(--text-base); font-weight: var(--weight-semibold); } .profile .orgs ul { display: flex; flex-direction: column; gap: var(--space-1-5); margin: 0; padding: 0; list-style: none; } .profile .orgs li { display: flex; align-items: center; gap: var(--space-2); min-width: 0; } .profile .orgs li .av { margin-top: var(--space-0-5); } .profile .orgs a { min-width: 0; color: inherit; } .profile .orgs a:hover { color: var(--primary); } .profile .badges { display: flex; flex-direction: column; gap: var(--space-2); padding-top: var(--space-4); border-top: var(--border); } .profile .badges h2 { font-size: var(--text-base); font-weight: var(--weight-semibold); } .profile .badges ul { position: relative; display: flex; flex-wrap: wrap; gap: var(--space-2); margin: 0; padding: 0; list-style: none; } /* Each badge opens under the row's start, not its own, so the last fits on a phone. */ .profile .badge { position: static; } .badge > summary { display: flex; border-radius: var(--radius-full); } .badge > summary:focus-visible { outline: none; box-shadow: var(--ring); } .badge > .badge-card { display: flex; align-items: flex-start; gap: var(--space-3); width: var(--badge-card); padding: var(--space-3); } .badge[open] > summary { box-shadow: var(--ring); } .badge-card p { margin: 0; color: var(--mute); } .badge-card .badge-name { color: var(--fg); font-weight: var(--weight-semibold); } .badge-card .badge-tier { margin-bottom: var(--space-1); font-size: var(--text-xs); } .badge-card .badge-next { margin-top: var(--space-1); font-size: var(--text-xs); } .pin { flex: none; width: var(--pin); height: var(--pin); filter: drop-shadow(var(--pin-drop) var(--pin-shadow)); } .badge-card .pin { width: var(--pin-lg); height: var(--pin-lg); } .pin.steel { --metal-hi: var(--pin-steel-hi); --metal: var(--pin-steel); --metal-lo: var(--pin-steel-lo); } .pin.bronze { --metal-hi: var(--pin-bronze-hi); --metal: var(--pin-bronze); --metal-lo: var(--pin-bronze-lo); } .pin.silver { --metal-hi: var(--pin-silver-hi); --metal: var(--pin-silver); --metal-lo: var(--pin-silver-lo); } .pin.gold { --metal-hi: var(--pin-gold-hi); --metal: var(--pin-gold); --metal-lo: var(--pin-gold-lo); } .pin.cobalt { --metal-hi: var(--pin-cobalt-hi); --metal: var(--pin-cobalt); --metal-lo: var(--pin-cobalt-lo); } .pin .hi { stop-color: var(--metal-hi); } .pin .mid { stop-color: var(--metal); } .pin .lo { stop-color: var(--metal-lo); } .pin.upstream .face { fill: var(--pin-upstream); } .pin.shipped .face { fill: var(--pin-shipped); } .pin.stargazer .face { fill: var(--pin-stargazer); } .pin.second-pair .face { fill: var(--pin-second-pair); } .pin.peacemaker .face { fill: var(--pin-peacemaker); } .pin.forked-and-fixed .face { fill: var(--pin-forked-and-fixed); } .pin.good-company .face { fill: var(--pin-good-company); } .pin.smooth-landing .face { fill: var(--pin-smooth-landing); } .pin.bisected .face { fill: var(--pin-bisected); } .pin.carry-your-own .face { fill: var(--pin-carry-your-own); } .pin.moved-house .face { fill: var(--pin-moved-house); } .pin.first-light .face { fill: var(--pin-first-light); } .pin .dash { fill: none; stroke: var(--pin-dash); stroke-width: 2.5; stroke-dasharray: 7 5; } .pin .edge { fill: none; stroke: var(--pin-edge); stroke-width: 1.5; } .pin .glyph { fill: var(--pin-glyph); } .pin .shine { fill: var(--pin-shine); } .profile-main { flex: 999 1 30rem; min-width: 0; } .member-list .who { display: flex; flex-direction: column; min-width: 0; } .member-list .name { display: flex; align-items: center; gap: var(--space-2); min-width: 0; } .member-list .since { color: var(--mute); font-size: var(--text-sm); } .box + .rollup { margin-top: var(--space-8); } .member-list .end { flex: none; font-size: var(--text-sm); } .member-list + .section { margin-top: var(--space-8); } .member-list + .feed-note { margin-top: var(--space-4); } .member-list .list li { align-items: center; } .member-list .member-menu { display: flex; flex: none; } .member-menu > .menu { left: auto; right: 0; min-width: 14rem; } .org-invitation { display: flex; flex-direction: column; gap: var(--space-3); margin: 0 0 var(--space-6); padding: var(--space-4) var(--pad-x); border-radius: var(--radius-md); background: var(--notice); color: var(--notice-fg); } .org-invitation h2 { font-size: var(--text-md); font-weight: var(--weight-semibold); color: var(--fg); } .org-invitation .choices { display: grid; grid-template-columns: repeat(auto-fit, minmax(14rem, 1fr)); gap: var(--space-3); } .org-invitation .choice { display: flex; flex-direction: column; align-items: flex-start; gap: var(--space-2); padding: var(--space-3); border: var(--border); border-radius: var(--radius-md); background: var(--bg); color: var(--fg); } .org-invitation .choice p { color: var(--mute); font-size: var(--text-sm); } .org-invitation .decline { font-size: var(--text-sm); } .org-invitation .problem { color: var(--danger); } .text-button { padding: 0; border: 0; background: none; color: inherit; font: inherit; text-decoration: underline; text-decoration-color: var(--link-line); text-underline-offset: var(--underline-offset); cursor: pointer; } .text-button:disabled { opacity: 0.6; cursor: default; } .org-invite { margin-bottom: var(--space-6); } .org-invite .owned { flex-wrap: wrap; } .org-invite .owned .handle-input { flex: 1 1 14rem; } .org-invite .owned select { width: auto; flex: none; } .org-invite .hint { margin-top: var(--space-2); } .org-said, .org-invite + .problem { margin-bottom: var(--space-4); } .org-said { font-size: var(--text-sm); } .start-org { width: min(30rem, calc(100vw - 2 * var(--space-4))); } .start-org .lead { margin-top: var(--space-3); } .start-org .steps { display: flex; flex-direction: column; gap: var(--space-2); margin: var(--space-3) 0 0; padding-left: var(--space-5); color: var(--mute); font-size: var(--text-sm); } .start-org .steps b { color: var(--fg); font-weight: var(--weight-semibold); } .start-org .aside { margin-top: var(--space-4); padding: var(--space-2-5) var(--space-3); border: var(--border); border-radius: var(--radius-md); background: var(--panel); color: var(--mute); font-size: var(--text-sm); } .start-org .aside b { color: var(--fg); } .start-org .hint { margin-top: var(--space-3); } .start-org .actions { margin-top: var(--space-4); } .org-settings { display: flex; flex-direction: column; gap: var(--space-8); } .member-list li.empty { flex-direction: column; gap: var(--space-1); text-align: center; } .member-list li.empty b { color: var(--fg); font-weight: var(--weight-semibold); } .org-invite .hint + .actions { margin-top: var(--space-2); } .dialog .actions .btn, .dialog .actions .btn.danger.solid { margin-top: 0; } .dialog .ask { margin-top: var(--space-3); color: var(--mute); font-size: var(--text-sm); } .profile-main > .tabs { margin-top: 0; } .strip { margin-bottom: var(--space-8); } .weeks { display: flex; align-items: flex-end; gap: var(--space-0-5); height: var(--strip); border-bottom: var(--border); } .weeks span { flex: 1; min-height: 2px; background: var(--accent); border-radius: var(--radius-xs) var(--radius-xs) 0 0; } .weeks span.none { background: var(--line); } .weeks span:hover { background: var(--fg); } .strip .ends { display: flex; justify-content: space-between; margin-top: var(--space-1); font-size: var(--text-2xs); color: var(--faint); } .cards { display: grid; grid-template-columns: repeat(auto-fill, minmax(14rem, 1fr)); gap: var(--space-3); margin: 0 0 var(--space-8); padding: 0; list-style: none; } /* Where the cards would be, when there are none: as far from what follows. */ .no-cards { margin-bottom: var(--space-8); } .cards li { display: flex; flex-direction: column; border: var(--border); border-radius: var(--radius-md); padding: var(--row-y) var(--pad-x); } .cards .title { color: var(--accent); } .cards p { margin-top: var(--space-1); color: var(--mute); font-size: var(--text-sm); } /* What it is written in, at the foot, in line across a row of cards. */ .cards .meta { margin-top: auto; padding-top: var(--space-3); } .rollup-list { list-style: none; margin: 0 0 var(--space-2); padding: 0; } .rollup-list > li { display: flex; gap: var(--space-3); padding: var(--space-2) 0; align-items: flex-start; } .rollup-list > li > div { flex: 1; min-width: 0; } .rollup-list .i { color: var(--mute); flex: none; margin-top: var(--space-0-5); } .rollup-repos { display: grid; grid-template-columns: minmax(0, max-content) max-content minmax(4rem, 1fr); gap: var(--space-1-5) var(--space-3); align-items: center; margin: var(--space-2) 0 0; padding: 0; list-style: none; font-size: var(--text-sm); } .rollup-repos li { display: contents; } .rollup-repos a { color: var(--fg); text-decoration: underline; text-decoration-color: var(--link-line); text-underline-offset: var(--underline-offset); overflow-wrap: anywhere; } .rollup-repos a:hover { text-decoration: underline; } .rollup-bar { height: var(--space-1-5); background: var(--line); border-radius: var(--radius-xs); } .rollup-bar span { display: block; height: 100%; background: var(--accent); border-radius: inherit; } .spark { display: block; } .spark .area { fill: var(--accent-soft); } .spark polyline { fill: none; stroke: var(--accent); stroke-width: 1.5; stroke-linejoin: round; } .repohead { display: flex; flex-wrap: wrap; align-items: flex-start; gap: var(--space-4) var(--space-8); } .repohead h1 { font-weight: var(--weight-medium); display: flex; flex-wrap: wrap; align-items: center; gap: var(--space-1-5); } .repohead h1 b { font-weight: var(--weight-semibold); } /* The name and its switch wrap as one, so the caret never stands on a line alone. */ .repohead .repo-name { display: inline-flex; align-items: center; gap: var(--space-1-5); min-width: 0; } .repohead .repo-path { min-width: 0; overflow-wrap: anywhere; } .repohead .repo-path > .mute { margin-right: var(--space-1-5); } .repohead .about { flex: 1; min-width: 16rem; } .repohead .about p { color: var(--mute); margin-top: var(--space-1-5); } .clone { display: flex; align-items: center; gap: var(--space-2); border: var(--border); border-radius: var(--radius-md); padding: var(--space-1) var(--space-1) var(--space-1) var(--space-3); max-width: 100%; background: var(--panel); } .clone code { overflow-x: auto; white-space: nowrap; color: var(--mute); } /* A button with its count joined on, as Star and Fork have. */ .counted { display: flex; } .counted > .btn, .counted > details > summary.btn { border-radius: var(--radius-md) 0 0 var(--radius-md); } .counted > details { display: flex; } .star .btn[aria-pressed='true'] .i { color: var(--yellow); } .reactions { display: flex; flex-wrap: wrap; align-items: center; gap: var(--space-1-5); padding: 0 var(--space-5) var(--space-4); } .reaction { display: inline-flex; align-items: center; gap: var(--space-1); height: var(--control-sm); padding: 0 var(--space-2); border: var(--border); border-radius: var(--radius-full); background: var(--bg); font: var(--weight-medium) var(--text-xs) var(--font-sans); color: var(--fg); cursor: pointer; white-space: nowrap; } .reaction:hover { background: var(--hover); } .reaction:disabled { opacity: 0.6; cursor: default; } .reaction[aria-pressed='true'] { border-color: var(--accent); background: var(--accent-soft); color: var(--accent); } .reaction.add { color: var(--mute); } .reaction-menu > .menu.reaction-picker { display: flex; gap: var(--space-0-5); min-width: 0; padding: var(--space-1); } .reaction-pick { display: inline-flex; align-items: center; justify-content: center; width: var(--control); height: var(--control); border: 0; border-radius: var(--radius-md); background: none; font-size: var(--text-lg); cursor: pointer; } .reaction-pick:hover { background: var(--hover); } .reaction-pick[aria-pressed='true'] { background: var(--accent-soft); } .reaction-error { font-size: var(--text-xs); color: var(--danger); } .counted > .count { display: inline-flex; align-items: center; height: var(--control); padding: 0 var(--space-2-5); border: var(--border); border-left: 0; border-radius: 0 var(--radius-md) var(--radius-md) 0; font: var(--weight-medium) var(--text-xs) var(--font-sans); color: var(--fg); } .toolbar-end { margin-left: auto; display: flex; flex-wrap: wrap; align-items: center; gap: var(--space-2); } .clone-menu > .menu { left: auto; right: 0; width: 26rem; padding: 0 0 var(--space-3); } .clone-menu .clone { margin: var(--space-3) var(--space-3) 0; } .clone-menu .clone code { flex: 1; min-width: 0; scrollbar-width: none; } .clone-menu p { color: var(--mute); font-size: var(--text-xs); margin: var(--space-2) var(--space-3) 0; } .clone-menu p a { display: inline; padding: 0; color: var(--fg); text-decoration: underline; text-decoration-color: var(--link-line); text-underline-offset: var(--underline-offset); } .clone-menu p a:hover { text-decoration-color: currentColor; } .clone-menu .menu-head ~ .menu-head { margin-top: var(--space-3); border-top: var(--border); } .file-finder > summary kbd { margin-left: var(--space-1); } .file-finder > .menu { left: auto; right: 0; width: 32rem; } .file-finder input { display: block; width: calc(100% - 2 * var(--space-2-5)); margin: var(--space-2-5); padding: var(--space-1-5) var(--space-2); border: var(--border); border-radius: var(--radius-md); background: var(--bg); color: var(--fg); font: var(--text-field) var(--font-sans); } .file-finder ul { list-style: none; margin: 0; padding: 0; max-height: 20rem; overflow-y: auto; } .file-finder li .i { color: var(--mute); } .file-finder li .dir .i { color: var(--dir); } .file-finder li a[aria-current] { background: var(--accent-soft); } .file-finder .name { flex: 1; min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; font-family: var(--font-mono); font-size: var(--text-xs); color: var(--mute); } .file-finder .name b { color: var(--fg); } .file-finder .none { padding: var(--space-2) var(--space-3) var(--space-3); color: var(--mute); } .tabs { display: flex; gap: var(--space-5); border-bottom: var(--border); margin: var(--space-5) 0; view-transition-name: tabs; overflow-x: auto; overflow-y: hidden; scrollbar-width: none; } /* A row that scrolls sideways fades where there is more past its edge (rows.ts marks which). */ .more-end { mask-image: linear-gradient(to right, var(--fg) calc(100% - var(--row-fade)), transparent); } .more-start { mask-image: linear-gradient(to left, var(--fg) calc(100% - var(--row-fade)), transparent); } .more-start.more-end { mask-image: linear-gradient( to right, transparent, var(--fg) var(--row-fade), var(--fg) calc(100% - var(--row-fade)), transparent ); } .tabs a { display: flex; align-items: center; gap: var(--space-1-5); padding: var(--space-2) 0; color: var(--mute); border-bottom: 2px solid transparent; margin-bottom: -1px; white-space: nowrap; } .tabs a:hover { color: var(--fg); } .tabs a[aria-current] { color: var(--fg); border-color: var(--accent); font-weight: var(--weight-medium); } .ref-counts { display: flex; flex-wrap: wrap; gap: var(--space-4); font-size: var(--text-sm); } .ref-counts a { display: inline-flex; align-items: center; gap: var(--space-1-5); color: var(--mute); } .ref-counts a:hover { color: var(--fg); } .ref-counts b { color: var(--fg); font-weight: var(--weight-semibold); } /* A button that sits back: filled softly, its border only under the pointer. */ .btn.quiet { border-color: transparent; background: var(--soft); } .btn.quiet:hover { border-color: var(--line); background: var(--soft); } .history b { font-weight: var(--weight-semibold); } .ref-name { display: flex; align-items: center; gap: var(--space-2); min-width: 0; } .crumbs { font-size: var(--text-md); min-width: 0; overflow-wrap: anywhere; } .crumbs a { color: var(--fg); text-decoration: underline; text-decoration-color: var(--link-line); text-underline-offset: var(--underline-offset); } .crumbs b { font-weight: var(--weight-semibold); } .crumbs .sep { color: var(--faint); margin: 0 var(--space-1); } /* ── Files, code and prose ────────────────────────────────────────── */ .files li { padding: var(--space-2) var(--pad-x); } .files svg.i { color: var(--faint); } .files .dir svg.i { color: var(--dir); } .files .size { color: var(--faint); font-size: var(--text-xs); min-width: var(--file-size-width); text-align: right; } .files .name { flex: 0 0 var(--file-name-width); } .files .subject, .files .when { color: var(--mute); } .files .when { white-space: nowrap; } .files .when[data-heat='1'] { color: color-mix(in srgb, var(--heat) 100%, var(--mute)); } .files .when[data-heat='2'] { color: color-mix(in srgb, var(--heat) 90%, var(--mute)); } .files .when[data-heat='3'] { color: color-mix(in srgb, var(--heat) 80%, var(--mute)); } .files .when[data-heat='4'] { color: color-mix(in srgb, var(--heat) 70%, var(--mute)); } .files .when[data-heat='5'] { color: color-mix(in srgb, var(--heat) 60%, var(--mute)); } .files .when[data-heat='6'] { color: color-mix(in srgb, var(--heat) 50%, var(--mute)); } .files .when[data-heat='7'] { color: color-mix(in srgb, var(--heat) 40%, var(--mute)); } .files .when[data-heat='8'] { color: color-mix(in srgb, var(--heat) 30%, var(--mute)); } .files .when[data-heat='9'] { color: color-mix(in srgb, var(--heat) 20%, var(--mute)); } .files .when[data-heat='10'] { color: color-mix(in srgb, var(--heat) 10%, var(--mute)); } /* A directory's panel: the revision and the ways to take it first, under the edge of what it is written in. */ .panel-bar { background: var(--panel); } .panel-bar .toolbar { flex: 1; min-width: 0; margin: 0; } /* What a directory is written in: a segment each, hit a little below what is drawn, named in a tip drawn as a menu is on hover or focus; any segment clicked or tapped lists them all. */ .lang-wrap { position: relative; } .lang-edge { display: flex; gap: var(--space-0-5); height: var(--edge); background: var(--panel); } .lang-edge .seg { position: relative; flex-basis: 0; min-width: var(--space-1-5); height: 100%; padding: 0; border: 0; background: var(--seg); cursor: pointer; transition: height var(--quick); } .lang-wrap:not(.open) .lang-edge .seg:is(:hover, :focus-visible) { height: calc(2 * var(--edge)); } .lang-edge .seg::after { content: ''; position: absolute; inset: 0 0 calc(-1 * var(--edge-hit)); } .lang-edge .seg:first-child { border-top-left-radius: var(--radius-md); } .lang-edge .seg:last-child { border-top-right-radius: var(--radius-md); } .lang-edge .seg:focus-visible { outline: 0; box-shadow: var(--ring); } .lang-tip { display: none; position: absolute; top: calc(100% + var(--space-1-5)); left: 50%; transform: translateX(-50%); z-index: var(--z-menu); align-items: center; gap: var(--space-1-5); padding: var(--space-1) var(--space-2); background: var(--panel); border: var(--border); border-radius: var(--radius-md); box-shadow: var(--shadow-pop); font: var(--text-xs) var(--font-sans); color: var(--fg); white-space: nowrap; pointer-events: none; } .lang-edge .seg.start .lang-tip { left: 0; transform: none; } .lang-edge .seg.end .lang-tip { left: auto; right: 0; transform: none; } .lang-wrap:not(.open) .seg:is(:hover, :focus-visible) .lang-tip { display: inline-flex; } :is(.lang-tip, .lang-key, .language) i { width: var(--space-2); height: var(--space-2); border-radius: var(--radius-full); background: var(--seg); flex: none; } .language { display: inline-flex; align-items: center; gap: var(--space-1-5); } .meta .language:not(:last-child), .meta .tally:not(:last-child) { margin-right: var(--space-2); } .meta .tally { display: inline-flex; align-items: center; gap: var(--space-1); } :is(.lang-tip, .lang-key) b { font-weight: var(--weight-semibold); } .lang-key { position: absolute; top: calc(100% + var(--space-1-5)); left: var(--pad-x); z-index: var(--z-menu); min-width: 14rem; max-width: calc(100% - 2 * var(--pad-x)); padding: var(--space-1) 0; background: var(--panel); border: var(--border); border-radius: var(--radius-md); box-shadow: var(--shadow-pop); font-size: var(--text-sm); } .lang-key ul { margin: 0; padding: 0; list-style: none; } .lang-key li { display: flex; align-items: center; gap: var(--space-2); padding: var(--space-1-5) var(--space-3); } .lang-key .mute { margin-left: auto; padding-left: var(--space-4); font-variant-numeric: tabular-nums; } .lang-scrim { display: none; } .box:has(.lang-wrap:is(.open, :hover, :focus-within)), .box:has(.branch-menu[open], .clone-menu[open], .file-finder[open]) { overflow: visible; } .release-name svg.i { color: var(--mute); flex: none; } /* What a repository publishes, in a line under its name. */ /* One line on a wide screen, a long name cut short rather than a dot leading a line. */ .release-strip { display: flex; align-items: center; gap: var(--space-1) var(--space-2); font-size: var(--text-sm); min-width: 0; } .repohead .about .release-strip { color: var(--fg); margin-top: var(--space-2); } /* A link off knotless: its title, or its host and path, a long one cut short. */ .site-link { display: inline-flex; align-items: center; gap: var(--space-1); min-width: 0; max-width: 100%; color: var(--fg); font-size: var(--text-sm); } .site-link svg.i { flex: none; color: var(--mute); } .site-link span { min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; text-decoration: underline; text-decoration-color: var(--line); text-underline-offset: var(--underline-offset); } .site-link:hover span { text-decoration-color: currentColor; } /* A repository's first link, and a count of the rest that opens them all. */ .repo-links { display: inline-flex; align-items: center; gap: var(--space-1-5); min-width: 0; max-width: 100%; } /* A repository's website, cut short as its first link is. */ .site-link.repo-site { max-width: var(--repo-link-width); } .links-menu { flex: none; } .links-menu > summary { color: var(--mute); font-size: var(--text-xs); font-weight: var(--weight-medium); padding: 0 var(--space-1-5); border-radius: var(--radius-full); background: var(--soft); line-height: var(--leading); } .links-menu > summary:hover { color: var(--fg); } .links-menu > .menu { list-style: none; margin: 0; max-width: min(var(--links-menu-width), calc(100vw - 2rem)); } .links-menu .menu .site-link { display: flex; max-width: none; padding: var(--space-2) var(--space-3); } .links-menu .menu .site-link:hover { background: var(--hover); } /* The line of facts under the description: its first link, then what it publishes. */ .repohead .facts { display: flex; flex-wrap: wrap; align-items: center; gap: var(--space-1) var(--space-2); margin-top: var(--space-2-5); font-size: var(--text-sm); min-width: 0; } .repohead .facts > .sep { color: var(--faint); } /* A dot a wrap left at a line's end or start (lib/dots.ts). */ .repohead .facts .sep-wrapped { visibility: hidden; } .repohead .facts .release-strip { margin-top: 0; } .repohead .facts .repo-links { max-width: var(--repo-link-width); } .topics { display: flex; flex-wrap: wrap; gap: var(--space-1-5); list-style: none; margin: var(--space-2-5) 0 0; padding: 0; } .topic { display: inline-block; font-size: var(--text-xs); font-weight: var(--weight-medium); line-height: var(--leading); padding: 0 var(--space-2); border-radius: var(--radius-full); color: var(--accent); background: var(--accent-soft); text-decoration: none; } .topic:hover { text-decoration: underline; } .people-menu { flex: none; } .people-menu > summary { display: inline-flex; align-items: center; gap: var(--space-1-5); } .people-menu .av { width: var(--icon); height: var(--icon); font-size: var(--text-2xs); } .people-menu > .menu { list-style: none; margin: 0; } .people-menu .menu-item { min-width: 0; } .people-menu .menu-item span { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } .people-menu .said { color: var(--mute); } .people-menu > summary:hover .said, .people-menu[open] > summary .said { color: var(--fg); } .people-menu .head { padding: var(--space-1-5) var(--space-3); font-size: var(--text-xs); color: var(--mute); } .people-menu .others { padding: var(--space-1-5) var(--space-3) var(--space-1); font-size: var(--text-xs); } .repohead .about .forked { margin-top: var(--space-2); } /* Where it was forked from, a link as its own links are. */ .repohead .forked a { color: var(--fg); text-decoration: underline; text-decoration-color: var(--line); text-underline-offset: var(--underline-offset); } .repohead .forked a:hover { text-decoration-color: currentColor; } .release-strip .release-name { align-items: center; } .release-strip .release-name svg.i { margin-top: 0; } .release-strip .release-name .what { flex-wrap: nowrap; } .release-strip .release-name .what > a { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } .release-strip :is(.fact, .sep, .tag) { flex: none; white-space: nowrap; } .release-strip .fact { display: inline-flex; align-items: center; gap: var(--space-1); } .release-strip .fact svg.i { color: var(--mute); } .release-strip .sep { color: var(--faint); } .package-strip { display: flex; flex-wrap: wrap; gap: var(--space-2); list-style: none; margin: 0 0 var(--space-4); padding: 0; font-size: var(--text-sm); } .package-strip a { display: inline-flex; align-items: center; gap: var(--space-1-5); padding: var(--space-1) var(--space-2-5); border: var(--border); border-radius: var(--radius-md); color: var(--fg); } .package-strip a[aria-current] { border-color: var(--accent); background: var(--accent-soft); } .package-strip svg.i { color: var(--mute); } .release-name { display: inline-flex; align-items: flex-start; gap: var(--space-2); min-width: 0; } .release-name svg.i { margin-top: var(--space-0-5); } .release-name .what { display: inline-flex; flex-wrap: wrap; align-items: center; gap: var(--space-1) var(--space-2); min-width: 0; } .release-name .what > :not(.tag) { min-width: 0; overflow-wrap: anywhere; } .release-name b { font-weight: var(--weight-semibold); } .tag.latest { color: var(--open); border-color: currentColor; } .tag.yanked { color: var(--danger); border-color: currentColor; } .release { scroll-margin-top: var(--space-4); } .release .boxhead { flex-wrap: wrap; } .release-when { display: inline-flex; align-items: center; gap: var(--space-2); margin-left: auto; font-size: var(--text-sm); } .release-step { display: inline-flex; align-items: center; gap: var(--space-1); font-size: var(--text-sm); color: var(--mute); } .release-step svg.i { color: var(--mute); } .release .prose { font-size: var(--text-base); padding: var(--space-4) var(--pad-x); } .release .prose :is(h1, h2, h3, h4) { font-size: var(--text-base); margin: var(--space-4) 0 var(--space-2); padding: 0; border: 0; } .release .prose > :first-child { margin-top: 0; } .release-pull, .release .prose + .list { border-top: var(--border); } .release-pull { padding: var(--space-4) var(--pad-x); } .release-pull p { margin: var(--space-2) 0 0; font-size: var(--text-sm); } .release-files li { font-size: var(--text-sm); } .release-files .file-name { flex: 1; min-width: 0; overflow-wrap: anywhere; } .release-files .digest { font: var(--text-xs) var(--font-mono); color: var(--faint); } .code { position: relative; display: grid; grid-template-columns: auto minmax(0, 1fr); } /* The lines a link marks: a band across the whole row, behind the numbers and the text. */ .code .marked { position: absolute; left: 0; right: 0; top: calc(var(--space-3) + (var(--first) - 1) * var(--leading-code)); height: calc(var(--count) * var(--leading-code)); background: var(--target); pointer-events: none; } .code > :not(.marked) { position: relative; } .code pre { margin: 0; padding: var(--space-3) 0; line-height: var(--leading-code); tab-size: 4; } .code .ln { text-align: right; color: var(--faint); user-select: none; padding: var(--space-3) var(--space-3) var(--space-3) var(--pad-x); min-width: 3.5rem; } .code .ln a { color: inherit; } .code .src { overflow-x: auto; padding: var(--space-3) var(--pad-x); } /* Blame: a column beside the code, each run of lines as tall as they are, with its commit along its first line. */ .code.gutted { grid-template-columns: var(--blame-width) auto minmax(0, 1fr); } .blame-runs { padding: var(--space-3) 0; border-right: var(--border); user-select: none; font-size: var(--text-xs); } .blame-run { height: calc(var(--run) * var(--leading-code)); overflow: hidden; box-shadow: inset 0 1px 0 var(--line); } .blame-run:first-child { box-shadow: none; } .blame-head { display: flex; align-items: center; gap: var(--space-2); height: var(--leading-code); padding: 0 var(--space-3) 0 var(--pad-x); } .blame-when { flex: none; width: var(--blame-when); color: var(--mute); } .blame-who { display: inline-flex; flex: none; } .blame-who .av { width: var(--icon); height: var(--icon); font-size: var(--text-2xs); } .blame-subject { flex: 1; min-width: 0; color: var(--fg); } .blame-prior { display: inline-flex; flex: none; color: var(--faint); } .blame-prior:hover { color: var(--fg); } .prose { padding: var(--space-5) var(--space-8) var(--space-6); overflow-wrap: anywhere; font-size: var(--text-md); line-height: var(--leading-prose); } .prose > :first-child { margin-top: 0; } .prose > :last-child { margin-bottom: 0; } .prose h1, .prose h2 { padding-bottom: var(--space-1-5); border-bottom: var(--border); margin: var(--space-6) 0 var(--space-3); } .prose h1 { font-size: var(--text-3xl); } .prose h2 { font-size: var(--text-xl); } .prose h3 { font-size: var(--text-lg); margin: var(--space-5) 0 var(--space-2); } .prose p, .prose ul, .prose ol, .prose table, .prose pre, .prose blockquote { margin: 0 0 var(--space-4); } .prose li:has( > input[type='checkbox']:first-child, > p:first-child > input[type='checkbox']:first-child ) { list-style: none; } .prose li > input[type='checkbox']:first-child, .prose li > p:first-child > input[type='checkbox']:first-child { margin: 0 var(--space-1-5) 0 calc(-1 * var(--space-5)); } .prose input[type='checkbox']:checked ~ .task-text { color: var(--mute); text-decoration: line-through; } .prose.tickable input[type='checkbox'], .prose.tickable .task-text { cursor: pointer; } .prose a { color: var(--fg); text-decoration: underline; text-decoration-color: var(--link-line); text-underline-offset: var(--underline-offset); } .prose a:hover { text-decoration: underline; } .prose img { max-width: 100%; height: auto; } .prose pre { background: var(--soft); border-radius: var(--radius-md); padding: var(--space-3) var(--pad-x); overflow: auto; line-height: 1.5; } .prose :not(pre) > code { background: var(--soft); padding: var(--space-0-5) var(--space-1-5); border-radius: var(--radius-sm); font-size: 0.85em; } .prose table { border-collapse: collapse; display: block; overflow-x: auto; overflow-wrap: normal; } .prose td, .prose th { border: var(--border); padding: var(--space-1-5) var(--space-3); vertical-align: top; text-align: left; } .prose th { white-space: nowrap; } .prose td:last-child { min-width: var(--cell-min); } .prose blockquote { color: var(--mute); border-left: 3px solid var(--line); padding-left: var(--space-4); margin-left: 0; } .prose details { margin: 0 0 var(--space-4); } .prose summary { cursor: pointer; } .prose details[open] > summary { margin-bottom: var(--space-2); } .prose details > :last-child { margin-bottom: 0; } .prose .diagram { margin: 0 0 var(--space-4); line-height: normal; --pele-bg: var(--bg); --pele-fg: var(--fg); --pele-muted: var(--mute); --pele-line: var(--mute); --pele-surface: var(--soft); --pele-surface-alt: var(--panel); --pele-border: var(--faint); --pele-accent: var(--primary); --pele-critical: var(--rem); --pele-error: var(--rem); --pele-font: var(--font-sans); --pele-font-mono: var(--font-mono); } /* ── Commits and diffs ────────────────────────────────────────────── */ .day { display: flex; align-items: center; gap: var(--space-2); color: var(--mute); font-weight: var(--weight-medium); font-size: var(--text-sm); margin: var(--space-6) 0 var(--space-2-5); } .day:first-of-type { margin-top: 0; } .commit-msg { padding: var(--pad-x); } .commit-msg pre { white-space: pre-wrap; color: var(--mute); margin: var(--space-2-5) 0 0; } .summary { margin: var(--space-6) 0 var(--space-4); color: var(--mute); } .summary b { color: var(--fg); } .file { border: var(--border); border-radius: var(--radius-md); margin: 0 0 var(--space-4); overflow: hidden; } /* A file's menu, open, drops past the file when there is little of it, or it is folded. */ .file:has(.action-menu[open]) { overflow: visible; } .file > summary:has(.action-menu[open]) { z-index: var(--z-menu); } .file > summary { display: flex; flex-wrap: wrap; align-items: center; gap: var(--space-1-5) var(--space-3); padding: var(--row-y) var(--pad-x); background: var(--bg); cursor: pointer; list-style: none; position: sticky; top: 0; } .file > summary::-webkit-details-marker { display: none; } .file > summary::before { content: ''; width: 6px; height: 6px; border: solid var(--mute); border-width: 0 1.5px 1.5px 0; transform: rotate(-45deg); transition: transform var(--quick); margin-right: var(--space-0-5); } .file[open] > summary::before { transform: rotate(45deg); } .file[open] > summary { border-bottom: var(--border); } .file .path { font: var(--weight-medium) var(--text-sm) var(--font-mono); overflow-wrap: anywhere; min-width: 0; } .file .stat { font: var(--text-xs) var(--font-mono); display: flex; align-items: center; gap: var(--space-1-5); margin-left: auto; } /* What can be done with a file, after its counts, as tall as its path. */ .file .file-tools { display: flex; align-items: center; gap: var(--space-1); margin: calc(-1 * var(--space-1)) 0; } .file .file-tool { padding: 0; border: 0; background: none; cursor: pointer; } .diff { border-collapse: collapse; width: 100%; font: var(--text-xs)/var(--leading-code) var(--font-mono); tab-size: 4; } .diff td { padding: 0; vertical-align: top; } .diff .n { width: 1%; min-width: 3rem; padding: 0 var(--space-2-5); text-align: right; color: var(--faint); user-select: none; } .diff .n::before { content: attr(data-n); } .diff .c { padding: 0 var(--pad-x) 0 var(--space-6); white-space: pre; position: relative; } .diff .c::before { position: absolute; left: var(--space-2); user-select: none; } .diff code { font: inherit; } .diff .a .c { background: var(--ins); } .diff .a .n { background: var(--ins-n); } .diff .a .c::before { content: '+'; } .diff .d .c { background: var(--del); } .diff .d .n { background: var(--del-n); } .diff .d .c::before { content: '-'; } .diff .h td { background: var(--hunk); color: var(--mute); padding-top: var(--space-1); padding-bottom: var(--space-1); } .diff .h .c { white-space: pre-wrap; } /* In a hunk's header, or after the last, the lines left out there, shown a step at a time. */ .diff .h .unfold { padding: 0; vertical-align: middle; } .diff .unfold button { display: flex; align-items: center; justify-content: center; width: 100%; height: var(--leading-code); padding: 0; border: 0; background: none; color: var(--mute); cursor: pointer; } .diff .unfold button:hover:enabled, .diff .unfold button:focus-visible { background: var(--accent); color: var(--bg); } .diff .unfold button:disabled { cursor: progress; } .diff .x .c { color: var(--mute); font-style: italic; } .diff .sel .c, .diff .sel .n { background: var(--target); } /* Straddling a line's number and its text, as GitHub's, from the number's cell. */ .diff .n:has(.add-line) { position: relative; } .diff .add-line { position: absolute; right: calc(-1 * var(--space-2-5)); top: 0; display: inline-flex; align-items: center; justify-content: center; width: var(--space-5); height: var(--space-5); padding: 0; border: 0; border-radius: var(--radius-sm); background: var(--accent); color: var(--bg); cursor: pointer; z-index: 1; opacity: 0; } .diff .add-line svg.i { width: 12px; height: 12px; } .diff tr:hover .add-line, .diff .add-line:focus-visible { opacity: 1; } /* With no hover, the line's number is what is tapped: the button fills its cell, unseen, rather than a mark on every line. */ @media (hover: none) { .diff .add-line { opacity: 1; inset: 0; width: auto; height: auto; border-radius: 0; background: none; color: transparent; } .diff .add-line svg.i { display: none; } } .pull-files .scroll { container-type: inline-size; } .diff .t td { padding: 0; white-space: normal; font: var(--text-sm) var(--font-sans); } .diff .t-in { position: sticky; left: 0; width: 100cqi; padding: var(--space-2) var(--pad-x); display: flex; flex-direction: column; gap: var(--space-2); border-top: var(--border); border-bottom: var(--border); background: var(--panel); } .diff .t-in > * { width: 100%; max-width: var(--measure); } .thread { overflow: visible; } .thread > .thread-head { display: flex; flex-wrap: wrap; align-items: center; gap: var(--space-1-5) var(--space-2); padding: var(--space-2) var(--pad-x); cursor: pointer; list-style: none; font-size: var(--text-sm); border-radius: var(--radius-md) var(--radius-md) 0 0; } .thread > .thread-head::-webkit-details-marker { display: none; } .thread > .thread-head > svg.i { color: var(--mute); transform: rotate(-90deg); transition: transform var(--quick); } .thread[open] > .thread-head > svg.i { transform: none; } .thread[open] > .thread-head { border-bottom: var(--border); } .thread .path { flex: 0 1 auto; min-width: 0; font: var(--weight-semibold) var(--text-xs) var(--font-mono); overflow-wrap: anywhere; } .thread .line-quote { border-bottom: var(--border); } .thread .line-quote.gone { margin: 0; padding: var(--space-2) var(--pad-x); font-size: var(--text-sm); } .thread-said + .thread-said { border-top: var(--border); } .thread-by { display: flex; align-items: center; gap: var(--space-2); padding: var(--space-3) var(--pad-x) 0; font-size: var(--text-sm); } .thread-said .prose { padding: var(--space-2) var(--pad-x) var(--space-3); font-size: var(--text-base); } .thread-end { display: flex; flex-wrap: wrap; align-items: center; gap: var(--space-2); padding: var(--space-2-5) var(--pad-x); border-top: var(--border); background: var(--panel); border-radius: 0 0 var(--radius-md) var(--radius-md); } .thread-end.composer { align-items: stretch; } .reply-prompt { display: flex; align-items: center; justify-content: flex-start; flex: 1; min-width: 10rem; height: var(--control); padding: 0 var(--space-2-5); border: var(--border); border-radius: var(--radius-md); background: var(--bg); color: var(--mute); font: var(--text-sm) var(--font-sans); text-align: left; cursor: text; } .review-thread { padding: 0 var(--pad-x) var(--space-3); } .comment:has(.review-thread) { overflow: visible; } .pending-line { display: flex; flex-wrap: wrap; align-items: center; gap: var(--space-2) var(--space-3); padding: var(--space-2-5) var(--pad-x); } .pending-line p { flex: 1; min-width: 0; margin: 0; overflow-wrap: anywhere; white-space: pre-wrap; } .line-composer > p { margin: 0; font-size: var(--text-sm); } .review-menu > summary .count { margin-left: var(--space-0-5); background: var(--bg); color: var(--fg); } .review-menu > .menu { left: auto; right: 0; width: 32rem; padding: 0; color: var(--fg); } .review-menu .pending { display: flex; align-items: center; justify-content: space-between; gap: var(--space-2); margin: 0; padding: var(--space-2-5) var(--space-3) 0; } .review-menu .composer { border: 0; border-radius: 0; background: none; } /* ── Pulls and issues ─────────────────────────────────────────────── */ .query { display: flex; align-items: center; height: var(--control); gap: var(--space-2-5); margin-bottom: var(--space-4); padding: 0 var(--space-3); border: var(--border); border-radius: var(--radius-md); background: var(--bg); } .query:focus-within { border-color: var(--primary); box-shadow: var(--ring); } .query .i { color: var(--faint); flex: none; } .query input { flex: 1; min-width: 0; font: var(--text-field) var(--font-mono); color: inherit; background: transparent; border: 0; padding: 0; height: 100%; } .query input:focus { outline: 0; } .box.items { overflow: visible; } .box.items > .boxhead { border-radius: var(--radius-md) var(--radius-md) 0 0; } .box.items .list li:last-child { border-radius: 0 0 var(--radius-md) var(--radius-md); } .filter { display: flex; gap: var(--space-4); } .filter a { display: flex; align-items: center; gap: var(--space-1-5); color: var(--mute); } .filter a[aria-current] { color: var(--fg); font-weight: var(--weight-semibold); } .menus { display: flex; gap: var(--space-5); margin-left: auto; } .menus ~ .end { margin-left: var(--space-5); } .item-title { font-size: var(--text-3xl); line-height: var(--leading-tight); font-weight: var(--weight-medium); letter-spacing: var(--tracking-tighter); overflow-wrap: anywhere; } .item-meta { display: flex; flex-wrap: wrap; align-items: center; gap: var(--space-2) var(--space-3); margin: var(--space-2-5) 0 var(--space-6); padding-bottom: var(--space-5); border-bottom: var(--border); color: var(--mute); } .item-meta b { color: var(--fg); font-weight: var(--weight-semibold); } .item-meta .ref { overflow-wrap: anywhere; } .item-meta .end { display: inline-flex; align-items: center; gap: var(--space-1-5); } .item-meta:has(+ .pull-tabs) { border-bottom: 0; padding-bottom: 0; margin-bottom: 0; min-height: var(--control); } .pull-tabs { display: flex; align-items: flex-end; gap: var(--space-1); box-shadow: inset 0 -1px var(--line); margin: var(--space-5) 0 var(--space-6); overflow-x: auto; scrollbar-width: none; } .pull-tabs a { display: flex; align-items: center; gap: var(--space-2); padding: var(--space-2) var(--space-4); color: var(--mute); border: var(--border); border-color: transparent; border-radius: var(--radius-md) var(--radius-md) 0 0; white-space: nowrap; } .pull-tabs a:hover { color: var(--fg); text-decoration: none; } .pull-tabs a[aria-current] { color: var(--fg); background: var(--bg); border-color: var(--line); border-bottom-color: var(--bg); } .pull-tabs .stat { display: flex; align-items: center; gap: var(--space-1-5); margin-left: auto; padding: 0 0 var(--space-2) var(--space-4); font: var(--text-xs) var(--font-mono); white-space: nowrap; } .timeline { display: flex; flex-direction: column; gap: var(--space-4); } .pull-files { display: grid; grid-template-columns: var(--side) minmax(0, 1fr); gap: var(--space-4); align-items: start; } .pull-files > aside { position: sticky; top: var(--space-4); max-height: calc(100vh - var(--space-8)); overflow: auto; border: var(--border); border-radius: var(--radius-md); padding: var(--space-2); } .pull-files-diffs { min-width: 0; } /* A file away from the screen is neither laid out nor painted: a big pull's highlighting otherwise repaints whole as each file comes in. */ .pull-files-diffs > .anchor { content-visibility: auto; contain-intrinsic-size: auto var(--diff-file-guess); } .tree-toggle { grid-column: 1/-1; justify-self: start; padding: 0 var(--space-2); } .tree-toggle .show, .pull-files.tree-hidden .tree-toggle .hide { display: none; } .pull-files.tree-hidden .tree-toggle .show { display: inline-flex; } .pull-files.tree-hidden { grid-template-columns: minmax(0, 1fr); } .pull-files.tree-hidden > aside { display: none; } .file-tree ul { list-style: none; margin: 0; padding: 0; } .file-tree ul ul { padding-left: var(--space-4); } .file-tree summary, .file-tree a { display: flex; align-items: center; gap: var(--space-1-5); padding: var(--space-1) var(--space-1-5); border-radius: var(--radius-sm); font-size: var(--text-sm); color: var(--fg); min-width: 0; cursor: pointer; } .file-tree summary { list-style: none; color: var(--mute); } .file-tree summary::-webkit-details-marker { display: none; } .file-tree a:hover, .file-tree summary:hover { background: var(--hover); text-decoration: none; } .file-tree svg.i { flex: none; color: var(--faint); } .file-tree summary svg.i { color: var(--dir); } .file-tree .name { flex: 1; min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } .file-tree .add, .file-tree .rem { flex: none; font: var(--text-2xs) var(--font-mono); } .file-tree .said { display: flex; flex: none; align-items: center; gap: var(--space-0-5); margin-right: var(--space-1-5); color: var(--mute); font: var(--text-2xs) var(--font-mono); } .file-tree .said svg.i { color: var(--mute); } .anchor { scroll-margin-top: var(--space-4); } .note.held { display: flex; flex-direction: column; align-items: center; gap: var(--space-3); } .skeleton { display: flex; flex-direction: column; gap: var(--space-2-5); padding: var(--pad-x); } .skeleton.sized { box-sizing: border-box; height: calc(var(--rows) * var(--leading-code) + var(--hunks) * 2 * var(--space-1)); overflow: hidden; } .skeleton i { display: block; height: var(--bar); border-radius: var(--radius-sm); background: var(--soft); } .skeleton i:nth-child(1) { width: var(--bar-1); } .skeleton i:nth-child(2) { width: var(--bar-2); } .skeleton i:nth-child(3) { width: var(--bar-3); } @media (prefers-reduced-motion: no-preference) { .skeleton i { animation: pulse var(--pulse) ease-in-out infinite alternate; } } @keyframes pulse { to { opacity: var(--pulse-low); } } /* A comment's head in one row: who said it and when wrap within their own box, the date under the author as a whole line where both do not fit, so its verdict and menu keep the right of the first line. */ .comment .boxhead { gap: var(--space-2); flex-wrap: nowrap; } .comment .boxhead > .byline { display: flex; flex-wrap: wrap; align-items: center; gap: 0 var(--space-2); flex: 1 1 auto; min-width: 0; } .comment .byline > .mute { min-width: 0; } .comment .boxhead > :not(.byline) { flex: none; } .comment .boxhead:has(.verdict) { flex-wrap: wrap; row-gap: var(--space-1); } /* Who said it stays beside their avatar: the verdict wraps under them instead. */ .comment .boxhead:has(.verdict) > .byline { flex-basis: var(--byline-min); } /* On a phone the menu keeps the right of the first line, and the verdict goes under who said it. */ @media (max-width: 640px) { .comment .boxhead:has(.verdict) { display: grid; grid-template-columns: auto minmax(0, 1fr) auto; column-gap: var(--space-2); } .comment .boxhead:has(.verdict) > .end:has(.verdict) { grid-column: 2; grid-row: 2; justify-self: start; margin-left: 0; } .comment .boxhead:has(.verdict) > :last-child:not(.end) { grid-column: 3; grid-row: 1; } } .comment .prose { padding: var(--space-4) var(--space-5); font-size: var(--text-base); } .event { display: flex; align-items: center; gap: var(--space-2-5); color: var(--mute); padding: 0 var(--pad-x); } .event .dot { flex-shrink: 0; display: inline-grid; place-items: center; width: var(--dot); height: var(--dot); border-radius: 50%; background: var(--merged); color: var(--on-solid); } .event .dot.closed { background: var(--closed-issue); } /* What it says shrinks with the page, breaking a long path or URI rather than running off it. */ .event > span:not(.dot) { min-width: 0; overflow-wrap: anywhere; } .event .dot.soft { background: var(--soft); color: var(--mute); } .event a.queued { color: inherit; } .event a.closer { color: var(--fg); font-weight: var(--weight-semibold); } .pushed { display: flex; flex-direction: column; gap: var(--space-2-5); } .pushed .box { margin-left: calc(var(--pad-x) + var(--dot)); } /* ── Writing on a pull or an issue ────────────────────────────────── */ :is(input, select, textarea).field { width: 100%; min-height: var(--control); padding: var(--space-1-5) var(--space-2-5); border: var(--border); border-radius: var(--radius-md); background: var(--bg); color: var(--fg); font: var(--text-field)/var(--leading) var(--font-sans); } :is(input, select).field { height: var(--control); padding-block: 0; } select.field { height: var(--control); padding-block: 0; } :is(input, select, textarea).field:focus { outline: 0; border-color: var(--primary); box-shadow: var(--ring); } textarea.field { resize: vertical; font-family: var(--font-mono); font-size: var(--text-field-sm); } .problem { color: var(--danger); font-size: var(--text-sm); } /* What went through, but not all the way: said beside the form that did it. */ .warning { color: var(--notice-fg); font-size: var(--text-sm); } /* What a name typed for a repository is: a hint, red when it cannot be given. */ .form .name-check.bad { color: var(--danger); } .item-head { display: flex; align-items: flex-start; gap: var(--space-3); } .item-head .item-title { flex: 1; min-width: 0; } /* The state pill shows beside the actions on a phone, in the meta line otherwise. */ .item-head .pill { display: none; } .item-actions { display: flex; align-items: center; gap: var(--space-1); } .item-actions .action-menu > summary { width: var(--control); height: var(--control); border: var(--border); background: var(--bg); color: var(--fg); } /* What is set on a pull or an issue, as the repository header's facts are drawn. */ .item-facts { flex-basis: 100%; display: flex; flex-wrap: wrap; align-items: center; gap: var(--space-1); margin-left: calc(-1 * var(--space-1-5)); font-size: var(--text-sm); } .item-facts > .sep { color: var(--faint); } .item-facts > .fact { padding: 0 var(--space-1-5); } .item-facts .filter-menu > summary { display: inline-flex; align-items: center; gap: var(--space-1-5); min-height: var(--control-sm); padding: 0 var(--space-1-5); border-radius: var(--radius-md); } .item-facts .filter-menu > summary:hover, .item-facts .filter-menu[open] > summary { background: var(--hover); } @media (min-width: 641px) { .item-facts .filter-menu > .menu { left: 0; right: auto; min-width: 18rem; } .reviewers-fact > .menu { width: max-content; max-width: min(28rem, calc(100vw - 2rem)); } } .reviewers-fact summary b, .assignees-fact summary b { color: var(--fg); font-weight: var(--weight-medium); } .assignees-fact .said { color: var(--mute); } .reviewers-fact .tally { color: var(--mute); } .reviewers-fact .face, .assignees-fact .face { position: relative; display: inline-flex; border-radius: var(--radius-full); box-shadow: 0 0 0 2px var(--bg); } .reviewers-fact .face + .face, .assignees-fact .face + .face { margin-right: calc(-1 * var(--space-1-5)); } /* Where each reviewer stands, as a mark on their face: words say it in the summary's label and the menu. */ .reviewers-fact .face::after { content: ''; position: absolute; right: calc(-1 * var(--space-0-5)); bottom: calc(-1 * var(--space-0-5)); box-sizing: border-box; width: var(--face-mark); height: var(--face-mark); border-radius: var(--radius-full); box-shadow: 0 0 0 2px var(--bg); background: var(--neutral); } .reviewers-fact .face.approved::after { background: var(--open); } .reviewers-fact .face.changes::after { background: var(--closed-pull); } .reviewers-fact .face.earlier::after, .reviewers-fact .face.awaited::after { background: var(--bg); border: 2px solid var(--attention); } .reviewers-fact .menu-item.reviewer, .assignees-fact .menu-item.reviewer { gap: var(--space-2); } .reviewer .who { flex: 1; min-width: 0; display: flex; flex-direction: column; white-space: normal; overflow-wrap: break-word; } .reviewer .who small { font-size: var(--text-xs); color: var(--mute); } .reviewer .said { font-size: var(--text-xs); color: var(--mute); white-space: nowrap; } .reviewer .said.approved { color: var(--open); } .reviewer .said.changes { color: var(--closed-pull); } .reviewer .stop { display: inline-grid; place-items: center; flex: none; width: var(--control-sm); height: var(--control-sm); border: 0; border-radius: var(--radius-sm); background: none; color: var(--mute); cursor: pointer; } .reviewer .stop:hover { background: var(--hover); color: var(--fg); } .reviewer .stop-room { flex: none; width: var(--control-sm); } .add-menu .menu-item .spinner, .add-menu .menu-item .dot { flex: none; } .menu-head.sub { margin-top: var(--space-1); border-top: var(--border); } @media (max-width: 640px) { .item-head { flex-wrap: wrap; align-items: center; } .item-head .item-title { flex-basis: 100%; } .item-head .pill { display: inline-flex; } .item-meta > .pill { display: none; } .item-actions { margin-left: auto; } .item-actions .btn { width: var(--control); padding: 0; justify-content: center; } .item-actions .word { position: absolute; width: 1px; height: 1px; overflow: hidden; clip-path: inset(50%); white-space: nowrap; } .item-facts { flex-direction: column; align-items: flex-start; margin-top: var(--space-1); } .item-facts > .sep, .reviewers-fact .tally { display: none; } } .title-edit { display: flex; flex-wrap: wrap; gap: var(--space-2); } .title-edit .field { flex: 1; width: auto; min-width: 12rem; font-size: var(--text-lg); } .box.comment { overflow: visible; } .action-menu > summary, .file-tool { display: inline-grid; place-items: center; width: var(--control-sm); height: var(--control-sm); border-radius: var(--radius-md); color: var(--mute); } .action-menu > summary:hover, .file-tool:hover:enabled, .action-menu[open] > summary { background: var(--hover); color: var(--fg); } .action-menu > .menu { left: auto; right: 0; min-width: 12rem; } .menu-item.danger { color: var(--danger); } .label-menu .menu-item { align-items: center; gap: var(--space-2); } .composer { display: flex; flex-direction: column; gap: var(--space-3); padding: var(--space-3); } .composer .review { display: flex; flex-wrap: wrap; gap: var(--space-2) var(--space-4); margin: 0; padding: 0; border: 0; font-size: var(--text-sm); } .composer .review legend { float: left; margin-right: var(--space-2); font-weight: var(--weight-semibold); } .composer .review label { display: inline-flex; align-items: center; gap: var(--space-1-5); cursor: pointer; } .composer-end { display: flex; flex-wrap: wrap; justify-content: flex-end; gap: var(--space-2); } /* Markdown being written: a tab to write it, one to preview it. */ .md-field { display: flex; flex-direction: column; gap: var(--space-2); } .md-write { position: relative; display: grid; } .md-write[hidden] { display: none; } .md-tabs { display: flex; gap: var(--space-4); border-bottom: var(--border); } .md-tabs button { padding: var(--space-1-5) 0; margin-bottom: -1px; border: 0; border-bottom: 2px solid transparent; background: none; color: var(--mute); font: inherit; font-size: var(--text-sm); cursor: pointer; } .md-tabs button:hover { color: var(--fg); } .md-tabs button[aria-selected='true'] { color: var(--fg); border-color: var(--accent); font-weight: var(--weight-medium); } .md-preview { border: var(--border); border-radius: var(--radius-md); } .md-preview .prose { padding: var(--space-4) var(--space-5); font-size: var(--text-base); } .md-preview .problem { padding: var(--space-3) var(--space-4); } .list-top { display: flex; align-items: flex-start; gap: var(--space-3); margin-bottom: var(--space-4); } .list-top .query { flex: 1; min-width: 0; margin-bottom: 0; } .list-top { align-items: center; } .form-title { font-size: var(--text-2xl); font-weight: var(--weight-medium); margin-bottom: var(--space-2); } .form-lead { margin-bottom: var(--space-4); } .open-form { overflow: visible; } .open-form .composer-end .item-facts { flex: 1 1 auto; } @media (max-width: 640px) { .open-form .composer-end .item-facts { flex-basis: 100%; } } .open-form .title { font-family: var(--font-sans); font-size: var(--text-lg); } .compare { display: flex; flex-wrap: wrap; align-items: flex-end; gap: var(--space-3); padding: var(--space-3); margin-bottom: var(--space-4); overflow: visible; } .compare label { display: flex; flex-direction: column; gap: var(--space-1); font-size: var(--text-sm); font-weight: var(--weight-medium); } .compare > .i { color: var(--mute); margin-bottom: var(--space-2); } .compare-ready { display: flex; flex-wrap: wrap; align-items: center; justify-content: space-between; gap: var(--space-3); padding: var(--space-3); margin-bottom: var(--space-4); font-size: var(--text-sm); } .compare .field { width: auto; min-width: 10rem; } .compared { margin: var(--space-4) 0; } /* ── The merge queue ──────────────────────────────────────────────── */ .queue { display: flex; flex-direction: column; gap: var(--space-4); margin-top: var(--space-4); } .queue .boxhead > .i { color: var(--mute); } .queue .meta .said { color: var(--fg); font-weight: var(--weight-semibold); } .queue-group { display: flex; flex-wrap: wrap; align-items: center; gap: var(--space-1-5) var(--space-2); padding: var(--space-2) var(--pad-x); border-bottom: var(--border); background: var(--soft); font-size: var(--text-sm); } .queue-group b { font-weight: var(--weight-semibold); } .queue-group > .i { color: var(--mute); } .queue-group.checking > .i { color: var(--running); } .queue-group.landing > .i { color: var(--open); } .queue-line .list + .queue-group { border-top: var(--border); } .queue .meta a { color: var(--fg); text-decoration: underline; text-decoration-color: var(--link-line); text-underline-offset: var(--underline-offset); } /* A command in what the queue said, as the prose's code reads, each word whole on a line: a word too long for the line breaks anywhere rather than past the edge. */ .said-text code { background: var(--soft); padding: var(--space-0-5) var(--space-1-5); border-radius: var(--radius-sm); font-size: 0.85em; } .said-text code span { display: inline-block; max-width: 100%; overflow-wrap: anywhere; } .failed-check { display: inline-flex; align-items: center; gap: var(--space-1); } .failed-check .i { color: var(--closed-pull); } /* ── Checks and their runs ────────────────────────────────────────── */ .check-list .head, .check-list .row { display: flex; align-items: center; gap: var(--space-2); padding: var(--row-y) var(--pad-x); } .check-list .head { border-bottom: var(--border); } .check-list .row + .row, .check-list .run-images + .row { border-top: var(--border); } .check-list .run-images { grid-template-columns: repeat(auto-fill, minmax(11rem, 1fr)); gap: var(--space-3); padding: var(--space-3) var(--pad-x); } .check-list .row b { font-weight: var(--weight-semibold); white-space: nowrap; } .check-list .said, .check-list .end { color: var(--mute); } .check-list .said { min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } .check-list .end, .check-list .details { white-space: nowrap; } .check-list .details { color: var(--accent); font-size: var(--text-sm); } .minutes-note { display: flex; align-items: center; gap: var(--space-3); padding: var(--row-y) var(--pad-x); border-top: var(--border); background: var(--notice); color: var(--notice-fg); } .check-list .minutes-note .said { flex: 1; min-width: 0; overflow: visible; white-space: normal; } .meter { display: block; flex: none; width: var(--meter-width); height: var(--space-1-5); border-radius: var(--radius-full); background: var(--notice-track); overflow: hidden; } .meter i { display: block; height: 100%; background: var(--running); } .runner-minutes { margin-top: var(--space-4); } .runner-minutes .head, .runner-minutes .row { display: flex; align-items: center; gap: var(--space-3); padding: var(--row-y) var(--pad-x); } .runner-minutes .head { border-bottom: var(--border); background: var(--panel); } .runner-minutes .head b { font-weight: var(--weight-semibold); } .runner-minutes .head .said, .runner-minutes .used { color: var(--mute); } .runner-minutes .row + .row { border-top: var(--border); } .runner-minutes .who { flex: 1; min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } .runner-minutes .meter { background: var(--soft); } .runner-minutes .meter-none { width: var(--meter-width); flex: none; } .runner-minutes .used { white-space: nowrap; } .chips { display: flex; flex-wrap: wrap; gap: var(--space-1-5); margin-bottom: var(--space-4); } .chips a { display: inline-flex; align-items: center; height: var(--control); padding: 0 var(--space-3); border: var(--border); border-radius: var(--radius-full); color: var(--mute); font-size: var(--text-sm); } .chips a[aria-current] { border-color: var(--accent); background: var(--accent-soft); color: var(--accent); } .chips a.asked { border-style: dashed; } .chips .sep { width: 1px; align-self: stretch; margin: var(--space-0-5) var(--space-1); background: var(--line); } .asked-for { display: flex; flex-direction: column; gap: var(--space-2); padding: var(--space-3) var(--pad-x); margin-bottom: var(--space-4); border: var(--border); border-radius: var(--radius-md); background: var(--panel); } .run-list .row { display: grid; grid-template-columns: 7.5rem minmax(0, 1fr) 6.5rem; gap: var(--space-0-5) var(--space-4); align-items: start; padding: var(--row-y) var(--pad-x); } .run-list .row + .row { border-top: var(--border); } .run-list .went { display: grid; grid-template-columns: var(--icon) 1fr; gap: 0 var(--space-1-5); align-items: center; } .run-list .went b { font-weight: var(--weight-semibold); } .run-list .went small { grid-column: 2; color: var(--faint); font-size: var(--text-xs); font-variant-numeric: tabular-nums; } .run-list .mark { display: flex; } .run-list .what { display: grid; gap: var(--space-0-5); min-width: 0; } .run-list .title, .run-list .why, .run-list p.sub { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } .run-list .sub { display: flex; gap: var(--space-1-5); align-items: center; min-width: 0; color: var(--mute); font-size: var(--text-sm); } .run-list p.sub { display: block; } .run-list .why { color: var(--closed-pull); font-size: var(--text-sm); } .run-list .why a, .run-list p.sub a { text-decoration: underline; text-decoration-color: var(--line); text-underline-offset: var(--underline-offset); } .run-list .when { color: var(--faint); text-align: right; white-space: nowrap; } .run-head { display: flex; align-items: baseline; gap: var(--space-2-5); padding: var(--space-3) var(--pad-x); } .run-head h2 { font-size: var(--text-2xl); } .run-about b { color: var(--fg); font-weight: var(--weight-semibold); } .run-error { margin: 0; padding: var(--space-3) var(--pad-x); color: var(--closed-pull); white-space: pre-wrap; border-top: var(--border); } .run-note { padding: var(--space-3) var(--pad-x); border-top: var(--border); } .step { border-top: var(--border); } .step > summary { display: flex; align-items: center; gap: var(--space-2); padding: var(--row-y) var(--pad-x); cursor: pointer; list-style: none; } .step > summary::-webkit-details-marker { display: none; } .step > summary:hover { background: var(--hover); } .step-log { margin: 0; padding: var(--space-3) var(--pad-x); background: var(--panel); font-size: var(--text-xs); line-height: 1.5; overflow-x: auto; max-height: 40rem; overflow-y: auto; border-top: var(--border); } .run-images { display: grid; grid-template-columns: repeat(auto-fill, minmax(14rem, 1fr)); gap: var(--space-4); padding: var(--space-4); border-top: var(--border); } .run-images figure { margin: 0; min-width: 0; } .run-images img { display: block; width: 100%; height: auto; border: var(--border); border-radius: var(--radius-sm); background: var(--panel); } .run-images figcaption { margin-top: var(--space-1-5); font-size: var(--text-xs); overflow-wrap: anywhere; } /* ── Home, the feed, search ───────────────────────────────────────── */ .intro { max-width: var(--measure); padding: var(--space-5) 0 var(--space-4); font-size: var(--text-md); line-height: var(--leading-prose); color: var(--mute); } .intro b { color: var(--fg); font-weight: var(--weight-semibold); } .intro a { color: var(--fg); text-decoration: underline; text-decoration-color: var(--link-line); text-underline-offset: var(--underline-offset); } .palette { width: min(36rem, calc(100vw - 2 * var(--space-4))); max-height: min(28rem, calc(100vh - 8rem)); margin: 12vh auto auto; padding: 0; border: var(--border); border-radius: var(--radius-md); background: var(--bg); color: var(--fg); box-shadow: var(--shadow-pop); overflow: hidden; } .palette[open] { display: flex; flex-direction: column; } .palette::backdrop, .dialog::backdrop { background: var(--scrim); } .dialog { position: fixed; width: min(24rem, calc(100vw - 2 * var(--space-4))); margin: 12vh auto auto; padding: var(--space-5); border: var(--border); border-radius: var(--radius-md); background: var(--bg); color: var(--fg); box-shadow: var(--shadow-pop); } .dialog h2 { font-size: var(--text-lg); font-weight: var(--weight-semibold); padding-right: var(--space-8); } .dialog .close { position: absolute; top: var(--space-4); right: var(--space-4); width: var(--control); justify-content: center; padding: 0; border: 0; font-size: var(--text-xl); color: var(--mute); } .dialog form { display: flex; flex-direction: column; gap: var(--space-2); margin-top: var(--space-4); } .dialog label { font-size: var(--text-sm); font-weight: var(--weight-medium); } .dialog input:not([type='radio'], [type='checkbox']) { height: var(--control); padding: 0 var(--space-2-5); border: var(--border); border-radius: var(--radius-md); background: var(--bg); color: var(--fg); font: var(--text-field) var(--font-sans); } .dialog input:not([type='radio'], [type='checkbox']):focus { outline: 0; border-color: var(--primary); box-shadow: var(--ring); } .dialog .problem { color: var(--danger); font-size: var(--text-sm); } .dialog:has(.handle-input) { overflow: visible; } .handle-input { position: relative; display: grid; } .handle-list { position: absolute; z-index: var(--z-menu); top: calc(100% + var(--space-1)); left: 0; right: 0; padding: var(--space-1); border: var(--border); border-radius: var(--radius-md); background: var(--bg); box-shadow: var(--shadow-pop); } .handle-option { display: flex; align-items: center; gap: var(--space-2); padding: var(--space-1-5) var(--space-2); border-radius: var(--radius-sm); cursor: pointer; } .handle-option[aria-selected='true'] { background: var(--hover); } .handle-option .who { display: grid; min-width: 0; font-size: var(--text-sm); } .handle-option .who b, .handle-option .who small { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } .handle-option .who b { font-weight: var(--weight-semibold); } .handle-option .who small { color: var(--mute); font-size: var(--text-xs); } .dialog select, .dialog textarea { padding: var(--space-1-5) var(--space-2-5); border: var(--border); border-radius: var(--radius-md); background: var(--bg); color: var(--fg); font: var(--text-field) var(--font-sans); } .dialog select { height: var(--control); } .dialog .sent { margin-top: var(--space-4); color: var(--mute); } .dialog .btn.primary { justify-content: center; margin-top: var(--space-2); } .dialog .apps { overflow: hidden; margin-top: var(--space-4); mask-image: linear-gradient( 90deg, transparent, #000 var(--space-6), #000 calc(100% - var(--space-6)), transparent ); } .dialog .apps-run { display: flex; gap: var(--space-3); width: max-content; animation: apps-run var(--apps-run) linear infinite; } .dialog .apps img { width: var(--app-icon); height: var(--app-icon); border-radius: var(--radius-lg); object-fit: cover; flex-shrink: 0; } @keyframes apps-run { to { transform: translateX(calc(-50% - var(--space-3) / 2)); } } @media (prefers-reduced-motion: reduce) { .dialog .apps-run { animation: none; } } .dialog .what { margin-top: var(--space-3); text-align: center; font-size: var(--text-sm); } .dialog .what a, .dialog .agree a { color: var(--fg); text-decoration: underline; text-decoration-color: var(--link-line); text-underline-offset: var(--underline-offset); } .dialog .agree { margin-top: var(--space-1); color: var(--mute); font-size: var(--text-xs); } .dialog .actions { display: flex; justify-content: flex-end; gap: var(--space-2); margin-top: var(--space-2); } .dialog .actions .btn.primary { margin-top: 0; } .dialog .create { margin-top: var(--space-3); padding-top: var(--space-3); border-top: var(--border); text-align: center; color: var(--mute); font-size: var(--text-sm); } .dialog .create button { padding: 0; border: 0; background: none; color: var(--fg); font: inherit; text-decoration: underline; text-decoration-color: var(--link-line); text-underline-offset: var(--underline-offset); cursor: pointer; } .palette label { display: flex; align-items: center; gap: var(--space-2-5); padding: 0 var(--pad-x); min-height: var(--strip); border-bottom: var(--border); color: var(--faint); } .palette .scope { flex: none; max-width: 55%; font: max(var(--text-md), var(--text-field)) var(--font-mono); color: var(--fg); } .palette input { flex: 1; min-width: 0; font: max(var(--text-md), var(--text-field)) var(--font-mono); color: var(--fg); background: transparent; border: 0; outline: 0; } .palette input::-webkit-search-cancel-button { display: none; } .palette ul { list-style: none; margin: 0; padding: var(--space-1) 0; overflow-y: auto; } .palette .head { padding: var(--space-1) var(--pad-x); font: var(--text-2xs) var(--font-mono); color: var(--faint); } .palette li + .head { margin-top: var(--space-1-5); } .palette [role='option'] a { display: flex; align-items: center; gap: var(--space-2-5); min-width: 0; padding: var(--space-1-5) var(--pad-x); font-size: var(--text-sm); } .palette [aria-selected='true'] a { background: var(--accent-soft); } .palette .name { flex: none; max-width: 75%; } .palette .faint { flex: 1; color: var(--faint); min-width: 0; } .palette .all a { color: var(--accent); font-family: var(--font-mono); } .palette footer { display: flex; gap: var(--space-4); padding: var(--space-2) var(--pad-x); border-top: var(--border); font: var(--text-2xs) var(--font-mono); color: var(--faint); } .feed-day { font-size: var(--text-sm); font-weight: var(--weight-semibold); color: var(--mute); margin: var(--space-8) 0 var(--space-2); padding-bottom: var(--space-1-5); border-bottom: var(--border); letter-spacing: 0; } .feed { list-style: none; margin: 0; padding: 0; } /* A rail: the time, who did it with a mark for what, a line down to the next. */ .feed > li { position: relative; display: grid; grid-template-columns: var(--feed-time) var(--avatar-md) minmax(0, 1fr); gap: 0 var(--space-3); padding: var(--space-2) 0; align-items: start; } .feed > li:not(:last-child)::before { content: ''; position: absolute; left: calc(var(--feed-time) + var(--space-3) + var(--avatar-md) / 2); top: calc(var(--space-2) + var(--avatar-md) + var(--space-1)); bottom: calc(-1 * var(--space-1)); width: 1px; background: var(--line); } .feed time { font: var(--text-xs) var(--font-mono); color: var(--faint); padding-top: var(--space-1-5); white-space: nowrap; font-variant-numeric: tabular-nums; } .feed .grow { padding-top: var(--space-1); } .feed p { overflow-wrap: anywhere; } .feed-node { position: relative; display: grid; place-items: center; width: var(--avatar-md); height: var(--avatar-md); } .feed-node > .av { width: var(--avatar-md); height: var(--avatar-md); } .feed-kind { position: absolute; right: calc(-1 * var(--space-1)); bottom: calc(-1 * var(--space-1)); display: grid; place-items: center; width: calc(var(--icon-sm) + var(--space-1-5)); height: calc(var(--icon-sm) + var(--space-1-5)); border-radius: var(--radius-full); background: var(--bg); border: var(--border); color: var(--mute); } .feed-kind .i { width: var(--icon-sm); height: var(--icon-sm); } .feed-kind.merged { color: var(--merged); } .feed-kind.open { color: var(--open); } .feed-kind.starred { color: var(--running); } .feed-kind.closed { color: var(--closed-pull); } .feed-kind.accent { color: var(--accent); } .feed-node.own .feed-kind { position: static; width: var(--avatar-md); height: var(--avatar-md); } .feed-node.own .feed-kind .i { width: var(--icon); height: var(--icon); } .feed-rest { display: flex; flex-wrap: wrap; align-items: baseline; gap: var(--space-1-5) var(--space-2); margin-top: var(--space-1); font-size: var(--text-sm); color: var(--mute); } .feed-badge { font: var(--text-xs) var(--font-mono); color: var(--faint); border: var(--border); border-radius: var(--radius-full); padding: 0 var(--space-1-5); white-space: nowrap; } .feed .feed-log { font-size: var(--text-xs); color: var(--accent); text-decoration: none; white-space: nowrap; } .feed .feed-log:hover { text-decoration: underline; } .feed-branches { list-style: none; margin: var(--space-1) 0 var(--space-0-5); padding: 0 0 0 var(--space-4); border-left: var(--border); display: grid; gap: var(--space-0-5); } .feed-branches li { display: grid; grid-template-columns: auto minmax(0, 1fr) auto auto; gap: var(--space-3); align-items: baseline; font-size: var(--text-sm); color: var(--mute); } .feed-branches li.caught { grid-template-columns: auto minmax(0, 1fr); color: var(--faint); } .feed-end { display: contents; } .feed-count { font: var(--text-xs) var(--font-mono); color: var(--faint); white-space: nowrap; } .feed-quote { color: var(--mute); font-size: var(--text-sm); margin-top: var(--space-1); padding-left: var(--space-2-5); border-left: 2px solid var(--line); } .feed-kinds { margin: var(--space-4) 0 0; } .feed-empty { margin-top: var(--space-4); } .crowd > summary { display: flex; align-items: center; gap: var(--space-2); width: max-content; max-width: 100%; list-style: none; cursor: pointer; color: var(--mute); } .crowd > summary::-webkit-details-marker { display: none; } .crowd > summary:hover { color: var(--fg); } .crowd .faces { display: flex; gap: var(--space-1); min-width: 0; overflow: hidden; } .crowd .more { font: var(--text-xs) var(--font-mono); } .crowd[open] > summary .i { transform: rotate(180deg); } .crowd ul { list-style: none; margin: var(--space-1-5) 0 var(--space-1); padding: 0; display: grid; gap: var(--space-1); } .crowd li { display: flex; align-items: center; gap: var(--space-2); } .crowd + p { margin-top: var(--space-1); } .feed .who, .feed .repo { font-weight: var(--weight-semibold); } .feed a:not(.who):not(.repo):not(.hash) { text-decoration: underline; text-decoration-color: var(--line); text-underline-offset: var(--underline-offset); } .feed .ref { background: transparent; color: var(--mute); padding: 0; } .feed-note { color: var(--mute); font-size: var(--text-sm); margin-top: var(--space-0-5); } .commits { list-style: none; margin: var(--space-1) 0 var(--space-0-5); padding: 0 0 0 var(--space-4); border-left: var(--border); } .commits li { display: flex; align-items: baseline; gap: var(--space-3); font-size: var(--text-sm); color: var(--mute); min-width: 0; } .commits .hash { font: var(--text-xs) var(--font-mono); color: var(--accent); flex: none; } .start { max-width: var(--measure); margin-top: var(--space-4); } .policy { max-width: var(--measure); margin-top: var(--space-4); padding-bottom: var(--space-8); line-height: var(--leading-prose); } .policy h1 { font-size: var(--text-xl); margin: 0 0 var(--space-1-5); } .policy .updated { color: var(--mute); font-size: var(--text-sm); margin: 0 0 var(--space-6); } .policy h2 { font-size: var(--text-lg); margin: var(--space-6) 0 var(--space-2); } .policy p, .policy ul { margin: 0 0 var(--space-3); } .policy ul { padding-left: var(--space-5); } .policy a { color: var(--fg); text-decoration: underline; text-decoration-color: var(--link-line); text-underline-offset: var(--underline-offset); } .start h1 { font-size: var(--text-xl); margin: 0 0 var(--space-1-5); } .start .lede { color: var(--mute); margin: 0 0 var(--space-6); } .start > p:not(.lede) { font: var(--text-sm) var(--font-mono); color: var(--faint); margin: var(--space-4) 0 var(--space-1-5); } .start .cmd { background: var(--panel); } .start h2 { font-size: var(--text-lg); font-weight: var(--weight-semibold); margin: var(--space-8) 0 0; } .agent-chat { margin: 0; border: var(--border); border-radius: var(--radius-md); background: var(--panel); padding: var(--space-4) var(--pad-x); } .agent-chat ol { list-style: none; margin: 0; padding: 0; display: flex; flex-direction: column; gap: var(--space-1-5); min-width: 0; } .agent-chat .who { position: absolute; width: 1px; height: 1px; overflow: hidden; clip-path: inset(50%); } .agent-chat .you { align-self: flex-end; max-width: 85%; background: var(--accent-soft); border-radius: var(--radius-md); padding: var(--space-2) var(--space-3); } .agent-chat .you:not(:first-child) { margin-top: var(--space-6); } .agent-chat .says { margin-top: var(--space-1); } .agent-chat .tool { display: flex; gap: var(--space-2); min-width: 0; font: var(--text-xs) var(--font-mono); color: var(--mute); } .agent-chat .tool code { color: var(--accent); flex: none; } .agent-chat .tool span { min-width: 0; overflow-wrap: anywhere; } .agent-chat figcaption { display: flex; align-items: center; justify-content: space-between; gap: var(--space-3); margin-top: var(--space-4); padding-top: var(--space-3); border-top: var(--border); font-size: var(--text-sm); color: var(--mute); } .agent-chat figcaption .btn { height: var(--control-sm); } .agent-chat li { position: relative; } .agent-chat li.hidden { visibility: hidden; } .agent-chat .rest { visibility: hidden; } .agent-chat .tool .mark { flex: none; align-self: center; width: var(--chat-mark); height: var(--chat-mark); border-radius: var(--radius-full); background: var(--success); } .agent-chat .tool.running .mark { background: var(--running); } .agent-chat .dots { visibility: visible; position: absolute; left: 0; top: 0; display: flex; gap: var(--space-1); padding-top: var(--space-1-5); } .agent-chat .dots i { width: var(--chat-mark); height: var(--chat-mark); border-radius: var(--radius-full); background: var(--faint); } @media (prefers-reduced-motion: no-preference) { .agent-chat .tool.running .mark { animation: pulse var(--pulse) ease-in-out infinite alternate; } .agent-chat .dots i { animation: pulse var(--pulse) ease-in-out infinite alternate; } .agent-chat .dots i:nth-child(2) { animation-delay: var(--chat-beat); } .agent-chat .dots i:nth-child(3) { animation-delay: calc(var(--chat-beat) * 2); } } .stats { margin-top: var(--space-4); } .stats h1 { font-size: var(--text-xl); font-weight: var(--weight-semibold); margin: 0 0 var(--space-1-5); } .stats .lede { color: var(--mute); margin: 0 0 var(--space-5); } .stats .network { display: grid; grid-template-columns: repeat(auto-fit, minmax(var(--stat-width), 1fr)); gap: var(--space-3); margin: 0 0 var(--space-5); } .stats .network div { border: var(--border); border-radius: var(--radius-md); padding: var(--space-2-5) var(--space-4); } .stats dt { color: var(--mute); font-size: var(--text-sm); } .stats dd { margin: var(--space-0-5) 0 0; font-size: var(--text-2xl); font-weight: var(--weight-semibold); font-variant-numeric: tabular-nums; } .stats .scroll { overflow-x: auto; } .stats table { border-collapse: collapse; font: var(--text-sm) var(--font-mono); font-variant-numeric: tabular-nums; } .stats th, .stats td { padding: var(--space-1) var(--space-3); border-bottom: var(--border); text-align: right; white-space: nowrap; } .stats th:first-child, .stats td:first-child { text-align: left; } .stats th { color: var(--mute); font-weight: var(--weight-medium); } .stats .total td { font-weight: var(--weight-semibold); } .stats .counted { color: var(--mute); font-size: var(--text-sm); max-width: var(--measure); margin: var(--space-5) 0 0; } .steps-page, .step-page { margin-top: var(--space-4); } .steps-page h1, .step-head h1 { font-size: var(--text-xl); font-weight: var(--weight-semibold); margin: 0 0 var(--space-1-5); overflow-wrap: anywhere; } .steps-page .lede, .step-page .lede { color: var(--mute); margin: 0 0 var(--space-5); } .step-page .lede { max-width: var(--measure); } .steps-page .lede a { color: var(--fg); text-decoration: underline; text-decoration-color: var(--link-line); text-underline-offset: var(--underline-offset); } .steps .step-facts { flex: none; flex-direction: column; align-items: flex-end; gap: var(--space-0-5); margin-top: 0; text-align: right; } .step-page .crumbs { display: block; font-size: var(--text-sm); margin-bottom: var(--space-3); } .step-head { display: flex; flex-wrap: wrap; align-items: center; gap: var(--space-2) var(--space-3); } .step-head h1 { display: inline-flex; align-items: center; gap: var(--space-2); margin: 0; } .step-head h1 svg.i { color: var(--mute); flex: none; } .step-page > .meta { margin: var(--space-1-5) 0 var(--space-4); } .step-page > .meta a { display: inline-flex; align-items: center; gap: var(--space-1); color: var(--mute); min-width: 0; overflow-wrap: anywhere; } .step-page > .meta .sep { color: var(--faint); } .step-cols { display: grid; grid-template-columns: minmax(0, 1fr) var(--side-width); align-items: start; gap: var(--space-6); } .step-cols h2 { font-size: var(--text-md); font-weight: var(--weight-semibold); margin: 0 0 var(--space-2-5); } .step-cols .box + h2, .step-cols .hint + h2, .step-cols .asks + h2 { margin-top: var(--space-6); } .step-cols .hint { color: var(--mute); font-size: var(--text-sm); margin: var(--space-2) 0 0; } .step-cols .input-name { font-weight: var(--weight-semibold); } .step-cols .version { display: inline-flex; flex-wrap: wrap; align-items: center; gap: var(--space-1-5); min-width: 0; } .step-cols .version b { font-weight: var(--weight-semibold); } .step-cols .list li > .repo { min-width: 0; overflow-wrap: anywhere; } .asks { list-style: none; margin: 0; padding: 0; display: flex; flex-direction: column; gap: var(--space-2); } .asks li { display: flex; align-items: flex-start; gap: var(--space-2); } .asks svg.i { color: var(--mute); flex: none; margin-top: var(--space-0-5); } .step-side { min-width: 0; } @media (max-width: 640px) { .step-cols { grid-template-columns: minmax(0, 1fr); } .step-cols .list .sha { display: inline-block; } .steps li { flex-wrap: wrap; } .steps .step-facts { flex: 1 1 100%; flex-direction: row; flex-wrap: wrap; align-items: center; gap: var(--space-1) var(--space-3); text-align: left; } } .results h1 { font-size: var(--text-xl); margin: var(--space-4) 0; } .results h2 { font-size: var(--text-sm); font-weight: var(--weight-semibold); color: var(--mute); margin: var(--space-5) 0 var(--space-2-5); } .owners { list-style: none; margin: 0; padding: 0; display: grid; grid-template-columns: repeat(auto-fill, minmax(14rem, 1fr)); gap: var(--space-3); } .owners a { display: flex; align-items: center; gap: var(--space-2-5); padding: var(--space-2-5) var(--space-3); border: var(--border); border-radius: var(--radius-md); } .owners a:hover { background: var(--hover); } .owners .clip > * { display: block; overflow: hidden; text-overflow: ellipsis; } .owners .mute { font-size: var(--text-sm); } .error-page { padding: var(--space-16) 0; text-align: center; } .error-page h1 { font-size: var(--text-display); letter-spacing: var(--tracking-display); } .error-page p { color: var(--mute); margin-top: var(--space-2); } /* ── Landing and CI: the merge box, re-runs, runners ──────────────── */ .merge-box .row { display: flex; align-items: flex-start; gap: var(--space-2-5); padding: var(--row-y) var(--pad-x); } .merge-box .row + .row { border-top: var(--border); } .merge-box .row > svg.i { margin-top: 2px; color: var(--mute); } .merge-box .row.clean > svg.i, .merge-box .row.auto-set > svg.i { color: var(--open); } .merge-box .row.running > svg.i, .merge-box .row.pending > svg.i { color: var(--running); } .merge-box .row.conflicting > svg.i, .merge-box .row.failed > svg.i { color: var(--closed-pull); } .merge-box .row p { margin-top: var(--space-0-5); font-size: var(--text-sm); } .merge-box .row p.conflicts-head { margin-top: var(--space-2); font-weight: var(--weight-semibold); color: var(--fg); } .merge-box .conflicts { margin: var(--space-1) 0 0; padding: 0; list-style: none; font: var(--text-sm) var(--font-mono); } .merge-box .conflicts li { padding: var(--space-0-5) 0; } .merge-box .conflicts a { overflow-wrap: anywhere; color: var(--fg); } .merge-box .conflicts a:hover { color: var(--accent); text-decoration: underline; text-underline-offset: var(--underline-offset); } .merge-box .missing { margin: var(--space-1) 0 0; padding-left: var(--space-4); font-size: var(--text-sm); } .merge-box .missing li { padding: var(--space-0-5) 0; overflow-wrap: anywhere; } .merge-box .how { margin-top: var(--space-2); font-size: var(--text-sm); } .merge-box .how > summary { cursor: pointer; color: var(--accent); } .merge-box .how .cmd { margin-top: var(--space-1-5); } .merge-box .check-groups { padding: var(--space-1) var(--pad-x) var(--space-2) calc(var(--pad-x) + var(--icon) + var(--space-2-5)); border-top: var(--border); background: var(--panel); } .merge-box .group > summary { cursor: pointer; padding: var(--space-1-5) 0; font-size: var(--text-xs); font-weight: var(--weight-medium); color: var(--mute); } .merge-box .check { display: flex; align-items: center; gap: var(--space-2); padding: var(--space-1-5) 0; font-size: var(--text-sm); } .merge-box .check:hover b { text-decoration: underline; text-underline-offset: var(--underline-offset); } .merge-box .check b { font-weight: var(--weight-semibold); white-space: nowrap; } .merge-box .check .said { min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; color: var(--mute); } .merge-box .check > svg.i:last-child { margin-left: auto; color: var(--faint); } .merge-box .reviewers .check b { min-width: 0; overflow: hidden; text-overflow: ellipsis; } .merge-box .reviewers .check-row { display: flex; align-items: center; gap: var(--space-2); } .merge-box .reviewers .check-row > .check { flex: 1; min-width: 0; } .merge-box .reviewers .check .said { flex-shrink: 0; } .merge-box .row > .end { align-self: center; } .merge-box .minutes-note .said { flex: 1; min-width: 0; } .merge-box > .check-groups:last-child, .merge-box > .minutes-note:last-child { border-radius: 0 0 var(--radius-md) var(--radius-md); } .merge-box { overflow: visible; } .merge-box > .row:first-child { border-radius: var(--radius-md) var(--radius-md) 0 0; } .merge-box .actions { border-radius: 0 0 var(--radius-md) var(--radius-md); display: flex; flex-wrap: wrap; align-items: center; gap: var(--space-2) var(--space-3); padding: var(--row-y) var(--pad-x); border-top: var(--border); background: var(--panel); } .merge-box .actions .next { flex-basis: 100%; font-size: var(--text-sm); } .merge-box .actions .next a, .hint a { color: var(--fg); text-decoration: underline; text-decoration-color: var(--link-line); text-underline-offset: var(--underline-offset); } .merge-box .keep { display: inline-flex; align-items: center; gap: var(--space-1-5); font-size: var(--text-sm); color: var(--mute); } .more-menu > .menu, .rerun-menu > .menu { left: auto; right: 0; min-width: 12rem; } .merge-box .problem, .rerun-menu .problem, .runner-list .problem, .secret-list .problem { padding: var(--space-2) var(--pad-x); color: var(--danger); font-size: var(--text-sm); overflow-wrap: anywhere; } .rerun-menu > summary.btn { height: var(--control-sm); padding: 0 var(--space-2); font-size: var(--text-xs); color: var(--fg); } .dialog select { height: var(--control); padding: 0 var(--space-2); border: var(--border); border-radius: var(--radius-md); background: var(--bg); color: var(--fg); font: var(--text-field) var(--font-sans); } .dialog .label-like { font-size: var(--text-sm); font-weight: var(--weight-medium); } .run-workflow .var { display: flex; gap: var(--space-2); } .run-workflow .var input { flex: 1; min-width: 0; } .account-danger { margin-top: var(--space-10); } .delete-data { width: min(30rem, calc(100vw - 2 * var(--space-4))); max-height: 80vh; overflow: hidden; } .delete-data:popover-open { display: flex; flex-direction: column; } .delete-data > .hint { margin-top: var(--space-2); } .delete-data .data-body { flex: 1; min-height: 0; overflow-y: auto; margin-top: var(--space-2); } .delete-data h3 { margin-top: var(--space-4); font-size: var(--text-sm); font-weight: var(--weight-semibold); } .delete-data h3 + .hint { margin-top: var(--space-1); } .delete-data form { flex: none; margin-top: var(--space-3); padding-top: var(--space-4); border-top: var(--border); } .delete-data ul { display: flex; flex-direction: column; margin-top: var(--space-1-5); padding: 0; list-style: none; border: var(--border); border-radius: var(--radius-md); } .delete-data .data-counts { display: grid; grid-template-columns: 1fr 1fr; } .delete-data .data-counts li:nth-child(2) { border-top: 0; } .delete-data .data-counts li:nth-child(odd) { border-right: var(--border); } .delete-data li { display: flex; align-items: baseline; gap: var(--space-2); flex-wrap: wrap; padding: var(--space-1-5) var(--space-2-5); font-size: var(--text-sm); } .delete-data li + li { border-top: var(--border); } .delete-data li .clip { min-width: 0; max-width: 100%; } .delete-data li .mute { font-size: var(--text-xs); } .delete-data .shared { display: flex; align-items: baseline; gap: var(--space-2); margin-left: auto; font-size: var(--text-xs); } .delete-data .shared a { color: var(--primary); } .delete-data .data-counts li { justify-content: space-between; } .delete-data progress { width: 100%; accent-color: var(--danger); } .delete-data .hint { color: var(--mute); font-size: var(--text-sm); } .runner-list .boxhead, .secret-list .boxhead { flex-direction: column; align-items: flex-start; gap: var(--space-0-5); } .runner-list .boxhead .mute, .secret-list .boxhead .mute { font-size: var(--text-sm); } .runner-list code { min-width: 0; font-size: var(--text-xs); overflow-wrap: anywhere; } .runner-list li { flex-wrap: wrap; } .runner-list .add-runner { flex-direction: row; align-items: center; gap: var(--space-2); padding: var(--space-3) var(--pad-x); } .runner-list .add-runner input { flex: 1; min-width: 0; height: var(--control); padding: 0 var(--space-2-5); border: var(--border); border-radius: var(--radius-md); background: var(--bg); color: var(--fg); font: var(--text-field) var(--font-sans); } .runner-list .warning { padding: var(--space-2) var(--pad-x); color: var(--notice-fg); font-size: var(--text-sm); } .secret-list { margin-top: var(--space-6); } .secret-list .secret-what { flex: 1; min-width: 0; display: flex; flex-wrap: wrap; align-items: baseline; gap: var(--space-0-5) var(--space-2); } .secret-list .secret-what > .mute { font-size: var(--text-sm); overflow-wrap: anywhere; } .secret-list .secret-value { -webkit-text-security: disc; } .secret-list .secret-form { flex-direction: column; align-items: stretch; padding: var(--space-3) var(--pad-x) var(--space-4); } .secret-list .secret-form .hint, .secret-list .note { font-size: var(--text-sm); } .secret-list .note { padding: var(--space-3) var(--pad-x); text-align: left; } .secret-list .secret-runners { display: flex; flex-direction: column; gap: var(--space-2); margin: var(--space-3) 0 0; padding: 0; border: 0; min-width: 0; } .secret-list .secret-runners legend { padding: 0; margin-bottom: var(--space-2); } .secret-list .secret-runners input { margin: 0; } .secret-list .secret-runners .check { display: flex; align-items: center; gap: var(--space-2); font-weight: var(--weight-normal); } .settings-note { font-size: var(--text-sm); } /* ── Settings: the side's sections, and the forms beside them ─────── */ .settings-page, .search-page { display: grid; grid-template-columns: var(--side) minmax(0, 1fr); gap: var(--space-6) var(--space-8); margin-top: var(--space-3); } .settings-head { grid-column: 1/-1; display: flex; align-items: center; gap: var(--space-3); min-width: 0; } .settings-head h1 { font-size: var(--text-xl); } .settings-head .mute { font-size: var(--text-sm); } .account-nav { display: flex; flex-direction: column; gap: var(--space-0-5); } .account-nav a { display: flex; align-items: center; gap: var(--space-2); padding: var(--space-1-5) var(--space-2); border-radius: var(--radius-md); color: var(--fg); white-space: nowrap; } .account-nav a .i { color: var(--mute); } .account-nav a:hover { background: var(--hover); color: var(--fg); } /* The section shown by its ground and icon alone: a bolder weight would widen it and move those beside it in a phone's row. */ .account-nav a[aria-current] { background: var(--soft); } .account-nav a[aria-current] .i { color: var(--fg); } /* A group of pages, as Appearance's: its name opens it, a chevron at its end, its pages under it, set in past its icon. */ .account-nav a.account-group-tab { display: none; } .account-group summary { display: flex; align-items: center; gap: var(--space-2); padding: var(--space-1-5) var(--space-2); border-radius: var(--radius-md); cursor: pointer; list-style: none; white-space: nowrap; } .account-group summary::-webkit-details-marker { display: none; } .account-group summary:hover { background: var(--hover); } .account-group summary > .i { color: var(--mute); } .account-group-mark { display: flex; margin-left: auto; color: var(--mute); } .account-group-mark .i { transform: rotate(90deg); } .account-group[open] .account-group-mark .i { transform: rotate(-90deg); } .account-group a { margin-top: var(--space-0-5); padding-left: calc(var(--space-2) * 2 + var(--icon)); } .settings-main { min-width: 0; } /* Search: what is searched down the side, as settings' sections are, the results beside. */ .search-page h1 { margin: 0 0 var(--space-3); } .search-nav a .count { margin-left: auto; } .search-side { display: flex; flex-direction: column; gap: var(--space-4); min-width: 0; } .search-langs { display: flex; flex-direction: column; gap: var(--space-0-5); } .search-lang { --fill: var(--lang-fill); --more: 0%; position: relative; display: flex; align-items: center; padding: var(--space-1-5) var(--space-2); border-radius: var(--radius-md); color: var(--fg); white-space: nowrap; } .search-lang:hover { color: var(--fg); --more: var(--lang-fill-step); } .search-lang:active { --more: calc(2 * var(--lang-fill-step)); } .search-lang[aria-current] { --fill: var(--lang-fill-picked); font-weight: var(--weight-semibold); } .search-lang span { position: relative; } .search-lang-bar { position: absolute; inset: 0 auto 0 0; border-radius: inherit; background: color-mix( in srgb, var(--lang) calc(var(--fill) + var(--more)), var(--under, var(--bg)) ); transition: background var(--quick); } .search-nav-head { padding: var(--space-1-5) var(--space-2); font-size: var(--text-sm); font-weight: var(--weight-semibold); color: var(--mute); } .search-count { margin-bottom: var(--space-3); font-size: var(--text-sm); } .search-deepest { margin-top: var(--space-5); text-align: center; font-size: var(--text-sm); } .code-result-name { flex: 1; min-width: 0; overflow-wrap: break-word; } .code-result-path { padding: var(--space-2) var(--pad-x); font-size: var(--text-sm); } .code-results .faint { color: var(--faint); } .code-result + .code-result { border-top: var(--border); } .code-result :is(.ln, .src) { padding-top: var(--space-2); padding-bottom: var(--space-2); } .code-result mark { background: var(--target); color: var(--fg); border-radius: var(--radius-xs); } .settings-section { padding-bottom: var(--space-2); margin-bottom: var(--space-4); border-bottom: var(--border); } .settings-section h2 { font-size: var(--text-xl); font-weight: var(--weight-medium); } .settings-form { display: flex; flex-direction: column; gap: var(--space-4); max-width: var(--measure); min-width: 0; } .settings-form fieldset { margin: 0; padding: 0; border: 0; min-width: 0; } .field:not(input, select, textarea) { display: flex; flex-direction: column; gap: var(--space-1-5); min-width: 0; } .field-label { font-size: var(--text-sm); font-weight: var(--weight-semibold); padding: 0; } .settings-form input:not([type='checkbox'], [type='radio'], [type='file']), .settings-form textarea, .settings-form select { width: 100%; min-width: 0; height: var(--control); padding: 0 var(--space-2-5); border: var(--border); border-radius: var(--radius-md); background: var(--bg); color: var(--fg); font: var(--text-field) var(--font-sans); } .settings-form textarea { height: auto; padding: var(--space-1-5) var(--space-2-5); line-height: var(--leading); resize: vertical; } .settings-form input:focus, .settings-form textarea:focus, .settings-form select:focus { outline: 0; border-color: var(--primary); box-shadow: var(--ring); } .settings-form .btn { flex: none; } .settings-form .btn.primary { align-self: flex-start; } .hint { color: var(--mute); font-size: var(--text-xs); font-weight: var(--weight-medium); } .settings-form .problem { color: var(--danger); font-size: var(--text-sm); } .inline-form { display: flex; flex-wrap: wrap; gap: var(--space-2); } .inline-form input, .inline-form select { flex: 1 1 12rem; width: auto; } .link-row { display: flex; flex-wrap: wrap; gap: var(--space-2); margin-bottom: var(--space-2); } .link-row input { flex: 2 1 12rem; } .link-row input + input { flex: 1 1 8rem; } /* A repository's links in its settings, rows under their legend as a field's input is under its label. */ .form .links-field { display: flex; flex-direction: column; align-items: flex-start; margin: var(--space-3) 0 0; padding: 0; border: 0; min-width: 0; } .links-field legend { padding: 0; margin-bottom: var(--space-1-5); } .links-field .link-row { align-self: stretch; } .links-field .hint { margin: var(--space-1-5) 0 var(--space-2); } .picture { display: flex; align-items: center; gap: var(--space-4); } .picture-actions { display: flex; flex-wrap: wrap; align-items: center; gap: var(--space-2); } .picture-actions .hint { flex-basis: 100%; } .btn .file { position: absolute; width: 1px; height: 1px; opacity: 0; pointer-events: none; } .btn:has(.file:focus-visible) { outline: 2px solid var(--primary); outline-offset: 2px; } .profile-form { display: flex; flex-wrap: wrap; align-items: flex-start; gap: var(--space-8); } .profile-form .settings-form { flex: 999 1 20rem; } .toggles li:hover { background: none; } .toggle { display: flex; align-items: flex-start; gap: var(--space-2-5); cursor: pointer; } .toggle input { margin: var(--space-1) 0 0; accent-color: var(--primary); } .toggle .about { display: block; color: var(--mute); font-size: var(--text-sm); } .settings-form fieldset .toggle + .toggle { margin-top: var(--space-2); } /* Appearance's themes: each a card drawn in its own colours, a little page in it. */ .themes { display: grid; margin-top: var(--space-1); grid-template-columns: repeat(auto-fill, minmax(var(--theme-card), 1fr)); gap: var(--space-3); } .theme-choice { position: relative; display: flex; flex-direction: column; border: var(--border); border-radius: var(--radius-md); overflow: hidden; cursor: pointer; } .theme-choice:has(input:checked) { border-color: var(--primary); } .theme-choice:has(input:focus-visible) { outline: 2px solid var(--primary); outline-offset: 2px; } .theme-preview { display: flex; flex-direction: column; gap: var(--space-1-5); height: var(--theme-preview); padding: var(--space-2-5); background: var(--bg); overflow: hidden; } .theme-line { height: var(--space-1-5); width: 80%; border-radius: var(--radius-xs); background: var(--fg); } .theme-line.short { width: 50%; background: var(--mute); } .theme-dots { display: flex; gap: var(--space-1); margin-top: auto; } .theme-dot { width: var(--space-3); height: var(--space-3); border-radius: 50%; } .theme-dot.primary { width: var(--space-6); border-radius: var(--radius-full); background: var(--primary); } .theme-dot.accent { background: var(--accent); } .theme-dot.green { background: var(--green); } .theme-dot.red { background: var(--red); } .theme-name { display: flex; align-items: flex-start; gap: var(--space-2); padding: var(--space-2) var(--space-2-5); border-top: var(--border); font-size: var(--text-sm); } /* The radio, and the menu of one's own, each centred on the name's first line. */ .theme-name input { margin: calc((1lh - 1em) / 2) 0 0; line-height: inherit; accent-color: var(--primary); } .theme-made { display: flex; flex-direction: column; min-width: 0; } /* A theme's name, two lines at most, broken where it must be; all of it in its title. */ .theme-title { display: -webkit-box; -webkit-box-orient: vertical; -webkit-line-clamp: 2; line-clamp: 2; overflow: hidden; overflow-wrap: anywhere; } /* Which half of a pair a theme draws, on its preview's corner, in the page's own colours. */ .theme-tag { position: absolute; top: var(--space-2); right: var(--space-2); display: flex; gap: var(--space-1); padding: var(--space-1) var(--space-1-5); border: var(--border); border-radius: var(--radius-full); background: var(--bg); color: var(--mute); font-size: var(--text-xs); } /* Sync with system: the two halves as tabs, over the list that chooses the open one's theme. */ .theme-halves { display: grid; grid-template-columns: repeat(auto-fill, minmax(var(--theme-half), 1fr)); gap: var(--space-3); } .theme-half { position: relative; display: grid; grid-template-columns: var(--theme-half-preview) 1fr; align-items: center; gap: var(--space-3); padding: 0 var(--space-3) 0 0; border: var(--border); border-radius: var(--radius-md); overflow: hidden; background: var(--bg); color: var(--fg); font: inherit; font-size: var(--text-sm); text-align: left; cursor: pointer; } .theme-half:hover { background: var(--soft); } .theme-half[aria-selected='true'] { border-color: var(--primary); box-shadow: 0 0 0 1px var(--primary); background: var(--accent-soft); } .theme-half:focus-visible { outline: 2px solid var(--primary); outline-offset: 2px; } .theme-half-label { display: flex; align-items: center; gap: var(--space-1-5); } .theme-half > .theme-preview { border-right: var(--border); } .theme-list { display: grid; gap: inherit; } .theme-list[role='tabpanel'] { padding: var(--space-4); border: 1px solid var(--primary); border-radius: var(--radius-md); } .theme-for { margin: 0; font-weight: var(--weight-semibold); } /* A theme found, to add: no radio, its button at its name's end. */ .theme-found { cursor: default; } .theme-found > .theme-name { align-items: center; justify-content: space-between; } .theme-add { flex: none; justify-content: center; width: var(--control-sm); height: var(--control-sm); padding: 0; color: var(--mute); } .theme-add[aria-pressed='true'] { background: var(--primary); border-color: var(--primary); color: var(--on-primary); } .theme-owned { position: relative; display: flex; flex-direction: column; } .theme-owned > .theme-choice { flex: 1; } .theme-menu { position: absolute; top: calc( var(--theme-preview) + var(--space-2) + var(--space-0-5) + (1lh - var(--control-sm)) / 2 ); right: var(--space-1-5); font-size: var(--text-sm); } .theme-owned .theme-name { padding-right: calc(var(--control-sm) + var(--space-2-5)); } /* A theme's buttons, a row of their own, set apart from the cards above them. */ .theme-actions { display: flex; flex-wrap: wrap; gap: var(--space-2); margin: 0; } .field > .theme-actions { margin-top: var(--space-2-5); } /* Every theme people made, a dialog wide enough for a few cards a row, its list scrolling under its search. */ .dialog.theme-browser { display: none; width: min(48rem, calc(100vw - 2 * var(--space-4))); height: 76vh; margin-top: 12vh; flex-direction: column; gap: var(--space-3); overflow: hidden; } .dialog.theme-browser:popover-open { display: flex; } .theme-browser-list { overflow-y: auto; min-height: 0; } .theme-browser-list:has(> .empty) { display: grid; align-content: center; } /* A list scrolling in its own box fades where there is more past its top or bottom (rows.ts marks which). */ .more-below { mask-image: linear-gradient(to bottom, var(--fg) calc(100% - var(--list-fade)), transparent); } .more-above { mask-image: linear-gradient(to top, var(--fg) calc(100% - var(--list-fade)), transparent); } .more-above.more-below { mask-image: linear-gradient( to bottom, transparent, var(--fg) var(--list-fade), var(--fg) calc(100% - var(--list-fade)), transparent ); } .dialog.theme-browser > * { flex: none; } .dialog.theme-browser > .theme-browser-list { flex: 1 1 auto; } .theme-browser-list .themes { margin-top: 0; grid-template-columns: repeat(auto-fill, minmax(var(--theme-card-tight), 1fr)); } .theme-browser-more { display: flex; justify-content: center; margin: var(--space-3) 0 0; } /* Making a theme: the theme drawn in its colours, over the colours. */ .theme-editor { display: flex; flex-direction: column; gap: var(--space-4); max-width: var(--measure); } .theme-editor > p { margin: 0; } .colours { display: grid; grid-template-columns: repeat(auto-fill, minmax(var(--theme-card), 1fr)); gap: var(--space-2) var(--space-3); } .colour { display: flex; align-items: center; gap: var(--space-2); min-width: 0; font-size: var(--text-sm); } .settings-form .colour input[type='color'] { flex: none; width: var(--control); padding: var(--space-0-5); cursor: pointer; } .choices { display: flex; flex-wrap: wrap; gap: var(--space-2) var(--space-4); } .theme-short { padding: var(--row-y) var(--pad-x); border-radius: var(--radius-md); background: var(--notice); color: var(--notice-fg); font-size: var(--text-sm); } .theme-short ul { margin: var(--space-1) 0 0; padding-left: var(--space-5); } .theme-sample { display: flex; flex-direction: column; gap: var(--space-3); padding: var(--space-4); border: var(--border); border-radius: var(--radius-md); background: var(--bg); color: var(--fg); } .theme-sample p { margin: 0; } .theme-sample a { color: var(--accent); } .theme-sample-head { padding-bottom: var(--space-3); border-bottom: var(--border); } .theme-sample .faint { color: var(--faint); } .theme-sample-pills { display: flex; flex-wrap: wrap; gap: var(--space-2); } .theme-sample-code { margin: 0; padding: var(--space-3); border-radius: var(--radius-md); background: var(--soft); font: var(--text-sm) var(--font-mono); white-space: pre-wrap; } .theme-sample-c { color: var(--comment); } .theme-sample-k { color: var(--keyword); } .theme-sample-f { color: var(--function); } .theme-sample-t { color: var(--type); } .theme-sample-s { color: var(--string); } .theme-sample-n { color: var(--number); } .profile-actions { display: flex; gap: var(--space-2); } .profile-actions .follow { flex: 1; } .actor-menu > .menu { left: auto; right: 0; min-width: 14rem; } .menu-note { padding: var(--space-1) var(--space-3); font-size: var(--text-sm); } .menu-note.problem { color: var(--danger); } @media (max-width: 640px) { .settings-page, .search-page { grid-template-columns: minmax(0, 1fr); } /* Code and repositories are tabs; the languages to narrow to stay off a phone's row. */ .search-nav-head, .code-result-lang { display: none; } .search-side { gap: var(--space-3); } .search-langs { flex-direction: row; gap: var(--space-2); overflow-x: auto; scrollbar-width: none; } .search-lang { --under: var(--soft); flex: none; height: var(--control); padding: 0 var(--space-3); border-radius: var(--radius-full); background: var(--soft); overflow: hidden; } .search-lang-bar { border-radius: 0; } /* On a phone the sections are tabs: a flat line under the one picked, on the row's own line, as the repository's tabs have. */ .account-nav { flex-direction: row; overflow-x: auto; overflow-y: hidden; scrollbar-width: none; border-bottom: var(--border); } .account-nav a { border-radius: 0; border-bottom: 2px solid transparent; margin-bottom: -1px; } .account-nav a:hover, .account-nav a[aria-current] { background: none; } .account-nav a[aria-current] { border-bottom-color: var(--accent); } .account-group { display: none; } .account-nav a.account-group-tab { display: flex; } .settings-head .btn { display: none; } } /* ── Forms: making and managing repositories ──────────────────────── */ .form { display: flex; flex-direction: column; align-items: stretch; gap: var(--space-2); } .form { gap: var(--space-1-5); } .form label, .form .label-like { font-size: var(--text-sm); font-weight: var(--weight-medium); } .form > :is(label:not(.check), .label-like, .owned, .actions, .check):not(:first-child) { margin-top: var(--space-3); } .form > label + .owned:not(:first-child) { margin-top: 0; } .form > .hint { margin: 0; } .form input:not([type='checkbox']), .form select, .form textarea { width: 100%; min-width: 0; height: var(--control); padding: 0 var(--space-2-5); border: var(--border); border-radius: var(--radius-md); background: var(--bg); color: var(--fg); font: var(--text-field) var(--font-sans); } .form textarea { height: auto; min-height: 5rem; padding: var(--space-2) var(--space-2-5); resize: vertical; } .form :is(input, select, textarea):focus { outline: 0; border-color: var(--primary); box-shadow: var(--ring); } .form .hint { color: var(--mute); font-size: var(--text-xs); margin-bottom: var(--space-2); } .form .problem { color: var(--danger); font-size: var(--text-sm); } .owned { display: flex; align-items: center; gap: var(--space-2); } .owned > .handle-input { flex: 1; min-width: 0; } .owned > .mute { flex: none; font-size: var(--text-sm); } .new-repo { max-width: var(--measure); margin: var(--space-8) auto 0; width: 100%; } .new-repo .form { margin-top: var(--space-5); } .repo-actions { display: flex; flex-wrap: wrap; gap: var(--space-2); } .repo-menu > .menu { left: auto; right: 0; min-width: 14rem; } .watch-menu > .menu { left: auto; right: 0; width: 18rem; } .watch-menu .menu-item { align-items: flex-start; } .watch-menu .tick { display: inline-flex; width: var(--icon); flex: none; color: var(--accent); } .watch-menu .menu-item b { display: block; font-weight: var(--weight-medium); } .watch-menu .menu-item small { display: block; color: var(--mute); font-size: var(--text-sm); } .watch-menu .problem { padding: var(--space-2) var(--space-3); color: var(--danger); font-size: var(--text-sm); } .fork-menu > .menu { left: auto; right: 0; width: 22rem; padding: 0 var(--space-3) var(--space-3); } .fork-menu .menu-head { margin: 0 calc(-1 * var(--space-3)) var(--space-1); } .settings { display: flex; align-items: flex-start; gap: var(--space-8); } .settings-nav { flex: none; width: var(--side); display: flex; flex-direction: column; gap: var(--space-0-5); position: sticky; top: var(--space-4); } .settings-body { flex: 1; min-width: 0; display: flex; flex-direction: column; gap: var(--space-8); } .setting { display: flex; flex-direction: column; gap: var(--space-2); } .setting h2 { font-size: var(--text-lg); font-weight: var(--weight-semibold); padding-bottom: var(--space-2); border-bottom: var(--border); margin-bottom: var(--space-2); } .setting h3 { font-size: var(--text-sm); font-weight: var(--weight-semibold); } .setting .hint { color: var(--mute); font-size: var(--text-xs); } .setting .problem, .offer .problem { color: var(--danger); font-size: var(--text-sm); } .setting .actions { display: flex; align-items: center; gap: var(--space-3); } .setting .actions .mute { font-size: var(--text-sm); } .setting.danger { border: var(--border); border-color: var(--danger); border-radius: var(--radius-md); padding: var(--space-4); } .setting.danger h2 { color: var(--danger); } .danger-row { display: flex; align-items: center; justify-content: space-between; gap: var(--space-4); } .danger-row + .danger-row, .setting.danger .form + .danger-row, .setting.danger .problem + .danger-row { padding-top: var(--space-4); border-top: var(--border); } .setting.danger .form { max-width: var(--measure); } .btn.danger { color: var(--danger); } .btn.danger:hover { background: var(--danger); border-color: var(--danger); color: var(--on-solid); } .btn.danger.solid { justify-content: center; margin-top: var(--space-2); background: var(--danger); border-color: var(--danger); color: var(--on-solid); } .btn.danger.solid:disabled { background: var(--bg); color: var(--danger); } .offer { display: flex; flex-wrap: wrap; align-items: center; gap: var(--space-3); margin: 0 0 var(--space-4); padding: var(--row-y) var(--pad-x); border-radius: var(--radius-md); background: var(--notice); color: var(--notice-fg); } .offer p:first-child { flex: 1; min-width: 0; } .archived-note { margin: 0 0 var(--space-4); padding: var(--row-y) var(--pad-x); border-radius: var(--radius-md); background: var(--notice); color: var(--notice-fg); } .grant-note p:first-child { flex-basis: var(--notice-text); } .rows li { flex-wrap: wrap; } .rows li:hover { background: var(--bg); } .row-main { flex: 1 1 12rem; min-width: 0; display: flex; flex-wrap: wrap; align-items: center; gap: var(--space-2); } .row-main > .mute { font-size: var(--text-sm); } .row-main .label { max-width: 100%; overflow: hidden; text-overflow: ellipsis; } .row-main > a { max-width: calc(100% - var(--icon) - var(--space-2)); overflow-wrap: anywhere; } .row-end { display: flex; flex-wrap: wrap; gap: var(--space-2); } .row-end .btn { height: var(--control-sm); padding: 0 var(--space-2); font-size: var(--text-xs); } .row-form { flex-basis: 100%; max-width: var(--measure); } /* A protected branch's rule, by what each part governs: how pulls merge, then what they need of reviews. */ .branch-rule { flex-basis: 100%; max-width: var(--measure); display: flex; flex-direction: column; gap: var(--space-3); } .rule-group { display: flex; flex-direction: column; gap: var(--space-3); padding-top: var(--space-3); border-top: var(--border); } .rule-group h3 { margin: 0; font-size: var(--text-sm); font-weight: var(--weight-semibold); color: var(--mute); } .rule-group .check { align-items: flex-start; } .rule-group .check input { flex: none; margin-top: var(--space-0-5); } .rule-group .check > label, .rule-group .check > span, .rule-group .required > label { flex: 1; min-width: 0; } .rule-group b { display: block; font-weight: var(--weight-semibold); } .rule-group .hint { display: block; margin: 0; font-weight: var(--weight-normal); } .rule-group select { flex: none; width: auto; height: var(--control-sm); min-height: 0; font-size: var(--text-field-sm); } .rule-group .required { display: flex; flex-direction: column; gap: var(--space-2); font-size: var(--text-sm); } .branch-rule .gates { list-style: none; margin: var(--space-2) 0 0; padding: 0; display: flex; flex-direction: column; gap: var(--space-2); } .list li .gates > li { padding: 0; border-top: 0; justify-content: space-between; gap: var(--space-3); } .list li .gates > li:hover { background: none; } .gates .row-main { flex-wrap: nowrap; } .gates .row-main > a { min-width: 0; overflow-wrap: anywhere; } .check { display: flex; align-items: center; gap: var(--space-2); font-size: var(--text-sm); } .form .check { font-weight: var(--weight-medium); } /* A choice of one, as a radio pair: each option its name, and who it is for. */ .form .choice { display: flex; flex-direction: column; gap: var(--space-3); margin: var(--space-2) 0; padding: var(--space-3) 0; border: 0; border-block: var(--border); } .form .choice .check { align-items: flex-start; } .form .choice input { flex: none; width: auto; height: auto; padding: 0; margin-top: var(--space-0-5); } .form .choice b { display: block; font-weight: var(--weight-semibold); } .form .choice .hint { display: block; margin: 0; } .form .choice .check:has(:disabled) { color: var(--mute); cursor: default; } .swatches { display: flex; flex-wrap: wrap; align-items: center; gap: var(--space-1-5); } .swatch { position: relative; width: var(--control-sm); height: var(--control-sm); padding: 0; border: var(--border); border-radius: var(--radius-sm); background: var(--swatch); cursor: pointer; } .swatch[aria-pressed='true'] { box-shadow: 0 0 0 2px var(--bg), 0 0 0 4px var(--fg); } .swatch.custom { display: grid; place-items: center; overflow: hidden; background: conic-gradient(from 0deg, #e5484d, #fbca04, #0e8a16, #1d76db, #5319e7, #e5484d); } .swatch.custom::after { content: ''; width: calc(var(--control-sm) - var(--space-2)); height: calc(var(--control-sm) - var(--space-2)); border-radius: var(--radius-xs); background: var(--swatch); box-shadow: 0 0 0 1px var(--bg); } .swatch.custom input { position: absolute; inset: 0; width: 100%; height: 100%; opacity: 0; cursor: pointer; } .swatches code { margin-left: var(--space-1); } .setting-head { display: flex; align-items: center; justify-content: space-between; gap: var(--space-3); padding-bottom: var(--space-2); border-bottom: var(--border); margin-bottom: var(--space-2); } .setting-head h2 { padding: 0; border: 0; margin: 0; } .label-dialog { width: min(30rem, calc(100vw - 2 * var(--space-4))); } .label-dialog .label-preview { display: flex; justify-content: center; margin-top: var(--space-4); padding: var(--space-4); border: var(--border); border-radius: var(--radius-md); background: var(--panel); } .label-dialog .label-preview .label { max-width: 100%; overflow: hidden; text-overflow: ellipsis; } .label-dialog form > .label-like, .label-dialog form > label:not(:first-child) { margin-top: var(--space-2); } .label-dialog .exclusive { display: grid; grid-template-columns: auto 1fr; align-items: center; gap: var(--space-0-5) var(--space-2); font-weight: var(--weight-normal); } .label-dialog .exclusive input { width: auto; height: auto; margin: 0; } .label-dialog .exclusive .mute { grid-column: 2; font-size: var(--text-xs); } .label-dialog .swatch.custom input { padding: 0; border: 0; } .label-dialog input[readonly] { background: var(--panel); color: var(--mute); } /* ── Phones ───────────────────────────────────────────────────────── */ @media (max-width: 640px) { .wrap { padding: 0 var(--space-4); } .foot { padding-top: var(--space-5); padding-bottom: var(--space-8); } main.wrap { padding-top: var(--space-5); } /* The path takes a line of its own under the branch and Code, rather than pushing Code onto one alone. */ .toolbar .crumbs { order: 1; flex-basis: 100%; } /* Compare & pull and Code, when both show, share the line they wrap to, half each, rather than two buttons left stranded at its end. */ .toolbar-end:has(> .btn + .clone-menu) { flex: 1 1 auto; } .toolbar-end:has(> .btn + .clone-menu) > * { flex: 1 1 0; } .toolbar-end:has(> .btn + .clone-menu) > .btn, .toolbar-end:has(> .btn + .clone-menu) > .clone-menu > summary { flex: 1; justify-content: center; } .top .wrap { gap: var(--space-4); } /* A repository's Fork and Star share the row, as Follow fills a profile's: half each, whatever is in them, so starring does not move the split. Columns rather than flex: a flex item can't be narrower than its own padding, so a bare Fork button started wider than Star's plain wrapper. */ .repo-actions { flex-basis: 100%; display: grid; grid-auto-flow: column; grid-auto-columns: minmax(0, 1fr); } .repo-actions > * { width: 100%; min-width: 0; justify-content: center; } .repo-actions :is(.fork-menu, .watch-menu) > summary, .repo-actions .counted > .btn, .repo-actions .counted > details { flex: 1 1 0; min-width: 0; justify-content: center; } /* Its "…" keeps to its own width beside them. */ .repo-actions:has(> .repo-menu) { grid-auto-flow: row; grid-template-columns: minmax(0, 1fr) auto; } .repo-actions:has(> .repo-menu):has(> .star) { grid-template-columns: minmax(0, 1fr) minmax(0, 1fr) auto; } .repo-actions:has(> .repo-menu):has(> .watch-menu) { grid-template-columns: minmax(0, 1fr) minmax(0, 1fr) auto; } .repo-actions:has(> .repo-menu):has(> .watch-menu):has(> .star) { grid-template-columns: minmax(0, 1fr) minmax(0, 1fr) minmax(0, 1fr) auto; } /* Star's column, beside Watch and Fork, fits "Star" but can be narrower than its icon, "Starred" and count: that word then goes, still read out, rather than the button's content spilling past its edges. */ .repo-actions > .star { container: star/inline-size; } @container star (max-width:8rem) { .star .btn[aria-pressed='true'] .word { position: absolute; width: 1px; height: 1px; overflow: hidden; clip-path: inset(50%); white-space: nowrap; } } .top nav { gap: var(--space-4); margin-left: 0; } .search { margin-left: auto; flex: none; width: auto; justify-content: center; padding: 0; border: 0; background: transparent; color: var(--mute); } /* The header's icons the same space apart, each tappable wider than it is drawn. */ .search, .new-link, .bell { padding-inline: var(--space-2); margin-inline: calc(-1 * var(--space-2)); } .search { margin-left: auto; } /* Go to file as its icon alone, square, and the branch and tag counts left to the branch menu and the tabs, so the branch, Go to file and Code keep to one row. */ .file-finder > summary { width: var(--control); padding: 0; justify-content: center; } .toolbar:has(.file-finder) .ref-counts { display: none; } .file-finder > summary :is(kbd, .label), .search span, .search kbd, .palette footer, .palette .scope > .mute:first-child { display: none; } .palette { margin-top: var(--space-4); } .profile { max-width: none; flex-basis: 100%; } .profile .av.xl { width: var(--avatar-lg); height: var(--avatar-lg); font-size: 34px; } .av.id { background: var(--soft); } .av.id rect { fill: hsl(var(--h) 45% 52%); } .prose { padding: var(--space-4) var(--space-4) var(--space-5); } .list li { align-items: flex-start; } .list.files li { align-items: center; } /* Chips in one row that scrolls, as the tabs do, rather than one left alone on a second row; a list's filters in one row, Open and Closed without their icons and the queue's link by its icon alone. */ .chips { flex-wrap: nowrap; overflow-x: auto; scrollbar-width: none; } .chips a { flex: none; } .queue-link span { display: none; } .box.items > .boxhead { flex-wrap: nowrap; } .box.items .menus { gap: var(--space-3); } .box.items .filter { gap: var(--space-3); } .box.items .filter a { white-space: nowrap; } .box.items .filter .i { display: none; } .box.items .menus ~ .end { margin-left: var(--space-3); } .run-about .end { margin-left: 0; } .list .sha, .list .hide-sm, .list li > .hide-sm, .boxhead .filter + .mute { display: none; } .files .name { flex: 1; } /* The last commit in one line: who, what, how its checks stand, and the way to its history; its authors by their faces alone, and no time, as the rows below have none, so the subject keeps its room. */ .last-head { flex-wrap: nowrap; } .last-head .sha, .last-head .hide-sm, .last-head .avs + span, .last-head > b, .last-head > a:not(.grow, .history):has(> b) { display: none; } /* No hover on a phone: the edge drawn thicker, and tapped for the list rather than a segment's tip. */ .lang-edge { height: var(--edge-phone); } .lang-tip { visibility: hidden; } /* The list, as the menus are on a phone: a sheet along the bottom over the page dimmed, which a tap closes. */ .lang-key { position: fixed; z-index: calc(var(--z-menu) + 1); top: auto; left: var(--space-2); right: var(--space-2); bottom: var(--space-2); min-width: 0; max-width: none; } .lang-scrim { display: block; position: fixed; inset: 0; z-index: var(--z-menu); padding: 0; border: 0; background: var(--scrim); cursor: default; } .file .stat { margin-left: 0; } .file .file-tools { margin-left: auto; } .code .ln { min-width: 2.75rem; padding-left: var(--space-2); } /* Blame by when and who alone, the subject on the commit's page. */ .code.gutted { grid-template-columns: var(--blame-width-phone) auto minmax(0, 1fr); } .blame-head { padding-left: var(--space-2); padding-right: var(--space-2); } .blame-when { width: auto; flex: 1; min-width: 0; } .blame-who { order: -1; } .blame-subject { display: none; } .diff .n { min-width: 2.25rem; padding: 0 var(--space-1-5); } .pull-files { grid-template-columns: minmax(0, 1fr); } .release-when { flex-basis: 100%; margin-left: calc(var(--icon) + var(--space-2)); } /* A line of facts wrapped on a phone, kept apart by space, as a dot would lead or end a line. */ .release-strip { flex-wrap: wrap; column-gap: var(--space-4); } .release-strip .sep { display: none; } .repohead .facts { gap: var(--space-3) var(--space-4); } .repohead .facts > .sep { display: none; } .repohead .facts .repo-links { max-width: 100%; } /* A link's row wrapped, its Remove under its fields, set apart from the next link's. */ .link-row { margin-bottom: var(--space-4); } /* The list of links opens under them from the line's start, not the count, the screen's width less its gutters. */ .repohead .repo-links { position: relative; } .repohead .links-menu { position: static; } .links-menu > .menu { width: calc(100vw - 2 * var(--space-4)); } /* Who may push opens under the whole line of facts, from its start, the screen's width less its gutters. */ .repohead .facts { position: relative; } .repohead .people-menu { position: static; } .people-menu > .menu { width: calc(100vw - 2 * var(--space-4)); } .release-strip .release-name { align-items: flex-start; } .release-strip .release-name svg.i { margin-top: var(--space-0-5); } .release-strip .release-name .what { flex-wrap: wrap; } .release-strip .release-name .what > a { white-space: normal; } .release-files li { flex-wrap: wrap; align-items: baseline; gap: var(--space-1) var(--space-3); } .release-files .file-name { flex-basis: 100%; } .pull-files > aside { position: static; max-height: none; } .pull-files:not(.tree-shown) > aside, .pull-files:not(.tree-shown) .tree-toggle .hide { display: none; } .pull-files:not(.tree-shown) .tree-toggle .show { display: inline-flex; } .item-title { font-size: var(--text-2xl); } .pushed .box { margin-left: 0; } .check-list .run-images { grid-template-columns: repeat(auto-fill, minmax(6rem, 1fr)); gap: var(--space-2); } .minutes-note .meter { display: none; } .run-list .row { grid-template-columns: 6.5rem minmax(0, 1fr); } .run-list .when { display: none; } .feed > li { grid-template-columns: var(--avatar-md) minmax(0, 1fr); } .feed > li:not(:last-child)::before { left: calc(var(--avatar-md) / 2); } .feed time { grid-column: 2; grid-row: 2; padding-top: var(--space-0-5); } /* A branch over two lines: its name and what it brought, then how many and the way to them; a long name wraps rather than widening the page. */ .feed-branches li, .feed-branches li.caught { display: flex; flex-wrap: wrap; column-gap: var(--space-3); } .feed-branches .ref { max-width: 100%; overflow-wrap: anywhere; } .feed-branches { grid-template-columns: minmax(0, 1fr); gap: var(--space-2); } .feed-branches .clip { flex: 1 1 8rem; min-width: 0; } .feed-end { display: flex; flex-basis: 100%; gap: var(--space-3); } .crowd .faces .av:nth-child(n + 6) { display: none; } .top .start-link { display: none; } .top nav:not(:has(> :not(.start-link))) { display: none; } /* The counts of branches and tags, their numbers alone. */ .ref-counts .word, .history .words { display: none; } /* The way to the history, by its icon alone, as GitHub's phone page has it: a tap's size, its words in its title. */ .last-head .history { justify-content: center; width: var(--control); padding: 0; } /* A menu with much in it, a list to search or a form, opens as a sheet along the bottom, where it has the width; a few actions stay under the button that opened them. */ details:is( .branch-menu, .repo-switch, .clone-menu, .file-finder, .fork-menu, .watch-menu, .filter-menu, .checks-menu, .review-menu ) > .menu { position: fixed; z-index: calc(var(--z-menu) + 1); top: auto; left: var(--space-2); right: var(--space-2); bottom: var(--space-2); width: auto; min-width: 0; max-width: none; max-height: 70vh; overflow-y: auto; } /* Behind it, the page dimmed: its button's own, so a tap there closes it. */ details:is( .branch-menu, .repo-switch, .clone-menu, .file-finder, .fork-menu, .watch-menu, .filter-menu, .checks-menu, .review-menu )[open] > summary::before { content: ''; position: fixed; inset: 0; z-index: var(--z-menu); background: var(--scrim); cursor: default; } .settings { flex-direction: column; align-items: stretch; gap: var(--space-4); } .settings-nav { position: static; width: 100%; flex-direction: row; } .account-nav a { flex: none; } .danger-row { flex-direction: column; align-items: flex-start; } /* A runner's name a line of its own, its minutes under it. */ .runner-minutes .head, .runner-minutes .row { flex-wrap: wrap; gap: var(--space-1) var(--space-3); } .runner-minutes .head .said, .runner-minutes .who { flex-basis: 100%; } .runner-minutes .meter-none { display: none; } } /* ── Highlighted code ─────────────────────────────────────────────── */ ::highlight(comment) { color: var(--comment); } ::highlight(string) { color: var(--string); } ::highlight(keyword) { color: var(--keyword); } ::highlight(number) { color: var(--number); } ::highlight(function) { color: var(--function); } ::highlight(type) { color: var(--type); } ::highlight(tag) { color: var(--tag); } ::highlight(attr) { color: var(--attr); } ::highlight(xins) { background-color: var(--ins-x); color: var(--fg); } ::highlight(xdel) { background-color: var(--del-x); color: var(--fg); } /* ── Admin ────────────────────────────────────────────────────────── */ .admin-box + .admin-box { margin-top: var(--space-4); } .admin-box h2 { font-size: var(--text-base); font-weight: var(--weight-semibold); } .admin-form { display: flex; flex-direction: column; gap: var(--space-2); padding: var(--row-y) var(--pad-x); } .admin-form label { font-size: var(--text-sm); font-weight: var(--weight-medium); } .admin-form input { height: var(--control); padding: 0 var(--space-2-5); border: var(--border); border-radius: var(--radius-md); background: var(--bg); color: var(--fg); font: var(--text-field) var(--font-mono); } .admin-form input:focus { outline: 0; border-color: var(--primary); box-shadow: var(--ring); } .admin-form .problem { color: var(--danger); font-size: var(--text-sm); } .admin-actions { display: flex; flex-wrap: wrap; align-items: center; gap: var(--space-2); } .reports p { overflow-wrap: anywhere; } .usage { overflow-x: auto; } .usage table { border-collapse: collapse; width: 100%; font-size: var(--text-sm); font-variant-numeric: tabular-nums; } .usage th, .usage td { padding: var(--space-1-5) var(--space-3); border-top: var(--border); text-align: right; white-space: nowrap; } .usage th { font-weight: var(--weight-medium); color: var(--mute); border-top: 0; } .usage th:first-child, .usage td:first-child { text-align: left; } /* A pull's stack, highest first, joined down to the branch it lands on. */ .stack-map { list-style: none; margin: 0; padding: var(--space-2); background: var(--soft); font-size: var(--text-sm); } .stack-map li { position: relative; display: flex; align-items: flex-start; gap: var(--space-2-5); padding: var(--space-1-5) var(--space-2); border-radius: var(--radius-md); } .stack-map li:not(:last-child)::after { content: ''; position: absolute; left: calc(var(--space-2) + var(--icon) / 2); top: calc(var(--space-1-5) + var(--icon) + var(--space-1)); bottom: calc(var(--space-0-5) - var(--space-1-5)); border-left: var(--border); } .stack-map li.here { background: var(--accent-soft); } .stack-map .grow { flex: 1; min-width: 0; display: flex; flex-direction: column; } .stack-map .title { overflow-wrap: anywhere; } .stack-map b.title { font-weight: var(--weight-semibold); } .stack-map .meta { color: var(--mute); font-size: var(--text-xs); overflow-wrap: anywhere; } .stack-map .root { align-items: center; } .stack-dot { flex: none; width: var(--space-2); height: var(--space-2); margin: 0 var(--space-1); border: var(--border); border-color: var(--mute); border-radius: 50%; background: var(--bg); } .pull-stack { margin-bottom: var(--space-5); } .merge-box > .stack-map { border-top: var(--border); } .stack-scope { margin-bottom: var(--space-4); font-size: var(--text-sm); } .stack-scope .row { display: flex; align-items: center; gap: var(--space-2-5); padding: var(--space-2) var(--pad-x); } .stack-scope .row > svg.i { color: var(--mute); flex: none; } .stack-scope .row p { min-width: 0; } .stack-scope b { font-weight: var(--weight-semibold); } .stack-next { display: flex; flex-wrap: wrap; } .stack-scope .row + .stack-next { border-top: var(--border); } .stack-next a { flex: 1 1 40%; min-width: 0; display: flex; flex-direction: column; padding: var(--space-2) var(--pad-x); color: var(--fg); } .stack-next a.after { text-align: right; margin-left: auto; } .stack-next a + a { border-left: var(--border); } .stack-next .mute { font-size: var(--text-xs); }