// ───────────────────────────────────────────────────────────────────────────── // Page: Issues (/*/issues + /*/issues/* + /*/issues/new) // File: src/scss/pages/_issues.scss // // STRUCTURAL LAYOUT ONLY — zero colors, zero typography here. // Visual rules live in components/_issues.scss. // ───────────────────────────────────────────────────────────────────────────── // ── Issue list page (.isl-*) ────────────────────────────────────────────────── // App-shell page (issue #139) — .isl-page fills whatever the body shell // leaves it via flex, no calc()/height budget needed. .isl-page { flex: 1; min-height: 0; overflow: hidden; display: flex; flex-direction: column; gap: var(--space-4); @media (max-width: 900px) { overflow: visible; } } .isl-stat-strip { flex-shrink: 0; } // Independently-scrolling columns — each is `flex: 1` within the // app-shell's remaining space, not a calc()'d height. See // docs/issues/two-column-app-shell-refactor.md. .isl-layout { display: grid; grid-template-columns: 1fr 220px; gap: var(--space-4); align-items: stretch; min-height: 0; flex: 1; @media (max-width: 900px) { grid-template-columns: 1fr; } } .isl-main { min-width: 0; min-height: 0; display: flex; flex-direction: column; gap: var(--space-3); overflow-y: auto; scrollbar-width: thin; scrollbar-color: var(--border-default) transparent; // The card wrapper (clips rounded corners around the row list, see // issue_list.html) is a flex item here — without flex-shrink:0 it // shrinks to fit isl-main's bounded height by default instead of // overflowing, so isl-main's own overflow-y:auto never triggers and // the card's `overflow:hidden` silently eats everything past the fold. > .card { flex-shrink: 0; } @media (max-width: 900px) { overflow-y: visible; } } .isl-sidebar { display: flex; flex-direction: column; gap: 0; min-height: 0; overflow-y: auto; scrollbar-width: thin; scrollbar-color: var(--border-default) transparent; @media (max-width: 900px) { overflow-y: visible; display: none; } } .isl-list { display: flex; flex-direction: column; } .isl-row-body { flex: 1; min-width: 0; display: flex; flex-direction: column; gap: 5px; } .isl-row-title-line { display: flex; align-items: baseline; gap: 8px; } .isl-row-meta-line { display: flex; align-items: center; gap: 6px; flex-wrap: wrap; } .isl-row-intel-line { display: flex; align-items: center; gap: 5px; flex-wrap: wrap; } .isl-row-right { display: flex; flex-direction: column; align-items: flex-end; gap: 4px; flex-shrink: 0; } .isl-empty { display: flex; flex-direction: column; align-items: center; justify-content: center; padding: var(--space-12) var(--space-6); text-align: center; gap: var(--space-3); } .isl-pagination { display: flex; align-items: center; justify-content: center; gap: var(--space-2); padding: var(--space-4) 0; } .isl-tpl-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(220px, 1fr)); gap: var(--space-3); padding: var(--space-3) var(--space-4); } .isl-sb-list { display: flex; flex-direction: column; gap: 0; } .isl-sb-labels { display: flex; flex-direction: column; gap: 4px; } .isl-sb-people { display: flex; flex-direction: column; gap: 4px; } .isl-sb-intel-list { display: flex; flex-direction: column; gap: 2px; } .isl-sb-intel-body { display: flex; flex-direction: column; gap: 2px; flex: 1; min-width: 0; } .isl-sb-agent-list { display: flex; flex-direction: column; gap: 4px; } .isl-stat-strip { display: flex; align-items: center; justify-content: space-between; gap: var(--space-3); flex-wrap: wrap; } .isl-stat-counts { display: flex; align-items: center; gap: 6px; flex-wrap: wrap; } .isl-strip-filters { display: flex; align-items: center; gap: var(--space-2); flex-shrink: 0; } .isl-tabs { display: flex; align-items: center; } .isl-filters { display: flex; align-items: center; gap: var(--space-2); margin-left: auto; flex-wrap: wrap; padding: var(--space-2) 0; } // ── Issue detail page (.isd-*) ───────────────────────────────────────────────── // App-shell page (issue #139) — fills whatever the body shell leaves it. .isd-page { flex: 1; min-height: 0; overflow: hidden; display: flex; flex-direction: column; @media (max-width: 900px) { overflow: visible; } } .isd-hero { flex-shrink: 0; } .isd-hero-inner { position: relative; max-width: 1200px; margin: 0 auto; padding: var(--space-8) var(--space-6) var(--space-5); } .isd-eyebrow { display: flex; align-items: center; justify-content: space-between; gap: var(--space-3); flex-wrap: wrap; margin-bottom: var(--space-4); } .isd-eyebrow-left { display: flex; align-items: center; gap: var(--space-2); flex-wrap: wrap; } .isd-eyebrow-right { display: flex; align-items: center; gap: var(--space-2); flex-shrink: 0; } .isd-wrap { flex: 1; min-height: 0; display: flex; flex-direction: column; max-width: 1200px; margin: 0 auto; padding: var(--space-5) var(--space-6) var(--space-10); width: 100%; @media (max-width: 900px) { overflow: visible; } } // Independently-scrolling columns — each is `flex: 1` within the // app-shell's remaining space, not a calc()'d height. See // docs/issues/two-column-app-shell-refactor.md. .isd-layout { display: grid; grid-template-columns: 1fr 280px; gap: var(--space-6); align-items: stretch; min-height: 0; flex: 1; @media (max-width: 900px) { grid-template-columns: 1fr; } } .isd-main { min-width: 0; min-height: 0; overflow-y: auto; scrollbar-width: thin; scrollbar-color: var(--border-default) transparent; @media (max-width: 900px) { overflow-y: visible; } } .isd-sidebar { display: flex; flex-direction: column; gap: 0; min-height: 0; overflow-y: auto; scrollbar-width: thin; scrollbar-color: var(--border-default) transparent; // See isl-main's .card comment — direct children of a flex column // shrink-to-fit by default instead of overflowing; the sidebar's // stacked metadata cards must not compress. > * { flex-shrink: 0; } @media (max-width: 900px) { overflow-y: visible; } } .isd-panel-hd { display: flex; align-items: center; gap: var(--space-2); padding: var(--space-3) var(--space-4); } .isd-anchor-addr { display: flex; align-items: center; gap: 0; flex: 1; min-width: 0; } .isd-anchor-stats { display: flex; align-items: center; gap: var(--space-2); flex-shrink: 0; } .isd-body-hd { display: flex; align-items: center; gap: var(--space-2); padding: var(--space-3) var(--space-4); } .isd-event-replies { display: flex; flex-direction: column; gap: 0; } .isd-event-empty { display: flex; align-items: center; justify-content: center; padding: var(--space-6) var(--space-4); } .isd-release-bd { display: flex; flex-direction: column; gap: 4px; padding: var(--space-2) var(--space-3); } .isd-rel-commit-top { display: flex; align-items: center; gap: 6px; } .isd-rel-landed-in { display: flex; align-items: center; gap: 5px; flex-wrap: wrap; } .isd-ic-section { display: flex; flex-direction: column; gap: 7px; padding: 9px 12px; } .isd-ic-section-label { display: flex; align-items: center; justify-content: space-between; } .isd-ic-blast-hero { display: flex; flex-direction: column; gap: 6px; } .isd-ic-blast-nums { display: flex; align-items: baseline; gap: 5px; } .isd-ic-grav-wrap { display: flex; align-items: center; gap: 7px; } .isd-ic-grav-track { flex: 1; height: 10px; overflow: hidden; } .isd-ic-co-syms { display: flex; align-items: center; flex-wrap: wrap; gap: 4px; } .isd-ic-churn-line { display: flex; align-items: baseline; flex-wrap: wrap; gap: 4px; } .isd-ic-sparkline { display: flex; align-items: flex-end; gap: 2px; height: 36px; } .isd-ic-issue-list { display: flex; flex-wrap: wrap; gap: 4px; } // ── New issue page (.isn-*) ──────────────────────────────────────────────────── .isn-page { max-width: 960px; margin: 0 auto; padding: var(--space-4) var(--space-3); } .isn-layout { display: grid; grid-template-columns: 1fr 240px; gap: var(--space-4); align-items: start; @media (max-width: 720px) { grid-template-columns: 1fr; } } .isn-main { min-width: 0; } .isn-card-header { display: flex; align-items: center; justify-content: space-between; padding: var(--space-3) var(--space-4); } .isn-card-body { padding: var(--space-4); display: flex; flex-direction: column; gap: var(--space-5); } .isn-section { display: flex; flex-direction: column; gap: var(--space-3); } .isn-section-header { display: flex; align-items: center; gap: var(--space-2); } .isn-cli-block { display: flex; flex-direction: column; gap: var(--space-3); } .isn-cli-step { display: flex; gap: var(--space-3); align-items: flex-start; } .isn-cli-step-body { display: flex; flex-direction: column; gap: 6px; flex: 1; min-width: 0; } .isn-anatomy { display: flex; flex-direction: column; } .isn-anatomy-row { display: flex; gap: var(--space-3); padding: var(--space-2) var(--space-3); } .isn-sidebar { display: flex; flex-direction: column; gap: var(--space-3); } .isn-sb-section { display: flex; flex-direction: column; gap: var(--space-2); } .isn-sb-links { display: flex; flex-direction: column; gap: 4px; }