/* Shared forge-style design system for gitbot.eu.
   Extracted verbatim from the <style> block that used to live in index.html so
   the generated news feed (/articles/, built from articles/*.md by build/build.mjs)
   renders with exactly the same tokens and components. index.html links this file. */

:root {
  /* Forge palette (Gitea green + GitHub neutrals) */
  --bg-page: #f6f8fa;
  --bg-white: #ffffff;
  --bg-subtle: #f6f8fa;
  --bg-inset: #eaeef2;
  --nav-dark: #0d1117;
  --nav-dark-hover: #1c2128;
  --border: #d0d7de;
  --border-light: #d8dee4;
  --text-primary: #1f2328;
  --text-secondary: #59636e;
  --text-muted: #818b98;
  --link: #0969da;
  --accent: #609926;            /* Gitea green */
  --accent-dark: #4c7a1e;
  --accent-dim: #eef7e4;
  --open-green: #1a7f37;
  --pr-purple: #8250df;
  --label-blue-bg: #ddf4ff;
  --label-blue: #0969da;
  --label-purple-bg: #fbefff;
  --label-green-bg: #dafbe1;
  --label-amber-bg: #fff8c5;
  --label-amber: #9a6700;
  --label-red-bg: #ffebe9;
  --label-red: #d1242f;
  --btn-green: #1f883d;
  --btn-green-hover: #1a7f37;
  --radius: 6px;
  --radius-lg: 12px;
}

*, *::before, *::after { margin:0; padding:0; box-sizing:border-box; }
html { scroll-behavior:smooth; }
body {
  font-family: 'Inter', -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;
  background: var(--bg-page);
  color: var(--text-primary);
  line-height: 1.6;
  -webkit-font-smoothing: antialiased;
}
code { font-family:'JetBrains Mono', ui-monospace, monospace; }
a { color: var(--link); text-decoration:none; }
a:hover { text-decoration:underline; }

.container { max-width: 1280px; margin:0 auto; padding:0 20px; }

/* Anchor targets must clear the 58px sticky bar — otherwise a tab or nav
   jump hides the section's own header underneath it. */
[id] { scroll-margin-top: 70px; }

