/* 布局：顶部吸附的进度条 + 单列卡片流，卡片里左边是场景/草稿，右边是小鲸的气泡 */
:root {
  --bg: #eef3f6; --surface: #ffffff; --ink: #1d2a33; --muted: #6a7c88; --line: #d5e0e7;
  --sea: #1f6f8b; --bubble: #dff0f6; --good: #2e8b57; --bad: #c2453b; --chip: #e6eef2;
  --display: "PingFang SC", "Microsoft YaHei", system-ui, sans-serif;
  --body: "PingFang SC", "Microsoft YaHei", system-ui, sans-serif;
}
@media (prefers-color-scheme: dark) { :root:not([data-theme="light"]) {
  --bg: #0f1a21; --surface: #16242d; --ink: #e3edf2; --muted: #8fa3af; --line: #26404e;
  --sea: #5fb6d3; --bubble: #1d3a48; --good: #5cc28a; --bad: #e8786e; --chip: #1e3340; color-scheme: dark } }
:root[data-theme="dark"] {
  --bg: #0f1a21; --surface: #16242d; --ink: #e3edf2; --muted: #8fa3af; --line: #26404e;
  --sea: #5fb6d3; --bubble: #1d3a48; --good: #5cc28a; --bad: #e8786e; --chip: #1e3340; color-scheme: dark }
* { box-sizing: border-box }
body { background: var(--bg); color: var(--ink); font-family: var(--body); font-size: 15px; line-height: 1.6 }

.wrap { max-width: 860px; margin: 0 auto; padding-left: max(16px, env(safe-area-inset-left, 0px)); padding-right: max(16px, env(safe-area-inset-right, 0px)); padding-block: 0 48px }
header { position: sticky; top: env(safe-area-inset-top, 0px); z-index: 5; background: var(--surface); border-bottom: 1px solid var(--line) }
header .wrap { padding-block: 12px; display: flex; flex-wrap: wrap; gap: 10px 16px; align-items: center }
h1 { font-family: var(--display); font-weight: 700; font-size: 22px; margin: 0; color: var(--sea); letter-spacing: .02em }
.stats { display: flex; gap: 14px; font-variant-numeric: tabular-nums; color: var(--muted); font-size: 14px }
.stats b { color: var(--ink) }
.bar { flex-basis: 100%; height: 6px; border-radius: 3px; background: var(--chip); overflow: hidden; display: flex }
.bar i { display: block; height: 100% }
.filters { display: flex; flex-wrap: wrap; gap: 8px; margin-left: auto }
select, button { font: inherit }
select { background: var(--chip); color: var(--ink); border: 1px solid var(--line); border-radius: 8px; padding: 4px 8px }
.note { color: var(--muted); font-size: 13px; margin: 16px 0 }
.note.warn { color: var(--bad) }
.list { display: grid; gap: 12px; margin-top: 12px }
.card { background: var(--surface); border: 1px solid var(--line); border-radius: 12px; padding: 14px 16px; display: grid; grid-template-columns: minmax(0, 1fr) minmax(0, 1fr) auto; gap: 14px; align-items: start }
.card.good { border-color: var(--good); box-shadow: inset 4px 0 0 var(--good) }
.card.bad { border-color: var(--bad); box-shadow: inset 4px 0 0 var(--bad); opacity: .7 }
.card:focus-visible { outline: 2px solid var(--sea); outline-offset: 2px }
.ctx { min-width: 0 }
.ctx .who { font-weight: 500 }
.meta { display: flex; gap: 6px; flex-wrap: wrap; margin-bottom: 6px }
.chip { font-size: 12px; background: var(--chip); color: var(--muted); padding: 1px 8px; border-radius: 10px }
.chip.seed { color: var(--sea) }
.draft { color: var(--muted); font-size: 13px; margin-top: 8px; border-top: 1px dashed var(--line); padding-top: 6px }
.draft::before { content: "草稿 "; font-size: 12px; letter-spacing: .05em }
.say { display: grid; gap: 6px; min-width: 0 }
.say span { justify-self: start; background: var(--bubble); padding: 4px 12px; border-radius: 14px 14px 14px 4px; overflow-wrap: anywhere }
.vote { display: flex; flex-direction: column; gap: 6px }
.vote button { width: 44px; height: 38px; border-radius: 10px; border: 1px solid var(--line); background: var(--chip); color: var(--ink); cursor: pointer; font-size: 18px }
.vote button[aria-pressed="true"].up { background: var(--good); border-color: var(--good) }
.vote button[aria-pressed="true"].down { background: var(--bad); border-color: var(--bad) }
.vote button:focus-visible { outline: 2px solid var(--sea); outline-offset: 2px }
.empty { text-align: center; color: var(--muted); padding: 40px 0 }
.others { display: flex; flex-wrap: wrap; gap: 6px; margin-top: 8px }
.others .chip.g { color: var(--good) }
.others .chip.b { color: var(--bad) }
@media (max-width: 640px) {
  .card { grid-template-columns: minmax(0, 1fr) auto }
  .say { grid-column: 1 / 2 }
  .vote { grid-row: 1 / 3; grid-column: 2 }
}
@media (prefers-reduced-motion: no-preference) { .card { transition: border-color .15s, opacity .15s } }
#barG { background: var(--good) }
#barB { background: var(--bad) }
