:root{--nrgi-green: #006e64;--nrgi-dark-green: #004e4a;--nrgi-light-green: #c8f0e6;--nrgi-action: #52d6a3;--accent: var(--nrgi-green);--accent-hover: var(--nrgi-dark-green);--accent-soft: #e8f8f3;--sidebar-width: 248px;--danger: #dc2626;--danger-soft: #fef2f2;--success: #16a34a;--success-soft: #f0fdf4;--warning: #b45309;--warning-soft: #fffbeb;--bg: #f6f8fb;--surface: #ffffff;--border: #e5e9f0;--text: #0f172a;--muted: #64748b;--radius: 12px;--shadow-sm: 0 1px 2px rgba(15, 23, 42, .06);--shadow-md: 0 8px 24px rgba(15, 23, 42, .08)}*{box-sizing:border-box}body{margin:0;font-family:Inter,system-ui,-apple-system,Segoe UI,Roboto,sans-serif;color:var(--text);background:var(--bg);-webkit-font-smoothing:antialiased}.shell{min-height:100vh}.sidebar{position:fixed;inset:0 auto 0 0;z-index:30;width:var(--sidebar-width);display:flex;flex-direction:column;overflow:hidden auto;padding:1.25rem .85rem 1rem;color:#e6f4f1;background:linear-gradient(180deg,var(--nrgi-dark-green) 0%,#033b38 100%)}.sidebar:before{content:"";position:absolute;z-index:-1;left:-40%;bottom:9rem;width:180%;height:7rem;background:#52d6a312;transform:rotate(-16deg);pointer-events:none}.sidebar-brand{display:flex;align-items:center;gap:.7rem;padding:0 .5rem 1.4rem}.brand-name{font-size:1.15rem;font-weight:700;letter-spacing:-.01em}.sidebar .brand-name{color:#fff}.brand-tagline{font-size:.75rem;color:#e6f4f1a6}.sidebar-nav{display:flex;flex-direction:column;gap:.2rem}.sidebar-link{display:flex;align-items:center;gap:.75rem;width:100%;border:none;border-radius:10px;padding:.65rem .75rem;background:none;color:#e6f4f1c7;font:inherit;font-size:.95rem;font-weight:500;text-align:left;text-decoration:none;cursor:pointer;transition:background .15s ease,color .15s ease}.sidebar-link:hover{color:#fff;background:#ffffff12;text-decoration:none}.sidebar-link.active{position:relative;color:#fff;background:#52d6a329}.sidebar-link.active:before{content:"";position:absolute;left:-.85rem;top:.45rem;bottom:.45rem;width:3px;border-radius:0 3px 3px 0;background:var(--nrgi-action)}.sidebar-link.active svg{color:var(--nrgi-action)}.sidebar-link.small{font-size:.88rem;padding:.5rem .75rem}.sidebar-footer{margin-top:auto;padding-top:1rem;border-top:1px solid rgba(255,255,255,.1);display:flex;flex-direction:column;gap:.15rem}.sidebar-user{display:flex;align-items:center;gap:.65rem;padding:.25rem .75rem .6rem;min-width:0}.avatar{flex:none;display:grid;place-items:center;width:32px;height:32px;border-radius:50%;background:var(--nrgi-light-green);color:var(--nrgi-dark-green);font-size:.78rem;font-weight:700}.sidebar-user .username{color:#fff;font-weight:600;font-size:.92rem;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.nrgi{margin-top:.85rem;padding:.9rem .75rem .25rem;border-top:1px solid rgba(255,255,255,.1)}.nrgi img{display:block;height:26px;opacity:.92}.icon-button{display:inline-grid;place-items:center;width:38px;height:38px;border:none;border-radius:10px;background:none;color:inherit;cursor:pointer}.icon-button:hover{background:#0f172a0f}.sidebar .icon-button:hover{background:#ffffff14}.sidebar-brand .close{display:none;margin-left:auto}.mobile-bar,.sidebar-backdrop{display:none}.content{margin-left:var(--sidebar-width);max-width:calc(1140px + 3rem);padding:2.5rem 1.5rem 4rem}@media(max-width:900px){.sidebar{transform:translate(-100%);transition:transform .2s ease;box-shadow:var(--shadow-md)}.sidebar.open{transform:none}.sidebar-brand .close{display:inline-grid}.sidebar-backdrop{display:block;position:fixed;top:0;right:0;bottom:0;left:0;z-index:20;background:#0f172a66}.mobile-bar{position:sticky;top:0;z-index:10;display:flex;align-items:center;gap:.6rem;padding:.5rem 1rem;background:#ffffffe6;-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);border-bottom:1px solid var(--border)}.content{margin-left:0;padding:1.5rem 1rem 3rem}}.page-header{display:flex;align-items:center;justify-content:space-between;gap:1rem;flex-wrap:wrap;margin-bottom:1.5rem}.page-header h1{margin:0}.segmented{display:inline-flex;flex-wrap:wrap;max-width:100%;gap:.25rem;padding:.25rem;margin-bottom:1.25rem;border:1px solid var(--border);border-radius:12px;background:var(--surface);box-shadow:var(--shadow-sm)}.segmented button{border:none;border-radius:9px;padding:.5rem 1rem;background:none;color:var(--muted);font:inherit;font-size:.92rem;font-weight:600;cursor:pointer;transition:background .15s ease,color .15s ease}.segmented button:hover{color:var(--text)}.segmented button.active{background:var(--accent);color:#fff}.tabs{display:flex;gap:.25rem;margin:-.5rem 0 1.5rem;border-bottom:1px solid var(--border)}.tabs .tab{padding:.55rem .9rem;margin-bottom:-1px;border-bottom:2px solid transparent;color:var(--muted);font-weight:600;text-decoration:none}.tabs .tab:hover{color:var(--text);text-decoration:none}.tabs .tab.active{color:var(--accent);border-bottom-color:var(--accent)}.page-subtitle{margin:0 0 .25rem;font-size:1.2rem}.btn.disabled{opacity:.55;pointer-events:none}.heatmap-toolbar{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:.75rem 1.5rem;margin-bottom:1.25rem}.heatmap-toolbar .segmented{margin-bottom:0}.content:has(.heatmap-layout){max-width:none}.heatmap-layout{display:grid;grid-template-columns:250px minmax(0,1fr);gap:1.25rem;align-items:start}.heatmap-side{display:flex;flex-direction:column;gap:1rem}.panel{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius);box-shadow:var(--shadow-sm);padding:1rem 1.1rem;font-size:.92rem}.panel h3{margin:0 0 .6rem;font-size:.82rem;font-weight:600;color:var(--muted);text-transform:uppercase;letter-spacing:.05em}.panel h3:not(:first-child){margin-top:1.25rem}details.help{margin-top:.75rem;font-size:.85rem;color:var(--muted)}details.help summary{cursor:pointer;color:var(--accent);font-weight:500}details.help p{margin:.4rem 0 0;line-height:1.45}details.help strong{color:var(--text);font-weight:600}.checkbox-list{display:flex;flex-direction:column;gap:.4rem}.panel label.checkbox input{accent-color:var(--accent)}.quick-buttons{display:flex;flex-wrap:wrap;gap:.35rem;margin-top:.75rem}.quick-buttons .btn.small{padding:.35rem .65rem}label.checkbox.unknown-option{margin-top:.85rem;font-size:.85rem;align-items:flex-start!important}.legend{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:.3rem;font-size:.85rem}.legend li{display:flex;align-items:center;gap:.5rem}.swatch{flex:none;width:18px;height:12px;border-radius:3px;border:1px solid rgba(15,23,42,.12)}.swatch.hatched{background:repeating-linear-gradient(45deg,#9aa5b4 0 1.5px,transparent 1.5px 4px),var(--surface)}.map-area{display:flex;flex-direction:column;gap:.75rem;align-items:flex-start;min-width:0}.national{font-size:.95rem}.map-frame{position:relative;width:100%;background:var(--surface);border:1px solid var(--border);border-radius:var(--radius);box-shadow:var(--shadow-sm);overflow:hidden}.map-frame svg{display:block;width:100%;height:auto;cursor:grab;touch-action:none}.map-frame svg:active{cursor:grabbing}.postal-code{stroke:#fff;stroke-width:.6;vector-effect:non-scaling-stroke;cursor:pointer}.postal-code-outline{fill:none;stroke:var(--text);vector-effect:non-scaling-stroke;pointer-events:none}.postal-code-outline.hovered{stroke-width:1.2}.postal-code-outline.selected{stroke-width:2}.postal-code-hatch{pointer-events:none}.overlay{pointer-events:none;vector-effect:non-scaling-stroke}.map-frame svg.moving .overlay,.map-frame svg.moving .postal-code{vector-effect:none}.map-frame svg.moving .postal-code{stroke-width:calc(.6 * var(--stroke-scale, 1))}.map-frame svg.moving .overlay.district-heat-existing{stroke-width:calc(1 * var(--stroke-scale, 1))}.map-frame svg.moving .overlay.district-heat-planned{stroke-width:calc(1.4 * var(--stroke-scale, 1));stroke-dasharray:calc(4 * var(--stroke-scale, 1)) calc(3 * var(--stroke-scale, 1))}.overlay.district-heat-existing{stroke:#004e4a;stroke-width:1}.overlay.district-heat-planned{stroke:#a3471f;stroke-width:1.4;stroke-dasharray:4 3}.swatch.layer{background:var(--surface)}.swatch.layer.district-heat-existing{border:1.5px solid #004e4a;background:repeating-linear-gradient(-45deg,rgba(0,78,74,.55) 0 1px,transparent 1px 4px),var(--surface)}.swatch.layer.district-heat-planned{border:1.5px dashed #a3471f;background:radial-gradient(circle,rgba(163,71,31,.7) .9px,transparent 1px) 0 0 / 4px 4px,var(--surface)}.area-line{display:flex;align-items:center;gap:.4rem;margin-top:.35rem;padding-top:.35rem;border-top:1px solid var(--border);font-size:.85rem}.attribution{font-size:.78rem}.layer-error{margin-top:.4rem;color:var(--danger)}.inset rect{fill:var(--bg);stroke:var(--border)}.map-controls{position:absolute;left:.75rem;bottom:.75rem;display:flex;gap:.3rem}.map-controls button{min-width:34px;height:34px;border:1px solid var(--border);border-radius:8px;background:var(--surface);color:var(--text);font:inherit;font-size:1.1rem;font-weight:600;cursor:pointer;box-shadow:var(--shadow-sm)}.map-controls button.text{font-size:.85rem;padding:0 .7rem}.map-controls button:hover{background:var(--bg)}.map-controls button.active,.map-controls button.active:hover{background:var(--accent);border-color:var(--accent);color:#fff}.base-map{pointer-events:none;mix-blend-mode:multiply}.map-attribution{position:absolute;right:.5rem;bottom:.35rem;padding:.05rem .35rem;border-radius:4px;background:#fffc;color:var(--muted);font-size:.7rem;pointer-events:none}.map-tooltip{position:absolute;z-index:5;min-width:200px;max-width:280px;padding:.65rem .8rem;background:var(--surface);border:1px solid var(--border);border-radius:10px;box-shadow:var(--shadow-md);font-size:.88rem;pointer-events:none}.share-bar{height:8px;margin:.45rem 0;border-radius:4px;background:var(--nrgi-light-green);overflow:hidden}.share-bar span{display:block;height:100%;border-radius:4px;background:#0b5e57}.selected-breakdown{display:flex;flex-wrap:wrap;gap:0 .75rem;list-style:none;margin:.1rem 0 .35rem;padding:0}.details .detail-meta{margin:.6rem 0}.link-button{border:none;background:none;padding:0;color:var(--accent);font:inherit;font-weight:600;cursor:pointer}.coverage-share{margin:.25rem 0 .5rem}table.coverage-table{width:100%;border-collapse:collapse;border:none;border-radius:0;box-shadow:none;background:none;font-size:.82rem;font-variant-numeric:tabular-nums;margin:0 0 .6rem}table.coverage-table th,table.coverage-table td{padding:.2rem 0 .2rem .5rem;border:none;background:none;white-space:nowrap}table.coverage-table th:first-child,table.coverage-table td:first-child{padding-left:0}table.coverage-table th{font-size:.72rem;font-weight:600;color:var(--muted);text-transform:none}table.coverage-table tr.sub td{color:var(--muted)}table.coverage-table tr.sub td:first-child{padding-left:.9rem}table.coverage-table tr.total td{border-top:1px solid var(--border);font-weight:600}table.breakdown{margin-top:.5rem;box-shadow:none}@media(max-width:760px){.heatmap-layout{grid-template-columns:minmax(0,1fr)}.heatmap-side{order:2}}.chips{display:flex;flex-wrap:wrap;gap:.3rem}.chip{white-space:nowrap;border-radius:999px;padding:.15rem .6rem;background:var(--accent-soft);color:var(--accent-hover);font-size:.8rem;font-weight:600}tr.inactive td{color:var(--muted)}.form.wide{max-width:640px}.form.editor{margin-bottom:1.5rem}.form h2{margin:0;font-size:1.15rem}.form fieldset{border:1px solid var(--border);border-radius:10px;padding:.85rem 1rem 1rem;margin:0;min-width:0}.form legend{padding:0 .35rem;font-size:.88rem;font-weight:600}.checkbox-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(11rem,1fr));gap:.5rem 1rem}.form label.checkbox,label.checkbox{display:flex;align-items:center;gap:.5rem;margin:0;font-weight:500;cursor:pointer}.form label.checkbox input{width:auto;accent-color:var(--accent)}.input-row{display:flex;gap:.5rem}.input-row input{flex:1;min-width:0}.btn.small{padding:.35rem .8rem;font-size:.85rem}.actions.tight{margin:0}h1{font-size:1.75rem;font-weight:700;letter-spacing:-.02em;margin:0 0 1.5rem}.cards{display:grid;grid-template-columns:repeat(auto-fit,minmax(280px,1fr));gap:1.25rem}.card{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius);padding:1.5rem;box-shadow:var(--shadow-sm);transition:box-shadow .15s ease,transform .15s ease}.card:hover{box-shadow:var(--shadow-md);transform:translateY(-1px)}.card h2{margin:0 0 .5rem;font-size:1.05rem;font-weight:600}.card .label{color:var(--muted);font-size:.78rem;font-weight:600;text-transform:uppercase;letter-spacing:.06em;margin-top:1rem}.card .value{font-size:1.75rem;font-weight:700;letter-spacing:-.02em;margin-top:.15rem}table{width:100%;border-collapse:separate;border-spacing:0;margin-top:1.25rem;background:var(--surface);border:1px solid var(--border);border-radius:var(--radius);overflow:hidden;box-shadow:var(--shadow-sm);font-size:.95rem}th,td{text-align:left;padding:.8rem 1rem;border-bottom:1px solid var(--border);vertical-align:top}thead th{background:#fafbfd;color:var(--muted);font-size:.78rem;font-weight:600;text-transform:uppercase;letter-spacing:.06em}tbody tr:last-child td{border-bottom:none}tbody tr{transition:background .1s ease}tbody tr:hover{background:#fafbfd}td.shaded,th.shaded{background:#f3f6fa}.sub{color:var(--muted);font-size:.82rem}.table-scroll{overflow-x:auto}table.compact{font-size:.88rem}.job-status{margin-top:2rem}.job-status .sub{margin-top:0}.job-status .status{white-space:nowrap}.job-status td.job-name{min-width:18rem}.job-status .job-note{margin-top:.15rem;color:var(--muted);font-size:.8rem;line-height:1.35}.job-status .job-note.job-error{color:var(--danger)}.job-status td{vertical-align:top}table.compact th,table.compact td{padding:.5rem .6rem}th.num,td.num{text-align:right;white-space:nowrap}tr.summary td{background:#f3f6fa;font-weight:600}.filters{display:flex;flex-wrap:wrap;gap:1rem;align-items:flex-end}.filters label{display:flex;flex-direction:column;gap:.35rem;font-size:.88rem;font-weight:600}.filters select,.filters input{border:1px solid var(--border);border-radius:10px;padding:.5rem .75rem;font:inherit;font-size:.95rem;font-weight:400;background:var(--surface);min-width:10rem}a{color:var(--accent);text-decoration:none;font-weight:500}a:hover{text-decoration:underline}.btn{display:inline-flex;align-items:center;justify-content:center;gap:.4rem;border:1px solid transparent;border-radius:10px;padding:.55rem 1.1rem;font:inherit;font-size:.92rem;font-weight:600;cursor:pointer;text-decoration:none;background:var(--accent);color:#fff;box-shadow:var(--shadow-sm);transition:background .15s ease,box-shadow .15s ease,transform .1s ease}.btn:hover{background:var(--accent-hover);text-decoration:none;transform:translateY(-1px);box-shadow:var(--shadow-md)}.btn:active{transform:translateY(0)}.btn.secondary{background:var(--surface);border-color:var(--border);color:var(--text)}.btn.secondary:hover{background:var(--bg)}.btn.danger{background:var(--surface);border-color:#fecaca;color:var(--danger)}.btn.danger:hover{background:var(--danger-soft)}.btn:disabled{opacity:.55;cursor:not-allowed;transform:none}.actions{display:flex;gap:.6rem;margin:1.25rem 0 2rem}.alert{border:1px solid transparent;border-radius:var(--radius);padding:.85rem 1.1rem;margin-bottom:1rem;font-size:.92rem;font-weight:500}.alert.error{background:var(--danger-soft);border-color:#fecaca;color:#991b1b}.alert.info{background:var(--accent-soft);border-color:var(--nrgi-light-green);color:var(--nrgi-dark-green)}.update-banner{display:flex;align-items:center;justify-content:space-between;gap:1rem;margin-bottom:1rem;padding:.6rem .75rem .6rem 1.1rem;background:var(--nrgi-dark-green);color:#fff;border-radius:var(--radius);font-size:.92rem;font-weight:500}.alert.success{background:var(--success-soft);border-color:#bbf7d0;color:#166534}.form{max-width:460px;display:flex;flex-direction:column;gap:1.1rem;background:var(--surface);border:1px solid var(--border);border-radius:var(--radius);padding:1.5rem;box-shadow:var(--shadow-sm)}.form label{display:block;margin-bottom:.35rem;font-size:.88rem;font-weight:600}.form input,.form textarea{width:100%;border:1px solid var(--border);border-radius:10px;padding:.55rem .75rem;font:inherit;font-size:.95rem;background:var(--surface);transition:border-color .15s ease,box-shadow .15s ease}.form input:focus,.form textarea:focus{outline:none;border-color:var(--accent);box-shadow:0 0 0 3px #006e6426}.form textarea{min-height:9rem;resize:vertical;font-family:ui-monospace,Cascadia Mono,Consolas,monospace;font-size:.88rem}dl.details{display:grid;grid-template-columns:12rem 1fr;gap:0;margin:0 0 1rem;background:var(--surface);border:1px solid var(--border);border-radius:var(--radius);box-shadow:var(--shadow-sm);overflow:hidden}dl.details dt,dl.details dd{padding:.7rem 1rem;border-bottom:1px solid var(--border);margin:0}dl.details dt{font-size:.82rem;font-weight:600;color:var(--muted);text-transform:uppercase;letter-spacing:.05em;background:#fafbfd;padding-top:.85rem}dl.details dd{white-space:pre-line}dl.details dt:nth-last-of-type(1),dl.details dd:nth-last-of-type(1){border-bottom:none}.status{display:inline-flex;align-items:center;gap:.4rem;border-radius:999px;padding:.2rem .7rem;font-size:.8rem;font-weight:600;background:var(--bg);border:1px solid var(--border);color:var(--muted)}.status:before{content:"";width:7px;height:7px;border-radius:50%;background:currentColor}.status.Running,.status.Pending{background:var(--warning-soft);border-color:#fde68a;color:var(--warning)}.status.Running:before,.status.Pending:before{animation:pulse 1.2s ease-in-out infinite}.status.Done{background:var(--success-soft);border-color:#bbf7d0;color:var(--success)}.status.Preliminary{background:var(--warning-soft);border-color:#fde68a;color:var(--warning)}.eu-year{margin-bottom:1rem}.eu-year-header{display:flex;justify-content:space-between;align-items:center;gap:1rem;flex-wrap:wrap}.eu-year-header h3{display:flex;align-items:center;gap:.6rem;margin:0}.eu-year-links{display:flex;gap:.4rem}.eu-thresholds{margin:.8rem 0 .4rem;max-width:40rem}.status.Failed{background:var(--danger-soft);border-color:#fecaca;color:var(--danger)}@keyframes pulse{0%,to{opacity:1}50%{opacity:.3}}.progress-panel{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius);padding:1.1rem 1.25rem;margin:1.25rem 0 2rem;box-shadow:var(--shadow-sm)}.progress-text{display:flex;justify-content:space-between;align-items:baseline;gap:1rem;font-size:.92rem;font-weight:500;margin-bottom:.7rem}.progress-track{position:relative;height:8px;border-radius:999px;background:var(--border);overflow:hidden}.progress-bar{height:100%;border-radius:999px;background:var(--accent);transition:width .3s ease}.progress-bar.indeterminate{position:absolute;width:35%;animation:indeterminate 1.4s ease-in-out infinite}@keyframes indeterminate{0%{left:-35%}to{left:100%}}.login-page{min-height:100vh;display:flex;align-items:center;justify-content:center;padding:1rem;background:radial-gradient(60rem 30rem at 15% -10%,rgba(0,110,100,.16),transparent 60%),radial-gradient(50rem 28rem at 110% 110%,rgba(82,214,163,.16),transparent 60%),var(--bg)}.login-card{background:var(--surface);border:1px solid var(--border);border-radius:16px;padding:2.25rem;width:100%;max-width:380px;box-shadow:var(--shadow-md)}.login-card .brand{display:flex;align-items:center;gap:.6rem;font-size:1.35rem;font-weight:700;letter-spacing:-.01em;margin-bottom:1.5rem}.login-card .form{border:none;padding:0;box-shadow:none;max-width:none}
