/* ── Feed page ── */
.feed-hero { display: grid; grid-template-columns: minmax(0, 1.45fr) minmax(300px, 0.95fr); gap: 1rem; margin-bottom: 1.25rem; }
.feed-hero .info-hero-main { display: grid; gap: 0.75rem;     /* Stretched by the 2-column hero grid: without align-content the extra
       height is distributed between rows, spreading the copy apart. */
    align-content: start;
}
.feed-hero-note {
    margin-top: 0.95rem;
    max-width: 58ch;
    font-size: 0.94rem;
    line-height: 1.7;
    color: var(--color-text-secondary);
}
.feed-ranking-card {
    display: grid;
    gap: 0.55rem;
    margin-top: 0.35rem;
    border-left: 4px solid var(--color-primary);
}
.feed-ranking-copy {
    margin: 0;
    max-width: 64ch;
    color: var(--color-text-secondary);
    line-height: 1.65;
}
.feed-ranking-boost-count {
    font-size: 0.85rem;
    font-weight: 700;
    color: var(--color-text-primary);
}
.info-card-chip--ranking {
    border-color: color-mix(in srgb, var(--color-primary) 22%, var(--color-border));
    background: color-mix(in srgb, var(--color-primary) 12%, var(--color-surface));
    color: var(--color-primary-dark);
}

/* #249 2단계 — --color-primary text on its own 12% tint falls to 3.99:1 in
   dark (composites to #182846); border/background stay as-is. */
:root[data-theme="dark"] .info-card-chip--ranking { color: var(--color-primary-strong); }
.feed-signal-strip {
    display: flex;
    gap: 0.5rem;
    flex-wrap: wrap;
    margin: 0 0 1rem;
    padding: 0.9rem 1rem;
    border-radius: 1.15rem;
    border: 1px solid var(--color-border);
    background: var(--color-surface);
    box-shadow: var(--shadow-sm);
}
.feed-signal-kind { font-weight: 700; margin-right: 0.25rem; }
.feed-filters {
    display: flex;
    gap: 0.8rem;
    flex-wrap: wrap;
    align-items: center;
    margin-bottom: 1rem;
    padding: 1rem 1.1rem;
    border-radius: 1.15rem;
    border: 1px solid var(--color-border);
    background: var(--color-surface);
    box-shadow: var(--shadow-sm);
}
.feed-filters label {
    display: flex;
    align-items: center;
    gap: 0.45rem;
    font-size: 0.83rem;
    font-weight: 700;
    color: var(--color-text-secondary);
    /* PR7 4단계: a flex item's default min-width is its content size, so
       without this the journal <select> below (one option is a very long
       conference proceedings title) forces this label past the viewport
       on narrow screens. */
    min-width: 0;
    max-width: 100%;
}
/* 검색 입력이 셀렉트와 같은 규칙을 받는다. 이전에는 `select` 만 여기 있어
   `input[type="search"]` 이 브라우저 기본값으로 남았고, 한 줄에 나란히 놓이는데도
   혼자 작고 다르게 보였다(운영 관측 2026-08-17). 같은 행의 컨트롤은 형태를
   맞춘다 — `project-css.md` 의 "나란히 놓이는 버튼은 높이를 맞춘다" 와 같은 계열. */
.feed-filters select,
.feed-filters input[type="search"] {
    min-width: 8rem;
    max-width: 100%;
    padding: 0.62rem 0.78rem;
    border: 1px solid var(--color-border);
    border-radius: 0.85rem;
    background: var(--color-surface);
    color: var(--color-text);
    font: inherit;
}

/* 검색은 값이 길어질 수 있으므로 셀렉트보다 넓게 시작한다. */
.feed-filters input[type="search"] {
    min-width: 14rem;
}
.feed-filter-reset {
    margin-left: auto;
    color: var(--color-text-secondary);
    text-decoration: none;
    font-size: 0.83rem;
    font-weight: 700;
}
.feed-filter-reset:hover { color: var(--color-primary); }
.feed-summary-bar {
    display: flex;
    gap: 0.8rem;
    align-items: center;
    flex-wrap: wrap;
    margin-bottom: 1rem;
}
.feed-grid { display: grid; gap: 0.9rem; }
.fc-authors { font-size: 0.84rem; color: var(--color-text-secondary); margin-top: 0.35rem; font-style: italic; }

/* ── Empty state ── */
.info-empty-state {
    text-align: center;
    padding: 3rem 1.25rem;
    border: 1px dashed var(--color-border);
    border-radius: 1.1rem;
    background: var(--color-surface);
    color: var(--color-text-muted);
}
.info-empty-state > div { font-size: 2rem; margin-bottom: 0.5rem; }

@media (max-width: 900px) {
    .feed-hero {
        grid-template-columns: 1fr;
    }

    .feed-open-db-head {
        flex-direction: column;
        align-items: stretch;
    }
}

/* ── 논문 카드 개선 (2026-08-16) ─────────────────────────────────────────── */

/* ③ 제목이 곧 링크다. 링크로 바뀌어도 **제목처럼 보여야** 한다 — 파란 밑줄이
   붙으면 카드 안에서 제목의 무게가 사라진다. hover 에서만 링크임을 드러낸다. */
.feed-paper-title-link {
    text-decoration: none;
    color: var(--color-text);
    cursor: pointer;
}
.feed-paper-title-link:hover,
.feed-paper-title-link:focus-visible {
    color: var(--color-primary);
    text-decoration: underline;
}

/* ② 이 문단이 AI 생성물임을 카드에서 바로 알린다. 상단 안내는 스크롤하면
   사라지므로 카드마다 둔다. */
.feed-summary-label {
    font-size: 0.6875rem;
    font-weight: 700;
    letter-spacing: 0.04em;
    text-transform: uppercase;
    color: var(--color-text-muted);
    margin-bottom: 0.25rem;
}

/* ⑤ 출처·기준일·인용수가 한 행에 모이게 한다. 이전에는 칩이 넘쳐 `corpus:core`
   만 둘째 줄로 떨어져 어색했다 — 그 태그는 이제 감추고(내부 분류), 남은 칩은
   줄바꿈하되 행 간격을 좁혀 한 덩어리로 읽히게 한다. */
.info-card-meta {
    row-gap: 0.35rem;
    align-items: center;
}
