{"id":11405,"date":"2026-09-17T20:52:24","date_gmt":"2026-09-17T20:52:24","guid":{"rendered":"https:\/\/silvertonareacommunityaid.org\/?page_id=11405"},"modified":"2026-09-26T16:42:24","modified_gmt":"2026-09-26T16:42:24","slug":"2026-rivalry-food-drive","status":"publish","type":"page","link":"https:\/\/silvertonareacommunityaid.org\/es\/2026-rivalry-food-drive\/","title":{"rendered":"2026 Rivalry Food Drive"},"content":{"rendered":"<p><!-- SACA Rivalry Food Drive scoreboard.\n     Paste into a Custom HTML block (block editor) or a Raw Content element (Cornerstone).\n     Do NOT paste into a Text \/ paragraph block.\n     The blank lines are removed on purpose - WordPress turns them into \n\n<p> tags. --><\/p>\n<div id=\"saca-scoreboard\">\n<style>\n@import url('https:\/\/fonts.googleapis.com\/css2?family=Anton&family=Archivo:wght@400;500;600;700&family=Source+Serif+4:ital,opsz,wght@0,8..60,400;1,8..60,400&display=swap');\n  #saca-scoreboard{\n    --paper:#FAF6EC;\n    --paper-2:#F2ECDC;\n    --ink:#16140E;\n    --ink-soft:#57503F;\n    --ink-faint:#8C8471;\n    --rule:#DED4BC;\n    --green:#154733;\n    --green-lift:#1D6046;\n    --orange:#BC3D07;\n    --orange-lift:#D64C10;\n    --gold:#E3A81C;\n    --neutral:#6B6555;\n    --display:\"Anton\",Impact,\"Haettenschweiler\",\"Arial Narrow\",sans-serif;\n    --ui:\"Archivo\",\"Helvetica Neue\",Arial,sans-serif;\n    --serif:\"Source Serif 4\",Georgia,serif;\n  }\n  #saca-scoreboard *{box-sizing:border-box;margin:0;padding:0}\n  #saca-scoreboard{background:var(--paper)}\n  #saca-scoreboard{\n    background:var(--paper);color:var(--ink);\n    font-family:var(--ui);font-size:16px;line-height:1.5;\n    -webkit-font-smoothing:antialiased;\n    padding:0 0 40px;\n  }\n  #saca-scoreboard .sb-wrap{width:auto;float:none;max-width:960px;margin:0 auto;padding:0 20px}\n  \/* ---------- top bar ---------- *\/\n  #saca-scoreboard .sb-topbar{background:var(--ink);color:var(--paper);margin-bottom:0}\n  #saca-scoreboard .sb-topbar .sb-inner{max-width:960px;margin:0 auto;padding:11px 20px;display:flex;align-items:center;gap:14px;flex-wrap:wrap}\n  #saca-scoreboard .sb-brand{font-size:11px;font-weight:600;letter-spacing:.18em;text-transform:uppercase;color:#D9CFB6;flex:1;min-width:180px}\n  #saca-scoreboard .sb-status{display:inline-flex;align-items:center;gap:7px;font-size:11px;font-weight:700;letter-spacing:.16em;text-transform:uppercase;padding:4px 11px;border-radius:99px;border:1px solid #4A4436;color:#D9CFB6}\n  #saca-scoreboard .sb-status .sb-dot{width:7px;height:7px;border-radius:50%;background:var(--ink-faint)}\n  #saca-scoreboard .sb-status[data-state=\"live\"]{color:#FFF;border-color:#C8442C;background:#3A1710}\n  #saca-scoreboard .sb-status[data-state=\"live\"] .sb-dot{background:#FF5A32;animation:pulse 1.6s ease-in-out infinite}\n  #saca-scoreboard .sb-status[data-state=\"final\"]{color:var(--ink);background:var(--gold);border-color:var(--gold)}\n  #saca-scoreboard .sb-status[data-state=\"final\"] .sb-dot{background:var(--ink)}\n  @keyframes pulse{0%,100%{opacity:1;transform:scale(1)}50%{opacity:.35;transform:scale(.8)}}\n  @media (prefers-reduced-motion:reduce){#saca-scoreboard .sb-status .sb-dot{animation:none!important}}\n  \/* ---------- masthead ---------- *\/\n  #saca-scoreboard .sb-mast{text-align:center;padding:30px 0 6px}\n  #saca-scoreboard .sb-mast h1{font-family:var(--display);font-size:clamp(2.2rem,7.5vw,4rem);line-height:.94;text-transform:uppercase;letter-spacing:.01em}\n  #saca-scoreboard .sb-mast h1 .sb-d{color:var(--green)}\n  #saca-scoreboard .sb-mast h1 .sb-b{color:var(--orange)}\n  #saca-scoreboard .sb-mast h1 .sb-v{color:var(--ink-faint);font-size:.5em;vertical-align:.3em;padding:0 .16em}\n  #saca-scoreboard .sb-mast .sb-sub{font-family:var(--serif);font-style:italic;font-size:clamp(1rem,2.6vw,1.2rem);color:var(--ink-soft);margin-top:8px}\n  \/* ---------- score ---------- *\/\n  #saca-scoreboard .sb-board{display:grid;grid-template-columns:1fr 1fr;gap:14px;margin:26px 0 0}\n  #saca-scoreboard .sb-panel{border-radius:4px;padding:22px 20px 20px;color:#FFF;position:relative;overflow:hidden;text-align:center}\n  #saca-scoreboard .sb-panel.sb-d{background:var(--green)}\n  #saca-scoreboard .sb-panel.sb-b{background:var(--orange)}\n  #saca-scoreboard .sb-panel .sb-team{font-family:var(--display);font-size:clamp(1.5rem,4.6vw,2.3rem);text-transform:uppercase;letter-spacing:.02em;line-height:1}\n  #saca-scoreboard .sb-panel .sb-score{font-family:var(--display);font-size:clamp(3.4rem,13vw,6.2rem);line-height:.9;margin:8px 0 2px;font-variant-numeric:tabular-nums}\n  #saca-scoreboard .sb-panel .sb-unit{font-size:11px;font-weight:700;letter-spacing:.2em;text-transform:uppercase;opacity:.8;margin-top:10px;}\n  #saca-scoreboard .sb-panel .sb-pct{margin-top:12px;font-size:12px;font-weight:600;letter-spacing:.08em;opacity:.85;font-variant-numeric:tabular-nums}\n  #saca-scoreboard .sb-crown{position:absolute;top:12px;right:14px;font-size:10px;font-weight:700;letter-spacing:.14em;text-transform:uppercase;background:var(--gold);color:var(--ink);padding:3px 8px;border-radius:99px;opacity:0;transition:opacity .3s}\n  #saca-scoreboard .sb-panel.sb-lead .sb-crown{opacity:1}\n  @media (max-width:560px){#saca-scoreboard .sb-board{grid-template-columns:1fr}}\n  \/* share bar *\/\n  #saca-scoreboard .sb-sharebar{display:flex;height:12px;border-radius:99px;overflow:hidden;margin:14px 0 0;background:var(--rule)}\n  #saca-scoreboard .sb-sharebar span{display:block;transition:width .7s cubic-bezier(.2,.8,.3,1)}\n  #saca-scoreboard .sb-sharebar .sb-sd{background:var(--green)}\n  #saca-scoreboard .sb-sharebar .sb-sb{background:var(--orange)}\n  #saca-scoreboard .sb-sharebar .sb-ss{background:var(--neutral)}\n  @media (prefers-reduced-motion:reduce){#saca-scoreboard .sb-sharebar span{transition:none}}\n  \/* neutral team *\/\n  #saca-scoreboard .sb-neutral{margin-top:14px;border:1px solid var(--rule);background:var(--paper-2);border-radius:4px;padding:14px 18px;display:flex;align-items:center;gap:16px;flex-wrap:wrap}\n  #saca-scoreboard .sb-neutral .sb-lbl{font-family:var(--display);font-size:1.15rem;text-transform:uppercase;letter-spacing:.02em;color:var(--neutral);flex:1;min-width:150px}\n  #saca-scoreboard .sb-neutral .sb-val{font-family:var(--display);font-size:1.9rem;font-variant-numeric:tabular-nums;line-height:1}\n  #saca-scoreboard .sb-neutral .sb-val small{font-family:var(--ui);font-size:10px;font-weight:700;letter-spacing:.18em;text-transform:uppercase;color:var(--ink-faint);margin-left:6px}\n  #saca-scoreboard .sb-neutral .sb-why{font-family:var(--ui);font-size:.92rem;color:var(--ink-soft);flex:0 0 100%}\n  \/* headline \/ note *\/\n  #saca-scoreboard .sb-headline{text-align:center;margin:24px 0 0;font-family:var(--display);font-size:clamp(1.15rem,3.4vw,1.7rem);text-transform:uppercase;letter-spacing:.02em;line-height:1.15}\n  #saca-scoreboard .sb-note{text-align:center;font-family:var(--ui);font-size:1.05rem;color:var(--ink-soft);margin-top:8px}\n  #saca-scoreboard .sb-note:empty{display:none}\n  \/* totals *\/\n  #saca-scoreboard .sb-totals{display:grid;grid-template-columns:repeat(auto-fit,minmax(150px,1fr));gap:1px;background:var(--rule);border:1px solid var(--rule);border-radius:4px;overflow:hidden;margin:26px 0 0}\n  #saca-scoreboard .sb-tot{background:var(--paper);padding:16px 18px;text-align:center}\n  #saca-scoreboard .sb-tot dt{font-size:10px;font-weight:700;letter-spacing:.18em;text-transform:uppercase;color:var(--ink-faint);margin-bottom:5px}\n  #saca-scoreboard .sb-tot dd{font-family:var(--display);font-size:1.9rem;line-height:1;font-variant-numeric:tabular-nums}\n  \/* goal *\/\n  #saca-scoreboard .sb-goal{margin-top:22px}\n  #saca-scoreboard .sb-goal .sb-row{display:flex;justify-content:space-between;align-items:baseline;font-size:11px;font-weight:700;letter-spacing:.14em;text-transform:uppercase;color:var(--ink-faint);margin-bottom:7px}\n  #saca-scoreboard .sb-goal .sb-track{height:16px;background:var(--paper-2);border:1px solid var(--rule);border-radius:99px;overflow:hidden}\n  #saca-scoreboard .sb-goal .sb-fill{display:block;height:100%;background:var(--gold);transition:width .7s cubic-bezier(.2,.8,.3,1)}\n  @media (prefers-reduced-motion:reduce){#saca-scoreboard .sb-goal .sb-fill{transition:none}}\n  \/* meta \/ refresh *\/\n  #saca-scoreboard .sb-meta{display:flex;justify-content:center;align-items:center;gap:14px;flex-wrap:wrap;margin-top:18px;font-size:12px;color:var(--ink-faint)}\n  #saca-scoreboard .sb-meta button{font-family:var(--ui);font-size:11px;font-weight:600;letter-spacing:.1em;text-transform:uppercase;background:transparent;border:1px solid var(--rule);color:var(--ink-soft);padding:5px 12px;border-radius:99px;cursor:pointer}\n  #saca-scoreboard .sb-meta button:hover{border-color:var(--green);color:var(--green)}\n  #saca-scoreboard .sb-meta button:focus-visible,#saca-scoreboard a:focus-visible{outline:2px solid var(--gold);outline-offset:2px}\n  \/* info cards *\/\n  #saca-scoreboard .sb-info{display:grid;grid-template-columns:repeat(auto-fit,minmax(360px,1fr));gap:14px;margin-top:34px;padding-top:26px;border-top:3px solid var(--ink)}\n  #saca-scoreboard .sb-card h2{font-family:var(--display);font-size:1.15rem;text-transform:uppercase;letter-spacing:.02em;margin-bottom:7px}\n  #saca-scoreboard .sb-card p{font-family:var(--ui);font-size:.98rem;line-height:1.55;color:var(--ink-soft)}\n  #saca-scoreboard .sb-card p strong{color:var(--ink);font-family:var(--ui);font-weight:700;font-size:.92rem}\n  #saca-scoreboard .sb-card p + p{margin-top:8px}\n  #saca-scoreboard .sb-card a{color:var(--green);font-weight:600}\n  #saca-scoreboard .sb-es{display:block;font-family:var(--ui);font-size:.92rem;color:var(--ink-faint);margin-top:5px}\n  #saca-scoreboard footer{margin-top:32px;padding-top:18px;border-top:1px solid var(--rule);text-align:center;font-size:12px;color:var(--ink-faint);line-height:1.7}\n  #saca-scoreboard footer strong{color:var(--ink-soft)}\n  #saca-scoreboard .sb-banner{background:var(--gold);color:var(--ink);text-align:center;font-size:12px;font-weight:600;letter-spacing:.04em;padding:9px 20px}\n  #saca-scoreboard .sb-banner[hidden]{display:none}\n  \/* ---------- ?display mode \u2014 big type for a screen in the lot ---------- *\/\n  #saca-scoreboard.sb-display .sb-info,#saca-scoreboard.sb-display footer,#saca-scoreboard.sb-display .sb-meta button,#saca-scoreboard.sb-display .sb-goal{display:none}\n  #saca-scoreboard.sb-display .sb-mast{padding:18px 0 0}\n  #saca-scoreboard.sb-display .sb-panel{padding:18px 16px 16px}\n  #saca-scoreboard.sb-display .sb-panel .sb-score{font-size:clamp(4.2rem,15vw,8.5rem);margin:6px 0 12px}\n  #saca-scoreboard.sb-display .sb-panel .sb-team{font-size:clamp(1.8rem,5vw,3rem)}\n  #saca-scoreboard.sb-display .sb-headline{font-size:clamp(1.6rem,5vw,2.6rem);margin-top:18px}\n  #saca-scoreboard.sb-display .sb-neutral{padding:10px 16px}\n  #saca-scoreboard.sb-display .sb-neutral .sb-why{display:none}\n  #saca-scoreboard.sb-display .sb-wrap{max-width:1400px}\n  #saca-scoreboard.sb-display .sb-totals{margin-top:20px}\n<\/style>\n<div class=\"sb-banner\" id=\"previewBanner\" hidden>Preview mode. No Google Sheet connected yet. These numbers are made up. See the setup notes at the top of this file.<\/div>\n<div class=\"sb-topbar\">\n<div class=\"sb-inner\">\n    <span class=\"sb-brand\">Silverton Area Community Aid \u00b7 Rivalry Food Drive<\/span><br \/>\n    <span class=\"sb-status\" id=\"status\" data-state=\"upcoming\"><span class=\"sb-dot\"><\/span><span id=\"statusText\">Sat., Sept. 26<\/span><\/span>\n  <\/div>\n<\/div>\n<div class=\"sb-wrap\">\n<div class=\"sb-mast\">\n<h1><span class=\"sb-d\">Ducks<\/span><span class=\"sb-v\">vs<\/span><span class=\"sb-b\">Beavers<\/span><\/h1>\n<p class=\"sb-sub\">The rivalry&#8217;s on pause. Hunger isn&#8217;t.<\/p>\n<p class=\"sb-sub\">La competencia est\u00e1 en pausa. el hambre no.<\/p>\n<\/p><\/div>\n<div class=\"sb-board\">\n<div class=\"sb-panel sb-d\" id=\"panelD\">\n      <span class=\"sb-crown\">Leading<\/span><\/p>\n<div class=\"sb-team\">Ducks<\/div>\n<div class=\"sb-score\" id=\"scoreD\">0<\/div>\n<div class=\"sb-unit\">pounds \u00b7 libras<\/div>\n<div class=\"sb-pct\" id=\"pctD\">\u2014<\/div>\n<\/p><\/div>\n<div class=\"sb-panel sb-b\" id=\"panelB\">\n      <span class=\"sb-crown\">Leading<\/span><\/p>\n<div class=\"sb-team\">Beavers<\/div>\n<div class=\"sb-score\" id=\"scoreB\">0<\/div>\n<div class=\"sb-unit\">pounds \u00b7 libras<\/div>\n<div class=\"sb-pct\" id=\"pctB\">\u2014<\/div>\n<\/p><\/div>\n<\/p><\/div>\n<div class=\"sb-sharebar\" aria-hidden=\"true\">\n    <span class=\"sb-sd\" id=\"barD\" style=\"width:33.3%\"><\/span><br \/>\n    <span class=\"sb-sb\" id=\"barB\" style=\"width:33.3%\"><\/span><br \/>\n    <span class=\"sb-ss\" id=\"barS\" style=\"width:33.4%\"><\/span>\n  <\/div>\n<div class=\"sb-neutral\">\n    <span class=\"sb-lbl\">Silverton Foxes<\/span><br \/>\n    <span class=\"sb-val\" id=\"scoreS\">0<small>lbs<\/small><\/span><br \/>\n    <span class=\"sb-why\">For anyone who&#8217;d rather not pick a side. \u00b7 Para quienes prefieren no escoger bando.<\/span>\n  <\/div>\n<p class=\"sb-headline\" id=\"headline\">Doors open Saturday at 9 am. \u00b7 Abrimos el s\u00e1bado a las 9 a.m.<\/p>\n<p class=\"sb-note\" id=\"note\">\n<dl class=\"sb-totals\">\n<div class=\"sb-tot\">\n<dt>Total collected \u00b7 Total recolectado<\/dt>\n<dd id=\"totalLbs\">0<\/dd>\n<\/div>\n<div class=\"sb-tot\">\n<dt>Amount of deliveries \u00b7 Entregas<\/dt>\n<dd id=\"cars\">6<\/dd>\n<\/div>\n<div class=\"sb-tot\">\n<dt>Time left \u00b7 Tiempo restante<\/dt>\n<dd id=\"clock\">\u2014<\/dd>\n<\/div>\n<\/dl>\n<div class=\"sb-goal\" id=\"goalWrap\">\n<div class=\"sb-row\"><span>Toward our goal<\/span><span id=\"goalText\">0 of 2,000 lbs<\/span><\/div>\n<div class=\"sb-track\"><span class=\"sb-fill\" id=\"goalFill\" style=\"width:0%\"><\/span><\/div>\n<\/p><\/div>\n<div class=\"sb-meta\">\n    <span id=\"updated\">Waiting for the first update.<\/span><br \/>\n    <button type=\"button\" id=\"refresh\">Refresh now<\/button>\n  <\/div>\n<div class=\"sb-info\">\n<div class=\"sb-card\">\n<h2>When and where \u00b7 Cu\u00e1ndo y d\u00f3nde<\/h2>\n<p><strong>Saturday, September 26 \u00b7 9 am \u2013 12 pm PT<\/strong><\/p>\n<p>SACA, 1030 N. First St., Suite A, Silverton. North parking lot, main entrance side, toward Dollar General. Rain or shine.<\/p>\n<p>      <span class=\"sb-es\">S\u00e1bado 26 de septiembre \u00b7 9 a.m. \u2013 12 p.m.<br \/>SACA, 1030 N. First St., Suite A, Silverton.<br \/>Estacionamiento norte, del lado de la entrada principal, hacia Dollar General. Llueva o truene.<\/span>\n    <\/div>\n<div class=\"sb-card\">\n<h2>Can&#8217;t come on Saturday?<\/h2>\n<p><a href=\"[DONATE]\">Give online at SACA&#8217;s donation page<\/a>. and name your team in the note. Every dollar stays in the Silverton area.<\/p>\n<p>Need food yourself? Our food pantry is open <strong>Mondays 11 am \u2013 2 pm, Tuesdays 4 pm \u2013 6 pm, and Thursdays 9 am \u2013 12 pm<\/strong>. Walk-ins are welcome, and you don&#8217;t need to pick a team.<\/p>\n<p>      <span class=\"sb-es\">\u00bfNo puede venir el s\u00e1bado?<br \/>Done en l\u00ednea en la p\u00e1gina de donaciones de SACA y escriba su equipo en la nota. Cada d\u00f3lar se queda en el \u00e1rea de Silver Falls.<\/span><br \/>\n      <span class=\"sb-es\">\u00bfNecesita alimentos? Nuestra despensa abre los lunes de 11 a.m. a 2 p.m., los martes de 4 p.m. a 6 p.m. y los jueves de 9 a.m. a 12 p.m. No necesita cita y no necesita escoger equipo.<\/span>\n    <\/div>\n<div class=\"sb-card\">\n<h2>How it works \u00b7 C\u00f3mo funciona<\/h2>\n<p>Drive up, bike up, or walk up to the north lot. Tell us your team: Ducks, Beavers, or Silverton Foxes. We unload, weigh what you brought, and add every pound to your team&#8217;s board. The board goes live at 9 am Saturday.<br \/>The Foxes are playing both sides \u2014 the team will be out there all morning unloading cars, and you can still put your pounds on their board.<\/p>\n<p>      <span class=\"sb-es\">Llegue en carro, en bici o a pie al estacionamiento norte. D\u00edganos su equipo: Ducks, Beavers o Silverton Foxes. Nosotros descargamos, pesamos lo que trajo y sumamos cada libra al marcador de su equipo. El marcador abre el s\u00e1bado a las 9 a.m.<br \/>Los Foxes juegan de los dos lados: el equipo estar\u00e1 toda la ma\u00f1ana descargando carros, y usted tambi\u00e9n puede sumar sus libras a su marcador.<\/span>\n    <\/div>\n<div class=\"sb-card\">\n<h2>What to bring \u00b7 Qu\u00e9 traer<\/h2>\n<p>Non-perishable groceries in regular grocery-store sizes: canned meat, fish, and beans; soup, stew, and chili; pasta and sauce; peanut butter, rice, cereal, and oatmeal; canned fruit and vegetables. Personal care items and pet food are welcome too. Bringing a big bag of pet food? Add a box of gallon Ziplocs so we can split it into portions.<br \/>Please avoid fresh, frozen, open, past-date, or home-canned food. Aw well as bulk-sized items \u2014 a 10-pound bag of rice is generous, but six regular bags feed six households.<\/p>\n<p>      <span class=\"sb-es\">Alimentos no perecederos en tama\u00f1os normales de supermercado: carne, pescado y frijoles enlatados; sopa, guisado y chili; pasta y salsa; crema de cacahuate, arroz, cereal y avena; frutas y verduras enlatadas. Los art\u00edculos de cuidado personal y la comida para mascotas tambi\u00e9n son bienvenidos. \u00bfTrae una bolsa grande de comida para mascotas? Agregue una caja de bolsas Ziploc de gal\u00f3n para poder dividirla en porciones.<br \/>Por favor evite la comida fresca, congelada, abierta, vencida o hecha en casa. Tambi\u00e9n los tama\u00f1os de mayoreo: una bolsa de 10 libras de arroz es muy generosa, pero seis bolsas normales alcanzan para seis hogares.<\/span>\n    <\/div>\n<\/p><\/div>\n<footer>\n    <strong>Silverton Area Community Aid<\/strong> \u00b7 1030 N. First St., Suite A, Silverton, OR \u00b7 (503)873-3446<br \/>\n    Every pound collected stays right here, on our shelves, for neighbors across the Silver Falls area.<br \/>\n    Cada libra recolectada se queda aqu\u00ed, en nuestros estantes, para vecinos de toda el \u00e1rea de Silver Falls.<br \/>\n  <\/footer>\n<\/div>\n<p><script>\n(function(){\n  \"use strict\";\n  \/* ======================= CONFIG \u2014 edit these ======================= *\/\n  var CONFIG = {\n    \/\/ Paste your published-to-web CSV link here (see notes at top of file).\n    \/\/ Assembled from parts on purpose. A literal ampersand anywhere in this\n    \/\/ script gets re-encoded by WordPress and breaks the whole thing.\n    csvBase: \"https:\/\/docs.google.com\/spreadsheets\/d\/e\/2PACX-1vSeHynelDx2biTPUHT8rkJbEZ923zCif3a5BBiSzO-ocyTFhhIUfs2Wo5c03Ghj2an94pQsJiKQRbUq\/pub\",\n    csvParams: [\"gid=0\", \"single=true\", \"output=csv\"],\n    refreshSeconds: 15,\n    goalPounds: 3000,\n    \/\/ Event window, local time.\n    eventDate: \"2026-09-26\",\n    startHour: 9,\n    endHour: 12\n  };\n  \/* ================================================================== *\/\n  \/\/ Preview mode is on only while csvUrl is still the placeholder below.\n  \/\/ Once a real https:\/\/ link is pasted in, the page goes live.\n  var AMP = String.fromCharCode(38);\n  CONFIG.csvUrl = CONFIG.csvBase + \"?\" + CONFIG.csvParams.join(AMP);\n  var PLACEHOLDER = \"PASTE_YOUR_PUBLISHED_CSV_URL_HERE\";\n  var isPreview = !CONFIG.csvUrl\n                  || CONFIG.csvUrl.indexOf(PLACEHOLDER) > -1\n                  || CONFIG.csvUrl.indexOf(\"http\") !== 0;\n  var reduced = window.matchMedia(\"(prefers-reduced-motion: reduce)\").matches;\n  var ROOT = document.getElementById(\"saca-scoreboard\");\n  if (location.search.indexOf(\"display\") > -1) ROOT.classList.add(\"sb-display\");\n  if (isPreview) document.getElementById(\"previewBanner\").hidden = false;\n  var el = {\n    scoreD: document.getElementById(\"scoreD\"),\n    scoreB: document.getElementById(\"scoreB\"),\n    scoreS: document.getElementById(\"scoreS\"),\n    pctD: document.getElementById(\"pctD\"),\n    pctB: document.getElementById(\"pctB\"),\n    panelD: document.getElementById(\"panelD\"),\n    panelB: document.getElementById(\"panelB\"),\n    barD: document.getElementById(\"barD\"),\n    barB: document.getElementById(\"barB\"),\n    barS: document.getElementById(\"barS\"),\n    total: document.getElementById(\"totalLbs\"),\n    cars: document.getElementById(\"cars\"),\n    clock: document.getElementById(\"clock\"),\n    goalText: document.getElementById(\"goalText\"),\n    goalFill: document.getElementById(\"goalFill\"),\n    headline: document.getElementById(\"headline\"),\n    note: document.getElementById(\"note\"),\n    status: document.getElementById(\"status\"),\n    statusText: document.getElementById(\"statusText\"),\n    updated: document.getElementById(\"updated\")\n  };\n  var state = { ducks:0, beavers:0, foxes:0, cars:0, note:\"\", status:\"auto\" };\n  var shown = { ducks:0, beavers:0, foxes:0, cars:0 };\n  var lastChangeAt = null;\n  var lastFetchOk = null;\n  \/* ---------- helpers ---------- *\/\n  function fmt(n){ return Math.round(n).toLocaleString(\"en-US\"); }\n  function parseCSV(text){\n    var rows = [], row = [], field = \"\", q = false, i, c;\n    for (i = 0; i < text.length; i++){\n      c = text[i];\n      if (q){\n        if (c === '\"'){ if (text[i+1] === '\"'){ field += '\"'; i++; } else { q = false; } }\n        else field += c;\n      } else if (c === '\"'){ q = true; }\n      else if (c === ','){ row.push(field); field = \"\"; }\n      else if (c === '\\n'){ row.push(field); rows.push(row); row = []; field = \"\"; }\n      else if (c !== '\\r'){ field += c; }\n    }\n    row.push(field); rows.push(row);\n    return rows;\n  }\n  function num(v){\n    var n = parseFloat(String(v).replace(\/[^0-9.\\-]\/g, \"\"));\n    return isFinite(n) ? n : 0;\n  }\n  \/* ---------- event status ---------- *\/\n  function windowTimes(){\n    var p = CONFIG.eventDate.split(\"-\");\n    var start = new Date(+p[0], +p[1]-1, +p[2], CONFIG.startHour, 0, 0);\n    var end   = new Date(+p[0], +p[1]-1, +p[2], CONFIG.endHour, 0, 0);\n    return { start: start, end: end };\n  }\n  function currentStatus(){\n    var s = (state.status || \"auto\").toLowerCase().trim();\n    if (s === \"upcoming\" || s === \"live\" || s === \"final\") return s;\n    var w = windowTimes(), now = new Date();\n    if (now < w.start) return \"upcoming\";\n    if (now > w.end) return \"final\";\n    return \"live\";\n  }\n  function renderStatus(){\n    var s = currentStatus(), w = windowTimes(), now = new Date();\n    el.status.setAttribute(\"data-state\", s);\n    if (s === \"live\"){\n      el.statusText.textContent = \"Live now\";\n      \/\/ Clamp to the event window so a manually-forced \"live\" status can't\n      \/\/ report days of remaining time.\n      var msLeft = Math.max(0, Math.min(w.end - now, w.end - w.start));\n      var mins = Math.floor(msLeft \/ 60000);\n      el.clock.textContent = mins >= 60\n        ? Math.floor(mins\/60) + \"h \" + (mins % 60) + \"m\"\n        : mins + \"m\";\n    } else if (s === \"upcoming\"){\n      el.statusText.textContent = \"Sat., Sept. 26\";\n      var days = Math.ceil((w.start - now) \/ 86400000);\n      el.clock.textContent = days > 0 ? days + (days === 1 ? \" day\" : \" days\") : \"Soon\";\n    } else {\n      el.statusText.textContent = \"Final\";\n      el.clock.textContent = \"Done\";\n    }\n    return s;\n  }\n  \/* ---------- headline ---------- *\/\n  function headlineFor(s){\n    var d = state.ducks, b = state.beavers, gap = Math.abs(d - b);\n    if (s === \"upcoming\"){\n      return \"Doors open Saturday at 9 am.\";\n    }\n    if (d === 0) if (b === 0) if (state.foxes === 0){\n      return s === \"final\" ? \"That's it. Thank you, Silver Falls.\" : \"No pounds on the board yet. Someone has to go first.\";\n    }\n    if (s === \"final\"){\n      if (gap === 0) return \"Dead even. That works for us.\";\n      return (d > b ? \"Ducks\" : \"Beavers\") + \" take it by \" + fmt(gap) + \" lbs.\";\n    }\n    if (gap === 0) return \"Tied. Somebody go break it.\";\n    return (d > b ? \"Ducks\" : \"Beavers\") + \" lead by \" + fmt(gap) + \" lbs.\";\n  }\n  \/* ---------- number animation ---------- *\/\n  function animate(key, node, target, suffix){\n    var from = shown[key], start = null, dur = reduced ? 0 : 700;\n    if (from === target){ node.innerHTML = fmt(target) + (suffix || \"\"); return; }\n    function step(ts){\n      if (start === null) start = ts;\n      var t = dur === 0 ? 1 : Math.min(1, (ts - start) \/ dur);\n      var eased = 1 - Math.pow(1 - t, 3);\n      node.innerHTML = fmt(from + (target - from) * eased) + (suffix || \"\");\n      if (t < 1) requestAnimationFrame(step); else shown[key] = target;\n    }\n    requestAnimationFrame(step);\n  }\n  \/* ---------- render ---------- *\/\n  function render(){\n    var s = renderStatus();\n    var d = state.ducks, b = state.beavers, sv = state.foxes;\n    var total = d + b + sv;\n    animate(\"ducks\", el.scoreD, d);\n    animate(\"beavers\", el.scoreB, b);\n    animate(\"foxes\", el.scoreS, sv, '<small>lbs<\/small>');\n    animate(\"cars\", el.cars, state.cars);\n    el.total.textContent = fmt(total);\n    var pd = total ? (d \/ total * 100) : 33.3;\n    var pb = total ? (b \/ total * 100) : 33.3;\n    var ps = total ? (sv \/ total * 100) : 33.4;\n    el.barD.style.width = pd + \"%\";\n    el.barB.style.width = pb + \"%\";\n    el.barS.style.width = ps + \"%\";\n    el.pctD.textContent = total ? Math.round(pd) + \"% of the haul\" : \"\u2014\";\n    el.pctB.textContent = total ? Math.round(pb) + \"% of the haul\" : \"\u2014\";\n    var live = total > 0;\n    el.panelD.classList.toggle(\"sb-lead\", live ? d > b : false);\n    el.panelB.classList.toggle(\"sb-lead\", live ? b > d : false);\n    el.headline.textContent = headlineFor(s);\n    el.note.textContent = state.note || \"\";\n    var pct = CONFIG.goalPounds > 0 ? Math.min(100, total \/ CONFIG.goalPounds * 100) : 0;\n    el.goalFill.style.width = pct + \"%\";\n    el.goalText.textContent = total >= CONFIG.goalPounds\n      ? \"Goal met. \" + fmt(total) + \" lbs and counting\"\n      : fmt(total) + \" of \" + fmt(CONFIG.goalPounds) + \" lbs\";\n  }\n  function renderFreshness(){\n    if (isPreview){ el.updated.textContent = \"Preview data, not live.\"; return; }\n    if (lastFetchOk === null){ el.updated.textContent = \"Waiting for the first update.\"; return; }\n    var secs = Math.round((Date.now() - (lastChangeAt || lastFetchOk)) \/ 1000);\n    var label;\n    if (secs < 45) label = \"just now\";\n    else if (secs < 5400) label = Math.round(secs\/60) + \" min ago\";\n    else label = Math.round(secs\/3600) + \" hr ago\";\n    var stale = (Date.now() - lastFetchOk) > 90000;\n    el.updated.textContent = (stale ? \"Reconnecting. Last score \" : \"Score updated \") + label;\n  }\n  \/* ---------- fetch ---------- *\/\n  function apply(map){\n    var changed =\n      num(map.ducks) !== state.ducks ||\n      num(map.beavers) !== state.beavers ||\n      num(map.foxes) !== state.foxes;\n    state.ducks = num(map.ducks);\n    state.beavers = num(map.beavers);\n    state.foxes = num(map.foxes);\n    state.cars = num(map.cars !== undefined ? map.cars : map.donations);\n    state.note = (map.note || \"\").trim();\n    state.status = (map.status || \"auto\").trim();\n    if (map.goal) if (num(map.goal) > 0) CONFIG.goalPounds = num(map.goal);\n    if (changed || lastChangeAt === null) lastChangeAt = Date.now();\n    render();\n  }\n  function load(){\n    if (isPreview){\n      apply({ ducks: 1840, beavers: 2015, foxes: 460, cars: 128,\n              note: \"Somebody's grandma just dropped 40 lbs of beans and won't say which side she's on.\",\n              status: \"live\" });\n      renderFreshness();\n      return;\n    }\n    var url = CONFIG.csvUrl + (CONFIG.csvUrl.indexOf(\"?\") > -1 ? AMP : \"?\") + \"cb=\" + Date.now();\n    fetch(url, { cache: \"no-store\" })\n      .then(function(r){ if (!r.ok) throw new Error(\"HTTP \" + r.status); return r.text(); })\n      .then(function(text){\n        var rows = parseCSV(text), map = {}, i, k;\n        for (i = 0; i < rows.length; i++){\n          k = (rows[i][0] || \"\").trim().toLowerCase();\n          if (k) if (k !== \"key\") map[k] = rows[i][1] || \"\";\n        }\n        lastFetchOk = Date.now();\n        apply(map);\n        renderFreshness();\n      })\n      .catch(function(err){\n        \/\/ Keep the last good numbers on screen; just say we're reconnecting.\n        \/\/ The console message is there so a failed sheet link is debuggable.\n        if (window.console) if (console.warn) console.warn(\"Scoreboard fetch failed:\", err);\n        renderFreshness();\n      });\n  }\n  document.getElementById(\"refresh\").addEventListener(\"click\", load);\n  document.addEventListener(\"visibilitychange\", function(){ if (!document.hidden) load(); });\n  render();\n  load();\n  setInterval(load, Math.max(5, CONFIG.refreshSeconds) * 1000);\n  setInterval(renderFreshness, 10000);\n  setInterval(renderStatus, 30000);\n})();\n<\/script>\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>Preview mode. No Google Sheet connected yet. These numbers are made up. See the setup notes at the top of this file. Silverton Area Community Aid \u00b7 Rivalry Food Drive Sat., Sept. 26 DucksvsBeavers The rivalry&#8217;s on pause. Hunger isn&#8217;t. La competencia est\u00e1 en pausa. el hambre no. Leading Ducks 0 pounds \u00b7 libras \u2014 Leading Beavers 0 pounds \u00b7 &#8230; <a href=\"https:\/\/silvertonareacommunityaid.org\/es\/2026-rivalry-food-drive\/\" class=\"more-link\">Read More<\/a><\/p>","protected":false},"author":10,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"footnotes":""},"class_list":["post-11405","page","type-page","status-publish","hentry","no-post-thumbnail"],"_links":{"self":[{"href":"https:\/\/silvertonareacommunityaid.org\/es\/wp-json\/wp\/v2\/pages\/11405","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/silvertonareacommunityaid.org\/es\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/silvertonareacommunityaid.org\/es\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/silvertonareacommunityaid.org\/es\/wp-json\/wp\/v2\/users\/10"}],"replies":[{"embeddable":true,"href":"https:\/\/silvertonareacommunityaid.org\/es\/wp-json\/wp\/v2\/comments?post=11405"}],"version-history":[{"count":9,"href":"https:\/\/silvertonareacommunityaid.org\/es\/wp-json\/wp\/v2\/pages\/11405\/revisions"}],"predecessor-version":[{"id":11420,"href":"https:\/\/silvertonareacommunityaid.org\/es\/wp-json\/wp\/v2\/pages\/11405\/revisions\/11420"}],"wp:attachment":[{"href":"https:\/\/silvertonareacommunityaid.org\/es\/wp-json\/wp\/v2\/media?parent=11405"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}