{
  "sha": "0f78821364783e21c35ddc00a926c6444d85bb9d",
  "message": "Boxed centered layout: 1280px content sheet with side gutters\n\nThe page chrome, home grid, and footer previously spanned the full\nviewport (inner containers capped at 1440px), which read as cramped on\nwide screens. The .page wrapper is now the single width authority: a\ncentered 1280px sheet with hairline side borders and a soft shadow over\na darker body gutter (color-mix keeps it theme-aware in dark mode).\nHome rails narrowed 280/320 -> 260/300 to give the center column room.\nBelow 1100px the sheet goes edge-to-edge again.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
  "author": {
    "login": "avwire",
    "name": "avwire",
    "email": ""
  },
  "committer": {
    "login": "avwire",
    "name": "avwire",
    "email": ""
  },
  "created_at": "2026-07-26T16:09:12Z",
  "files": [
    {
      "filename": "static/site.css",
      "previous_filename": "",
      "status": "modified",
      "additions": 13,
      "deletions": 5,
      "changes": 18
    },
    {
      "filename": "templates/base.html",
      "previous_filename": "",
      "status": "modified",
      "additions": 2,
      "deletions": 2,
      "changes": 4
    },
    {
      "filename": "templates/incidents.html",
      "previous_filename": "",
      "status": "modified",
      "additions": 1,
      "deletions": 1,
      "changes": 2
    },
    {
      "filename": "templates/sources.html",
      "previous_filename": "",
      "status": "modified",
      "additions": 1,
      "deletions": 1,
      "changes": 2
    }
  ],
  "diff": "@@ -2,7 +2,8 @@\\n    plus classes replacing the design's inline styles where JS needs hooks. */\\n \\n /* — from the design's helmet <style> block — */\\n-html, body { margin: 0; background: var(--color-bg); }\\n+/* boxed layout: the page sheet is centered, the body shows a darker gutter */\\n+html, body { margin: 0; background: color-mix(in srgb, var(--color-text) 12%, var(--color-bg)); }\\n body, h1, h2, h3, h4, h5, h6, .btn, .card-title, .nav-brand {\\n   font-family: \"Archivo\", \"Noto Sans TC\", system-ui, sans-serif;\\n }\\n@@ -32,7 +33,13 @@ a:hover { color: var(--color-accent-600); }\\n @keyframes avwire-pulse { 0%, 100% { opacity: 1; } 50% { opacity: .3; } }\\n \\n /* — chrome — */\\n-.page { min-height: 100vh; background: var(--color-bg); color: var(--color-text); }\\n+.page {\\n+  min-height: 100vh; max-width: 1280px; margin: 0 auto;\\n+  background: var(--color-bg); color: var(--color-text);\\n+  border-left: 1px solid var(--color-divider);\\n+  border-right: 1px solid var(--color-divider);\\n+  box-shadow: 0 0 32px rgba(0, 0, 0, .08);\\n+}\\n .pulse-dot { width: 8px; height: 8px; background: var(--color-accent); animation: avwire-pulse 2s infinite; }\\n .marquee-track { display: flex; width: max-content; animation: avwire-marquee 80s linear infinite; white-space: nowrap; }\\n \\n@@ -65,8 +72,8 @@ a.seg-btn.active:hover { color: var(--color-bg); }\\n \\n /* — home grid — */\\n .home-grid {\\n-  max-width: 1440px; margin: 0 auto; display: grid;\\n-  grid-template-columns: 280px minmax(0, 1fr) 320px; align-items: stretch;\\n+  display: grid;\\n+  grid-template-columns: 260px minmax(0, 1fr) 300px; align-items: stretch;\\n }\\n .rail-left { border-right: 2px solid var(--color-divider); padding: 20px; }\\n .center-col { padding: 20px 24px; min-width: 0; }\\n@@ -107,13 +114,14 @@ a.flash-row:hover { color: inherit; }\\n \\n /* — footer — */\\n .footer-grid {\\n-  max-width: 1440px; margin: 0 auto; padding: 24px 20px 32px;\\n+  padding: 24px 20px 32px;\\n   display: grid; grid-template-columns: 1fr 1.3fr; gap: 32px;\\n }\\n \\n /* — responsive fallback: the design is desktop-first; below 1100px the\\n      three-column home grid simply stacks. — */\\n @media (max-width: 1100px) {\\n+  .page { border-left: 0; border-right: 0; box-shadow: none; }\\n   .home-grid { grid-template-columns: minmax(0, 1fr); }\\n   .rail-left { border-right: 0; border-bottom: 2px solid var(--color-divider); }\\n   .rail-right { border-left: 0; border-top: 2px solid var(--color-divider); }\\n@@ -23,7 +23,7 @@\\n <body>\\n <div class=\"page\">\\n   <div style=\"border-bottom:1px solid var(--color-divider);\">\\n-    <div style=\"max-width:1440px;margin:0 auto;padding:6px 20px;display:flex;flex-wrap:wrap;align-items:center;gap:16px;font-size:12px;\">\\n+    <div style=\"padding:6px 20px;display:flex;flex-wrap:wrap;align-items:center;gap:16px;font-size:12px;\">\\n       <span class=\"text-muted\" style=\"letter-spacing:.06em;\">{{ build.date }}</span>\\n       <span id=\"clock-utc\" style=\"font-weight:600;letter-spacing:.06em;\">UTC {{ build.utc_hm }}</span>\\n       <span id=\"clock-tpe\" class=\"text-muted\" style=\"letter-spacing:.06em;\">TPE {{ build.tpe_hm }}</span>\\n@@ -42,7 +42,7 @@\\n     </div>\\n   </div>\\n   <div style=\"border-bottom:2px solid var(--color-divider);\">\\n-    <div style=\"max-width:1440px;margin:0 auto;padding:14px 20px;display:flex;align-items:center;gap:28px;\">\\n+    <div style=\"padding:14px 20px;display:flex;align-items:center;gap:28px;\">\\n       <a href=\"{{ home_url }}\" style=\"display:flex;align-items:center;gap:12px;color:inherit;text-decoration:none;\">\\n         <div style=\"width:34px;height:34px;background:var(--color-accent);color:var(--color-bg);display:flex;align-items:center;justify-content:center;font-weight:800;font-size:15px;\">AW</div>\\n         <div>\\n@@ -1,6 +1,6 @@\\n {% extends \"base.html\" %}\\n {% block content %}\\n-  <div style=\"max-width:1440px;margin:0 auto;padding:28px 20px 64px;\">\\n+  <div style=\"padding:28px 20px 64px;\">\\n     <span class=\"card-kicker\">{{ t.incKicker }}</span>\\n     <h2 style=\"margin:8px 0 6px;\">{{ t.incTitle }}</h2>\\n     <p class=\"text-muted\" style=\"font-size:14px;max-width:640px;\">{{ t.incSub }}</p>\\n@@ -1,6 +1,6 @@\\n {% extends \"base.html\" %}\\n {% block content %}\\n-  <div style=\"max-width:1440px;margin:0 auto;padding:28px 20px 64px;\">\\n+  <div style=\"padding:28px 20px 64px;\">\\n     <span class=\"card-kicker\">{{ t.srcKicker }}</span>\\n     <h2 style=\"margin:8px 0 6px;\">{{ t.srcTitle }}</h2>\\n     <p class=\"text-muted\" style=\"font-size:14px;max-width:640px;\">{{ t.srcSub }}</p>"
}
