/* EDITED IN PLACE (10/11, docs/GRADES-ON-PAGES.md: generators are retired for built pages). This file is no longer
   generated: mocks/src/nwp/make_css.py made its first build and now refuses to overwrite it without --force.
   Edit the rules here; tools/css_lint.py guards them (a rule two pages share goes in core.css). The note below is history. */
/* TG news.css: TownTapestry's News page, ported as they are (Jamie 10/10).
   Generated by mocks/src/nwp/make_css.py: the app.css rules the live pages use (tools/css_audit.py on the Oct 10 snapshots in
   tests/verify/live/ + the page's app.js strings), minus selectors core.css already has. Regenerate; do not edit. */
.hz-list{display:grid;grid-template-columns:repeat(auto-fill,minmax(260px,1fr));gap:10px}
.hz-list a{display:flex;gap:12px;align-items:center;border:1px solid var(--line);border-radius:var(--r);padding:12px}
.hz-list a:hover{border-color:var(--accent)}
.hz-list b{display:block;font-size:14.5px}
.hz-list small{font-size:12.5px;color:var(--muted)}
.nx-pubmark{display:inline-grid;place-items:center;width:22px;height:22px;border-radius:6px;color:#fff;font-size:10.5px;font-weight:800;letter-spacing:0;flex:none}
.nx-meta{display:flex;align-items:center;flex-wrap:wrap;gap:6px;font-size:12.5px;color:var(--muted)}
.nx-meta .nx-d{margin-left:auto}
.nx-meta .nx-d .btn{height:28px;padding:0 10px;font-size:12.5px}
.nx-meta .nx-d .btn .ic{width:14px;height:14px}
.nx-tag{display:inline-flex;align-items:center;gap:5px;font-size:11.5px;font-weight:700;letter-spacing:.04em;text-transform:uppercase;color:var(--accent-ink)}
.nx-tag .ic{width:13px;height:13px}
[data-nx-b="safety"] .nx-tag{color:var(--muted)}
.nx-row h3 a:hover{color:var(--accent-ink)}
.nx-acts{display:flex;gap:8px;flex-wrap:wrap}
.nx-acts .btn .ic{width:15px;height:15px}
.nx-row{display:flex;flex-direction:column;gap:6px;padding:14px 0;border-bottom:1px solid var(--hair)}
.nx-row h3{font-size:16px;line-height:1.35;letter-spacing:-.01em}
.nx-week{margin-top:22px;border-radius:var(--r-lg);padding:18px 20px;background:linear-gradient(160deg,#f3efff,#fff 70%);border:1px solid #e6e0fb}
.nx-week .kick{color:#5b45c4}
.nx-week-b{font-size:15.5px;line-height:1.6;color:var(--ink-2);margin-top:6px}
.nx-week-b p{margin:0 0 8px}
.nx-beats{display:flex;flex-direction:column;gap:6px}
.nx-beats button{position:relative;display:grid;grid-template-columns:20px minmax(0,1fr) auto;align-items:center;gap:10px;border:1px solid var(--line);border-radius:var(--r);background:#fff;padding:10px 12px;text-align:left;font-size:14px;font-weight:600;overflow:hidden}
.nx-beats button:first-child{grid-template-columns:minmax(0,1fr) auto}
.nx-beats button .ic{width:17px;height:17px;color:var(--accent-ink);position:relative;z-index:1}
.nx-beats button span, .nx-beats button b{position:relative;z-index:1}
.nx-beats button i{position:absolute;left:0;top:0;bottom:0;background:var(--accent-tint);z-index:0}
.nx-beats button[aria-pressed="true"]{border-color:var(--accent);box-shadow:inset 0 0 0 1px var(--accent)}
.nx-pubs{display:flex;flex-direction:column;gap:8px;margin-top:10px}
.nx-pubs div{display:flex;align-items:center;gap:10px;font-size:14px}
.nx-pubs b{flex:1;font-weight:600;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.nx-pubs .num{color:var(--muted)}
.nx-obits{display:grid;grid-template-columns:repeat(auto-fill,minmax(300px,1fr));gap:10px}
.nx-obits a{display:flex;gap:12px;align-items:center;border:1px solid var(--line);border-radius:var(--r);padding:12px;background:#fbfbfc}
.nx-obits a:hover{border-color:#c9ced7}
.nx-obits b{display:block;font-size:14.5px;font-weight:600}
.nx-obits small{font-size:12.5px;color:var(--muted)}
.nx-dove{font-size:20px;flex:none}
@media (max-width:640px){
  .nx-meta .nx-d{margin-left:0}
}

/* ===== TownTapestry news2.css (the page's own stylesheet), as it is ===== */
.xb-hero .hb-in{max-width:600px}
.xb-hero h1{max-width:560px}
.xb-hero .hb-in>p{max-width:540px}
.xb-hero .nx-fresh{margin-top:12px}
.xb-share{position:absolute;top:16px;right:16px;z-index:2}
.xb-paper{width:54%;display:flex;align-items:center;justify-content:center;background:linear-gradient(160deg,#eef1ee,#dfe5e0);overflow:hidden}
.xb-sheet{width:430px;flex:none;transform:rotate(-4deg) translate(-6px,92px) scale(.94);background:#fbf9f3;box-shadow:0 18px 40px rgba(15,22,35,.18),0 2px 6px rgba(15,22,35,.08);padding:18px 20px 22px;font-family:Georgia,"Times New Roman",serif;color:#1d1d1b}
.xb-mast{text-align:center;border-bottom:3px double #1d1d1b;padding-bottom:6px;margin-bottom:10px}
.xb-mast b{display:block;font-size:32px;line-height:1.05;letter-spacing:-.01em;font-weight:700}
.xb-mast small{display:block;font-size:10px;letter-spacing:.12em;text-transform:uppercase;color:#55534c;font-family:var(--sans)}
.xb-cols{display:grid;grid-template-columns:1.6fr 1fr 1fr;gap:10px 14px}
.xb-art{display:flex;flex-direction:column;gap:4px;border-top:1px solid #cfcabb;padding-top:6px;min-width:0}
.xb-art b{font-size:13px;line-height:1.15;overflow:hidden;display:-webkit-box;-webkit-line-clamp:5;-webkit-box-orient:vertical}
.xb-art1{grid-row:span 2}
.xb-art1 b{font-size:18px;line-height:1.08;-webkit-line-clamp:6}
.xb-art em{font-style:normal;font-family:var(--sans);font-size:8.5px;letter-spacing:.08em;text-transform:uppercase;color:#7a766b}
.xb-art i{display:block;height:4px;border-radius:2px;background:#dcd7c9}
.xb-art i:last-child{width:62%}
.xb-latest{display:grid;grid-template-columns:1.4fr 1fr 1fr 1fr;gap:12px}
.xb-lt{border:1px solid var(--line);border-radius:14px;padding:14px 16px;display:flex;flex-direction:column;gap:8px;background:#fff;min-width:0}
.xb-lt h3{margin:0;font-size:15.5px;line-height:1.35}
.xb-lt h3 a:hover{color:var(--accent-ink)}
.xb-lt1{background:var(--accent-tint);border-color:#bfe9d1}
.xb-lt1 h3{font-size:19px}
.xb-lt-img{display:block;margin:-14px -16px 4px;border-radius:13px 13px 0 0;overflow:hidden}
.xb-lt-img:empty{display:none}
.xb-lt-img img{display:block;width:100%;aspect-ratio:16/9;object-fit:cover}
.xb-also{display:flex;align-items:center;gap:6px;flex-wrap:wrap;font-size:12.5px;color:var(--muted);margin-top:auto}
.xb-also a{color:var(--accent-ink);font-weight:600}
.xb-also .nx-pubmark{width:18px;height:18px;font-size:9px}
.xb-lt .nx-acts{margin-top:auto}
.nx-week{background:#fff;border:1px solid var(--line);border-radius:14px;padding:18px 20px}
.nx-week .kick{color:var(--accent-ink)}
.xb-cv-k{display:flex;align-items:center;gap:6px;font-size:11px;font-weight:700;letter-spacing:.06em;text-transform:uppercase;color:var(--accent-ink)}
.xb-cv-k .ic{width:15px;height:15px}
.of-week{padding:16px 18px;margin-bottom:14px;container-type:inline-size}
.of-wk-h{display:flex;align-items:center;justify-content:space-between;gap:12px;flex-wrap:wrap;margin-bottom:12px}
.of-wk-h b{display:flex;align-items:center;gap:8px;font-size:15.5px}
.of-wk-h .ic{width:18px;height:18px;color:var(--accent)}
.of-key{display:flex;align-items:center;gap:6px;font-size:12.5px;color:var(--muted)}
.of-key .of-d{margin-left:6px}
.of-d{display:inline-block;width:9px;height:9px;border-radius:50%}
.of-d.of-town, .of-ic.of-town{background:var(--accent)}
.of-d.of-schools, .of-ic.of-schools{background:#2f74d0}
.of-d.of-library, .of-ic.of-library{background:#d98a1c}
.of-days{display:grid;grid-template-columns:repeat(7,minmax(0,1fr));gap:8px}
@container (max-width:880px){
  .of-days{grid-template-columns:repeat(7,150px);overflow-x:auto;scroll-snap-type:x proximity;padding-bottom:4px}
}
.of-day{scroll-snap-align:start;display:flex;flex-direction:column;gap:6px;min-width:0;padding:10px;border-radius:var(--r);background:var(--surface)}
.of-today{background:var(--accent-tint);box-shadow:inset 0 0 0 1px #bfe9d1}
.of-dh{display:flex;align-items:baseline;justify-content:space-between;gap:4px}
.of-dh b{font-size:13.5px}
.of-dh span{font-size:11.5px;color:var(--muted)}
.of-ev{display:flex;flex-direction:column;gap:1px;padding:6px 8px;border-radius:8px;background:#fff;font-size:12.5px;line-height:1.3;color:var(--ink)}
.of-ev small{display:flex;align-items:center;gap:5px;font-size:10.5px;color:var(--muted);font-weight:600}
.of-ev small::before{content:"";width:7px;height:7px;border-radius:50%;background:var(--accent);flex:none}
.of-ev.of-schools small::before{background:#2f74d0}
.of-ev.of-library small::before{background:#d98a1c}
.of-ev span{overflow:hidden;display:-webkit-box;-webkit-line-clamp:3;-webkit-box-orient:vertical;font-weight:600}
.of-ev:hover span{color:var(--accent-ink)}
.of-x span{text-decoration:line-through;color:var(--faint)}
.of-x small{color:var(--bad)}
.of-more{font-size:12px;font-weight:600;color:var(--accent-ink);padding-left:2px}
.of-none{margin:0;font-size:12px;color:var(--faint)}
.of-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(280px,1fr));gap:14px;align-items:start}
.of-sitecard{display:flex;flex-direction:column;gap:8px;padding:18px;scroll-margin-top:calc(var(--hdr) + 20px)}
.of-h{display:flex;align-items:center;gap:12px;margin-bottom:4px}
.of-ic{width:40px;height:40px;border-radius:11px;display:grid;place-items:center;color:#fff;flex:none}
.of-ic .ic{width:20px;height:20px}
.of-hn{flex:1;min-width:0}
.of-hn b{display:block;font-size:16px;line-height:1.25}
.of-lab{font-size:11px;font-weight:700;letter-spacing:.06em;text-transform:uppercase;color:var(--muted);margin-top:6px}
.of-list{list-style:none;margin:0;padding:0}
.of-list li{padding:10px 0;border-top:1px solid var(--hair)}
.of-list a{font-weight:600;font-size:15px;line-height:1.35;color:var(--ink)}
.of-list a:hover{color:var(--accent-ink)}
.of-list p{margin:4px 0 0;font-size:13px;line-height:1.45;color:var(--ink-2);overflow:hidden;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical}
.of-when{display:block;margin-top:3px;font-size:12px;color:var(--muted)}
.of-alert{display:inline-block;vertical-align:2px;font-size:10.5px;font-weight:700;padding:1px 7px;border-radius:999px;background:#fff4dc;color:#8a5a00}
.of-cal{list-style:none;margin:0;padding:0}
.of-cal li{display:grid;grid-template-columns:42px 1fr;column-gap:10px;padding:8px 0;border-top:1px solid var(--hair);align-items:center}
.of-date{grid-row:span 2;display:flex;flex-direction:column;align-items:center;justify-content:center;height:42px;border-radius:9px;background:var(--surface);font-size:10px;font-weight:700;text-transform:uppercase;color:var(--muted);line-height:1.1}
.of-date b{font-size:16px;color:var(--ink)}
.of-cal a{font-weight:600;font-size:14px;line-height:1.3;color:var(--ink)}
.of-cal a:hover{color:var(--accent-ink)}
.of-cal small{font-size:12px;color:var(--muted)}
.of-cal .of-x a{text-decoration:line-through;color:var(--faint)}
.of-how{margin-top:auto;padding-top:10px;border-top:1px solid var(--hair);font-size:12px;color:var(--faint)}
@container (max-width:480px){
  .of-days{grid-template-columns:repeat(7,72%)}
}
.xb-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:14px;align-items:start}
.xb-pubcard{display:flex;flex-direction:column;gap:10px;padding:18px;scroll-margin-top:calc(var(--hdr) + 20px)}
.xb-home{grid-column:1/-1}
.xb-h{display:flex;align-items:center;gap:12px}
.xb-h .nx-pubmark{width:40px;height:40px;border-radius:11px;font-size:13.5px}
.xb-hn{flex:1;min-width:0}
.xb-hn b{display:block;font-size:16.5px}
.xb-hn small{color:var(--muted);font-size:12.5px}
.xb-visit{font-size:13px;font-weight:600;color:var(--accent-ink);white-space:nowrap}
.xb-stat{display:flex;align-items:center;gap:8px;flex-wrap:wrap;font-size:13px;color:var(--muted)}
.xb-stat b{color:var(--ink)}
.xb-tag{margin-left:auto;font-size:11px;font-weight:700;padding:2px 8px;border-radius:999px;background:var(--surface);color:var(--muted)}
.xb-tag-top{margin-left:0;background:var(--accent-tint);color:var(--accent-ink)}
.xb-heads{list-style:none;margin:0;padding:0;display:flex;flex-direction:column}
.xb-heads li{display:flex;flex-direction:column;gap:2px;padding:10px 0;border-top:1px solid var(--hair)}
.xb-heads a{font-weight:600;font-size:15px;line-height:1.35;color:var(--ink)}
.xb-heads a:hover{color:var(--accent-ink)}
.xb-heads span{font-size:12.5px;color:var(--muted)}
.xb-home .xb-heads{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));column-gap:20px}
.xb-ment{font-style:normal;padding:1px 7px;border-radius:999px;background:var(--surface);color:var(--muted);font-size:10.5px}
.xb-more summary{cursor:pointer;font-size:13px;font-weight:600;color:var(--accent-ink);padding-top:4px}
@media (max-width:900px){
  .xb-latest{grid-template-columns:1fr 1fr}
  .xb-lt1{grid-column:1/-1}
  .xb-grid{grid-template-columns:1fr}
  .xb-home .xb-heads{grid-template-columns:1fr}
}
@media (max-width:640px){
  .xb-latest{grid-template-columns:1fr}
  .xb-sheet{transform:rotate(-3deg) scale(.8)}
  .xb-share{display:none}
}
/* Game day cards (TownTapestry's rules, missing here: the row ran together as plain text, 10/12) */
.nx-games{display:flex;flex-direction:column;gap:8px}
.nx-games a:hover{border-color:var(--accent)}
.nx-games a > span:nth-child(2){flex:1;min-width:0;display:flex;flex-direction:column}
.nx-games b{font-size:14.5px}
.nx-games small{font-size:12.5px;color:var(--muted)}
.nx-games .go{font-size:12.5px;font-weight:600;color:var(--accent-ink);white-space:nowrap}
.nx-gd{width:44px;height:46px;border-radius:10px;background:var(--accent-tint);display:flex;flex-direction:column;align-items:center;justify-content:center;flex:none;line-height:1}
.nx-gd b{font-size:10.5px;text-transform:uppercase;letter-spacing:.06em;color:var(--accent-ink)}
.nx-gd i{font-style:normal;font-size:19px;font-weight:800;margin-top:3px}
.nx-solo .nx-games{display:grid;grid-template-columns:repeat(auto-fill,minmax(300px,1fr))}
.nx-solo>div+div{margin-top:24px}
