@keyframes pupil-look{0%{left:-2px}35%{left:2px}65%{left:.5px}to{left:0}}*{margin:0;padding:0;box-sizing:border-box}:root{--bg:#fff;--fg:#111;--border:#d0d0d0;--muted:#666;--hover:#f5f5f5;--selected:#e8e8e8;--accent:#111;--row-alt:#fafafa;--cell-highlight:#f0f0f0;--col-highlight:#f8f8f8;--map-default:#f0f0f0;--map-hover:#d5d5d5;--map-stroke:#999;--map-sel-stroke:#333;--empty-cell:#f5f5f5;--nodata-day:#eee;--border-faint:#f0f0f0;--border-faint2:#eee;--border-row:#ebebeb;--tooltip-bg:#fff;--tooltip-shadow:rgba(0,0,0,0.12);--keyhint-bg:#eee;--input-focus-bg:#fafafa;--nodata-color:#aaa;--tag-hover:#ddd;--scrollbar-thumb:#ccc;--scrollbar-hover:#aaa;--highlight-blue:#dbeafe;--highlight-blue-border:#93c5fd;--notice-bg:#fef3c7;--notice-fg:#92400e;--notice-border:#f59e0b}[data-theme=dark]{--bg:#151518;--fg:#d8d8d8;--border:#2e2e33;--muted:#888;--hover:#1e1e23;--selected:#28282f;--accent:#d8d8d8;--row-alt:#1a1a1e;--cell-highlight:#22222a;--col-highlight:#1c1c22;--map-default:#222228;--map-hover:#333340;--map-stroke:#555;--map-sel-stroke:#bbb;--empty-cell:#1e1e23;--nodata-day:#222228;--border-faint:#222228;--border-faint2:#262630;--border-row:#232328;--tooltip-bg:#1e1e24;--tooltip-shadow:rgba(0,0,0,0.4);--keyhint-bg:#28282f;--input-focus-bg:#1a1a20;--nodata-color:#555;--tag-hover:#333;--scrollbar-thumb:#444;--scrollbar-hover:#666;--highlight-blue:#1e3a5f;--highlight-blue-border:#2563eb;--notice-bg:#3b2f1a;--notice-fg:#fbbf24;--notice-border:#92400e;color-scheme:dark}body,html{height:100%;overflow:hidden}body{font-family:"Inter",-apple-system,"Segoe UI",sans-serif;font-size:11px;line-height:1.4;color:var(--fg);background:var(--bg)}#app{display:grid;grid-template-rows:32px 1fr 20px;grid-template-columns:280px 1fr;height:100vh}#header{grid-column:1/-1;display:flex;align-items:center;border-bottom:1px solid var(--border);padding:0 12px;gap:16px}#header h1{font-family:"Inter",sans-serif;font-size:13px;font-weight:700;letter-spacing:-.3px;gap:4px;user-select:none}#header h1:hover{opacity:.7}#header .meta,#theme-toggle{color:var(--muted);font-size:10px}.logo-eyes{display:inline-flex;gap:2px;align-items:flex-end}.eye,.pupil::after{background:#fff;border-radius:50%}.eye,.pupil{position:relative}.eye{width:10px;height:15px;border:1px solid #bbb;overflow:hidden;display:inline-flex;align-items:flex-end;justify-content:center;padding-bottom:3px}.pupil{width:4px;height:4px;border-radius:50%;background:#3b2010;box-shadow:0 0 0 1px #9a7b40;left:0;transition:left .15s ease}.pupil::after{content:"";position:absolute;top:.5px;left:.5px;width:1.5px;height:1.5px}.logo-eyes.looking .pupil{animation:pupil-look 1.2s ease-in-out}.header-spacer{flex:1}.kofi-btn{display:inline-flex;align-items:center;gap:5px;font-size:10px;font-weight:600;color:#434b57;text-decoration:none;padding:3px 10px;background:#fff;border:1px solid #ddd;border-radius:4px;white-space:nowrap}.kofi-btn:hover,[data-theme=dark] .kofi-btn:hover{background:#ff5e5b;color:#fff;border-color:#ff5e5b}.kofi-icon{width:14px;height:14px;flex-shrink:0}[data-theme=dark] .kofi-btn{background:#2a2a2a;color:#ddd;border-color:#444}#header h1,#theme-toggle{cursor:pointer;display:flex;align-items:center}#theme-toggle{border:0;background:0 0;padding:2px 6px;font-size:14px;border-radius:3px;line-height:1}#theme-toggle:hover{background:var(--hover);color:var(--fg)}.theme-icon.dark,[data-theme=dark] .theme-icon.light{display:none}[data-theme=dark] .theme-icon.dark{display:inline}#left-panel{border-right:1px solid var(--border);display:flex;flex-direction:column;overflow:hidden}#borough-label,#map-container{border-bottom:1px solid var(--border)}#map-container{padding:6px;flex-shrink:0}#map-container svg{width:100%;height:auto;display:block}.borough-path{fill:var(--map-fill, var(--map-default));stroke:var(--map-stroke);stroke-width:.5;cursor:pointer;transition:fill .12s,stroke .12s,stroke-width .12s}.borough-path.hover,.borough-path:hover{fill:var(--map-fill-hover, var(--map-hover));stroke:var(--map-sel-stroke);stroke-width:1}.borough-path.selected{fill:var(--map-fill-sel, var(--selected));stroke:var(--map-sel-stroke);stroke-width:1.2}.borough-path.selected.hover,.borough-path.selected:hover{fill:var(--map-fill-sel, var(--selected));stroke:var(--fg);stroke-width:1.5}.borough-path.unavailable{fill:var(--map-default);cursor:help}#borough-label{text-align:center;padding:3px;font-weight:600;font-size:10px;min-height:16px}#borough-list-container{flex:1;overflow-y:auto}#borough-search{width:100%;border:0;border-bottom:1px solid var(--border);padding:5px 8px;font-family:inherit;font-size:11px;outline:0;background:var(--bg);color:var(--fg)}#borough-search:focus,#search-bar input:focus,#search-bar select:focus{background:var(--input-focus-bg)}.borough-item{display:flex;justify-content:space-between;padding:3px 8px;cursor:pointer;font-size:10px;border-bottom:1px solid var(--border-faint)}.borough-item:hover{background:var(--hover)}.borough-item.selected{background:var(--selected);font-weight:600}.borough-item .count{color:var(--muted)}.borough-item.no-data{color:var(--nodata-color)}.borough-item .notice-reason{font-size:9px;font-style:italic;color:var(--muted)}#right-panel{display:grid;grid-template-rows:auto auto auto auto 1fr;overflow:hidden}#mobile-council-bar{display:none}#mobile-council-select{width:100%;border:0;border-bottom:1px solid var(--border);font-family:inherit;font-size:12px;font-weight:600;background:var(--bg);color:var(--fg);outline:0;cursor:pointer;-webkit-appearance:none;appearance:none;background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='10' height='6'%3E%3Cpath d='M0 0l5 6 5-6z' fill='%23666'/%3E%3C/svg%3E");background-repeat:no-repeat;background-position:right 8px center;padding:6px 24px 6px 8px}#mobile-council-select:focus{background-color:var(--input-focus-bg)}#stats-bar,#top-right{display:flex;border-bottom:1px solid var(--border)}#stats-bar{gap:0;flex-wrap:wrap}.stat-box{padding:5px 12px;border-right:1px solid var(--border)}.stat-box .label{font-size:9px;color:var(--muted);text-transform:uppercase;letter-spacing:.8px}.stat-box .value{font-size:13px;font-weight:700;font-family:"JetBrains Mono","SF Mono",monospace}#top-right{min-height:0;max-height:220px}#charts-col,.chart-panel{display:flex;flex:1;min-width:0;border-right:1px solid var(--border);overflow:hidden}.chart-panel{padding:6px;flex-direction:column}#payments-table td:last-child,#payments-table th:last-child,.chart-panel:last-child{border-right:none}#heatmap-col h3,.chart-panel h3{font-size:8px;text-transform:uppercase;letter-spacing:.8px;color:var(--muted);margin-bottom:4px;flex-shrink:0}.chart-content{flex:0 0 auto;position:relative}.chart-content canvas{display:block;margin:0 auto;cursor:pointer}.chart-legend{flex:1;min-height:0;overflow-y:auto;margin-top:3px}.legend-item{display:flex;align-items:center;gap:3px;font-size:8px;padding:1px 0;cursor:pointer;border-radius:2px}#payments-table tbody tr:hover td,.legend-item:hover{background:var(--hover)}.legend-item.active{background:var(--selected);font-weight:600}.legend-swatch{width:7px;height:7px;flex-shrink:0;border-radius:1px}.legend-label{flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.heatmap-row .year-label,.legend-value{color:var(--muted);flex-shrink:0}#heatmap-col,.heatmap-grid{display:flex;flex-direction:column}#heatmap-col{flex:0 0 auto;min-width:340px;overflow-x:hidden;overflow-y:auto;scrollbar-gutter:stable;padding:6px 8px}#heatmap-col .no-council{color:var(--muted);font-size:10px;padding:20px 0;text-align:center}.heatmap-grid{gap:1px}.heatmap-row{display:flex;align-items:center;gap:1px}.heatmap-row .year-label{width:28px;font-size:8px;text-align:right;padding-right:3px}.heatmap-cell{width:24px;height:16px;border-radius:2px;cursor:pointer;position:relative;overflow:hidden;transition:filter .1s}.heatmap-cell:hover{filter:brightness(.85)}.heatmap-cell.selected{outline:2px solid var(--accent);outline-offset:-2px}.heatmap-cell.empty{background:var(--empty-cell);cursor:default}.heatmap-cell.empty:hover{filter:none}.heatmap-cell canvas{width:100%;height:100%;display:block}.month-labels{display:flex;gap:1px;margin-left:31px;margin-bottom:2px}.month-labels span{width:24px;text-align:center;font-size:7px;color:var(--muted)}.day-drill{display:flex;flex-direction:column;gap:4px}.day-drill-header{display:flex;align-items:center;gap:8px;margin-bottom:2px}.day-back{cursor:pointer;color:var(--muted);font-size:9px;text-decoration:underline}.day-back:hover{color:var(--fg)}.day-title{font-size:10px;font-weight:600}.day-grid{flex-direction:column}.day-grid,.day-row{display:flex;gap:1px}.day-cell{width:26px;height:22px;display:flex;align-items:center;justify-content:center;font-size:8px;color:var(--muted);border-radius:2px;transition:filter .1s}.day-cell.empty{visibility:hidden}.day-cell.no-data{cursor:pointer;background:var(--nodata-day);color:var(--muted)}.day-cell.no-data:hover{filter:brightness(.9)}.day-cell.has-data{cursor:pointer;color:#fff;font-weight:600;text-shadow:0 0 2px rgba(0,0,0,.3)}.day-cell.has-data:hover{filter:brightness(.8)}.day-cell.selected{outline:2px solid var(--accent);outline-offset:-2px}.day-cell.day-label{font-weight:700;color:var(--muted);font-size:8px}.day-dow{margin-bottom:2px}#filters-bar,.pie-tooltip{display:none;font-size:10px}.pie-tooltip{position:fixed;pointer-events:none;background:var(--tooltip-bg);border:1px solid var(--border);padding:6px 10px;font-family:inherit;z-index:100;color:var(--fg);box-shadow:0 2px 8px var(--tooltip-shadow);max-width:260px}.pie-tooltip.visible{display:block}.pie-tooltip .tt-label{font-weight:700;margin-bottom:2px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.pie-tooltip .tt-row{display:flex;justify-content:space-between;gap:12px}.pie-tooltip .tt-val{color:var(--muted)}#payments-table td,.hm-tooltip{white-space:nowrap;font-size:10px}#search-bar input,#search-bar select,.hm-tooltip{font-family:inherit;padding:4px 8px;color:var(--fg)}.hm-tooltip{position:fixed;pointer-events:none;background:var(--tooltip-bg);border:1px solid var(--border);z-index:100;box-shadow:0 2px 8px var(--tooltip-shadow);display:none}.hm-tooltip.visible{display:block}#filters-bar{align-items:center;gap:6px;padding:3px 8px;border-bottom:1px solid var(--border);flex-wrap:wrap;flex-shrink:0}#filters-bar.visible{display:flex}#filters-bar .filter-label{color:var(--muted);font-size:9px;text-transform:uppercase;letter-spacing:.5px}#clear-all-filters,.filter-tag{font-family:inherit;cursor:pointer}.filter-tag{display:inline-flex;align-items:center;gap:4px;background:var(--selected);border:1px solid var(--border);padding:1px 6px;font-size:10px;color:var(--fg)}.filter-tag:hover{background:var(--tag-hover)}.filter-tag-highlight{background:var(--highlight-blue);border-color:var(--highlight-blue-border)}.filter-tag-highlight:hover{background:var(--highlight-blue);opacity:.8}.filter-tag .x{font-weight:700;font-size:9px}#clear-all-filters{border:0;background:0 0;font-size:9px;color:var(--muted);text-decoration:underline;padding:2px 4px}#clear-all-filters:hover,#payments-table th:hover{color:var(--fg)}.council-notice{display:none;padding:6px 12px;font-size:11px;background:var(--notice-bg);color:var(--notice-fg);border-bottom:1px solid var(--notice-border);align-items:center;gap:6px;flex-shrink:0}#table-area,.council-notice.visible{display:flex}.council-notice .notice-icon{font-size:14px}#table-area{flex-direction:column;overflow:hidden;min-height:0}#search-bar{display:flex;gap:0;border-bottom:1px solid var(--border);flex-shrink:0}#search-bar input,#search-bar select{font-size:11px;border:0;border-right:1px solid var(--border);outline:0;background:var(--bg)}#payment-search{flex:1}#payments-table th,#search-bar .hint{font-size:9px;color:var(--muted);white-space:nowrap}#search-bar .hint{padding:4px 8px;display:flex;align-items:center}#table-wrapper{flex:1;overflow:auto;position:relative}#payments-table{border-collapse:collapse;table-layout:auto}#payments-table th{position:sticky;top:0;z-index:2;background:var(--bg);text-transform:uppercase;letter-spacing:.8px;text-align:left;padding:3px 6px;border-bottom:2px solid var(--border);border-right:1px solid var(--border-faint2);cursor:pointer;user-select:none}#payments-table th.sorted{color:var(--fg);font-weight:700}#payments-table th .arrow{font-size:8px}#payments-table td{padding:2px 6px;border-bottom:1px solid var(--border-row);border-right:1px solid var(--border-row);font-family:"JetBrains Mono","SF Mono","Consolas",monospace}#payments-table tr.even td{background:var(--row-alt)}#payments-table tbody td.cell-hover{background:var(--selected)!important}.col-council{min-width:110px}.col-date{min-width:78px}.col-amount{min-width:90px;text-align:right!important}.col-supplier{min-width:180px}.col-category{min-width:130px}.col-department{min-width:140px}.col-description{min-width:200px}td.col-amount{text-align:right;font-variant-numeric:tabular-nums}#payments-table tr.vt-pad td{padding:0;border:0;background:0 0!important}#payments-table tr.vt-pad:hover td{background:0 0!important}#footer,#table-status{border-top:1px solid var(--border);display:flex;align-items:center;font-size:9px;color:var(--muted)}#table-status{gap:12px;padding:2px 8px;flex-shrink:0}#payments-table td.clickable{cursor:pointer}#payments-table td.clickable:hover{text-decoration:underline}.cell-context-menu{position:fixed;display:none;background:var(--tooltip-bg);border:1px solid var(--border);font-family:inherit;font-size:10px;z-index:200;color:var(--fg);box-shadow:0 2px 8px var(--tooltip-shadow);min-width:160px}.cell-context-menu.visible{display:block}.ctx-item{padding:5px 10px;cursor:pointer}.ctx-item:hover{background:var(--hover)}.ctx-item+.ctx-item{border-top:1px solid var(--border-faint2)}#footer{grid-column:1/-1;padding:0 12px;gap:16px}.footer-spacer{flex:1}.disclaimer{font-style:italic;opacity:.7;white-space:nowrap}.key-hint{background:var(--keyhint-bg);padding:0 4px;border-radius:2px;font-weight:600}.loading{color:var(--muted);font-size:10px;padding:12px;text-align:center}#payments-table tbody tr.highlight-row:hover>td.cell-hover[data-col],#payments-table tbody tr.highlight-row:hover>td[data-col],#payments-table tbody tr.highlight-row>td.cell-hover[data-col],#payments-table tbody tr.highlight-row>td[data-col]{background:var(--highlight-blue)!important}.ctx-sep{height:1px;background:var(--border-faint2);margin:2px 0}.copy-toast{position:fixed;bottom:20px;left:50%;transform:translateX(-50%) translateY(20px);background:var(--tooltip-bg);color:var(--fg);border:1px solid var(--border);padding:6px 16px;border-radius:6px;font-size:11px;font-family:inherit;box-shadow:0 4px 12px var(--tooltip-shadow);opacity:0;transition:opacity .2s,transform .2s;pointer-events:none;z-index:10000}.copy-toast.visible{opacity:1;transform:translateX(-50%) translateY(0)}.payment-modal-overlay{position:fixed;inset:0;background:rgba(0,0,0,.5);z-index:9999;display:flex;align-items:center;justify-content:center}.payment-modal{background:var(--bg);border:1px solid var(--border);border-radius:8px;width:420px;max-width:90vw;box-shadow:0 8px 32px rgba(0,0,0,.3);font-size:12px}.pm-header{display:flex;justify-content:space-between;align-items:center;padding:10px 14px;border-bottom:1px solid var(--border)}.pm-title{font-weight:700;font-size:13px}.pm-close{cursor:pointer;font-size:18px;color:var(--muted);line-height:1}.pm-close:hover{color:var(--fg)}.pm-body{padding:10px 14px}.pm-row{display:flex;justify-content:space-between;padding:4px 0;border-bottom:1px solid var(--border-faint)}.pm-row:last-child{border-bottom:none}.pm-label{color:var(--muted);font-size:10px;text-transform:uppercase;letter-spacing:.5px;flex-shrink:0;width:80px}.pm-val{font-weight:500;text-align:right;flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.pm-amount{font-size:14px;font-weight:700;font-family:"JetBrains Mono",monospace}.pm-desc{white-space:normal;font-size:11px}.pm-footer{display:flex;justify-content:flex-end;gap:8px;padding:10px 14px;border-top:1px solid var(--border)}.pm-close-btn,.pm-share-btn{border:1px solid var(--border);background:var(--bg);color:var(--fg);padding:4px 12px;border-radius:4px;font-size:11px;cursor:pointer;font-family:inherit}.pm-share-btn:hover{background:var(--selected)}.pm-close-btn:hover{background:var(--hover)}.pm-source-file{font-family:"JetBrains Mono",monospace;font-size:10px;word-break:break-all;white-space:normal}.pm-source-note{padding:8px 14px;font-size:10px;color:var(--muted);line-height:1.5;border-top:1px solid var(--border-faint)}.welcome-overlay{position:fixed;inset:0;background:rgba(0,0,0,.5);z-index:10000;display:flex;align-items:center;justify-content:center;padding:16px}.welcome-modal{background:var(--bg);border:1px solid var(--border);border-radius:10px;width:440px;max-width:100%;box-shadow:0 12px 40px rgba(0,0,0,.35);font-size:13px;line-height:1.6}.welcome-header{font-weight:700;font-size:16px;border-bottom:1px solid var(--border)}.welcome-body,.welcome-header{padding:14px 18px}.welcome-body p{margin-bottom:10px}.welcome-body p:last-child{margin-bottom:0}.welcome-body a{color:var(--fg);text-decoration:underline}.welcome-body a:hover{opacity:.8}.welcome-body strong{font-weight:600}.welcome-footer{display:flex;align-items:center;justify-content:space-between;padding:12px 18px;border-top:1px solid var(--border);gap:12px}.welcome-dismiss,.welcome-kofi{border-radius:6px;font-size:12px;font-family:inherit}.welcome-kofi{display:inline-flex;align-items:center;gap:6px;background:#ff5e5b;color:#fff;border:0;padding:6px 14px;font-weight:600;text-decoration:none;white-space:nowrap}.welcome-kofi:hover{opacity:.9}.welcome-kofi .kofi-icon{width:16px;height:16px}.welcome-dismiss{border:1px solid var(--border);background:var(--bg);color:var(--fg);padding:6px 18px;font-weight:500;cursor:pointer}.welcome-dismiss:hover{background:var(--hover)}::-webkit-scrollbar{width:6px;height:6px}::-webkit-scrollbar-track{background:0 0}::-webkit-scrollbar-thumb{background:var(--scrollbar-thumb);border-radius:3px}::-webkit-scrollbar-thumb:hover{background:var(--scrollbar-hover)}#heatmap-slot{display:contents}@media (max-width:1400px) and (min-width:1025px){#heatmap-slot #heatmap-col{min-width:0;max-height:200px;border-top:1px solid var(--border);border-bottom:1px solid var(--border);flex-shrink:0;scrollbar-gutter:auto}#charts-col{border-right:none}#top-right{max-height:220px}}@media (max-width:1024px){#app{grid-template-columns:1fr}#left-panel{display:none}#mobile-council-bar{display:block}#footer,#header{grid-column:1}#charts-col{display:none}#heatmap-col{border-left:none;flex:1;min-width:0}#top-right{max-height:180px}.col-council{width:90px}.col-supplier{width:140px}.col-category{width:100px}.col-department{width:110px}}@media (max-width:768px){#app{grid-template-rows:40px 1fr 0}#header{padding:0 8px;gap:8px}#header h1{font-size:12px}#header .meta{font-size:9px}#top-right,.kofi-text{display:none}.kofi-btn{padding:3px 6px;gap:0}#stats-bar{display:grid;grid-template-columns:repeat(3,1fr);gap:0}.stat-box{border-right:1px solid var(--border);border-bottom:1px solid var(--border);padding:4px 8px;text-align:center}.stat-box:nth-child(3n){border-right:none}#search-bar .hint,.stat-box .label{font-size:8px}.stat-box .value{font-size:11px}#filters-bar{padding:4px 8px}#search-bar{flex-wrap:wrap}#payment-search{min-width:0}#payments-table{table-layout:auto;min-width:700px}#footer{display:none}}@media (max-width:480px){#header h1{font-size:11px}#header .meta,.col-category,.col-department{display:none}#stats-bar{grid-template-columns:repeat(2,1fr)}.stat-box:nth-child(3n){border-right:1px solid var(--border)}.stat-box:nth-child(2n){border-right:none}#payments-table{min-width:420px}.filter-tag{font-size:9px;padding:1px 4px}.payment-modal{width:95vw}}