{"id":"61a9c211-e58d-4a8f-88da-0ec70f57fd84","title":"By- og kommunestyrer","author":"","userId":null,"body":"<!DOCTYPE html>\r\n<html lang=\"no\">\r\n<head>\r\n<meta charset=\"UTF-8\">\r\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\r\n<title>Varainnkalling – Arendal, Grimstad, Froland og Tvedestrand 2023–2026</title>\r\n<style>\r\n@import url('https://fonts.googleapis.com/css2?family=IBM+Plex+Mono:wght@400;500;600&family=IBM+Plex+Sans:wght@300;400;500;600;700&display=swap');\r\n\r\n:root {\r\n  --bg: #f2f0eb;\r\n  --surface: #fff;\r\n  --border: #ddd9d0;\r\n  --text: #18160f;\r\n  --muted: #706a60;\r\n  --ok:      #2d6a4f;\r\n  --warn:    #c27b00;\r\n  --alert:   #b83232;\r\n  --ok-bg:   #d8f3dc;\r\n  --warn-bg: #fde8b5;\r\n  --alert-bg:#fcd6d2;\r\n  --absent:  #eeebe5;\r\n  --present-bg:#dff0e8;\r\n  --Ap:#c0392b; --H:#1a4a8a; --KrF:#d4870a; --FrP:#2471a3;\r\n  --SV:#8b0000; --Sp:#1e8449; --V:#0e6655; --INP:#6c3483;\r\n  --MDG:#239b56; --R:#e91e63; --K:#5d4037;\r\n}\r\n* { box-sizing:border-box; margin:0; padding:0; }\r\nbody { font-family:'IBM Plex Sans',sans-serif; background:var(--bg); color:var(--text); min-height:600px; display:flex; flex-direction:column; }\r\n\r\n/* TOP BAR */\r\n.topbar { background:#004B83; color:#fff; padding:14px 24px; display:flex; align-items:center; gap:20px; flex-shrink:0; }\r\n.topbar h1 { font-size:16px; font-weight:700; letter-spacing:-0.01em; }\r\n.topbar p  { font-size:11px; color:#8BCDFF; font-family:'IBM Plex Mono',monospace; }\r\n\r\n/* MUNICIPALITY TABS */\r\n.tab-bar { display:flex; background:var(--surface); border-bottom:2px solid var(--border); flex-shrink:0; }\r\n.tab { padding:10px 24px; font-size:13px; font-weight:600; cursor:pointer; border-bottom:3px solid transparent; color:var(--muted); transition:all 0.15s; white-space:nowrap; }\r\n.tab:hover { color:var(--text); background:#f5f3ed; }\r\n.tab.active { color:var(--text); border-bottom-color:var(--text); }\r\n.tab-stats { font-size:10px; font-family:'IBM Plex Mono',monospace; font-weight:400; margin-left:6px; opacity:0.6; }\r\n\r\n/* SUMMARY ROW */\r\n.summary-row { display:flex; gap:0; border-bottom:1px solid var(--border); background:var(--surface); overflow-x:auto; flex-shrink:0; }\r\n.sum-box { padding:10px 20px; border-right:1px solid var(--border); flex-shrink:0; }\r\n.sum-box .n { font-family:'IBM Plex Mono',monospace; font-size:22px; font-weight:700; line-height:1; }\r\n.sum-box .l { font-size:11px; color:var(--muted); margin-top:2px; }\r\n.sum-box.red .n { color:var(--alert); }\r\n.sum-box.ora .n { color:var(--warn); }\r\n.sum-box.grn .n { color:var(--ok); }\r\n\r\n/* MAIN LAYOUT */\r\n.main { display:grid; grid-template-columns:280px 1fr; min-height:600px; }\r\n\r\n/* MEETING LIST */\r\n.meeting-list { border-right:2px solid var(--border); overflow-y:auto; background:var(--surface); max-height:600px; }\r\n.meeting-list-hdr { padding:10px 14px; font-size:10px; font-family:'IBM Plex Mono',monospace; font-weight:600; letter-spacing:0.1em; text-transform:uppercase; color:var(--muted); border-bottom:1px solid var(--border); position:sticky; top:0; background:var(--surface); z-index:2; }\r\n\r\n.meeting-item { display:grid; grid-template-columns:1fr auto; align-items:center; padding:9px 14px; border-bottom:1px solid var(--border); cursor:pointer; gap:8px; transition:background 0.1s; }\r\n.meeting-item:hover { background:#f5f2eb; }\r\n.meeting-item.active { background:var(--text); color:#fff; }\r\n.meeting-item.active .mi-date,.meeting-item.active .badge { opacity:0.7; }\r\n.mi-title { font-size:13px; font-weight:600; font-family:'IBM Plex Mono',monospace; }\r\n.mi-date  { font-size:11px; color:var(--muted); margin-top:2px; }\r\n.badges   { display:flex; gap:3px; flex-wrap:wrap; justify-content:flex-end; }\r\n.badge { font-size:8.5px; font-family:'IBM Plex Mono',monospace; font-weight:700; padding:2px 5px; border-radius:2px; white-space:nowrap; }\r\n.badge.al  { background:var(--alert-bg); color:var(--alert); }\r\n.badge.wn  { background:var(--warn-bg);  color:var(--warn); }\r\n.badge.ok  { background:var(--ok-bg);    color:var(--ok); }\r\n.badge.nn  { background:var(--absent);   color:var(--muted); }\r\n.badge.cv  { background:#e8f4f8; color:#1a6b8a; }\r\n\r\n/* DETAIL */\r\n.detail { overflow-y:auto; padding:20px 24px 40px; max-height:600px; }\r\n.d-title { font-size:19px; font-weight:700; letter-spacing:-0.01em; margin-bottom:3px; }\r\n.d-meta  { font-size:12px; font-family:'IBM Plex Mono',monospace; color:var(--muted); margin-bottom:18px; }\r\n\r\n/* PARTY BLOCK */\r\n.party-block { margin-bottom:14px; background:var(--surface); border:1px solid var(--border); border-radius:2px; overflow:hidden; }\r\n.party-hdr { display:flex; align-items:center; gap:8px; padding:7px 12px; background:#faf9f6; border-bottom:1px solid var(--border); }\r\n.party-dot { width:9px; height:9px; border-radius:50%; flex-shrink:0; }\r\n.party-nm  { font-size:12px; font-weight:700; font-family:'IBM Plex Mono',monospace; }\r\n.party-sum { font-size:11px; color:var(--muted); margin-left:auto; font-family:'IBM Plex Mono',monospace; }\r\n\r\n.member-row { display:grid; grid-template-columns:22px 1fr auto; align-items:center; padding:0; border-bottom:1px solid #f2efe8; min-height:31px; }\r\n.member-row:last-child { border-bottom:none; }\r\n.m-nr   { padding:0 0 0 12px; font-size:11px; font-family:'IBM Plex Mono',monospace; color:var(--muted); }\r\n.m-name { padding:6px 8px; font-size:13px; }\r\n.m-name.vara { font-style:italic; color:var(--muted); font-size:12px; }\r\n.m-status { padding:4px 12px 4px 0; text-align:right; display:flex; align-items:center; gap:6px; justify-content:flex-end; }\r\n\r\n.chip { display:inline-block; font-size:9px; font-family:'IBM Plex Mono',monospace; font-weight:600; padding:2px 6px; border-radius:2px; white-space:nowrap; }\r\n.chip.v1 { background:#c8f0d8; color:#1a6b3a; }\r\n.chip.v2 { background:#d4eaf5; color:#1a5276; }\r\n.chip.v3 { background:#fef9c3; color:#7d6608; }\r\n.chip.v4 { background:var(--warn-bg); color:var(--warn); }\r\n.chip.v5 { background:var(--alert-bg); color:var(--alert); }\r\n.chip.pr { background:var(--present-bg); color:var(--ok); }\r\n.chip.ab { background:var(--absent); color:var(--muted); }\r\n\r\n.avvik-box { margin:0 12px 8px; padding:7px 10px; font-size:12px; line-height:1.5; border-radius:1px; }\r\n.avvik-box.warn  { background:#fff8e1; border-left:3px solid var(--warn);  color:#5a4200; }\r\n.avvik-box.alert { background:#fdf1f0; border-left:3px solid var(--alert); color:#5a1a1a; }\r\n\r\n/* CLOSE VOTES */\r\n.cv-section { margin-top:18px; border-top:2px solid var(--border); padding-top:14px; }\r\n.cv-title { font-size:10px; font-family:'IBM Plex Mono',monospace; font-weight:700; letter-spacing:0.1em; text-transform:uppercase; color:var(--muted); margin-bottom:10px; }\r\n.cv-card { background:var(--surface); border:1px solid var(--border); border-left:3px solid #888; padding:10px 13px; margin-bottom:8px; border-radius:1px; }\r\n.cv-sak  { font-family:'IBM Plex Mono',monospace; font-size:11px; font-weight:700; margin-bottom:5px; }\r\n.cv-nums { display:flex; gap:10px; align-items:center; margin-bottom:5px; }\r\n.cv-f    { font-family:'IBM Plex Mono',monospace; font-size:15px; font-weight:700; }\r\n.cv-m    { font-family:'IBM Plex Mono',monospace; font-size:15px; font-weight:700; }\r\n.cv-margin { font-size:9.5px; font-family:'IBM Plex Mono',monospace; padding:2px 5px; border-radius:2px; }\r\n.cv-desc { font-size:11px; color:var(--muted); line-height:1.5; }\r\n\r\n.no-vara { padding:32px; text-align:center; color:var(--muted); font-size:12px; }\r\n.empty-state { padding:40px; text-align:center; color:var(--muted); font-size:14px; }\r\n\r\n.footnote { margin-top:14px; padding:9px 12px; background:var(--surface); border:1px solid var(--border); font-size:10.5px; color:var(--muted); font-family:'IBM Plex Mono',monospace; line-height:1.6; }\r\n\r\n/* Legend */\r\n.legend { display:flex; flex-wrap:wrap; gap:10px; font-size:10.5px; margin-bottom:16px; }\r\n.li { display:flex; align-items:center; gap:5px; }\r\n\r\n/* Hidden */\r\n.hidden { display:none; }\r\n/* ── MOBILE ── */\r\n.mobile-nav { display:none; }\r\n@media (max-width: 600px) {\r\n  .topbar h1 { font-size:13px; }\r\n  .topbar p  { display:none; }\r\n  .tab { padding:8px 12px; font-size:12px; }\r\n  .tab-stats { display:none; }\r\n  .summary-row {\r\n    display:grid;\r\n    grid-template-columns: 1fr 1fr;\r\n    overflow-x:unset;\r\n  }\r\n  .sum-box {\r\n    padding:10px 14px;\r\n    border-right:none;\r\n    border-bottom:1px solid var(--border);\r\n  }\r\n  .sum-box:nth-child(odd) { border-right:1px solid var(--border); }\r\n  .sum-box .n { font-size:18px; }\r\n  .sum-box .l { font-size:9px; }\r\n  .main { grid-template-columns:1fr; min-height:unset; }\r\n  .meeting-list { max-height:unset; border-right:none; border-bottom:2px solid var(--border); display:none; }\r\n  .meeting-list.mob-active { display:block; }\r\n  .detail { max-height:unset; display:none; }\r\n  .detail.mob-active { display:block; }\r\n  .mobile-nav { display:flex; border-bottom:2px solid var(--border); background:var(--surface); flex-shrink:0; }\r\n  .mob-tab { flex:1; padding:10px; text-align:center; font-size:12px; font-weight:600;\r\n             font-family:'IBM Plex Mono',monospace; cursor:pointer; color:var(--muted);\r\n             border-bottom:3px solid transparent; transition:all 0.15s; }\r\n  .mob-tab.active { color:var(--text); border-bottom-color:var(--text); }\r\n}\r\n@media (min-width: 601px) {\r\n  .meeting-list { display:block !important; }\r\n  .detail { display:block !important; }\r\n}\r\n\r\n</style>\r\n</head>\r\n<body>\r\n\r\n<div class=\"topbar\">\r\n  <div>\r\n    <h1>Vara-oversikt 2023–2026</h1>\r\n    <p>Velg kommune · Klikk på møte for detaljer · ⚖ = knapp votering (margin ≤ 2)</p>\r\n  </div>\r\n</div>\r\n\r\n<div class=\"tab-bar\">\r\n  <div class=\"tab active\" onclick=\"switchMuni(0)\">Arendal <span class=\"tab-stats\" id=\"ts0\"></span></div>\r\n  <div class=\"tab\" onclick=\"switchMuni(1)\">Grimstad <span class=\"tab-stats\" id=\"ts1\"></span></div>\r\n  <div class=\"tab\" onclick=\"switchMuni(2)\">Froland <span class=\"tab-stats\" id=\"ts2\"></span></div>\r\n  <div class=\"tab\" onclick=\"switchMuni(3)\">Tvedestrand <span class=\"tab-stats\" id=\"ts3\"></span></div>\r\n</div>\r\n\r\n<div class=\"summary-row\" id=\"summary-row\"></div>\r\n\r\n<div class=\"mobile-nav\">\r\n  <div class=\"mob-tab active\" id=\"mob-list-tab\" onclick=\"mobSwitch('list')\">Møteliste</div>\r\n  <div class=\"mob-tab\" id=\"mob-detail-tab\" onclick=\"mobSwitch('detail')\">Detaljer</div>\r\n</div>\r\n<div class=\"main\">\r\n  <div class=\"meeting-list\">\r\n    <div class=\"meeting-list-hdr\">Møter</div>\r\n    <div id=\"meeting-list-content\"></div>\r\n  </div>\r\n  <div class=\"detail\" id=\"detail-panel\">\r\n    <div class=\"empty-state\">← Velg et møte fra listen</div>\r\n  </div>\r\n</div>\r\n\r\n<script>\r\n// ─── COLOUR HELPERS ──────────────────────────────────────────────────────────\r\nconst PC = {Ap:'#c0392b',H:'#1a4a8a',KrF:'#d4870a',FrP:'#2471a3',SV:'#8b0000',\r\n            Sp:'#1e8449',V:'#0e6655',INP:'#6c3483',MDG:'#239b56',R:'#e91e63',K:'#5d4037',\r\n            Uavh:'#888',KrF_V:'#d4870a'};\r\n\r\nfunction chipCls(r){ return r===1?'v1':r===2?'v2':r<=4?'v3':r===5?'v4':'v5'; }\r\n\r\n// ─── DATA: ARENDAL ───────────────────────────────────────────────────────────\r\nconst ARENDAL = {\r\n  name:'Arendal',\r\n  varaLists:{\r\n    Ap: [{r:1,n:'Steinar Ostermann'},{r:2,n:'Runo Nygård'},{r:3,n:'Amir Poya Ghazi'},\r\n         {r:4,n:'Hanna Renate Kristensen'},{r:5,n:'Steinar Rasmussen'},{r:6,n:'Tanja Maria Javnes Sandåker'},\r\n         {r:7,n:'Torun Poppe'},{r:8,n:'Silje Vanessa Samuelsen'},{r:9,n:'Tore Ingvald Brømnes'},\r\n         {r:10,n:'Glenn Salvesen'},{r:11,n:'Jonny Ingebrigtsen'},{r:12,n:'Hege Lægreid'},\r\n         {r:13,n:'Einar André Myrland Johansen'},{r:14,n:'Kendal Ömer Shuli'},{r:15,n:'Liv Andersen'}],\r\n    H:  [{r:1,n:'Gunn Haga Brekka'},{r:2,n:'Torill Rolstad Larsen'},{r:3,n:'Kristoffer Lyngvi'},\r\n         {r:4,n:'Elin Josephsen'},{r:5,n:'Solfrid Helle'},{r:6,n:'Christian Matre'},\r\n         {r:7,n:'Finn Olav Andersen'},{r:8,n:'Anders Glastad'},{r:9,n:'Linda Skjulestad'}],\r\n    FrP:[{r:1,n:'Raymond Skorstad',note:'Suspendert fra FrP i perioden'},{r:2,n:'Thomas Jensen'},{r:3,n:'Gunn Evy Johnsen'},\r\n         {r:4,n:'Louis Reiter'},{r:5,n:'Walter Løvendahl'},{r:6,n:'Torstein Evensen'},\r\n         {r:7,n:'Eirik Bringaker Svendsen'},{r:8,n:'Marie Rørvik'},{r:9,n:'Svein Ronny Olsen'}],\r\n    SV: [{r:1,n:'Sara Malene Henriksen',note:'Meldte seg ut av SV i perioden'},{r:2,n:'Tunne Torstveit'},{r:3,n:'Regine Gordon'},\r\n         {r:4,n:'Svala Torstveit'},{r:5,n:'Vigdis Lavik'},{r:6,n:'Helga Lid Ball'},{r:7,n:'Marius Valsvik Berg'},{r:8,n:'Eirik Sørsdal'}],\r\n    Sp: [{r:1,n:'Erik Fløystad'},{r:2,n:'Birthe Engesland'},{r:3,n:'Roger Stene'},{r:4,n:'Monika Andersen'}],\r\n    V:  [{r:1,n:'Kaya Asdal'},{r:2,n:'Oddvar Godø Elgvin'},{r:3,n:'Mats Winther Maltby'},{r:4,n:'Cathrine Høyesen Hall'}],\r\n    KrF:[{r:1,n:'Ole Glenn Tvermyr'},{r:2,n:'Åse Høiås Nilsen'},{r:3,n:'Frode Aanonsen'},{r:4,n:'Åse Bjorvatn Sævik'}],\r\n    R:  [{r:1,n:'Jon Espen Syversen'},{r:2,n:'Janne Rørvik'},{r:3,n:'Ole Petter Rasmussen'},{r:4,n:'Bodil Kanstad Hansen'}],\r\n    Pp: [{r:1,n:'Arne Martin Thorbjørnsen'},{r:2,n:'Geir Støylen'},{r:3,n:'Per Kyrre Wangberg'},{r:4,n:'Harrieth Møller Lindset'}],\r\n    Hp: [{r:1,n:'Egil Hagen'},{r:2,n:'Rita Fredriksen Sundby',note:'Meldte seg ut av Helsepartiet i perioden'},{r:3,n:'Pål Frydenberg',note:'Meldte seg ut av Helsepartiet i perioden'},{r:4,n:'Finn Øygarden',note:'Meldte seg ut av Helsepartiet i perioden'}],\r\n\r\n  },\r\n  meetings:[\r\n    {date:'12.10.2023',label:'12. okt 2023',vara:[\r\n      {n:'Raymond Skorstad',p:'FrP',r:1,for:'Andreas Arff (FrP)'},\r\n    ]},\r\n    {date:'16.11.2023',label:'16. nov 2023',vara:[\r\n      {n:'Steinar Ostermann',p:'Ap',r:1,for:'Anniken Solfjeld (Ap)'},\r\n      {n:'Raymond Skorstad',p:'FrP',r:1,for:'Andreas Arff (FrP)'},\r\n    ]},\r\n    {date:'13.12.2023',label:'13. des 2023',vara:[\r\n      {n:'Raymond Skorstad',p:'FrP',r:1,for:'Andreas Arff (FrP)'},\r\n      {n:'Thomas Jensen',p:'FrP',r:2,for:'Torbjørn Nilsen'},\r\n      {n:'Arne Martin Thorbjørnsen',p:'Pp',r:1,for:'Ingebjørg Godskesen (Pp)'},\r\n    ]},\r\n    {date:'14.12.2023',label:'14. des 2023',vara:[\r\n      {n:'Svala Torstveit',p:'SV',r:4,for:'Elisabeth Bentzen (SV)'},\r\n      {n:'Egil Hagen',p:'Hp',r:1,for:'Knut Arne Tveiten (Hp)'},\r\n      {n:'Raymond Skorstad',p:'FrP',r:1,for:'Torbjørn Nilsen'},\r\n    ]},\r\n    {date:'29.02.2024',label:'29. feb 2024',vara:[\r\n      {n:'Steinar Ostermann',p:'Ap',r:1,for:'Jakob Tørå Hæier (Ap)'},\r\n      {n:'Jon Espen Syversen',p:'R',r:1,for:'Lætif Akber (R)'},\r\n    ]},\r\n    {date:'04.04.2024',label:'4. apr 2024',vara:[\r\n      {n:'Steinar Ostermann',p:'Ap',r:1,for:'Josef Hæier (Ap)'},\r\n      {n:'Tunne Torstveit',p:'SV',r:2,for:'Amina Bitar (SV)'},\r\n      {n:'Raymond Skorstad',p:'FrP',r:1,for:'Torbjørn Nilsen'},\r\n    ]},\r\n    {date:'09.04.2024',label:'9. apr 2024',vara:[\r\n      {n:'Amir Poya Ghazi',p:'Ap',r:3,for:'Nina Jentoft (Ap)'},\r\n      {n:'Steinar Ostermann',p:'Ap',r:1,for:'Fredrik Wilhelm Schulze (Ap)'},\r\n      {n:'Vigdis Lavik',p:'SV',r:5,for:'Einar Krafft Myhren (SV)'},\r\n      {n:'Marius Valsvik Berg',p:'SV',r:7,for:'Amina Bitar (SV)'},\r\n      {n:'Gunn Evy Johnsen',p:'FrP',r:3,for:'Andreas Arff (FrP)'},\r\n      {n:'Thomas Jensen',p:'FrP',r:2,for:'Liv Heidi Arnesen (FrP)'},\r\n      {n:'Hanna Renate Kristensen',p:'Ap',r:4,for:'Miriam Langmyr (Ap)'},\r\n    ]},\r\n    {date:'02.05.2024',label:'2. mai 2024',vara:[\r\n      {n:'Thomas Jensen',p:'FrP',r:2,for:'Andreas Arff (FrP)'},\r\n      {n:'Raymond Skorstad',p:'FrP',r:1,for:'Torbjørn Nilsen'},\r\n      {n:'Jon Espen Syversen',p:'R',r:1,for:'Lætif Akber (R)'},\r\n    ]},\r\n    {date:'13.06.2024',label:'13. jun 2024',vara:[\r\n      {n:'Hanna Renate Kristensen',p:'Ap',r:4,for:'Anniken Solfjeld (Ap)'},\r\n      {n:'Amir Poya Ghazi',p:'Ap',r:3,for:'Arne Jenssen (Ap)'},\r\n      {n:'Steinar Ostermann',p:'Ap',r:1,for:'Jelena Høegh-Omdal (Ap)'},\r\n      {n:'Tunne Torstveit',p:'SV',r:2,for:'Elisabeth Bentzen (SV)'},\r\n      {n:'Thomas Jensen',p:'FrP',r:2,for:'Andreas Arff (FrP)'},\r\n      {n:'Raymond Skorstad',p:'FrP',r:1,for:'Torbjørn Nilsen'},\r\n    ]},\r\n    {date:'05.09.2024',label:'5. sep 2024',vara:[\r\n      {n:'Tunne Torstveit',p:'SV',r:2,for:'Amina Bitar (SV)'},\r\n      {n:'Raymond Skorstad',p:'FrP',r:1,for:'Andreas Arff (FrP)'},\r\n    ]},\r\n    {date:'10.10.2024',label:'10. okt 2024',vara:[\r\n      {n:'Steinar Ostermann',p:'Ap',r:1,for:'Miriam Langmyr (Ap)'},\r\n      {n:'Tunne Torstveit',p:'SV',r:2,for:'Elisabeth Bentzen (SV)'},\r\n    ]},\r\n    {date:'14.11.2024',label:'14. nov 2024',vara:[\r\n      {n:'Steinar Ostermann',p:'Ap',r:1,for:'Anniken Solfjeld (Ap)'},\r\n      {n:'Raymond Skorstad',p:'FrP',r:1,for:'Liv Heidi Arnesen (FrP)'},\r\n      {n:'Ole Glenn Tvermyr',p:'KrF',r:1,for:'Ingebjørg Berstad Torp (KrF)'},\r\n      {n:'Tunne Torstveit',p:'SV',r:2,for:'Inger Brokka de Ruiter (SV, inhabil)'},\r\n    ]},\r\n    {date:'18.12.2024',label:'18. des 2024',vara:[\r\n      {n:'Raymond Skorstad',p:'FrP',r:1,for:'Torbjørn Nilsen'},\r\n      {n:'Steinar Ostermann',p:'Ap',r:1,for:'Jakob Tørå Hæier (Ap)'},\r\n      {n:'Tunne Torstveit',p:'SV',r:2,for:'Inger Brokka de Ruiter (SV, inhabil)'},\r\n    ]},\r\n    {date:'19.12.2024',label:'19. des 2024',vara:[\r\n    ]},\r\n    {date:'30.01.2025',label:'30. jan 2025',vara:[\r\n      {n:'Steinar Ostermann',p:'Ap',r:1,for:'Anniken Solfjeld (Ap)'},\r\n      {n:'Erik Fløystad',p:'Sp',r:1,for:'Ingjerd Livollen (Sp)'},\r\n    ]},\r\n    {date:'27.02.2025',label:'27. feb 2025',vara:[\r\n      {n:'Steinar Ostermann',p:'Ap',r:1,for:'Anniken Solfjeld (Ap)'},\r\n      {n:'Runo Nygård',p:'Ap',r:2,for:'Miriam Langmyr (Ap)'},\r\n      {n:'Raymond Skorstad',p:'FrP',r:1,for:'Andreas Arff (FrP)'},\r\n      {n:'Jon Espen Syversen',p:'R',r:1,for:'Lætif Akber (R)'},\r\n      {n:'Arne Martin Thorbjørnsen',p:'Pp',r:1,for:'Ingebjørg Godskesen (Pp)'},\r\n      {n:'Rita Fredriksen Sundby',p:'Hp',r:2,for:'Knut Arne Tveiten (Hp)'},\r\n    ]},\r\n    {date:'27.03.2025',label:'27. mars 2025',vara:[\r\n      {n:'Steinar Ostermann',p:'Ap',r:1,for:'Anniken Solfjeld (Ap)'},\r\n      {n:'Amir Poya Ghazi',p:'Ap',r:3,for:'Arne Jenssen (Ap)'},\r\n      {n:'Tunne Torstveit',p:'SV',r:2,for:'Einar Krafft Myhren (SV)'},\r\n      {n:'Helga Lid Ball',p:'SV',r:6,for:'Amina Bitar (SV)'},\r\n      {n:'Rita Fredriksen Sundby',p:'Hp',r:2,for:'Knut Arne Tveiten (Hp)'},\r\n    ]},\r\n    {date:'24.04.2025',label:'24. apr 2025',vara:[\r\n      {n:'Amir Poya Ghazi',p:'Ap',r:3,for:'Arne Jenssen (Ap)'},\r\n      {n:'Hanna Renate Kristensen',p:'Ap',r:4,for:'Svein Harald Monsen (Ap)'},\r\n      {n:'Steinar Ostermann',p:'Ap',r:1,for:'Karl Fredrik Lundberg'},\r\n      {n:'Raymond Skorstad',p:'FrP',r:1,for:'Maurith Julie Fagerland (FrP)'},\r\n      {n:'Ole Glenn Tvermyr',p:'KrF',r:1,for:'Ingebjørg Berstad Torp (KrF)'},\r\n    ]},\r\n    {date:'22.05.2025',label:'22. mai 2025',vara:[\r\n      {n:'Steinar Ostermann',p:'Ap',r:1,for:'Anniken Solfjeld (Ap)'},\r\n      {n:'Raymond Skorstad',p:'FrP',r:1,for:'Liv H. Arnesen (FrP)'},\r\n      {n:'Thomas Jensen',p:'FrP',r:2,for:'Andreas Arff (FrP)'},\r\n      {n:'Jon Espen Syversen',p:'R',r:1,for:'Lætif Akber (R)'},\r\n    ]},\r\n    {date:'10.06.2025',label:'10. jun 2025',vara:[]},\r\n    {date:'19.06.2025',label:'19. jun 2025',vara:[\r\n      {n:'Steinar Ostermann',p:'Ap',r:1,for:'Miriam Langmyr (Ap)'},\r\n      {n:'Hanna Renate Kristensen',p:'Ap',r:4,for:'Arne Jenssen (Ap)'},\r\n      {n:'Raymond Skorstad',p:'FrP',r:1,for:'Maurith Julie Fagerland (FrP)'},\r\n    ]},\r\n    {date:'28.08.2025',label:'28. aug 2025',vara:[\r\n      {n:'Steinar Ostermann',p:'Ap',r:1,for:'Svein Harald Monsen (Ap)'},\r\n      {n:'Runo Nygård',p:'Ap',r:2,for:'Karl Fredrik Lundberg'},\r\n      {n:'Torun Poppe',p:'Ap',r:7,for:'Miriam Langmyr (Ap)'},\r\n      {n:'Raymond Skorstad',p:'FrP',r:1,for:'Ellen Gunneng (FrP)'},\r\n      {n:'Gunn Evy Johnsen',p:'FrP',r:3,for:'Torbjørn Nilsen'},\r\n      {n:'Jon Espen Syversen',p:'R',r:1,for:'Lætif Akber (R)'},\r\n      {n:'Arne Martin Thorbjørnsen',p:'Pp',r:1,for:'Ingebjørg Godskesen (Pp)'},\r\n    ]},\r\n    {date:'16.10.2025',label:'16. okt 2025',vara:[\r\n      {n:'Steinar Ostermann',p:'Ap',r:1,for:'Anniken Solfjeld (Ap)'},\r\n      {n:'Runo Nygård',p:'Ap',r:2,for:'Ramani K. Cornels (Ap)'},\r\n      {n:'Hanna Renate Kristensen',p:'Ap',r:4,for:'Jakob Tørå Hæier (Ap)'},\r\n      {n:'Tunne Torstveit',p:'SV',r:2,for:'Rune Sævre (SV)'},\r\n    ]},\r\n    {date:'13.11.2025',label:'13. nov 2025',vara:[\r\n      {n:'Steinar Ostermann',p:'Ap',r:1,for:'Fredrik W. Schulze (Ap)'},\r\n      {n:'Hanna Renate Kristensen',p:'Ap',r:4,for:'Ramani K. Cornels (Ap)'},\r\n      {n:'Tanja Maria Javnes Sandåker',p:'Ap',r:6,for:'Jakob Tørå Hæier (Ap)'},\r\n      {n:'Jonny Ingebrigtsen',p:'Ap',r:11,for:'Miriam Langmyr (Ap)'},\r\n      {n:'Liv Andersen',p:'Ap',r:15,for:'Jelena Grønlund Høegh-Omdal (Ap)'},\r\n      {n:'Gunn Haga Brekka',p:'H',r:1,for:'Nina Roland (H)'},\r\n      {n:'Jon Espen Syversen',p:'R',r:1,for:'Lætif Akber (R)'},\r\n      {n:'Raymond Skorstad',p:'FrP',r:1,for:'Anders Kylland (FrP)'},\r\n    ]},\r\n    {date:'11.12.2025',label:'11. des 2025',vara:[\r\n      {n:'Runo Nygård',p:'Ap',r:2,for:'Robert Cornels Nordli (Ap)'},\r\n      {n:'Steinar Ostermann',p:'Ap',r:1,for:'Jakob Tørå Hæier (Ap)'},\r\n      {n:'Hanna Renate Kristensen',p:'Ap',r:4,for:'Ramani K. Cornels Nordli (Ap)'},\r\n      {n:'Erik Fløystad',p:'Sp',r:1,for:'Ingjerd Livollen (Sp)'},\r\n      {n:'Raymond Skorstad',p:'FrP',r:1,for:'Anders Kylland (FrP)'},\r\n      {n:'Thomas Jensen',p:'FrP',r:2,for:'Andreas Arff (FrP)'},\r\n      {n:'Torstein Evensen',p:'FrP',r:6,for:'Torbjørn Nilsen'},\r\n    ]},\r\n    {date:'26.02.2026',label:'26. feb 2026',vara:[\r\n      {n:'Steinar Ostermann',p:'Ap',r:1,for:'Jakob Tørå Hæier (Ap)'},\r\n      {n:'Hanna Renate Kristensen',p:'Ap',r:4,for:'Arne Jenssen (Ap)'},\r\n      {n:'Tanja Maria Javnes Sandåker',p:'Ap',r:6,for:'Ramani C. Nordli (Ap)'},\r\n      {n:'Tunne Torstveit',p:'SV',r:2,for:'Elisabeth Bentzen (SV)'},\r\n      {n:'Helga Lid Ball',p:'SV',r:6,for:'Amina Bitar (SV)'},\r\n      {n:'Ole Glenn Tvermyr',p:'KrF',r:1,for:'Ingebjørg Berstad Torp (KrF)'},\r\n      {n:'Raymond Skorstad',p:'FrP',r:1,for:'Anders Kylland (FrP)'},\r\n    ]},\r\n    {date:'26.03.2026',label:'26. mars 2026',vara:[\r\n      {n:'Tanja Maria Javnes Sandåker',p:'Ap',r:6,for:'Robert Cornels Nordli (Ap)'},\r\n      {n:'Silje Vanessa Samuelsen',p:'Ap',r:8,for:'Arne Jenssen (Ap)'},\r\n      {n:'Hanna Renate Kristensen',p:'Ap',r:4,for:'Ramani K. Cornels (Ap)'},\r\n      {n:'Steinar Rasmussen',p:'Ap',r:5,for:'Jelena Grønlund Høegh-Omdal (Ap)'},\r\n      {n:'Tunne Torstveit',p:'SV',r:2,for:'Amina Bitar (SV)'},\r\n      {n:'Egil Hagen',p:'Hp',r:1,for:'Knut Arne Tveiten (Hp)'},\r\n      {n:'Raymond Skorstad',p:'FrP',r:1,for:'Anders Kylland (FrP)'},\r\n    ]},\r\n  ],\r\n  closeVotes:{\r\n    '11.12.2025':[{sak:'Endringsforslag Lætif Akber (R) – punkt 1',for:20,mot:18,desc:'Punkt 1 i endringsforslaget vedtatt 20–18. En representants stemme (Linda Dagestad Øygarden) manglet under voteringen ifølge protokollen. Ap-vara #4 (Hanna Renate Kristensen) og #2 (Runo Nygård) møtte.'}],\r\n    '27.02.2025':[{sak:'Tilleggsforslag Geir Fredrik Sissener (H) – helse/omsorg',for:20,mot:19,desc:'H-tilleggsforslag vedtatt 20–19 i helse- og omsorgssak. Tre Ap-varaer møtte, inkl. Runo Nygård (#2) og Idunn Thunberg Christensen (rang ukjent).'}],\r\n    '26.02.2026':[{sak:'Valg – to endringsforslag til valgkomiteens innstilling',for:19,mot:20,desc:'To forslag falt 19–20: Ingebjørg Godskesen (Pp) sin kandidat til leder av kommuneplanutvalget og Ingjerd Livollen (Sp) sitt forslag om nestleder i oppvekst- og kulturutvalg.'}],\r\n    '13.06.2024':[{sak:'24/87 – Kommunedelplan for naturmangfold',for:20,mot:19,desc:'To knappe voteringer: SV-tillegg (Sævre) om informasjonsopplegg vedtatt 20–19. SV-tillegg (Myhren) falt 19–20. Fire Ap-varaer møtte i dette møtet.'}],\r\n    '02.05.2024':[{sak:'Forvaltningsrevisjonsrapport – innkjøp og anskaffelser',for:19,mot:20,desc:'Utsettelsesforslag fra H/FrP/Pp/KrF falt 19–20. Tre varaer møtte, inkl. Raymond Skorstad (Uavh, rang 5) og Idunn Thunberg Christensen.'}],\r\n    '26.03.2026':[{sak:'26/xx – Fremtidens skole (skolestruktur)',for:19,mot:19,desc:'Tilleggsforslag 6 om at privat- og friskoler skal inngå i samlet kapasitetsplanlegging (fremmet av H, støttet av V/KrF/Ap/SV) vedtatt 19–19 med fungerende ordfører Inger Brokka de Ruiters dobbeltstemme.'}],\r\n    '05.09.2024':[{sak:'Eierskapskontroll – plan 2024–2027',for:19,mot:20,desc:'SV-endringsforslag (Myhren) om prioritering av prosjekter falt 19–20. Raymond Skorstad (Uavh, rang 5) møtte.'}],\r\n    '28.08.2025':[{sak:'Formannskapets innstilling – arealsak',for:20,mot:18,desc:'Formannskapets innstilling vedtatt 20–18. Torun Poppe (Ap, rang 7) møtte for Miriam Langmyr – #3–6 tilsynelatende ikke brukt.'}],\r\n    '18.12.2024':[{sak:'Tilleggsforslag Einar Krafft Myhren (SV) – veibygg / lysløype',for:19,mot:19,desc:'SV-tillegg falt 19–19 med ordførerens dobbeltstemme. Knut Tveiten (Hp) forlot møtet før votering uten vara.'}],\r\n  }\r\n};\r\n\r\n// ─── DATA: GRIMSTAD ──────────────────────────────────────────────────────────\r\nconst GRIMSTAD = {\r\n  name:'Grimstad',\r\n  varaLists:{\r\n    H:  [{r:1,n:'Jan André Gessner Tønnessen'},{r:2,n:'Håvard Tlak Eriksen'},{r:3,n:'Gase Handeland'},{r:4,n:'Nils Erik Henriksen'},{r:5,n:'Helena Grigson Tomstad'},{r:6,n:'Mona Lill Ellefsen'},{r:7,n:'Helene Hauge'},{r:8,n:'Mai Gunn Autzen Bringsverd'},{r:9,n:'Eivind Halaas'},{r:10,n:'Marie Kvikshaug Taule'},{r:11,n:'Marit Helene Mood'}],\r\n    Ap: [{r:1,n:'Maria Kiland-Langeland'},{r:2,n:'Sigurd Røyrøy Beinset'},{r:3,n:'Mohamed Baqer Altamimi'},{r:4,n:'David Bergh Tharaldsen'},{r:5,n:'Åse Mortensen'},{r:6,n:'Grethe Berdahl'},{r:7,n:'Frederik Jørgensen Seljåsen'},{r:8,n:'Kirsten Sandkleiv Bondevik'},{r:9,n:'Ebenge Emilie Regenbogen'}],\r\n    KrF:[{r:1,n:'Vidar Øvland'},{r:2,n:'Per Osnes'},{r:3,n:'Stein Gjulem'},{r:4,n:'Bjørg Engeset Eide'},{r:5,n:'Tony Gulbrandsen'},{r:6,n:'David Fredriksen'},{r:7,n:'Kristin Skodde Hansen'},{r:8,n:'Mai-Britt Espeland Gryting'}],\r\n    FrP:[{r:1,n:'Lene Helen Lagesen'},{r:2,n:'John Olav Pfaff'},{r:3,n:'Tore Håland'}],\r\n    SV: [{r:1,n:'Terje Gjøsæter'},{r:2,n:'Astrid Stifoss-Hanssen'},{r:3,n:'Inger-Tori Solberg'}],\r\n    Sp: [{r:1,n:'Arild Viken'},{r:2,n:'Lars Magne Tønnesøl'}],\r\n    V:  [{r:1,n:'Anne Midtlien'},{r:2,n:'Arne Kristian Ekra'}],\r\n    INP:[{r:1,n:'Odd Neset'},{r:2,n:'May-Tove Henriksen'}],\r\n    MDG:[{r:1,n:'Eva Iselin Larsen'}],\r\n    R:  [{r:1,n:'Unni Wold'},{r:2,n:'Zara Hussaini'},{r:3,n:'Kim Ytredal'}],\r\n    K:  [{r:1,n:'Liv Kristin Larsen'},{r:2,n:'Trond Johansen'}],\r\n  },\r\n  meetings:[\r\n    {date:'17.10.2023',label:'17. okt 2023',vara:[]},\r\n    {date:'07.11.2023',label:'7. nov 2023',vara:[\r\n      {n:'Jan André Gessner Tønnessen',p:'H',r:1,for:'Astri Lunde Wilmann'},{n:'Nils Erik Henriksen',p:'H',r:4,for:'Hanne Bie-Lorentzen Schultz'},\r\n      {n:'Maria Kiland-Langeland',p:'Ap',r:1,for:'Håvard Røiseland'},{n:'Terje Gjøsæter',p:'SV',r:1,for:'Renate Løland'},{n:'Vidar Øvland',p:'KrF',r:1,for:'Kjetil Glimsdal'},\r\n    ]},\r\n    {date:'05.12.2023',label:'5. des 2023',vara:[\r\n      {n:'Jan André Gessner Tønnessen',p:'H',r:1,for:'Hanne Bie-Lorentzen Schultz'},{n:'Maria Kiland-Langeland',p:'Ap',r:1,for:'Anne Merete Holmberg'},{n:'Odd Neset',p:'INP',r:1,for:'Audun Lerøy Engesbak'},\r\n    ]},\r\n    {date:'14.12.2023',label:'14. des 2023',vara:[\r\n      {n:'Gase Handeland',p:'H',r:3,for:'Øystein Møretrø'},{n:'Jan André Gessner Tønnessen',p:'H',r:1,for:'Hanne Bie-Lorentzen Schultz'},\r\n      {n:'Mohamed Baqer Altamimi',p:'Ap',r:3,for:'Anne Merete Holmberg'},{n:'Lene Helen Lagesen',p:'FrP',r:1,for:'Jan Gisle Majors'},\r\n      {n:'Inger-Tori Solberg',p:'SV',r:3,for:'Renate Løland'},{n:'Odd Neset',p:'INP',r:1,for:'Audun Lerøy Engesbak'},{n:'Kim Ytredal',p:'R',r:3,for:'Tyra Felberg Valle'},\r\n    ]},\r\n    {date:'07.02.2024',label:'7. feb 2024',vara:[\r\n      {n:'Jan André Gessner Tønnessen',p:'H',r:1,for:'Hanne Bie-Lorentzen Schultz'},{n:'Åse Mortensen',p:'Ap',r:5,for:'Marit Grefstad'},\r\n    ]},\r\n    {date:'06.03.2024',label:'6. mars 2024',vara:[\r\n      {n:'Jan André Gessner Tønnessen',p:'H',r:1,for:'Hanne Bie-Lorentzen Schultz'},{n:'Maria Kiland-Langeland',p:'Ap',r:1,for:'Anne Merete Holmberg'},\r\n      {n:'Sigurd Røyrøy Beinset',p:'Ap',r:2,for:'Kocian (inhabil sak 32)'},{n:'Vidar Øvland',p:'KrF',r:1,for:'Dagfinn Fløystad'},\r\n      {n:'Lene Helen Lagesen',p:'FrP',r:1,for:'Tommy Christiansen'},{n:'Terje Gjøsæter',p:'SV',r:1,for:'Kathrine Ivsett Johnsen'},\r\n      {n:'May-Tove Henriksen',p:'INP',r:2,for:'Audun Lerøy Engesbak'},{n:'Anne Midtlien',p:'V',r:1,for:'Vilde Haavik Tønnessen'},\r\n    ]},\r\n    {date:'24.04.2024',label:'24. apr 2024',vara:[\r\n      {n:'Jan André Gessner Tønnessen',p:'H',r:1,for:'Hanne Bie-Lorentzen Schultz'},{n:'Maria Kiland-Langeland',p:'Ap',r:1,for:'Frederick Helleland Birkenes'},\r\n      {n:'Lene Helen Lagesen',p:'FrP',r:1,for:'Jan Gisle Majors'},{n:'John Olav Pfaff',p:'FrP',r:2,for:'Børre Kvarv Githmark'},\r\n      {n:'Per Osnes',p:'KrF',r:2,for:'Gunnar E. Gundersen (sak 61)'},{n:'Kim Ytredal',p:'R',r:3,for:'Tyra Felberg Valle'},\r\n    ]},\r\n    {date:'08.05.2024',label:'8. mai 2024',vara:[\r\n      {n:'Jan André Gessner Tønnessen',p:'H',r:1,for:'Eyolf Aleksander Bakke'},{n:'Gase Handeland',p:'H',r:3,for:'Hanne Bie-Lorentzen Schultz'},{n:'Mona Lill Ellefsen',p:'H',r:6,for:'Per Øyvind Erlandsen'},\r\n      {n:'Maria Kiland-Langeland',p:'Ap',r:1,for:'Marit Grefstad'},{n:'Per Osnes',p:'KrF',r:2,for:'Anette Jakobsen'},\r\n      {n:'Lene Helen Lagesen',p:'FrP',r:1,for:'Lene Langemyr'},{n:'Terje Gjøsæter',p:'SV',r:1,for:'Renate Løland'},{n:'Unni Wold',p:'R',r:1,for:'Tyra Felberg Valle'},\r\n    ]},\r\n    {date:'22.05.2024',label:'22. mai 2024',notes:'Frivoll-vedtaket 18–17',vara:[\r\n      {n:'Gase Handeland',p:'H',r:3,for:'Eyolf Aleksander Bakke'},{n:'Jan André Gessner Tønnessen',p:'H',r:1,for:'Hanne Bie-Lorentzen Schultz'},\r\n      {n:'David Bergh Tharaldsen',p:'Ap',r:4,for:'Frederick Helleland Birkenes'},{n:'Kim Ytredal',p:'R',r:3,for:'Tyra Felberg Valle'},\r\n    ]},\r\n    {date:'18-19.06.2024',label:'18–19. jun 2024',vara:[\r\n      {n:'Mona Lill Ellefsen',p:'H',r:6,for:'Astri Lunde Wilmann'},{n:'Jan André Gessner Tønnessen',p:'H',r:1,for:'Hanne Bie-Lorentzen Schultz'},{n:'Helene Hauge',p:'H',r:7,for:'(19. juni)'},\r\n      {n:'Maria Kiland-Langeland',p:'Ap',r:1,for:'Marit Grefstad + Frederick H. Birkenes'},{n:'Mohamed Baqer Altamimi',p:'Ap',r:3,for:'Håvard Røiseland'},\r\n      {n:'Per Osnes',p:'KrF',r:2,for:'Anette Jakobsen'},{n:'Stein Gjulem',p:'KrF',r:3,for:'Dagfinn Fløystad'},\r\n      {n:'Terje Gjøsæter',p:'SV',r:1,for:'Renate Løland'},{n:'Anne Midtlien',p:'V',r:1,for:'Arnt Gunnar Tønnessen'},{n:'Arne Kristian Ekra',p:'V',r:2,for:'Vilde Haavik Tønnessen'},\r\n    ]},\r\n    {date:'11.09.2024',label:'11. sep 2024',vara:[\r\n      {n:'Jan André Gessner Tønnessen',p:'H',r:1,for:'Hanne Bie-Lorentzen Schultz'},{n:'Gase Handeland',p:'H',r:3,for:'Per Øyvind Erlandsen'},{n:'Nils Erik Henriksen',p:'H',r:4,for:'Eyolf Aleksander Bakke'},\r\n      {n:'Sigurd Røyrøy Beinset',p:'Ap',r:2,for:'Håvard Røiseland'},{n:'Åse Mortensen',p:'Ap',r:5,for:'Stine Marie Øygarden Kocian'},{n:'Grethe Berdahl',p:'Ap',r:6,for:'Anne Merete Holmberg'},\r\n      {n:'Per Osnes',p:'KrF',r:2,for:'Anette Jakobsen'},{n:'Lene Helen Lagesen',p:'FrP',r:1,for:'Jan Gisle Majors'},{n:'John Olav Pfaff',p:'FrP',r:2,for:'Tommy Christiansen'},\r\n      {n:'Astrid Stifoss-Hanssen',p:'SV',r:2,for:'Kathrine Ivsett Johnsen'},{n:'Arild Viken',p:'Sp',r:1,for:'Jørgen Dalaker'},{n:'Lars Magne Tønnesøl',p:'Sp',r:2,for:'Gudveig Tønnesøl Dalaker'},\r\n      {n:'Trond Johansen',p:'K',r:2,for:'Bjørn Arne Engen'},{n:'Odd Neset',p:'INP',r:1,for:'Audun Lerøy Engesbak'},\r\n    ]},\r\n    {date:'30.10.2024',label:'30. okt 2024',vara:[\r\n      {n:'Jan André Gessner Tønnessen',p:'H',r:1,for:'Hanne Bie-Lorentzen Schultz'},{n:'Sigurd Røyrøy Beinset',p:'Ap',r:2,for:'Anne Merete Holmberg'},\r\n      {n:'Kim Ytredal',p:'R',r:3,for:'Tyra Felberg Valle'},{n:'May-Tove Henriksen',p:'INP',r:2,for:'Paal Ove Sodefjed'},\r\n    ]},\r\n    {date:'11.12.2024',label:'11. des 2024',vara:[\r\n      {n:'Jan André Gessner Tønnessen',p:'H',r:1,for:'Hanne Bie-Lorentzen Schultz'},{n:'Lene Helen Lagesen',p:'FrP',r:1,for:'Jan Gisle Majors'},\r\n      {n:'Trond Johansen',p:'K',r:2,for:'Bjørn Arne Engen'},{n:'May-Tove Henriksen',p:'INP',r:2,for:'Audun Lerøy Engesbak'},{n:'Anne Midtlien',p:'V',r:1,for:'Vilde Haavik Tønnessen'},\r\n    ]},\r\n    {date:'19.12.2024',label:'19. des 2024',vara:[\r\n      {n:'Jan André Gessner Tønnessen',p:'H',r:1,for:'Eyolf Aleksander Bakke'},{n:'Gase Handeland',p:'H',r:3,for:'Hanne Bie-Lorentzen Schultz'},\r\n      {n:'Ebenge Emilie Regenbogen',p:'Ap',r:9,for:'Frederick Helleland Birkenes'},\r\n      {n:'Inger-Tori Solberg',p:'SV',r:3,for:'Terje Gjøsæter'},{n:'Lene Helen Lagesen',p:'FrP',r:1,for:'Jan Gisle Majors'},\r\n      {n:'May-Tove Henriksen',p:'INP',r:2,for:'Audun Lerøy Engesbak'},{n:'Eva Iselin Larsen',p:'MDG',r:1,for:'Marlene Imre'},\r\n    ]},\r\n    {date:'06.02.2025',label:'6. feb 2025',vara:[\r\n      {n:'Jan André Gessner Tønnessen',p:'H',r:1,for:'Hanne Bie-Lorentzen Schultz'},{n:'Maria Kiland-Langeland',p:'Ap',r:1,for:'Frederick Helleland Birkenes'},\r\n      {n:'Per Osnes',p:'KrF',r:2,for:'Grace Synnøve Torsøe Johansen'},{n:'Inger-Tori Solberg',p:'SV',r:3,for:'Terje Gjøsæter'},\r\n      {n:'Anne Midtlien',p:'V',r:1,for:'Vilde Haavik Tønnessen'},{n:'Unni Wold',p:'R',r:1,for:'Tyra Felberg Valle'},\r\n    ]},\r\n    {date:'06.03.2025',label:'6. mars 2025',vara:[\r\n      {n:'Jan André Gessner Tønnessen',p:'H',r:1,for:'Hanne Bie-Lorentzen Schultz'},{n:'Maria Kiland-Langeland',p:'Ap',r:1,for:'Stine Marie Øygarden Kocian'},\r\n      {n:'Kim Ytredal',p:'R',r:3,for:'Tyra Felberg Valle'},{n:'Inger-Tori Solberg',p:'SV',r:3,for:'Dan Børge Klungerbo'},{n:'Astrid Stifoss-Hanssen',p:'SV',r:2,for:'Kathrine Ivsett Johnsen'},\r\n    ]},\r\n    {date:'10.04.2025',label:'10. apr 2025',vara:[\r\n      {n:'Gase Handeland',p:'H',r:3,for:'Lisbeth Udjus'},{n:'Jan André Gessner Tønnessen',p:'H',r:1,for:'Hanne Bie-Lorentzen Schultz'},\r\n      {n:'Anne Midtlien',p:'V',r:1,for:'Arnt Gunnar Tønnessen'},{n:'Kim Ytredal',p:'R',r:3,for:'Tyra Felberg Valle'},\r\n    ]},\r\n    {date:'15.05.2025',label:'15. mai 2025',vara:[\r\n      {n:'Jan André Gessner Tønnessen',p:'H',r:1,for:'Hanne Bie-Lorentzen Schultz'},{n:'Helena Grigson Tomstad',p:'H',r:5,for:'Per Øyvind Erlandsen'},\r\n      {n:'Maria Kiland-Langeland',p:'Ap',r:1,for:'Anne Merete Holmberg'},{n:'Kim Ytredal',p:'R',r:3,for:'Tyra Felberg Valle'},{n:'Liv Kristin Larsen',p:'K',r:1,for:'Bjørn Arne Engen'},\r\n    ]},\r\n    {date:'18.06.2025',label:'18. jun 2025',vara:[\r\n      {n:'Jan André Gessner Tønnessen',p:'H',r:1,for:'Hanne Bie-Lorentzen Schultz'},{n:'Sigurd Røyrøy Beinset',p:'Ap',r:2,for:'Anne Merete Holmberg'},\r\n      {n:'Stein Gjulem',p:'KrF',r:3,for:'Dagfinn Fløystad'},{n:'Bjørg Engeset Eide',p:'KrF',r:4,for:'Anette Jakobsen'},\r\n      {n:'Lene Helen Lagesen',p:'FrP',r:1,for:'Lene Langemyr'},{n:'John Olav Pfaff',p:'FrP',r:2,for:'Jan Gisle Majors'},{n:'Liv Kristin Larsen',p:'K',r:1,for:'Bjørn Arne Engen'},\r\n    ]},\r\n    {date:'19.06.2025',label:'19. jun 2025',vara:[\r\n      {n:'Jan André Gessner Tønnessen',p:'H',r:1,for:'Hanne Bie-Lorentzen Schultz'},{n:'David Bergh Tharaldsen',p:'Ap',r:4,for:'Anne Merete Holmberg'},\r\n      {n:'Stein Gjulem',p:'KrF',r:3,for:'Dagfinn Fløystad'},{n:'Lene Helen Lagesen',p:'FrP',r:1,for:'Jan Gisle Majors'},\r\n    ]},\r\n    {date:'24.09.2025',label:'24. sep 2025',vara:[\r\n      {n:'Mona Lill Ellefsen',p:'H',r:6,for:'Lisbeth Udjus'},{n:'Jan André Gessner Tønnessen',p:'H',r:1,for:'Hanne Bie-Lorentzen Schultz'},{n:'Marie Kvikshaug Taule',p:'H',r:10,for:'Line Ostad (delvis)'},\r\n      {n:'David Bergh Tharaldsen',p:'Ap',r:4,for:'Marit Grefstad'},{n:'Sigurd Røyrøy Beinset',p:'Ap',r:2,for:'Erling Gustav Frydenlund'},\r\n      {n:'Vidar Øvland',p:'KrF',r:1,for:'Gunnar Edvard Gundersen'},{n:'Inger-Tori Solberg',p:'SV',r:3,for:'Terje Gjøsæter'},{n:'Lars Magne Tønnesøl',p:'Sp',r:2,for:'Jørgen Dalaker'},\r\n    ]},\r\n    {date:'25.09.2025',label:'25. sep 2025',vara:[\r\n      {n:'Mona Lill Ellefsen',p:'H',r:6,for:'Lisbeth Udjus'},{n:'Jan André Gessner Tønnessen',p:'H',r:1,for:'Hanne Bie-Lorentzen Schultz'},\r\n      {n:'John Olav Pfaff',p:'FrP',r:2,for:'Lene Langemyr (delvis)'},{n:'Lene Helen Lagesen',p:'FrP',r:1,for:'Tommy Christiansen'},\r\n      {n:'Vidar Øvland',p:'KrF',r:1,for:'Gunnar Edvard Gundersen'},{n:'Lars Magne Tønnesøl',p:'Sp',r:2,for:'Jørgen Dalaker'},\r\n    ]},\r\n    {date:'30.10.2025',label:'30. okt 2025',vara:[\r\n      {n:'Jan André Gessner Tønnessen',p:'H',r:1,for:'Hanne Bie-Lorentzen Schultz'},{n:'Gase Handeland',p:'H',r:3,for:'Per Øyvind Erlandsen'},{n:'Astrid Stifoss-Hanssen',p:'SV',r:2,for:'Terje Gjøsæter'},\r\n    ]},\r\n    {date:'11.12.2025',label:'11. des 2025',vara:[\r\n      {n:'Jan André Gessner Tønnessen',p:'H',r:1,for:'Hanne Bie-Lorentzen Schultz'},{n:'Sigurd Røyrøy Beinset',p:'Ap',r:2,for:'Stine Marie Øygarden Kocian'},\r\n      {n:'Vidar Øvland',p:'KrF',r:1,for:'Anette Jakobsen'},{n:'Astrid Stifoss-Hanssen',p:'SV',r:2,for:'Kathrine Ivsett Johnsen'},{n:'May-Tove Henriksen',p:'INP',r:2,for:'Audun Lerøy Engesbak'},\r\n    ]},\r\n    {date:'05.02.2026',label:'5. feb 2026',vara:[\r\n      {n:'Gase Handeland',p:'H',r:3,for:'Lisbeth Udjus'},{n:'Mona Lill Ellefsen',p:'H',r:6,for:'Astri Lunde Wilmann'},\r\n      {n:'Åse Mortensen',p:'Ap',r:5,for:'Marit Grefstad'},{n:'Sigurd Røyrøy Beinset',p:'Ap',r:2,for:'Frederick Helleland Birkenes'},{n:'David Bergh Tharaldsen',p:'Ap',r:4,for:'Anne Merete Holmberg'},\r\n      {n:'Per Osnes',p:'KrF',r:2,for:'Anette Jakobsen'},{n:'Anne Midtlien',p:'V',r:1,for:'Vilde Haavik Tønnessen'},\r\n    ]},\r\n    {date:'19.03.2026',label:'19. mars 2026',vara:[\r\n      {n:'Jan André Gessner Tønnessen',p:'H',r:1,for:'Hanne Bie-Lorentzen Schultz'},{n:'Maria Kiland-Langeland',p:'Ap',r:1,for:'Stine Marie Øygarden Kocian'},\r\n      {n:'John Olav Pfaff',p:'FrP',r:2,for:'Lene Langemyr'},{n:'Arne Kristian Ekra',p:'V',r:2,for:'Arnt Gunnar Tønnessen'},\r\n    ]},\r\n  ],\r\n  closeVotes:{\r\n    '22.05.2024':[{sak:'24/131 – Ny skolestruktur / avvikling av Frivoll skole',for:18,mot:17,desc:'Frivoll skole vedtatt nedlagt fra tidspunkt Holvika skole åpner. FrPs forslag vant 18–17. Ap-vara #4 (David Bergh Tharaldsen) møtte for Frederick Helleland Birkenes – #1–3 ikke brukt.'}],\r\n    '10.04.2025':[{sak:'Budsjettrevisjon 2025 – investering fysioterapeut',for:18,mot:17,desc:'Forslag fra V/FrP/Sp om å utsette investering i lokaler til ny fysioterapeut vedtatt 18–17.'}],\r\n    '06.02.2025':[{sak:'25/18 – Levekår og barnefattigdom',for:17,mot:18,desc:'Tilleggsforslag fra Ap (Frydenlund) om å finansiere familiekoordinatorstillinger falt 17–18.'}],\r\n    '05.02.2026':[{sak:'26/9 – Samarbeid felles renseanlegg Grimstad/Lillesand',for:18,mot:17,desc:'FrP-tilleggsforslag om Omre-lokalisering vedtatt 18–17. Tre Ap-representanter fraværende, rekkefølge ikke fulgt.'}],\r\n    '18-19.06.2024':[{sak:'24/143 – Kommuneplanens arealdel (grovsiling)',for:18,mot:17,desc:'KrF-tilleggsforslag om fritidsbebyggelse/boligformål vedtatt 18–17 i arealplandiskusjonen.'}],\r\n    '19.06.2025':[{sak:'25/81 – Oppfølging skolestrukturvedtak',for:16,mot:18,desc:'INP-tilleggsforslag (Sodefjed) falt 16–18 i oppfølgingssak om kretsgrenser etter Frivoll-nedleggelsen.'}],\r\n    '15.05.2025':[{sak:'25/62 – Nytt renseanlegg – Industriveien 1',for:18,mot:17,desc:'SV-forslag (Klungerbo) om alternativ 2b (erverve tilstøtende eiendom) vedtatt 18–17.'}],\r\n    '30.10.2024':[{sak:'24/210 – Dispensasjon Arendalsveien 94',for:17,mot:18,desc:'Sp-utsettelsesforslag (Dalaker) – sende saken innom Landbruksnemnda – falt 17–18.'}],\r\n    '30.10.2025':[{sak:'25/161 – Kommuneplanens arealdel – offentlig ettersyn',for:17,mot:18,desc:'Punkt 4 i flertallsforslaget (tett samarbeid plan/byggesak) falt 17–18. Øvrige punkter vedtatt.'}],\r\n  }\r\n};\r\n\r\n// ─── DATA: FROLAND ───────────────────────────────────────────────────────────\r\nconst FROLAND = {\r\n  name:'Froland',\r\n  varaLists:{\r\n    Ap: [{r:1,n:'Stine Froland'},{r:2,n:'Ragna Sølvi Pedersen-Rønningen'},{r:3,n:'Ivar Jørgen Tønnesen'},{r:4,n:'Bente Jørgensen'},{r:5,n:'Rune Kile'},{r:6,n:'Sven Harry Røed',note:'Meldte seg ut av Ap i perioden'},{r:7,n:'Ingunn Kile'}],\r\n    KrF:[{r:1,n:'Tone Vålandsmyr'},{r:2,n:'Jens Vegard Messell Mykland'},{r:3,n:'Levi Gundersen'},{r:4,n:'Bjørg Elise Aabøe Moen'},{r:5,n:'Salaijohn Thang Tam Mang'},{r:6,n:'Ngai Ling Awi Ling'}],\r\n    FrP:[{r:1,n:'Ritha Coucheron Løvaas'},{r:2,n:'John Nygård'},{r:3,n:'Ole Martin Neset'},{r:4,n:'Arne Junior Risdal'},{r:5,n:'Bilal Abounnachat'},{r:6,n:'Mathias Oveland'},{r:7,n:'Ottar Gauslå'}],\r\n    Sp: [{r:1,n:'Kjetel Vidar Kittelsen'},{r:2,n:'Torgeir Oveland'},{r:3,n:'Trygve Usterud'},{r:4,n:'Kari Beate Kittelsen'},{r:5,n:'Nils Haugaas'},{r:6,n:'Anne Karine Usterud'}],\r\n    K:  [{r:1,n:'Inger Tomine Sparsås Kristiansen'},{r:2,n:'Levi Johansen'},{r:3,n:'Ken Vidar Solheim'},{r:4,n:'Nina Ranja Hvidsten'},{r:5,n:'Geir Erik Hviid'}],\r\n    H:  [{r:1,n:'Cathrine Marita Osmundsen'},{r:2,n:'Marit Fosse Olsen'},{r:3,n:'Olav Rosef'},{r:4,n:'Bjørn Gunnar Grønlund'}],\r\n    SV: [{r:1,n:'Ellen Svantesen'},{r:2,n:'Lene Risholt Thorbjørnsen'},{r:3,n:'Helge Thorbjørnsen'}],\r\n    V:  [{r:1,n:'Jens Leirvåg',note:'Meldte seg ut av SV i perioden'}],\r\n  },\r\n  meetings:[\r\n    {date:'19.10.2023',label:'19. okt 2023',vara:[\r\n      {n:'Cathrine Marita Osmundsen',p:'H',r:1,for:'John Magne Bjerga (V/H)'},\r\n    ]},\r\n    {date:'16.11.2023',label:'16. nov 2023',vara:[\r\n      {n:'Stine Froland',p:'Ap',r:1,for:'Roar Sønnik Larsen'},\r\n      {n:'Tone Vålandsmyr',p:'KrF',r:1,for:'Stephan Peter Gundersen'},\r\n    ]},\r\n    {date:'14.12.2023',label:'14. des 2023',vara:[\r\n      {n:'John Nygård',p:'FrP',r:2,for:'Steinar Rørvik'},\r\n    ]},\r\n    {date:'15.01.2024',label:'15. jan 2024',vara:[],notes:'Fem representanter hadde forfall – ingen varaer møtte'},\r\n    {date:'08.02.2024',label:'8. feb 2024',vara:[\r\n      {n:'Kari Beate Kittelsen',p:'Sp',r:4,for:'Kristin Ljosland'},\r\n    ]},\r\n    {date:'14.03.2024',label:'14. mars 2024',vara:[\r\n      {n:'Ritha Coucheron Løvaas',p:'FrP',r:1,for:'Steinar Rørvik'},\r\n    ]},\r\n    {date:'18.04.2024',label:'18. apr 2024',vara:[\r\n      {n:'Torgeir Oveland',p:'Sp',r:2,for:'Siw Hagane Haslemo'},\r\n    ]},\r\n    {date:'16.05.2024',label:'16. mai 2024',vara:[\r\n      {n:'Ritha Coucheron Løvaas',p:'FrP',r:1,for:'Oddvar Østreim (sak 24/41)'},\r\n    ]},\r\n    {date:'13.06.2024',label:'13. jun 2024',vara:[\r\n      {n:'Ivar Jørgen Tønnesen',p:'Ap',r:3,for:'Liv Maria Ravnåsen Hovatn'},\r\n      {n:'Torgeir Oveland',p:'Sp',r:2,for:'Kristin Ljosland (sak 24/50)'},\r\n    ]},\r\n    {date:'05.09.2024',label:'5. sep 2024',vara:[\r\n      {n:'Ivar Jørgen Tønnesen',p:'Ap',r:3,for:'Roar Sønnik Larsen'},\r\n      {n:'John Nygård',p:'FrP',r:2,for:'Steinar Rørvik'},\r\n      {n:'Trygve Usterud',p:'Sp',r:3,for:'Siw Hagane Haslemo'},\r\n    ],notes:'Frank Bjerg Sigvaldsen (Sp) hadde forfall – ingen vara'},\r\n    {date:'10.10.2024',label:'10. okt 2024',vara:[\r\n      {n:'Ritha Coucheron Løvaas',p:'FrP',r:1,for:'Steinar Rørvik'},\r\n      {n:'Inger Tomine Sparsås Kristiansen',p:'K',r:1,for:'Frank Rørheim'},\r\n      {n:'Tone Vålandsmyr',p:'KrF',r:1,for:'Ingunn Fjærbu Roppestad'},\r\n      {n:'Jens Vegard Messell Mykland',p:'KrF',r:2,for:'Stephan Peter Gundersen (vindkraft-sak)'},\r\n    ]},\r\n    {date:'07.11.2024',label:'7. nov 2024',vara:[\r\n      {n:'Bente Jørgensen',p:'Ap',r:4,for:'Roar Sønnik Larsen'},\r\n      {n:'Kjetel Vidar Kittelsen',p:'Sp',r:1,for:'Kristin Ljosland'},\r\n      {n:'Tone Vålandsmyr',p:'KrF',r:1,for:'Stephan Peter Gundersen (sak 24/115)'},\r\n    ]},\r\n    {date:'12.12.2024',label:'12. des 2024',vara:[\r\n      {n:'Ivar Jørgen Tønnesen',p:'Ap',r:3,for:'(sak 24/118 inhabil)'},\r\n    ]},\r\n    {date:'23.01.2025',label:'23. jan 2025',vara:[\r\n      {n:'Tone Vålandsmyr',p:'KrF',r:1,for:'Ingunn Fjærbu Roppestad'},\r\n      {n:'Bjørg Elise Aabøe Moen',p:'KrF',r:4,for:'Stephan Peter Gundersen'},\r\n    ]},\r\n    {date:'13.02.2025',label:'13. feb 2025',vara:[\r\n      {n:'Tone Vålandsmyr',p:'KrF',r:1,for:'Ingunn Fjærbu Roppestad'},\r\n      {n:'Jens Vegard Messell Mykland',p:'KrF',r:2,for:'Maria Aabøe Moen'},\r\n      {n:'Ritha Coucheron Løvaas',p:'FrP',r:1,for:'Steinar Rørvik'},\r\n      {n:'Nils Haugaas',p:'Sp',r:5,for:'Kristin Ljosland'},\r\n    ]},\r\n    {date:'20.03.2025',label:'20. mars 2025',vara:[\r\n      {n:'Ritha Coucheron Løvaas',p:'FrP',r:1,for:'Stian Omdalsmoen'},\r\n      {n:'Ole Martin Neset',p:'FrP',r:3,for:'Stig Rune Rasmussen'},\r\n      {n:'John Nygård',p:'FrP',r:2,for:'Steinar Rørvik'},\r\n      {n:'Torgeir Oveland',p:'Sp',r:2,for:'Siw Hagane Haslemo'},\r\n    ]},\r\n    {date:'10.04.2025',label:'10. apr 2025',vara:[\r\n      {n:'Stine Froland',p:'Ap',r:1,for:'Liv Maria Ravnåsen Hovatn'},\r\n      {n:'Bente Jørgensen',p:'Ap',r:4,for:'Roar Sønnik Larsen'},\r\n      {n:'Arne Junior Risdal',p:'FrP',r:4,for:'Stian Omdalsmoen'},\r\n      {n:'John Nygård',p:'FrP',r:2,for:'Steinar Rørvik'},\r\n    ]},\r\n    {date:'15.05.2025',label:'15. mai 2025',vara:[\r\n      {n:'Bente Jørgensen',p:'Ap',r:4,for:'Liv Maria Ravnåsen Hovatn'},\r\n      {n:'Torgeir Oveland',p:'Sp',r:2,for:'Kristin Ljosland'},\r\n    ]},\r\n    {date:'19.06.2025',label:'19. jun 2025',vara:[\r\n      {n:'Arne Junior Risdal',p:'FrP',r:4,for:'Steinar Rørvik'},\r\n      {n:'Inger Tomine Sparsås Kristiansen',p:'K',r:1,for:'Svein Kåre Mjølhus'},\r\n      {n:'Cathrine Marita Osmundsen',p:'H',r:1,for:'John Magne Bjerga'},\r\n    ]},\r\n    {date:'18.09.2025',label:'18. sep 2025',vara:[\r\n      {n:'Torgeir Oveland',p:'Sp',r:2,for:'Siw Hagane Haslemo'},\r\n    ]},\r\n    {date:'30.10.2025',label:'30. okt 2025',vara:[],notes:'Alle faste møtte (Frank Rørheim fikk permisjon tidlig men var med på alle saker)'},\r\n    {date:'20.11.2025',label:'20. nov 2025',vara:[]},\r\n    {date:'11.12.2025',label:'11. des 2025',vara:[\r\n      {n:'Torgeir Oveland',p:'Sp',r:2,for:'Kristin Ljosland'},\r\n      {n:'Bjørg Elise Aabøe Moen',p:'KrF',r:4,for:'Harald Landa (sak 25/77)'},\r\n    ]},\r\n    {date:'12.02.2026',label:'12. feb 2026',vara:[\r\n      {n:'Ole Martin Neset',p:'FrP',r:3,for:'Oddvar Østreim'},\r\n      {n:'John Nygård',p:'FrP',r:2,for:'Stig Rune Rasmussen'},\r\n      {n:'Trygve Usterud',p:'Sp',r:3,for:'(habilitet sak 26/6–26/7)'},\r\n      {n:'Jens Vegard Messell Mykland',p:'KrF',r:2,for:'(habilitet sak 26/7)'},\r\n    ]},\r\n    {date:'19.03.2026',label:'19. mars 2026',vara:[\r\n      {n:'Torgeir Oveland',p:'Sp',r:2,for:'Kristin Ljosland (inhabil sak 26/9)'},\r\n    ]},\r\n  ],\r\n  closeVotes:{\r\n    '14.12.2023':[{sak:'Budsjett 2024 / Økonomiplan',for:10,mot:9,desc:'Budsjettvedtaket avgjort 10–9. Forslaget fra Ap/KrF falt 9–10 og FrP/Sp/K/H-forslaget vedtatt 10–9 i flere punkter.'}],\r\n    '16.11.2023':[{sak:'23/20 – Opprettelse av nye utvalg / opposisjonsleder',for:10,mot:9,desc:'To saker vedtatt 10–9: Sette saken om utvalg på sakskartet mot Ap/KrF/SV-protest, og ordførers utsettelsesforslag vedtatt 10–9.'}],\r\n    '08.02.2024':[{sak:'24/10 + 24/18 – Konsesjonskraft og opposisjonsleder',for:10,mot:9,desc:'To saker vedtatt 10–9: Valg av repr. til Konsesjonskraft IKS og FrP-forslaget om opposisjonsleder-vervet.'}],\r\n    '12.12.2024':[{sak:'Budsjett 2025 / Økonomiplan 2025–2028',for:10,mot:9,desc:'Budsjett vedtatt 10–9 (Sp/FrP/V mot Ap/KrF/SV) i flere punkter. Ap/KrF/SV-forslaget falt 9–10.'}],\r\n    '10.04.2025':[{sak:'Budsjettrevisjon 2025 – investering fysioterapeut',for:10,mot:9,desc:'V/FrP/Sp-forslag om å utsette investering i lokaler til ny fysioterapeut vedtatt 10–9.'}],\r\n    '13.02.2025':[{sak:'25/5 – Å Energi vindkraft + 25/7 – Innsparingstiltak kultur',for:10,mot:9,desc:'To knappe voteringer: Sp-tilleggsforslag om vindkraft vedtatt 10–9, og FrP-forslaget om ad hoc-utvalg for budsjettinnsparing vedtatt 10–9.'}],\r\n    '19.06.2025':[{sak:'Budsjett 2025 (revisjon) – innsparingstiltak kultur',for:10,mot:9,desc:'Forslaget fra Sp/FrP/V/K om budsjett 2025 vedtatt 10–9 i flere punkter.'}],\r\n    '15.05.2025':[{sak:'25/33 – Innsparingstiltak kultur, idrett og fritid',for:10,mot:9,desc:'FrP-forslaget om delvis å reversere budsjettkutt i kultur (beholde noen, utsette andre) vedtatt 10–9.'}],\r\n    '20.03.2025':[{sak:'25/20 – Salgsbevilling Meny',for:10,mot:9,desc:'Kommunedirektørens innstilling om bevilling vedtatt 10–9.'}],\r\n    '19.03.2026':[{sak:'26/9 – Næringsplan 2025–2029',for:10,mot:9,desc:'Formannskapets innstilling vedtatt 10–9 mot SV-alternativet som ville ta Bøylestad-næringsparken ut av planen.'}],\r\n    '07.11.2024':[{sak:'24/112 – Reglement utleie kommunale bygg',for:10,mot:9,desc:'Formannskapets innstilling vedtatt 10–9 mot Ap-alternativet om å innføre gratis leie for nullkost-arrangementer.'}],\r\n    '18.09.2025':[{sak:'25/49 – Kommunale biler + 25/53 – Salgsbevilling ODA Norway',for:10,mot:9,desc:'FrP-forslaget om kommunale biler vedtatt 10–9, og kommunedirektørens innstilling om bevilling vedtatt 10–9.'}],\r\n  }\r\n};\r\n\r\n// ─── STATE ───────────────────────────────────────────────────────────────────\r\n// ─── DATA: TVEDESTRAND ───────────────────────────────────────────────────────\r\nconst TVEDESTRAND = {\r\n  name:'Tvedestrand',\r\n  varaLists:{\r\n    Ap:  [{r:1,n:'Tore Ustad'},{r:2,n:'Kay Henning Holum'},{r:3,n:'Rune Hovstø'},\r\n          {r:4,n:'Reidun Lundberg'},{r:5,n:'Marie Stebekk'},{r:6,n:'Hanne Noraberg'},{r:7,n:'Halvard Conrad Hanssen'}],\r\n    SV:  [{r:1,n:'Solfrid Eidbo Ekedal'},{r:2,n:'Guri Margrete Idsø Viken'},{r:3,n:'Odd Steinar Thorsen'},\r\n          {r:4,n:'Frode Seiersnes'},{r:5,n:'Hildegunn Edløy Holstvoll'}],\r\n    FrP: [{r:1,n:'Tiri Elisabeth Douglas Wigand'},{r:2,n:'Lily Bakke Jørgensen'},{r:3,n:'Kirsten Liv Aasbø'}],\r\n    INP: [{r:1,n:'Finn Von Porat Fiane'},{r:2,n:'Yngve Larsen'},{r:3,n:'Per Anders Bergan'},\r\n          {r:4,n:'Nils Martin Flaten'},{r:5,n:'Aud Marie Sandvik'}],\r\n    KrF: [{r:1,n:'Liv Benedikte Damsgård Tomter'},{r:2,n:'Alf Norvald Nodland'},{r:3,n:'Barbro Gilje Gustavsen'},{r:4,n:'Hans Tomter'}],\r\n    H:   [{r:1,n:'Sindre Ausel'},{r:2,n:'Tage Isak Thorsen'},{r:3,n:'Arne Guddal',note:'Meldte seg ut av H i perioden'},{r:4,n:'Erling Lilleholt'},\r\n          {r:5,n:'Heidi Monge Øia',note:'Meldte seg ut av H i perioden'},{r:6,n:'Torhild Hagen'},{r:7,n:'Arnfinn Hotvedt',note:'Meldte seg ut av H i perioden'},{r:8,n:'Hanne Wold'},\r\n          {r:9,n:'Tor Oskar Wilhelmsen',note:'Meldte seg ut av H i perioden'},{r:10,n:'Trine Thorbjørnsen'}],\r\n    V:   [{r:1,n:'Martha Marita Hansen'},{r:2,n:'Sveinung Georg Lien'},{r:3,n:'Lars Erik Revheim Håland'},{r:4,n:'Anders Lyche Oppegaard'}],\r\n    Sp:  [{r:1,n:'Marianne Goderstad'},{r:2,n:'Martin Grimsland'},{r:3,n:'Andreas Lilleholt'},{r:4,n:'Herman Goderstad'}],\r\n  },\r\n  meetings:[\r\n    {date:'18.10.2023',label:'18. okt 2023',vara:[\r\n      {n:'Yngve Larsen',p:'INP',r:2,for:'Bjarne Sundsdal (INP)'},\r\n    ]},\r\n    {date:'15.11.2023',label:'15. nov 2023',vara:[\r\n      {n:'Liv Benedikte Damsgård Tomter',p:'KrF',r:1,for:'Håkon Haugland (KrF)'},\r\n    ]},\r\n    {date:'13.12.2023',label:'13. des 2023',vara:[\r\n      {n:'Alf Norvald Nodland',p:'KrF',r:2,for:'Håkon Haugland (KrF)'},\r\n      {n:'Odd Steinar Thorsen',p:'SV',r:3,for:'Tove Hage Aargaard (SV)'},\r\n    ]},\r\n    {date:'14.02.2024',label:'14. feb 2024',vara:[\r\n      {n:'Solfrid Eidbo Ekedal',p:'SV',r:1,for:'Eystein Bonnevie-Svendsen (SV)'},\r\n    ]},\r\n    {date:'17.04.2024',label:'17. apr 2024',vara:[\r\n      {n:'Ester Nordmo',p:'FrP',r:1,for:'Anne Killingmo (FrP)'},\r\n      {n:'Liv Benedikte Damsgård Tomter',p:'KrF',r:1,for:'Håkon Haugland (KrF)'},\r\n      {n:'Solfrid Eidbo Ekedal',p:'SV',r:1,for:'Eystein Bonnevie-Svendsen (SV)'},\r\n    ]},\r\n    {date:'22.05.2024',label:'22. mai 2024',vara:[\r\n      {n:'Erling Lilleholt',p:'H',r:4,for:'Fredrik Grotle (H)'},\r\n      {n:'Arne Guddal',p:'H',r:3,for:'Birger Eggen (H)'},\r\n      {n:'Tage Isak Thorsen',p:'H',r:2,for:'Knut Olav Nærdal (H)'},\r\n      {n:'Ester Nordmo',p:'FrP',r:1,for:'Anne Killingmo (FrP)'},\r\n    ]},\r\n    {date:'19.06.2024',label:'19. jun 2024',vara:[\r\n      {n:'Herman Goderstad',p:'Sp',r:4,for:'Kåre Haugaas (Sp)'},\r\n      {n:'Lars Erik Revheim Håland',p:'V',r:3,for:'Line Øvernes Mørch (V)'},\r\n    ],notes:'Delvis forfall: Güttrup, Grotle, Gåserud. Delvis oppmøte: Torhild Hagen, Tage Thorsen, Tore Ustad'},\r\n    {date:'25.09.2024',label:'25. sep 2024',vara:[\r\n      {n:'Sindre Ausel',p:'H',r:1,for:'Espen Gåserud (H)'},\r\n      {n:'Ester Nordmo',p:'FrP',r:1,for:'Anne Killingmo (FrP)'},\r\n      {n:'Liv Benedikte Damsgård Tomter',p:'KrF',r:1,for:'Håkon Haugland (KrF)'},\r\n      {n:'Tage Isak Thorsen',p:'H',r:2,for:'(delvis)'},\r\n    ]},\r\n    {date:'16.10.2024',label:'16. okt 2024',vara:[\r\n      {n:'Erling Lilleholt',p:'H',r:4,for:'Birger Eggen (H)'},\r\n      {n:'Arne Guddal',p:'H',r:3,for:'Espen Gåserud (H)'},\r\n      {n:'Finn Von Porat Fiane',p:'INP',r:1,for:'Bjarne Sundsdal (INP)'},\r\n    ]},\r\n    {date:'13.11.2024',label:'13. nov 2024',vara:[\r\n      {n:'Tage Isak Thorsen',p:'H',r:2,for:'Espen Gåserud (H)'},\r\n    ]},\r\n    {date:'11.12.2024',label:'11. des 2024',vara:[\r\n      {n:'Tore Ustad',p:'Ap',r:1,for:'Inger Britt Ustad (Ap)'},\r\n      {n:'Sindre Ausel',p:'H',r:1,for:'Espen Gåserud (H, delvis)'},\r\n    ]},\r\n    {date:'05.02.2025',label:'5. feb 2025',vara:[\r\n      {n:'Andreas Lilleholt',p:'Sp',r:3,for:'Kåre Haugaas (Sp)'},\r\n    ]},\r\n    {date:'26.03.2025',label:'26. mars 2025',vara:[\r\n      {n:'Tore Ustad',p:'Ap',r:1,for:'Vidar Holmsen Engh (Ap)'},\r\n      {n:'Tage Isak Thorsen',p:'H',r:2,for:'Birger Eggen (H)'},\r\n      {n:'Marianne Goderstad',p:'Sp',r:1,for:'Morten Foss (Sp)'},\r\n      {n:'Lars Erik Revheim Håland',p:'V',r:3,for:'Line Øvernes Mørch (V)'},\r\n    ]},\r\n    {date:'22.04.2025',label:'22. apr 2025',vara:[\r\n      {n:'Tore Ustad',p:'Ap',r:1,for:'Monica Mostad Güttrup (Ap)'},\r\n      {n:'Tiri Elisabeth Douglas Wigand',p:'FrP',r:1,for:'Ester Nordmo (FrP)'},\r\n    ]},\r\n    {date:'14.05.2025',label:'14. mai 2025',vara:[\r\n      {n:'Tore Ustad',p:'Ap',r:1,for:'Inger Britt Ustad (Ap)'},\r\n      {n:'Tage Isak Thorsen',p:'H',r:2,for:'Espen Gåserud (Uavh)'},\r\n    ]},\r\n    {date:'18.06.2025',label:'18. jun 2025',vara:[\r\n      {n:'Tage Isak Thorsen',p:'H',r:2,for:'Fredrik Grotle (Uavh)'},\r\n      {n:'Tore Ustad',p:'Ap',r:1,for:'Vidar Holmsen Engh (Ap)'},\r\n      {n:'Martha Marita Hansen',p:'V',r:1,for:'Line Øvernes Mørch (V)'},\r\n      {n:'Alf Norvald Nodland',p:'KrF',r:2,for:'Håkon Haugland (KrF, inhabil sak 25/42–43)'},\r\n      {n:'Andreas Lilleholt',p:'Sp',r:3,for:'Lars Nicolai Løvdal (Sp, inhabil sak 25/42–43)'},\r\n    ]},\r\n    {date:'03.09.2025',label:'3. sep 2025',vara:[\r\n      {n:'Tage Isak Thorsen',p:'H',r:2,for:'Fredrik Grotle (Uavh)'},\r\n      {n:'Solfrid Eidbo Ekedal',p:'SV',r:1,for:'Tove Hage Aargaard (SV)'},\r\n      {n:'Liv Benedikte Damsgård Tomter',p:'KrF',r:1,for:'Håkon Haugland (KrF, inhabil)'},\r\n      {n:'Andreas Lilleholt',p:'Sp',r:3,for:'Lars Nicolai Løvdal (Sp, inhabil)'},\r\n    ]},\r\n    {date:'15.10.2025',label:'15. okt 2025',vara:[\r\n      {n:'Yngve Larsen',p:'INP',r:2,for:'Bjarne Sundsdal (INP)'},\r\n      {n:'Liv Benedikte Damsgård Tomter',p:'KrF',r:1,for:'Håkon Haugland (KrF)'},\r\n      {n:'Tage Isak Thorsen',p:'H',r:2,for:'Fredrik Grotle (Uavh, inhabil sak 76/25)'},\r\n      {n:'Martin Grimsland',p:'Sp',r:2,for:'Lars Nicolai Løvdal (Sp, inhabil sak 80/25)'},\r\n    ]},\r\n    {date:'19.11.2025',label:'19. nov 2025',vara:[\r\n      {n:'Sindre Ausel',p:'H',r:1,for:'Birger Eggen (H)'},\r\n      {n:'Tiri Elisabeth Douglas Wigand',p:'FrP',r:1,for:'Ester Nordmo (FrP)'},\r\n      {n:'Martha Marita Hansen',p:'V',r:1,for:'Line Øvernes Mørch (V)'},\r\n    ]},\r\n    {date:'17.12.2025',label:'17. des 2025',vara:[\r\n      {n:'Sindre Ausel',p:'H',r:1,for:'Knut Olav Nærdal (Uavh)'},\r\n      {n:'Andreas Lilleholt',p:'Sp',r:3,for:'Morten Foss (Sp)'},\r\n    ]},\r\n    {date:'11.02.2026',label:'11. feb 2026',vara:[\r\n      {n:'Sindre Ausel',p:'H',r:1,for:'Karen Nilsen Waagestad (Uavh, inhabil sak 3/26)'},\r\n    ]},\r\n    {date:'18.03.2026',label:'18. mars 2026',vara:[\r\n      {n:'Sindre Ausel',p:'H',r:1,for:'Espen Gåserud (Uavh)'},\r\n      {n:'Sveinung Georg Lien',p:'V',r:2,for:'Line Øvernes Mørch (V)'},\r\n      {n:'Tiri Elisabeth Douglas Wigand',p:'FrP',r:1,for:'Henrik Münter (FrP, inhabil sak 16/26)'},\r\n    ]},\r\n  ],\r\n  closeVotes:{\r\n    '13.12.2023':[{sak:'Kommunedelplan – valg av representanter til arbeidsgruppe',for:12,mot:11,desc:'Valgkomiteens forslag til representanter i interkommunal planarbeidsgruppe vedtatt 12–11 (mot Ronny Sundsdal (INP), H og Sp).'}],\r\n    '25.09.2024':[{sak:'Reguleringsendring Svabukta – tilleggsforslag om sprengning',for:11,mot:12,desc:'Tilleggsforslag fra Mørch (V) om å fjerne sprengningsbestemmelsen mellom byggegrense og tomtegrense falt 11–12.'}],\r\n    '03.09.2025':[{sak:'25/71 – Salg av Middelskolen og Villa Utsikten – prisreduksjon',for:12,mot:11,desc:'Kommunedirektørens forslag om å akseptere prisreduksjon på kr 200 000 vedtatt 12–11.'}],\r\n  }\r\n};\r\n\r\nconst MUNIS = [ARENDAL, GRIMSTAD, FROLAND, TVEDESTRAND];\r\nlet activeMuni = 0;\r\nlet activeMeetingIdx = null;\r\n\r\n// ─── ANALYSIS ────────────────────────────────────────────────────────────────\r\nfunction analyzeAnomalies(meeting, muni) {\r\n  const byParty = {};\r\n  for (const v of meeting.vara) {\r\n    if (!byParty[v.p]) byParty[v.p] = [];\r\n    byParty[v.p].push(v);\r\n  }\r\n  const anomalies = [];\r\n  for (const [party, varaer] of Object.entries(byParty)) {\r\n    const sorted = [...varaer].sort((a,b)=>a.r-b.r);\r\n    for (let i=0; i<sorted.length; i++) {\r\n      const v = sorted[i];\r\n      const expected = i+1;\r\n      if (v.r > expected) {\r\n        const list = muni.varaLists[party]||[];\r\n        const skipped = [];\r\n        for (let r=expected; r<v.r; r++) {\r\n          const found = list.find(x=>x.r===r);\r\n          if (found) skipped.push(`#${r} ${found.n}`);\r\n        }\r\n        anomalies.push({party,vara:v.n,rank:v.r,forRep:v.for,expectedRank:expected,skipped,\r\n          severity: v.r>=5?'alert':v.r>=3?'warn':'ok'});\r\n      }\r\n    }\r\n  }\r\n  return anomalies;\r\n}\r\n\r\nfunction getBadges(meeting, muni) {\r\n  const anoms = analyzeAnomalies(meeting, muni);\r\n  const hasCV = !!(muni.closeVotes && muni.closeVotes[meeting.date]);\r\n  const badges = [];\r\n  if (anoms.length===0 && meeting.vara.length===0 && !hasCV) return [{cls:'nn',txt:'Ingen vara'}];\r\n  const high = anoms.filter(a=>a.severity==='alert').length;\r\n  const mid  = anoms.filter(a=>a.severity==='warn').length;\r\n  if (high) badges.push({cls:'al',txt:`${high} stor differanse`});\r\n  if (mid)  badges.push({cls:'wn',txt:`${mid} differanse`});\r\n  if (!high&&!mid&&meeting.vara.length>0) badges.push({cls:'ok',txt:`${meeting.vara.length} vara`});\r\n  if (hasCV) badges.push({cls:'cv',txt:'⚖ knapp'});\r\n  return badges;\r\n}\r\n\r\n// ─── SUMMARY ─────────────────────────────────────────────────────────────────\r\nfunction calcStats(muni) {\r\n  let totalVara=0, alertCount=0, warnCount=0;\r\n  for (const m of muni.meetings) {\r\n    totalVara += m.vara.length;\r\n    const anoms = analyzeAnomalies(m, muni);\r\n    alertCount += anoms.filter(a=>a.severity==='alert').length;\r\n    warnCount  += anoms.filter(a=>a.severity==='warn').length;\r\n  }\r\n  return {meetings:muni.meetings.length, totalVara, alertCount, warnCount};\r\n}\r\n\r\nfunction renderSummary(muni) {\r\n  const s = calcStats(muni);\r\n  const cvCount = muni.closeVotes ? Object.keys(muni.closeVotes).length : 0;\r\n  document.getElementById('summary-row').innerHTML = `\r\n    <div class=\"sum-box\"><div class=\"n\">${s.meetings}</div><div class=\"l\">Møter analysert</div></div>\r\n    <div class=\"sum-box\"><div class=\"n\">${s.totalVara}</div><div class=\"l\">Varainnkallinger totalt</div></div>\r\n    <div class=\"sum-box red\"><div class=\"n\">${s.alertCount}</div><div class=\"l\">Rang ≥5 (stor differanse fra listen)</div></div>\r\n    <div class=\"sum-box ora\"><div class=\"n\">${s.warnCount}</div><div class=\"l\">Rang 3–4 (differanse fra listen)</div></div>\r\n    <div class=\"sum-box\"><div class=\"n\">${cvCount}</div><div class=\"l\">Møter med knapp votering (≤2 stemmer)</div></div>\r\n  `;\r\n}\r\n\r\n// ─── MEETING LIST ─────────────────────────────────────────────────────────────\r\nfunction renderList(muni) {\r\n  const el = document.getElementById('meeting-list-content');\r\n  el.innerHTML = '';\r\n\r\n  // Show party-exit notice at top of list if relevant\r\n  const exitMembers = [];\r\n  for (const [party, list] of Object.entries(muni.varaLists)) {\r\n    for (const v of list) {\r\n      if (v.note) exitMembers.push(v.n);\r\n    }\r\n  }\r\n  if (exitMembers.length > 0) {\r\n    const banner = document.createElement('div');\r\n    banner.style.cssText = 'padding:9px 14px;background:#fff8e1;border-bottom:1px solid #f0d060;font-size:10.5px;color:#6b5400;line-height:1.5';\r\n    banner.innerHTML = `<strong style=\"font-family:'IBM Plex Mono',monospace;font-size:9px;letter-spacing:0.06em;text-transform:uppercase\">Registrert som uavhengig i perioden</strong><br>${exitMembers.join(', ')} ble registrert som uavhengige i løpet av perioden – de beholder plassen sin på den opprinnelige varalistens rekkefølge.`;\r\n    el.appendChild(banner);\r\n  }\r\n  muni.meetings.forEach((m,i) => {\r\n    const badges = getBadges(m, muni);\r\n    const div = document.createElement('div');\r\n    div.className = 'meeting-item' + (i===activeMeetingIdx?' active':'');\r\n    div.dataset.idx = i;\r\n    div.innerHTML = `\r\n      <div>\r\n        <div class=\"mi-title\">${m.label}</div>\r\n        <div class=\"mi-date\">${m.vara.length} vara${m.vara.length!==1?'er':''}</div>\r\n      </div>\r\n      <div class=\"badges\">${badges.map(b=>`<span class=\"badge ${b.cls}\">${b.txt}</span>`).join('')}</div>\r\n    `;\r\n    div.addEventListener('click',()=>{\r\n      activeMeetingIdx = i;\r\n      document.querySelectorAll('.meeting-item').forEach(el=>el.classList.remove('active'));\r\n      div.classList.add('active');\r\n      renderDetail(muni, m);\r\n      if (window.innerWidth <= 600) mobSwitch('detail');\r\n    });\r\n    el.appendChild(div);\r\n  });\r\n}\r\n\r\n// ─── DETAIL ───────────────────────────────────────────────────────────────────\r\nfunction renderDetail(muni, meeting) {\r\n  const panel = document.getElementById('detail-panel');\r\n  const anomalies = analyzeAnomalies(meeting, muni);\r\n\r\n  const byParty = {};\r\n  for (const v of meeting.vara) {\r\n    if (!byParty[v.p]) byParty[v.p] = [];\r\n    byParty[v.p].push(v);\r\n  }\r\n\r\n  let html = `\r\n    <div class=\"d-title\">${meeting.label}</div>\r\n    <div class=\"d-meta\">${meeting.vara.length} varainnkalling${meeting.vara.length!==1?'er':''} · ${anomalies.length > 0 ? anomalies.length + ' med differanse fra lista' : 'ingen differanse fra lista'}${meeting.notes ? ' · ' + meeting.notes : ''}</div>\r\n    <div class=\"legend\">\r\n      <div class=\"li\"><span class=\"chip v1\">Vara #1</span> Første på lista</div>\r\n      <div class=\"li\"><span class=\"chip v2\">Vara #2</span></div>\r\n      <div class=\"li\"><span class=\"chip v3\">Vara #3–4</span></div>\r\n      <div class=\"li\"><span class=\"chip v5\">Vara #5+</span> Stor differanse</div>\r\n    </div>\r\n  `;\r\n\r\n  // Municipality-level context: show party departures if defined\r\n  const exitMembers = [];\r\n  for (const [party, list] of Object.entries(muni.varaLists)) {\r\n    for (const v of list) {\r\n      if (v.note) exitMembers.push({party, r:v.r, name:v.n, note:v.note});\r\n    }\r\n  }\r\n  if (exitMembers.length > 0) {\r\n    html += `<div style=\"margin-bottom:16px;background:#fff8e1;border:1px solid #f0d060;border-left:3px solid #e8a000;padding:10px 14px;border-radius:2px;font-size:11.5px;line-height:1.7\">\r\n      <div style=\"font-family:'IBM Plex Mono',monospace;font-size:10px;font-weight:700;letter-spacing:0.08em;text-transform:uppercase;color:#856404;margin-bottom:6px\">Partiendringer i perioden</div>\r\n      ${exitMembers.map(e=>`<div><strong>${e.name}</strong> (stod som ${e.party} vara #${e.r} på valglista) — ${e.note}</div>`).join('')}\r\n    </div>`;\r\n  }\r\n\r\n  if (meeting.vara.length === 0) {\r\n    html += `<div class=\"no-vara\">Ingen varainnkallinger i dette møtet.</div>`;\r\n  } else {\r\n    for (const [party, varaer] of Object.entries(byParty)) {\r\n      const sorted = [...varaer].sort((a,b)=>a.r-b.r);\r\n      const partyAnoms = anomalies.filter(a=>a.party===party);\r\n      const color = PC[party]||'#888';\r\n      html += `<div class=\"party-block\">\r\n        <div class=\"party-hdr\">\r\n          <div class=\"party-dot\" style=\"background:${color}\"></div>\r\n          <div class=\"party-nm\">${party}</div>\r\n          <div class=\"party-sum\">${sorted.length} vara · ${partyAnoms.length?partyAnoms.length+' differanse fra lista':''}</div>\r\n        </div>`;\r\n      for (const a of partyAnoms) {\r\n        const cls = a.severity==='alert'?'alert':'warn';\r\n        html += `<div class=\"avvik-box ${cls}\">Rang #${a.rank} (${a.vara}) for ${a.forRep}.${a.skipped.length?' Lavere rangert: '+a.skipped.join(', '):''}</div>`;\r\n      }\r\n      for (const v of sorted) {\r\n        // Check if this vara person has a note (e.g. left party)\r\n        const varaList = muni.varaLists[v.p] || [];\r\n        const varaEntry = varaList.find(x => x.r === v.r);\r\n        const exitNote = varaEntry && varaEntry.note ? varaEntry.note : null;\r\n        html += `<div class=\"member-row\">\r\n          <div class=\"m-nr\">#${v.r}</div>\r\n          <div class=\"m-name vara\">${v.n}${exitNote ? `<span style=\"font-size:9px;font-family:'IBM Plex Mono',monospace;background:#fff3cd;color:#856404;padding:1px 5px;border-radius:2px;margin-left:6px;white-space:nowrap\">↗ ${exitNote}</span>` : ''}</div>\r\n          <div class=\"m-status\">\r\n            <span class=\"chip ${chipCls(v.r)}\">Vara #${v.r}</span>\r\n            <span style=\"font-size:10px;color:var(--muted)\">for ${v.for}</span>\r\n          </div>\r\n        </div>`;\r\n      }\r\n      html += `</div>`;\r\n    }\r\n  }\r\n\r\n  if (anomalies.length>0) {\r\n    html += `<div class=\"footnote\">Tallene viser rangnummer fra varalisten. Der innkalt vara har høyere rangnummer enn forventet ut fra antall fraværende, kan det finnes forklaringer som ikke fremgår av protokollen – for eksempel at lavere rangerte varaer hadde gyldig forfall.</div>`;\r\n  }\r\n\r\n  // Close votes\r\n  const cvs = muni.closeVotes && muni.closeVotes[meeting.date];\r\n  if (cvs && cvs.length>0) {\r\n    html += `<div class=\"cv-section\"><div class=\"cv-title\">⚖ Knappe voteringer i dette møtet (margin ≤ 2 stemmer)</div>`;\r\n    for (const cv of cvs) {\r\n      const won = cv.for > cv.mot;\r\n      const diff = Math.abs(cv.for-cv.mot);\r\n      html += `<div class=\"cv-card\">\r\n        <div class=\"cv-sak\">${cv.sak}</div>\r\n        <div class=\"cv-nums\">\r\n          <span class=\"cv-f\" style=\"color:${won?'var(--ok)':'var(--alert)'}\">FOR ${cv.for}</span>\r\n          <span style=\"color:var(--muted);font-size:11px\">–</span>\r\n          <span class=\"cv-m\" style=\"color:${won?'var(--alert)':'var(--ok)'}\">MOT ${cv.mot}</span>\r\n          <span class=\"cv-margin\" style=\"background:${diff===1?'#fde8b5':'#fef9c3'};color:#7d4a00\">${diff} stemme${diff>1?'r':''} margin</span>\r\n        </div>\r\n        <div class=\"cv-desc\">${cv.desc}</div>\r\n      </div>`;\r\n    }\r\n    html += `</div>`;\r\n  }\r\n\r\n  panel.innerHTML = html;\r\n}\r\n\r\n// ─── TAB SWITCH ───────────────────────────────────────────────────────────────\r\nfunction switchMuni(idx) {\r\n  activeMuni = idx;\r\n  activeMeetingIdx = null;\r\n  document.querySelectorAll('.tab').forEach((t,i)=>t.classList.toggle('active',i===idx));\r\n  const muni = MUNIS[idx];\r\n  renderSummary(muni);\r\n  renderList(muni);\r\n  document.getElementById('detail-panel').innerHTML = '<div class=\"empty-state\">← Velg et møte fra listen</div>';\r\n  if (window.innerWidth <= 600) mobSwitch('list');\r\n}\r\n\r\n\r\n// ── MOBILE PANEL SWITCH ────────────────────────────────────────────────────────\r\nfunction mobSwitch(panel) {\r\n  const list   = document.querySelector('.meeting-list');\r\n  const detail = document.getElementById('detail-panel');\r\n  const lt = document.getElementById('mob-list-tab');\r\n  const dt = document.getElementById('mob-detail-tab');\r\n  if (panel === 'list') {\r\n    list.classList.add('mob-active');\r\n    detail.classList.remove('mob-active');\r\n    lt.classList.add('active');\r\n    dt.classList.remove('active');\r\n  } else {\r\n    detail.classList.add('mob-active');\r\n    list.classList.remove('mob-active');\r\n    dt.classList.add('active');\r\n    lt.classList.remove('active');\r\n  }\r\n  setTimeout(sendHeight, 50);\r\n}\r\n// On load, set initial mobile state\r\nfunction initMobile() {\r\n  if (window.innerWidth <= 600) {\r\n    document.querySelector('.meeting-list').classList.add('mob-active');\r\n  }\r\n}\r\nwindow.addEventListener('load', initMobile);\r\n\r\n// ─── INIT ─────────────────────────────────────────────────────────────────────\r\nMUNIS.forEach((m,i) => {\r\n  const s = calcStats(m);\r\n  document.getElementById(`ts${i}`).textContent = `${s.meetings} møter`;\r\n});\r\nswitchMuni(0);\r\n\r\nfunction sendHeight() {\r\n  window.parent.postMessage({ iframeHeight: document.body.scrollHeight + 8 }, '*');\r\n}\r\nwindow.addEventListener('load', sendHeight);\r\nwindow.addEventListener('resize', sendHeight);\r\ndocument.addEventListener('click', function() { setTimeout(sendHeight, 50); });\r\n</script>\r\n</body>\r\n</html>","date":"2026-04-02T18:22:56.191Z"}