:root{--background:#f3f0ea;--panel:#fffaf2;--ink:#253142;--muted:#7a817f;--line:#e1dbd2;--production:#55a968;--production-strong:#2f8f4a;--consumption:#bd5a4d;--consumption-strong:#a84236;--sun-strong:#d69b2d;--focus:#20324a}*{box-sizing:border-box}body{color:var(--ink);-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;font-feature-settings:"cv11", "ss01";background:radial-gradient(circle at 0 0,#55a9681f,#0000 32rem),linear-gradient(135deg,#f5f1ea 0%,#ede8de 100%);margin:0;font-family:Inter,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,sans-serif;font-size:15px;line-height:1.5}button,input,select{font:inherit}button{border:1px solid var(--focus);background:var(--focus);color:#fff;cursor:pointer;border-radius:.5rem;padding:.5rem .85rem;font-size:.875rem;font-weight:500}button:disabled{cursor:wait;opacity:.6}.button-secondary{border-color:var(--line);color:var(--ink);background:#fff}input,select{border:1px solid var(--line);color:var(--ink);background:#fff;border-radius:.5rem;padding:.45rem .7rem;font-size:.875rem}.page-shell{width:100%;max-width:none;margin:0;padding:2rem}.app-header{grid-template-columns:1fr auto 1fr;align-items:center;gap:1rem;width:100%;padding:1.25rem 2rem 0;display:grid}.app-header__meta{color:var(--muted);text-align:center;flex-wrap:wrap;justify-content:center;gap:.5rem 1.5rem;display:flex}.app-header__meta strong{color:var(--ink);font-weight:600}.app-tabs{gap:.35rem;width:auto;max-width:none;margin:0;padding:0;display:flex}.app-tabs__button{color:var(--muted);background:0 0;border-color:#0000}.app-tabs__button--active{background:var(--focus);border-color:var(--focus);color:#fff}.lifetime-production{color:var(--muted);text-align:right;justify-items:end;gap:.05rem;line-height:1.25;display:grid}.lifetime-production__label{letter-spacing:.06em;text-transform:uppercase;font-size:.72rem;font-weight:700}.lifetime-production__value{color:var(--production-strong);font-size:1.05rem;font-weight:700}.lifetime-production__detail{font-size:.78rem}.dashboard-header{align-items:center;gap:1rem;margin-bottom:1.5rem;display:flex}.dashboard-header__status{color:var(--muted);flex-wrap:wrap;gap:.5rem 1rem;display:flex}.dashboard-header .toolbar{margin-left:auto}.toolbar{flex-wrap:wrap;justify-content:flex-end;align-items:center;gap:.5rem;display:flex}.month-picker{align-items:center;gap:.35rem;display:inline-flex}.month-picker__step{border-color:var(--line);color:var(--ink);background:#fff;justify-content:center;align-items:center;width:2.25rem;height:2.25rem;padding:0;font-size:1.1rem;line-height:1;display:inline-flex}.month-picker__step:hover:not(:disabled),.month-picker__step:focus-visible{border-color:#25314261}.summary-grid{grid-template-columns:repeat(4,minmax(0,1fr));gap:1rem;margin-bottom:1rem;display:grid}.summary-grid--five{grid-template-columns:repeat(5,minmax(0,1fr))}.summary-card,.panel{background:#fffaf2db;border:1px solid #25314214;border-radius:1rem;box-shadow:0 1.25rem 2.5rem #25314214}.summary-card{min-height:6.5rem;padding:1.1rem 1.2rem}.summary-card--dual{flex-direction:column;justify-content:center;gap:.55rem;padding:.85rem 1.2rem;display:flex}.summary-card--dual .summary-card__row{justify-content:space-between;align-items:baseline;gap:.75rem;display:flex}.summary-card__row-end{text-align:right;flex-direction:column;align-items:flex-end;display:flex}.summary-card__row-detail{color:var(--muted);margin-top:.1rem;font-size:.72rem}.summary-card__value--compact{margin-top:0;font-size:1.2rem}.summary-card__divider{border-top:1px solid #25314214;height:0}.summary-card--balance{flex-direction:column;gap:.6rem;padding:1rem 1.2rem;display:flex}.summary-card__head{gap:.15rem;display:grid}.balance-breakdown{border-top:1px solid #25314214;flex-direction:column;margin:0;padding:.55rem 0 0;font-size:.85rem;list-style:none;display:flex}.balance-breakdown__row{grid-template-columns:4rem 1fr auto;align-items:baseline;gap:.5rem;padding:.18rem 0;display:grid}.balance-breakdown__label{color:var(--muted);letter-spacing:.04em;text-transform:uppercase;font-size:.72rem;font-weight:600}.balance-breakdown__kwh{color:var(--muted)}.balance-breakdown__eur{font-variant-numeric:tabular-nums;text-align:right;font-weight:600}.balance-breakdown__eur--green{color:var(--production-strong)}.balance-breakdown__eur--red{color:var(--consumption-strong)}.balance-breakdown__eur--sun,.summary-card__value--sun{color:var(--sun-strong)}.summary-card__value-emoji{vertical-align:middle;margin-right:.45rem;font-size:1.15rem}.summary-card__footer-row{border-top:1px solid #25314214;justify-content:space-between;align-items:baseline;gap:.75rem;padding-top:.55rem;display:flex}.summary-card__footer-label{color:var(--muted);letter-spacing:.06em;text-transform:uppercase;font-size:.7rem;font-weight:600}.summary-card__footer-end{text-align:right;flex-direction:column;align-items:flex-end;gap:.1rem;display:flex}.summary-card__footer-value{font-variant-numeric:tabular-nums;font-size:.95rem;font-weight:600}.summary-card__footer-detail{color:var(--muted);font-size:.72rem}.record-card{background:#fffaf28c;border:1px solid #2531420f;border-radius:.75rem;flex-direction:column;gap:.4rem;padding:.7rem .9rem;display:flex}.summary-grid>.record-card{grid-row:2}.record-card__label{color:var(--muted);letter-spacing:.06em;text-transform:uppercase;font-size:.65rem;font-weight:600}.record-card__rows{flex-direction:column;gap:.25rem;display:flex}.record-card__row{justify-content:space-between;align-items:baseline;gap:.5rem;display:flex}.record-card__value{font-variant-numeric:tabular-nums;font-size:.8rem;font-weight:600}.record-card__value--green{color:var(--production-strong)}.record-card__value--red{color:var(--consumption-strong)}.record-card__value--sun{color:var(--sun-strong)}.record-card__detail{color:var(--muted);text-align:right;font-size:.75rem}.summary-card__label{color:var(--muted);letter-spacing:.06em;text-transform:uppercase;font-size:.72rem;font-weight:600}.summary-card__value{letter-spacing:-.02em;margin-top:.4rem;font-size:1.5rem;font-weight:600}.summary-card__value--green{color:var(--production-strong)}.summary-card__value--red{color:var(--consumption-strong)}.summary-card__detail{color:var(--muted);margin-top:.35rem;font-size:.82rem}.panel{padding:1.25rem}.panel+.panel{margin-top:1rem}.panel--error{color:var(--consumption-strong);border-color:#bd5a4d59}.panel__header{justify-content:space-between;align-items:baseline;margin-bottom:1rem;display:flex}.panel__header h2{margin:0;font-size:1.15rem}.panel__header span{color:var(--muted)}.chart-frame{min-width:0}.chart-frame .recharts-wrapper,.chart-frame .recharts-surface,.chart-frame .recharts-wrapper :focus{outline:none}.chart-info{display:inline-flex;position:relative}.chart-info__button{color:var(--muted);cursor:help;background:0 0;border:1px solid #2531423d;border-radius:50%;justify-content:center;align-items:center;width:1.35rem;height:1.35rem;padding:0;font-size:.76rem;font-weight:700;line-height:1;display:inline-flex}.chart-info__button:hover,.chart-info__button:focus-visible{color:var(--text);border-color:#25314285}.chart-info .chart-info__tooltip{color:#fff;opacity:0;pointer-events:none;z-index:10;background:#1e2a36;border-radius:.4rem;width:min(22rem,72vw);padding:.6rem .75rem;font-size:.78rem;font-weight:400;line-height:1.35;transition:opacity .12s,transform .12s;position:absolute;bottom:calc(100% + .5rem);right:0;transform:translateY(.25rem);box-shadow:0 .75rem 1.5rem #25314233}.chart-info:hover .chart-info__tooltip,.chart-info:focus-within .chart-info__tooltip{opacity:1;transform:translateY(0)}.month-range{padding:.2rem 0 0}.month-range__track{background:#2531421c;border:1px solid #25314247;height:1.55rem;margin-left:3.85rem;margin-right:1rem;position:relative}.month-range__selection{background:#25314242;position:absolute;top:0;bottom:0}.month-range__selection:before,.month-range__selection:after{content:"";background:#253142b8;width:.38rem;position:absolute;top:-1px;bottom:-1px}.month-range__selection:before{left:0}.month-range__selection:after{right:0}.month-range__label{color:var(--text);white-space:nowrap;font-size:.7rem;font-weight:600;position:absolute;top:50%}.month-range__label--start{left:.55rem;transform:translateY(-50%)}.month-range__label--end{right:.55rem;transform:translateY(-50%)}.chart-legend{color:var(--muted);flex-wrap:wrap;justify-content:flex-end;align-items:center;gap:.65rem;font-size:.8rem;display:flex}.chart-legend__item{align-items:center;gap:.25rem;display:inline-flex}.chart-legend__swatch{border-radius:2px;width:.72rem;height:.72rem;display:inline-block}.chart-tooltip{color:#fff;background:#1e2a36;border-radius:.4rem;gap:.12rem;min-width:10rem;padding:.55rem .7rem;font-size:.82rem;line-height:1.35;display:grid;box-shadow:0 .75rem 1.5rem #25314233}.chart-tooltip strong{font-size:.84rem}.year-heatmap{position:relative;overflow-x:auto}.heatmap-body{grid-template-columns:max-content max-content;align-items:start;gap:.5rem;min-width:max-content;display:grid}.heatmap-weekdays{color:var(--muted);grid-template-rows:repeat(7,18px);gap:3px;margin-top:1.55rem;font-size:.75rem;display:grid}.heatmap-weekdays span{align-items:center;height:18px;display:flex}.heatmap-months{gap:.55rem;min-width:max-content;display:flex}.heatmap-month{--weeks:5;width:calc((var(--weeks) * 21px) - 3px)}.heatmap-month__label{color:var(--muted);text-align:center;margin-bottom:.35rem;font-size:.76rem}.heatmap-month__grid{grid-template-columns:repeat(var(--weeks), 18px);grid-template-rows:repeat(7,18px);gap:3px;display:grid}.heatmap-cell{outline-offset:2px;border-radius:3px;width:18px;height:18px}.heatmap-cell:focus-visible{outline:2px solid var(--focus)}.heatmap-tooltip{color:#fff;pointer-events:none;z-index:5;background:#1e2a36;border-radius:.4rem;gap:.12rem;min-width:10.25rem;padding:.55rem .7rem;font-size:.82rem;line-height:1.35;display:grid;position:absolute;top:0;left:0;box-shadow:0 .75rem 1.5rem #25314233}.heatmap-tooltip--above{transform:translate(-50%,calc(-100% - .45rem))}.heatmap-tooltip--below{transform:translate(-50%,calc(18px + .45rem))}.heatmap-tooltip strong{font-size:.84rem}.heatmap-legend{color:var(--muted);flex-wrap:wrap;align-items:center;gap:.5rem;margin-top:1.1rem;font-size:.82rem;display:flex}.heatmap-legend__item{align-items:center;gap:.25rem;display:inline-flex}.heatmap-legend__swatch{border-radius:2px;width:.72rem;height:.72rem;display:inline-block}.year-table-wrap{overflow-x:auto}.year-table{border-collapse:collapse;width:100%;min-width:42rem}.year-table th,.year-table td{border-bottom:1px solid var(--line);text-align:left;vertical-align:middle;padding:.55rem .85rem}.year-table th{color:var(--muted);letter-spacing:.06em;text-transform:uppercase;font-size:.75rem;line-height:1.2}.year-table th:not(:first-child),.year-table td.year-table__number{text-align:right}.year-table td.year-table__number{font-variant-numeric:tabular-nums}.year-table__number--green{color:var(--production-strong)}.year-table__number--red{color:var(--consumption-strong)}.year-table__number--sun{color:var(--sun-strong)}@media (width<=900px){.app-header{grid-template-columns:1fr}.app-header__meta{text-align:left;justify-content:flex-start}.lifetime-production{text-align:left;justify-items:start}.dashboard-header{flex-direction:column;align-items:flex-start}.dashboard-header .toolbar{margin-left:0}.toolbar{justify-content:flex-start}.summary-grid{grid-template-columns:repeat(2,minmax(0,1fr))}.summary-grid>.record-card{grid-row:auto}}@media (width<=700px){.panel__header{flex-direction:column;align-items:flex-start;gap:.55rem}.panel__header h2{line-height:1.25}.chart-frame{-webkit-overflow-scrolling:touch;margin-left:-.25rem;margin-right:-.25rem;padding:0 .25rem .35rem;overflow-x:auto}.chart-frame .recharts-responsive-container{min-width:42rem}.chart-frame--efficiency .recharts-responsive-container{min-width:34rem}.chart-frame--interval .recharts-responsive-container,.chart-frame--interval .month-range{min-width:56rem}.chart-legend{justify-content:flex-start}}@media (width<=560px){.app-header{flex-direction:column;align-items:flex-start;padding:1rem 1rem 0;display:flex}.page-shell{padding:1rem}.dashboard-header{gap:.75rem;margin-bottom:1rem}.toolbar,.month-picker{align-items:stretch;width:100%}.month-picker{grid-template-columns:2.25rem minmax(0,1fr) minmax(5.25rem,.6fr) 2.25rem;display:grid}.toolbar>button{width:100%}.summary-grid{grid-template-columns:1fr}.summary-grid__item--totals{order:1}.summary-grid__item--record-month{order:2}.summary-grid__item--irradiance{order:3}.summary-grid__item--record-sun{order:4}.summary-grid__item--max-production{order:5}.summary-grid__item--record-day-production{order:6}.summary-grid__item--monthly-balance{order:7}.summary-grid__item--record-balance{order:8}.summary-card,.panel{border-radius:.85rem}.summary-card{min-height:auto}.summary-card__value{font-size:1.35rem}.summary-card__value--compact{font-size:1.15rem}.balance-breakdown__row{grid-template-columns:3.5rem minmax(0,1fr) auto}}