/* ── Top bar (forge bar, honest links) ── */
.topnav { background: var(--nav-dark); position:sticky; top:0; z-index:100; }
.topnav-inner { display:flex; align-items:center; gap:16px; height:58px; max-width:1280px; margin:0 auto; padding:0 20px; }
.topnav-logo { display:flex; align-items:center; gap:10px; color:#e6edf3; font-weight:600; font-size:0.95rem; white-space:nowrap; }
.topnav-logo:hover { color:#fff; text-decoration:none; }
.topnav-logo-mark { width:30px; height:30px; border-radius:8px; background:var(--accent); display:flex; align-items:center; justify-content:center; color:#fff; font-size:0.95rem; }
.topnav-links { display:flex; gap:2px; list-style:none; margin-left:auto; align-items:center; }
.topnav-links a { color:#c9d1d9; text-decoration:none; font-size:0.875rem; font-weight:500; padding:6px 10px; border-radius:var(--radius); white-space:nowrap; }
.topnav-links a:hover { background:var(--nav-dark-hover); color:#fff; text-decoration:none; }
.topnav-gh { display:inline-flex; align-items:center; gap:7px; border:1px solid #30363d; color:#e6edf3 !important; padding:5px 12px; border-radius:var(--radius); font-size:0.85rem; font-weight:500; margin-left:8px; }
.topnav-gh:hover { background:var(--nav-dark-hover); color:#fff !important; }

/* ── Repository header ── */
.repo-head { background: var(--bg-subtle); border-bottom:1px solid var(--border-light); padding:16px 0 0; }
.repo-title-row { display:flex; align-items:center; gap:10px; flex-wrap:wrap; margin-bottom:8px; }
.repo-octicon { color:var(--text-secondary); flex-shrink:0; }
.repo-name { font-size:1.25rem; font-weight:400; }
.repo-name .owner { color:var(--link); }
.repo-name .sep { color:var(--text-muted); font-weight:300; margin:0 2px; }
.repo-name .repo { color:var(--link); font-weight:600; }
.repo-visibility { border:1px solid var(--border); border-radius:2em; font-size:0.72rem; font-weight:500; color:var(--text-secondary); padding:2px 8px; }
.repo-actions { display:flex; gap:8px; margin-left:auto; flex-wrap:wrap; }
.repo-btn { display:inline-flex; align-items:center; gap:6px; background:var(--bg-subtle); border:1px solid var(--border); border-radius:var(--radius); padding:4px 12px; font-size:0.82rem; font-weight:500; color:var(--text-primary); cursor:pointer; font-family:inherit; transition:background 0.15s; text-decoration:none; }
.repo-btn:hover { background:var(--bg-inset); text-decoration:none; color:var(--text-primary); }
.repo-desc { color:var(--text-secondary); font-size:0.92rem; margin-bottom:14px; max-width:900px; }

/* Tabs — honest section anchors */
.repo-tabs { display:flex; gap:4px; overflow-x:auto; }
.repo-tab { display:inline-flex; align-items:center; gap:7px; padding:8px 14px; font-size:0.875rem; color:var(--text-secondary); border-bottom:2px solid transparent; white-space:nowrap; }
.repo-tab:hover { color:var(--text-primary); text-decoration:none; border-bottom-color:var(--border); }
.repo-tab.active { color:var(--text-primary); font-weight:600; border-bottom-color:var(--accent); }

/* ── Main layout ── */
.repo-body { display:grid; grid-template-columns: 1fr 300px; gap:24px; padding:24px 0 48px; align-items:start; }
.repo-main { min-width:0; }

/* ── Boxes (file list / readme frame) ── */
.box { background:var(--bg-white); border:1px solid var(--border); border-radius:var(--radius-lg); overflow:hidden; }
.box-header { display:flex; align-items:center; gap:10px; padding:11px 16px; background:var(--bg-subtle); border-bottom:1px solid var(--border-light); font-size:0.85rem; }
.box-header .avatar-sm { width:22px; height:22px; border-radius:50%; background:linear-gradient(135deg,#609926,#8250df); flex-shrink:0; }
.box-header .commit-msg { color:var(--text-primary); font-weight:500; overflow:hidden; text-overflow:ellipsis; white-space:nowrap; }
.box-header .commit-time { margin-left:auto; color:var(--text-muted); font-size:0.8rem; white-space:nowrap; }

.file-row { display:flex; align-items:center; gap:10px; padding:9px 16px; border-bottom:1px solid var(--border-light); font-size:0.875rem; }
.file-row:last-child { border-bottom:none; }
.file-row:hover { background:var(--bg-subtle); }
.file-icon { width:18px; text-align:center; flex-shrink:0; }
.file-name { color:var(--link); font-weight:500; min-width:190px; }
.file-name:hover { text-decoration:underline; }
.file-comment { color:var(--text-secondary); overflow:hidden; text-overflow:ellipsis; white-space:nowrap; flex:1; }

/* ── README body ── */
.readme { margin-top:24px; }
.readme-title { display:flex; align-items:center; gap:10px; font-size:0.85rem; font-weight:600; color:var(--text-primary); }
.readme-body { padding:8px 36px 36px; }
.readme-body h1 { font-size:2rem; font-weight:700; letter-spacing:-0.02em; line-height:1.25; padding-bottom:10px; border-bottom:1px solid var(--border-light); margin:26px 0 16px; }
.readme-body h2 { font-size:1.45rem; font-weight:600; letter-spacing:-0.015em; padding-bottom:8px; border-bottom:1px solid var(--border-light); margin:40px 0 14px; }
.readme-body h3 { font-size:1.05rem; font-weight:600; margin:24px 0 8px; }
.readme-body p { font-size:0.95rem; margin-bottom:14px; max-width:860px; }
.readme-body .muted { color:var(--text-secondary); }
.readme-body code { background:rgba(129,139,152,0.12); padding:2px 6px; border-radius:4px; font-size:0.85em; }

.badge-row { display:flex; gap:8px; flex-wrap:wrap; margin:12px 0 18px; }
.shield { display:inline-flex; border-radius:4px; overflow:hidden; font-size:0.72rem; font-family:'JetBrains Mono', monospace; }
.shield .s-left { background:#555; color:#fff; padding:3px 8px; }
.shield .s-right { color:#fff; padding:3px 8px; }

/* Terminal */
.term { background:#0d1117; border-radius:var(--radius); overflow:hidden; margin:18px 0 6px; border:1px solid #30363d; max-width:720px; }
.term-head { display:flex; align-items:center; gap:6px; padding:8px 14px; background:#161b22; border-bottom:1px solid #30363d; }
.term-dot { width:10px; height:10px; border-radius:50%; }
.term-dot:nth-child(1){background:#ff5f57;} .term-dot:nth-child(2){background:#febc2e;} .term-dot:nth-child(3){background:#28c840;}
.term-title { margin-left:8px; font-family:'JetBrains Mono', monospace; font-size:0.72rem; color:#7d8590; }
.term-body { padding:14px 18px 16px; position:relative; }
.term-line { display:flex; gap:10px; font-family:'JetBrains Mono', monospace; font-size:0.875rem; line-height:1.9; }
.term-prompt { color:#3fb950; flex-shrink:0; user-select:none; }
.term-cmd { color:#e6edf3; overflow-wrap:anywhere; }
.copy-btn { position:absolute; top:10px; right:12px; background:#21262d; border:1px solid #30363d; color:#c9d1d9; padding:5px 10px; border-radius:var(--radius); cursor:pointer; font-family:'Inter', sans-serif; font-size:0.78rem; font-weight:500; display:flex; align-items:center; gap:6px; transition:background 0.15s; }
.copy-btn:hover { background:#30363d; }
.copy-btn.copied { background:#1a7f37; border-color:#238636; color:#fff; }
.term-hint { font-size:0.84rem; color:var(--text-muted); margin-bottom:8px; }
.term-hint code { background:rgba(129,139,152,0.12); padding:2px 8px; border-radius:4px; color:var(--accent-dark); font-size:0.8rem; }

/* Value bullets */
.value-list { margin:20px 0 6px; display:grid; grid-template-columns:repeat(auto-fit, minmax(250px, 1fr)); gap:12px; }
.value-item { background:var(--bg-subtle); border:1px solid var(--border-light); border-radius:var(--radius-lg); padding:16px 18px; display:flex; gap:12px; align-items:flex-start; }
.value-check { color:var(--open-green); flex-shrink:0; margin-top:2px; }
.value-item h3 { font-size:0.92rem; font-weight:600; margin:0 0 3px; }
.value-item p { font-size:0.83rem; color:var(--text-secondary); line-height:1.55; margin:0; }

/* Workflow rows (issue-list styling, honest text) */
.workflow-panel { margin:18px 0; background:var(--bg-white); border:1px solid var(--border); border-radius:var(--radius-lg); overflow:hidden; }
.wf-row { display:flex; gap:12px; padding:13px 18px; border-bottom:1px solid var(--border-light); align-items:flex-start; transition:background 0.12s; }
.wf-row:last-child { border-bottom:none; }
.wf-row:hover { background:var(--bg-subtle); }
.wf-icon { margin-top:3px; flex-shrink:0; }
.wf-main { flex:1; min-width:0; }
.wf-title-line { display:flex; align-items:center; gap:8px; flex-wrap:wrap; }
.wf-title { font-size:0.93rem; font-weight:600; }
.label { display:inline-flex; align-items:center; border-radius:2em; padding:1px 10px; font-size:0.7rem; font-weight:500; border:1px solid rgba(31,35,40,0.12); white-space:nowrap; }
.wf-trigger { font-family:'JetBrains Mono', monospace; font-size:0.74rem; color:var(--text-muted); margin-top:3px; }
.wf-desc { font-size:0.84rem; color:var(--text-secondary); margin-top:3px; }

.callout { border-left:4px solid var(--accent); background:var(--accent-dim); border-radius:0 var(--radius) var(--radius) 0; padding:13px 17px; margin:18px 0; font-size:0.88rem; color:#274207; max-width:780px; }
.callout b { display:block; font-size:0.74rem; text-transform:uppercase; letter-spacing:0.05em; margin-bottom:4px; color:var(--accent-dark); font-family:'JetBrains Mono', monospace; }

/* Audience cards */
.audience-grid { display:grid; grid-template-columns:repeat(auto-fit, minmax(270px, 1fr)); gap:12px; margin:18px 0; }
.audience-card { background:var(--bg-subtle); border:1px solid var(--border-light); border-radius:var(--radius-lg); padding:20px; transition:border-color 0.15s, box-shadow 0.15s; }
.audience-card:hover { border-color:var(--border); box-shadow:0 5px 14px rgba(31,35,40,0.07); }
.audience-card h3 { font-size:0.98rem; font-weight:600; margin:0 0 8px; }
.audience-card p { font-size:0.86rem; color:var(--text-secondary); line-height:1.6; margin:0; }
.audience-tag { display:inline-block; margin-top:12px; font-size:0.8rem; font-weight:600; }

/* Provider cards */
.provider-group { margin-top:24px; }
.provider-group h3 { font-size:1rem; font-weight:600; margin:0 0 3px; }
.provider-group .group-sub { font-size:0.83rem; color:var(--text-muted); margin-bottom:14px; }
.explore-grid { display:grid; grid-template-columns:repeat(auto-fill, minmax(210px, 1fr)); gap:12px; }
.explore-card { background:var(--bg-subtle); border:1px solid var(--border-light); border-radius:var(--radius-lg); padding:15px; transition:box-shadow 0.15s, border-color 0.15s; }
.explore-card:hover { border-color:var(--border); box-shadow:0 3px 10px rgba(31,35,40,0.08); }
.explore-card-head { display:flex; align-items:center; gap:10px; margin-bottom:8px; }
.explore-logo { width:28px; height:28px; border-radius:6px; display:flex; align-items:center; justify-content:center; font-family:'JetBrains Mono', monospace; font-weight:700; font-size:0.7rem; color:#fff; flex-shrink:0; }
.explore-name { font-weight:600; font-size:0.88rem; }
.explore-kind { font-size:0.68rem; color:var(--text-muted); font-family:'JetBrains Mono', monospace; }
.explore-desc { font-size:0.8rem; color:var(--text-secondary); line-height:1.5; }

/* Screenshots */
.shots-grid { display:grid; grid-template-columns:repeat(auto-fill, minmax(250px, 1fr)); gap:12px; margin:18px 0; }
.shot-card { background:var(--bg-white); border:1px solid var(--border); border-radius:var(--radius-lg); overflow:hidden; cursor:pointer; transition:box-shadow 0.15s, border-color 0.15s; }
.shot-card:hover { border-color:var(--border-light); box-shadow:0 4px 14px rgba(31,35,40,0.1); }
.shot-card img { width:100%; height:auto; display:block; border-bottom:1px solid var(--border-light); }
.shot-card .caption { padding:9px 13px; font-size:0.8rem; color:var(--text-secondary); display:flex; align-items:center; gap:8px; }
.shot-card .caption .pdot { width:8px; height:8px; border-radius:50%; flex-shrink:0; }

/* Lightbox */
.lightbox { display:none; position:fixed; inset:0; z-index:200; background:rgba(13,17,23,0.9); align-items:center; justify-content:center; cursor:pointer; }
.lightbox.active { display:flex; }
.lightbox img { max-width:92vw; max-height:92vh; border-radius:var(--radius); border:1px solid #30363d; box-shadow:0 30px 80px rgba(0,0,0,0.6); }
.lightbox-close { position:absolute; top:24px; right:24px; color:#fff; font-size:1.8rem; cursor:pointer; width:44px; height:44px; display:flex; align-items:center; justify-content:center; background:rgba(255,255,255,0.1); border-radius:50%; border:1px solid rgba(255,255,255,0.3); }
.lightbox-close:hover { background:rgba(255,255,255,0.2); }
.lightbox-caption { position:absolute; bottom:28px; left:50%; transform:translateX(-50%); color:#fff; font-size:0.9rem; background:rgba(13,17,23,0.88); padding:8px 20px; border-radius:100px; border:1px solid rgba(255,255,255,0.24); }

/* Steps */
.steps { margin:18px 0; border:1px solid var(--border); border-radius:var(--radius-lg); padding:6px 22px; background:var(--bg-white); }
.step { display:flex; gap:16px; padding:16px 0; border-bottom:1px solid var(--border-light); }
.step:last-child { border-bottom:none; }
.step-num { width:30px; height:30px; min-width:30px; border-radius:50%; border:1px solid var(--border); background:var(--bg-subtle); display:flex; align-items:center; justify-content:center; font-weight:600; font-size:0.88rem; color:var(--text-secondary); }
.step-content h4 { font-size:0.95rem; font-weight:600; margin-bottom:2px; }
.step-content p { font-size:0.86rem; color:var(--text-secondary); margin:0; }
.step-content code { background:rgba(129,139,152,0.12); padding:1px 6px; border-radius:4px; font-size:0.82em; color:var(--text-primary); }

/* Safety */
.safety-grid { display:grid; grid-template-columns:repeat(auto-fill, minmax(300px, 1fr)); gap:0; margin:18px 0; border:1px solid var(--border); border-radius:var(--radius-lg); overflow:hidden; background:var(--bg-white); }
.safety-item { display:flex; gap:12px; padding:14px 16px; border-bottom:1px solid var(--border-light); align-items:flex-start; }
.safety-item:hover { background:var(--bg-subtle); }
.safety-check { color:var(--open-green); flex-shrink:0; margin-top:2px; }
.safety-item h4 { font-size:0.88rem; font-weight:600; margin-bottom:2px; }
.safety-item p { font-size:0.8rem; color:var(--text-secondary); margin:0; line-height:1.55; }
.safety-item code { background:rgba(129,139,152,0.12); padding:1px 5px; border-radius:4px; font-size:0.8em; }

/* CTA inside readme */
.cta-box { text-align:center; border:1px dashed var(--border); border-radius:var(--radius-lg); padding:36px 24px; margin:36px 0 4px; background:var(--bg-subtle); }
.cta-box h2 { font-size:1.5rem; font-weight:700; letter-spacing:-0.02em; margin:0 0 10px; border:none; padding:0; }
.cta-box p { color:var(--text-secondary); margin:0 auto 24px; max-width:620px; font-size:0.92rem; }
.cta-buttons { display:flex; gap:12px; justify-content:center; flex-wrap:wrap; }
.btn { padding:9px 20px; border-radius:var(--radius); font-weight:600; font-size:0.9rem; text-decoration:none; display:inline-flex; align-items:center; gap:8px; transition:all 0.15s; border:1px solid transparent; }
.btn-green { background:var(--btn-green); color:#fff; border-color:rgba(31,35,40,0.15); }
.btn-green:hover { background:var(--btn-green-hover); text-decoration:none; color:#fff; }
.btn-outline { background:var(--bg-white); color:var(--text-primary); border-color:var(--border); }
.btn-outline:hover { background:var(--bg-subtle); text-decoration:none; }

/* ── Commercial services ── */
.svc-grid { display:grid; grid-template-columns:repeat(auto-fit, minmax(255px, 1fr)); gap:12px; margin:18px 0 10px; }
.svc-card { background:var(--bg-subtle); border:1px solid var(--border-light); border-radius:var(--radius-lg); padding:20px; display:flex; flex-direction:column; transition:border-color 0.15s, box-shadow 0.15s; }
.svc-card:hover { border-color:var(--border); box-shadow:0 5px 14px rgba(31,35,40,0.07); }
.svc-head { display:flex; align-items:center; gap:10px; margin-bottom:10px; }
.svc-card h3 { font-size:0.98rem; font-weight:600; margin:0; }
.svc-kind { font-size:0.68rem; font-family:'JetBrains Mono', monospace; color:var(--text-muted); }
.svc-card > p { font-size:0.86rem; color:var(--text-secondary); line-height:1.6; margin:0 0 12px; }
.svc-list { list-style:none; font-size:0.82rem; color:var(--text-secondary); display:grid; gap:6px; margin-top:auto; }
.svc-list li { display:flex; gap:8px; align-items:flex-start; line-height:1.45; }
.svc-list svg { flex-shrink:0; margin-top:2px; color:var(--open-green); }

/* Contact form */
.contact-panel { margin:22px 0 4px; border:1px solid var(--border); border-radius:var(--radius-lg); background:var(--bg-subtle); padding:22px; }
.contact-panel h3 { margin:0 0 4px; font-size:1.05rem; font-weight:600; }
.contact-sub { font-size:0.85rem; color:var(--text-secondary); margin:0 0 18px; max-width:660px; }
.form-grid { display:grid; grid-template-columns:repeat(auto-fit, minmax(240px, 1fr)); gap:14px; }
.field { display:flex; flex-direction:column; gap:5px; min-width:0; }
.field.full { grid-column:1 / -1; }
.field label { font-family:'JetBrains Mono', monospace; font-size:0.72rem; font-weight:500; text-transform:uppercase; letter-spacing:0.05em; color:var(--text-secondary); }
.field .req { color:var(--label-red); }
.field input, .field select, .field textarea { font-family:'Inter', sans-serif; font-size:0.88rem; color:var(--text-primary); background:var(--bg-white); border:1px solid var(--border); border-radius:var(--radius); padding:8px 11px; width:100%; transition:border-color 0.15s, box-shadow 0.15s; }
.field textarea { min-height:120px; resize:vertical; line-height:1.55; }
.field input:focus, .field select:focus, .field textarea:focus { outline:none; border-color:var(--accent); box-shadow:0 0 0 3px rgba(96,153,38,0.16); }
.form-foot { display:flex; align-items:flex-start; gap:18px; flex-wrap:wrap; margin-top:16px; }
.consent { display:flex; gap:9px; align-items:flex-start; font-size:0.79rem; color:var(--text-secondary); max-width:560px; line-height:1.5; }
.consent input { margin-top:2px; accent-color:var(--accent); flex-shrink:0; }
.form-status { font-size:0.84rem; margin-top:12px; }
.form-status:empty { display:none; }
.form-status.ok { color:var(--open-green); }
.form-status.err { color:var(--label-red); }
.form-note { font-size:0.76rem; color:var(--text-muted); margin-top:10px; }
.hp-field { position:absolute; left:-9999px; width:1px; height:1px; overflow:hidden; }

/* ── Sidebar (About — real links only) ── */
.sidebar-section { padding:0 0 18px; margin-bottom:18px; border-bottom:1px solid var(--border-light); }
.sidebar-section:last-child { border-bottom:none; margin-bottom:0; }
.sidebar-section h3 { font-size:0.85rem; font-weight:600; margin-bottom:12px; color:var(--text-primary); }
.sidebar-section p { font-size:0.84rem; color:var(--text-secondary); margin-bottom:12px; }
.sidebar-list { list-style:none; font-size:0.84rem; }
.sidebar-list li { display:flex; align-items:center; gap:8px; padding:5px 0; color:var(--text-secondary); }
.sidebar-list a { color:var(--link); }
.topic { display:inline-block; background:var(--label-blue-bg); color:var(--link); border-radius:2em; padding:1px 10px; font-size:0.72rem; font-weight:500; margin:0 5px 6px 0; }
.topic:hover { background:var(--link); color:#fff; text-decoration:none; }

/* ── Footer ── */
.footer { background:var(--nav-dark); border-top:1px solid #21262d; padding:26px 0 30px; }
.footer-inner { display:flex; justify-content:space-between; align-items:center; flex-wrap:wrap; gap:16px; font-size:0.82rem; color:#7d8590; }
.footer-left { display:flex; align-items:center; gap:8px; }
.footer-logo { width:22px; height:22px; border-radius:6px; background:var(--accent); display:flex; align-items:center; justify-content:center; color:#fff; font-size:0.66rem; }
/* Wraps on narrow screens: the footer carries seven links, which no longer fit
   on one 390px line and used to push the page into horizontal scroll. */
.footer-links { display:flex; flex-wrap:wrap; gap:12px 18px; list-style:none; }
.footer-links a { color:#7d8590; text-decoration:none; }
.footer-links a:hover { color:#e6edf3; text-decoration:none; }

/* ── Mobile ── */
@media (max-width:960px) {
  .repo-body { grid-template-columns:1fr; }
  .sidebar { order:2; }
}
@media (max-width:768px) {
  .topnav-links a.hide-m { display:none; }
  .repo-actions { margin-left:0; }
  .file-comment { display:none; }
  .readme-body { padding:8px 18px 26px; }
  .readme-body h1 { font-size:1.55rem; }
  .readme-body h2 { font-size:1.2rem; }
  .repo-desc { font-size:0.86rem; }
  .term-line { font-size:0.76rem; }
  .contact-panel { padding:16px; }
}
/* The extra nav item does not fit next to the GitHub button on small phones;
   the Services tab, file row and sidebar card still link to the section. */
@media (max-width:480px) {
  .topnav-links a.hide-s { display:none; }
}

/* ── News teaser (landing page) ──
   The rows between <!-- NEWS:START --> and <!-- NEWS:END --> in index.html are
   generated by build/build.mjs from articles/*.md, so the landing page always
   shows the newest entries. Same row anatomy as the full listing in /articles/. */
.label-tag { background:var(--label-blue-bg); color:var(--label-blue); }
.news-teaser { border:1px solid var(--border); border-radius:var(--radius-lg); overflow:hidden; background:var(--bg-white); margin:16px 0 4px; max-width:980px; }
.news-teaser-row { display:grid; grid-template-columns:18px minmax(0,1fr) auto; gap:14px; padding:13px 16px; border-bottom:1px solid var(--border-light); text-decoration:none; color:inherit; }
.news-teaser-row:last-child { border-bottom:none; }
.news-teaser-row:hover { background:var(--bg-subtle); text-decoration:none; }
.news-teaser-row .file-icon { padding-top:1px; }
.news-teaser-main { display:flex; flex-direction:column; gap:3px; min-width:0; }
.news-teaser-title { color:var(--link); font-weight:600; font-size:0.95rem; line-height:1.4; }
.news-teaser-row:hover .news-teaser-title { text-decoration:underline; }
.news-teaser-excerpt { color:var(--text-secondary); font-size:0.85rem; line-height:1.55; }
.news-teaser-meta { display:flex; align-items:center; gap:10px; padding-top:1px; }
.news-teaser-meta time { font-family:'JetBrains Mono', monospace; font-size:0.74rem; color:var(--text-muted); white-space:nowrap; }
.news-teaser-actions { display:flex; gap:10px; flex-wrap:wrap; margin:16px 0 4px; }
@media (max-width:640px) {
  .news-teaser-row { grid-template-columns:18px minmax(0,1fr); }
  .news-teaser-meta { grid-column:2; padding-top:2px; }
}

/* ── Animations ── */
.fade-in { opacity:0; transform:translateY(14px); transition:opacity 0.55s ease, transform 0.55s ease; }
.fade-in.visible { opacity:1; transform:translateY(0); }
@media (prefers-reduced-motion:reduce) { .fade-in { opacity:1; transform:none; transition:none; } html { scroll-behavior:auto; } }
