.hidden{display:none!important}*,:before,:after{box-sizing:border-box;margin:0;padding:0}:root{--color-bg:#fafbfd;--color-surface:#fff;--color-surface-raised:#fff;--color-primary:#6366f1;--color-primary-soft:#eef2ff;--color-primary-vivid:#4f46e5;--color-accent:#10b981;--color-accent-soft:#ecfdf5;--color-text:#0f172a;--color-text-secondary:#475569;--color-text-tertiary:#94a3b8;--color-border:#f1f5f9;--color-border-subtle:#e2e8f0;--radius:16px;--radius-sm:10px;--radius-xs:6px;--shadow-xs:0 1px 2px rgba(0,0,0,.04);--shadow:0 2px 8px rgba(0,0,0,.04), 0 1px 2px rgba(0,0,0,.03);--shadow-md:0 4px 16px rgba(0,0,0,.06), 0 2px 4px rgba(0,0,0,.03);--shadow-lg:0 8px 32px rgba(0,0,0,.08), 0 2px 8px rgba(0,0,0,.04);--transition:.2s cubic-bezier(.4, 0, .2, 1)}body{background:var(--color-bg);color:var(--color-text);-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;font-family:Inter,-apple-system,BlinkMacSystemFont,Segoe UI,system-ui,Roboto,Noto Sans,Ubuntu,Cantarell,Helvetica Neue,sans-serif;line-height:1.65}main{max-width:880px;margin:0 auto;padding:3rem 2rem 5rem}h1{letter-spacing:-.03em;color:var(--color-text);margin-bottom:2.5rem;font-size:1.75rem;font-weight:700}h1:after{content:"";background:linear-gradient(135deg, var(--color-primary), var(--color-accent));border-radius:2px;width:40px;height:3px;margin-top:.75rem;display:block}h2{letter-spacing:.06em;text-transform:uppercase;color:var(--color-text-tertiary);margin-bottom:.75rem;font-size:.8rem;font-weight:600}.csv-upload,.battery-config{background:var(--color-surface-raised);border:1px solid var(--color-border);border-radius:var(--radius);box-shadow:var(--shadow);transition:box-shadow var(--transition);margin-bottom:1.25rem;padding:2rem}.csv-upload:hover,.battery-config:hover{box-shadow:var(--shadow-md)}.csv-upload label{color:var(--color-text);margin-bottom:.75rem;font-size:.95rem;font-weight:600;display:block}.csv-upload input[type=file]{border:2px dashed var(--color-border-subtle);border-radius:var(--radius-sm);background:var(--color-bg);width:100%;color:var(--color-text-secondary);cursor:pointer;transition:all var(--transition);padding:1.25rem 1.5rem;font-size:.9rem;display:block}.csv-upload input[type=file]:hover{border-color:var(--color-primary);background:var(--color-primary-soft)}.upload-hint{color:var(--color-text-tertiary);margin-top:.75rem;font-size:.8rem;line-height:1.5}.upload-error{color:#b91c1c;border-radius:var(--radius-sm);background:#fef2f2;border:1px solid #fecaca;margin-top:.75rem;padding:.75rem 1rem;font-size:.85rem;line-height:1.5}.battery-count{align-items:center;gap:1rem;margin-bottom:1.75rem;font-size:.95rem;font-weight:600;display:flex}.battery-count input{width:80px}.config-grid{grid-template-columns:1fr 1fr;align-items:center;gap:.75rem 1.5rem;max-width:500px;display:grid}.config-grid label{color:var(--color-text-secondary);font-size:.85rem;font-weight:500}input[type=number]{border:1.5px solid var(--color-border-subtle);border-radius:var(--radius-xs);background:var(--color-bg);width:100%;color:var(--color-text);transition:all var(--transition);outline:none;padding:.6rem .75rem;font-family:inherit;font-size:.9rem;font-weight:500}input[type=number]:hover{border-color:#cbd5e1}input[type=number]:focus{border-color:var(--color-primary);background:var(--color-surface);box-shadow:0 0 0 3px rgba(99,102,241,.12)}.advanced{border-top:1px solid var(--color-border);margin-top:1.5rem;padding-top:1.25rem}.advanced summary{cursor:pointer;color:var(--color-primary);-webkit-user-select:none;user-select:none;transition:color var(--transition);letter-spacing:.01em;font-size:.85rem;font-weight:500}.advanced summary:hover{color:var(--color-primary-vivid)}.advanced .config-grid{margin-top:1rem}.results{margin-top:2.5rem}.summary{background:var(--color-surface-raised);border:1px solid var(--color-border);border-radius:var(--radius);box-shadow:var(--shadow);margin-bottom:2rem;padding:2rem}.summary h2{margin-bottom:.4rem}.summary h2:not(:first-child){border-top:1px solid var(--color-border);margin-top:2rem;padding-top:1.5rem}.summary p{color:var(--color-text-secondary);margin-bottom:.35rem;font-size:.9rem;line-height:1.7}.yearly-savings{letter-spacing:-.03em;background:linear-gradient(135deg,#10b981,#059669);-webkit-text-fill-color:transparent;-webkit-background-clip:text;background-clip:text;margin-bottom:.25rem;font-weight:700;line-height:1.2;font-size:2.75rem!important}.profit-15y{font-weight:600;color:var(--color-text)!important;font-size:1rem!important}.results>h2{margin-top:2.5rem;margin-bottom:.75rem}.table-wrap{-webkit-overflow-scrolling:touch;border:1px solid var(--color-border);border-radius:var(--radius);box-shadow:var(--shadow-xs);width:100vw;max-width:1100px;margin-bottom:1rem;margin-left:50%;overflow-x:auto;transform:translate(-50%)}table{border-collapse:separate;border-spacing:0;background:var(--color-surface);width:100%;font-size:.82rem}th,td{text-align:left;border-bottom:1px solid var(--color-border);padding:.65rem .85rem}th{background:var(--color-bg);text-transform:uppercase;letter-spacing:.05em;color:var(--color-text-tertiary);white-space:nowrap;font-size:.7rem;font-weight:600}td{font-variant-numeric:tabular-nums;color:var(--color-text-secondary);white-space:nowrap;font-weight:450}tbody tr{transition:background var(--transition)}tbody tr:hover{background:var(--color-primary-soft)}tbody tr.selected{background:var(--color-primary-soft);font-weight:600}tbody tr:last-child td{border-bottom:none}tr.totals td{background:var(--color-bg);border-top:2px solid var(--color-border-subtle);color:var(--color-text);font-weight:600}.chart-container{background:var(--color-surface-raised);border:1px solid var(--color-border);border-radius:var(--radius);box-shadow:var(--shadow);margin-bottom:1.25rem;padding:2rem}.chart-container h3{color:var(--color-text);margin-bottom:.75rem;font-size:.95rem;font-weight:600}.chart{width:100%;height:auto;display:block}.chart-legend{flex-wrap:wrap;gap:1.25rem;margin-bottom:.75rem;display:flex}.legend-item{color:var(--color-text-tertiary);align-items:center;gap:.4rem;font-size:.8rem;font-weight:500;display:flex}.legend-swatch{border-radius:3px;width:10px;height:10px;display:inline-block}.chart-zoom{border-top:1px solid var(--color-border);margin-top:1.25rem;padding-top:1rem}.chart-zoom-label{text-align:center;color:var(--color-text-tertiary);font-variant-numeric:tabular-nums;margin-bottom:.75rem;font-size:.8rem;font-weight:500;display:block}.chart-zoom-sliders{align-items:center;gap:1.25rem;display:flex}.chart-zoom-sliders input[type=range]{appearance:none;background:var(--color-border-subtle);height:4px;transition:background var(--transition);border-radius:2px;outline:none;flex:1}.chart-zoom-sliders input[type=range]:hover{background:#cbd5e1}.chart-zoom-sliders input[type=range]::-webkit-slider-thumb{appearance:none;background:var(--color-primary);cursor:pointer;border:3px solid var(--color-surface);width:20px;height:20px;box-shadow:var(--shadow), 0 0 0 1px rgba(99,102,241,.15);transition:transform var(--transition), box-shadow var(--transition);border-radius:50%}.chart-zoom-sliders input[type=range]::-webkit-slider-thumb:hover{box-shadow:var(--shadow-md), 0 0 0 1px rgba(99,102,241,.25);transform:scale(1.15)}.chart-zoom-sliders input[type=range]::-moz-range-thumb{background:var(--color-primary);cursor:pointer;border:3px solid var(--color-surface);width:20px;height:20px;box-shadow:var(--shadow), 0 0 0 1px rgba(99,102,241,.15);border-radius:50%}@media (width<=640px){main{padding:2rem 1.25rem 3rem}h1{font-size:1.35rem}.csv-upload,.battery-config,.summary,.chart-container{padding:1.5rem}.config-grid{grid-template-columns:1fr;max-width:100%}.battery-count{flex-direction:column;align-items:flex-start;gap:.5rem}table{font-size:.72rem}th,td{padding:.45rem .55rem}.yearly-savings{font-size:2rem!important}}