:root{--ink:#17231d;--muted:#64736b;--paper:#f5f3ed;--card:#fff;--green:#1d6048;--line:#dfe4de;--gold:#c59a52;--danger:#a13b32}*{box-sizing:border-box}body{margin:0;background:var(--paper);color:var(--ink);font:15px/1.5 system-ui,-apple-system,Segoe UI,sans-serif}header{min-height:72px;padding:14px max(4vw,24px);display:flex;align-items:center;justify-content:space-between;background:#fff;border-bottom:1px solid var(--line)}.brand{font:700 21px Georgia,serif;color:var(--ink);text-decoration:none}.brand span{color:var(--green)}nav{display:flex;gap:8px;flex-wrap:wrap}nav a,.button,button{display:inline-block;border:0;border-radius:8px;padding:10px 14px;background:var(--green);color:#fff;text-decoration:none;font-weight:650;cursor:pointer}nav a{background:transparent;color:var(--ink)}.main-nav a.active{background:#e3eee8;color:var(--green)}.subnav{padding:8px max(4vw,24px);background:#fbfcfa;border-bottom:1px solid var(--line)}.subnav a{padding:7px 11px;font-size:14px}main{max-width:1180px;margin:0 auto;padding:32px 24px 56px}h1,h2{font-family:Georgia,serif;margin-top:0}h1{font-size:clamp(28px,4vw,42px)}.hero,.card{background:var(--card);border:1px solid var(--line);border-radius:16px;padding:24px;box-shadow:0 8px 30px #203b2d0a}.hero{display:flex;justify-content:space-between;gap:24px;align-items:center;margin-bottom:22px}.total{font:700 32px Georgia,serif;color:var(--green)}.muted{color:var(--muted)}.small{font-size:13px}.filters,.form-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:14px}.filters{margin-bottom:20px}.form-grid .wide{grid-column:span 2}.form-grid .full{grid-column:1/-1}label{font-weight:650;display:block}input,select,textarea{margin-top:6px;width:100%;padding:11px;border:1px solid #cbd4cd;border-radius:8px;background:#fff;font:inherit}textarea{min-height:110px;resize:vertical}.check-label{display:flex;gap:8px;align-items:center;margin:14px 0}.check-label input{width:auto;margin:0}.actions{display:flex;gap:10px;flex-wrap:wrap;margin-top:20px}.secondary{background:#e6ece8!important;color:var(--ink)!important}.danger{background:var(--danger)!important}.notice{padding:13px 16px;border-radius:8px;margin-bottom:18px;background:#dceee5}.notice.error{background:#f6deda}.table-wrap{overflow:auto;background:#fff;border:1px solid var(--line);border-radius:14px}table{width:100%;border-collapse:collapse}th,td{text-align:left;padding:13px 14px;border-bottom:1px solid var(--line);white-space:nowrap}th{font-size:12px;text-transform:uppercase;letter-spacing:.06em;color:var(--muted)}td.name{white-space:normal;font-weight:700;min-width:200px}.thumb{width:64px;height:50px;border-radius:7px;object-fit:contain;background:#e5e8e5}.badge{padding:4px 8px;border-radius:99px;background:#e3eee8;color:var(--green);font-size:12px}.badge.off{background:#eee;color:#777}.gallery{display:grid;grid-template-columns:repeat(auto-fill,minmax(150px,1fr));gap:14px;margin-top:16px}.photo{position:relative}.photo img{width:100%;height:180px;object-fit:contain;border-radius:10px;background:#eef1ee}.zoomable{cursor:zoom-in}.zoomable:focus{outline:3px solid var(--gold);outline-offset:2px}.photo-viewer{width:min(94vw,1200px);height:min(92vh,900px);padding:42px 18px 18px;border:0;border-radius:14px;background:#111;box-shadow:0 24px 80px #0008}.photo-viewer::backdrop{background:#000c}.photo-viewer img{display:block;width:100%;height:100%;object-fit:contain}.photo-viewer-close{position:absolute;right:10px;top:8px;width:36px;height:36px;padding:0;border-radius:50%;background:#fff;color:#111;font-size:25px;line-height:1}.photo form{display:flex;gap:5px;margin-top:5px}.photo button{font-size:12px;padding:6px 8px}.login{max-width:440px;margin:8vh auto}footer{text-align:center;padding:24px;color:var(--muted)}
.portal-grid,.summary-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:18px}.portal-card{display:block;padding:26px;background:#fff;border:1px solid var(--line);border-radius:16px;color:var(--ink);text-decoration:none;box-shadow:0 8px 30px #203b2d0a;transition:.18s}.portal-card:hover{transform:translateY(-3px);border-color:#9ab6a8}.portal-card h2{margin:12px 0 8px}.portal-card p{color:var(--muted);min-height:45px}.portal-card strong{color:var(--green)}.portal-icon{display:grid;place-items:center;width:46px;height:46px;border-radius:12px;background:#e3eee8;color:var(--green);font-size:25px}.summary-grid{grid-template-columns:repeat(4,1fr);margin-bottom:22px}.summary-card{background:#fff;border:1px solid var(--line);border-radius:14px;padding:19px}.summary-card h2{font-size:18px;margin-bottom:8px}.metric{font:700 24px Georgia,serif;color:var(--green)}.summary-card p{margin:5px 0}.section-grid{display:grid;grid-template-columns:repeat(2,1fr);gap:20px}.section-grid .card form{display:grid;gap:12px}.section-grid button{justify-self:start}.two-cols,.period-form{display:grid;grid-template-columns:repeat(2,1fr);gap:12px}.compact-select{min-width:260px}.spaced{margin-top:22px}.annual-row{background:#fff0f4}.badge.annual{background:#f6d9e2;color:#8a334b}.period-form{grid-template-columns:2fr 1fr 1fr auto;align-items:end}.period-form button{margin-bottom:1px}.weight-layout{grid-template-columns:2fr 1fr;margin-top:20px}.weight-chart{width:100%;height:auto;background:#fbfcfa;border-radius:12px}.weight-chart line{stroke:#bdc9c2;stroke-width:1}.weight-chart polyline{fill:none;stroke:var(--green);stroke-width:4;stroke-linecap:round;stroke-linejoin:round}.weight-chart circle{fill:var(--gold);stroke:#fff;stroke-width:2}.weight-chart text{fill:var(--muted);font-size:12px}.chart-legend{display:flex;justify-content:space-between;gap:12px;margin-top:8px}.empty-state{text-align:center;padding:60px 20px;color:var(--muted)}hr{border:0;border-top:1px solid var(--line);margin:24px 0}
.table-action{display:inline-block;padding:6px 10px;border-radius:7px;background:#e3eee8;color:var(--green);font-weight:700;text-decoration:none}
.bill-identity{white-space:normal;min-width:190px}.bill-detail-button{display:block;width:max-content;margin-top:9px;padding:7px 11px;font-size:13px}.bill-action-button{white-space:nowrap;padding:8px 11px;font-size:13px}
.meter-tabs{display:flex;gap:8px;margin:-8px 0 22px}.meter-tabs a{background:#e6ece8;color:var(--ink)}.meter-tabs a.active{background:var(--green);color:#fff}.stats-help{margin-bottom:22px}.stats-help p{margin:6px 0 0;color:var(--muted)}.consumption-section{margin-bottom:22px}.section-heading{display:flex;justify-content:space-between;align-items:flex-start;gap:20px}.section-heading h2{margin-bottom:3px}.latest-metric{text-align:right}.latest-metric span{display:block;color:var(--muted);font-size:13px}.latest-metric strong{font:700 22px Georgia,serif;color:var(--green)}.consumption-charts{display:grid;grid-template-columns:1.35fr 1fr;gap:22px;margin:18px 0 24px}.chart-panel{padding:16px;border:1px solid var(--line);border-radius:12px;background:#fbfcfa}.chart-panel h3{margin:0 0 10px;font-size:15px}.consumption-line{width:100%;height:auto}.consumption-line line{stroke:#c8d2cc;stroke-width:1}.consumption-line polyline{fill:none;stroke:var(--green);stroke-width:4;stroke-linecap:round;stroke-linejoin:round}.consumption-line circle{fill:var(--gold);stroke:#fff;stroke-width:2}.consumption-line .point-value{fill:var(--ink);font-size:12px;font-weight:700}.axis-labels{display:flex;justify-content:space-between;color:var(--muted);font-size:11px}.bar-chart{display:grid;gap:12px}.bar-row{display:grid;grid-template-columns:70px 1fr minmax(105px,auto);gap:8px;align-items:center;font-size:12px}.bar-track{height:15px;background:#e6ece8;border-radius:99px;overflow:hidden}.bar-fill{height:100%;background:var(--green);border-radius:99px}.bar-fill.ongoing{background:var(--gold)}.stats-table{margin-top:4px}.ongoing-row{background:#fffbef}.trend{font-weight:700}.trend.up{color:var(--danger)}.trend.down{color:var(--green)}
.cost-filters{display:grid;grid-template-columns:1fr 1fr;gap:10px;min-width:390px}.cost-summary{margin-bottom:12px}.cost-actions{margin:0 0 22px}.year-cost-chart{height:260px;display:flex;align-items:flex-end;gap:18px;padding:18px 12px 0;border-bottom:1px solid var(--line)}.year-column{height:100%;min-width:76px;display:grid;grid-template-rows:30px 1fr 28px;align-items:end;text-align:center}.year-column strong{font-size:12px}.vertical-track{height:100%;display:flex;align-items:flex-end;justify-content:center}.vertical-bar{width:48px;min-height:4px;background:linear-gradient(var(--green),#318363);border-radius:8px 8px 0 0}.badge.warning{background:#fff1cf;color:#805b0d}.inline-delete{display:inline}.link-danger{padding:5px 7px;background:transparent;color:var(--danger);font-size:12px}.section-heading h1{margin-bottom:4px}
.import-form{display:flex;align-items:end;gap:12px;flex-wrap:wrap;margin-top:22px}.import-form label{min-width:260px}.import-form button,.import-form .button{margin:0}
.analysis-tabs{position:sticky;top:0;z-index:4;display:flex;gap:7px;overflow-x:auto;margin:0 0 22px;padding:10px;background:#f5f3edee;backdrop-filter:blur(8px)}.analysis-tabs a{flex:0 0 auto;padding:8px 11px;background:#fff;border:1px solid var(--line);color:var(--green);font-size:13px}.analysis-table{margin-top:20px}.unit-price-chart .vertical-bar{background:linear-gradient(var(--gold),#d9b879)}.fee-legend{display:flex;gap:20px;margin:14px 0;color:var(--muted);font-size:13px}.fee-legend span{display:flex;align-items:center;gap:7px}.fee-legend i{width:12px;height:12px;border-radius:3px}.fee-legend .distribution,.fee-bars .distribution{background:var(--green)}.fee-legend .sanitation,.fee-bars .sanitation{background:var(--gold)}.fee-chart{height:285px;display:flex;align-items:flex-end;gap:22px;padding:18px 12px 0;border-bottom:1px solid var(--line);overflow-x:auto}.fee-year{height:100%;min-width:120px;display:grid;grid-template-rows:34px 1fr 28px;text-align:center;align-items:end}.fee-values,.fee-bars{display:grid;grid-template-columns:1fr 1fr;gap:7px;align-items:end}.fee-values span{font-size:11px;font-weight:700}.fee-bars{height:100%}.fee-bars i{display:block;min-height:3px;border-radius:7px 7px 0 0}.tariff-table th:not(:first-child),.tariff-table td:not(:first-child){text-align:center;min-width:150px}.tariff-label{white-space:normal;min-width:180px}.tariff-values{display:grid;gap:7px}.tariff-values div{padding:7px 8px;border-radius:8px;background:#f4f7f5}.tariff-values strong,.tariff-values span{display:block}.tariff-values span{font-size:11px;color:var(--muted)}
.market-chart{display:block;width:100%;height:auto;background:#fbfcfa;border-radius:12px;margin-top:12px}.market-chart line{stroke:#d6ddd9;stroke-width:1}.market-chart polyline{fill:none;stroke-width:3.5;stroke-linecap:round;stroke-linejoin:round}.market-chart text{fill:var(--muted);font-size:11px}.market-chart .axis-x{font-size:10px}.market-legend{display:flex;gap:20px;flex-wrap:wrap;margin:14px 0;color:var(--muted);font-size:13px}.market-legend span{display:flex;align-items:center;gap:7px}.market-legend i{display:block;width:13px;height:13px;border-radius:3px}
@media(max-width:900px){.summary-grid{grid-template-columns:repeat(2,1fr)}.portal-grid{grid-template-columns:1fr}.weight-layout,.consumption-charts{grid-template-columns:1fr}}
@media(max-width:800px){header{align-items:flex-start;flex-direction:column}.filters,.form-grid{grid-template-columns:1fr 1fr}.hero{align-items:flex-start;flex-direction:column}.section-grid{grid-template-columns:1fr}.period-form{grid-template-columns:1fr 1fr}}
@media(max-width:520px){main{padding:22px 14px}.filters,.form-grid,.summary-grid,.two-cols,.period-form,.cost-filters{grid-template-columns:1fr}.cost-filters{min-width:0}.form-grid .wide{grid-column:auto}nav a{padding:8px}.hero{padding:18px}.chart-legend{font-size:12px;flex-direction:column}.section-heading{flex-direction:column}.year-cost-chart{overflow-x:auto}}
.missing-filters{border:1px solid #d8dfdb;border-radius:8px;padding:9px 12px;display:flex;gap:14px;align-items:center}.missing-filters legend{font-size:12px;color:#65736e;padding:0 4px}.missing-filters label{display:flex;gap:6px;align-items:center;white-space:nowrap}.missing-filters input{width:auto}.tabs{display:flex;gap:8px;margin:20px 0}.inline-form{display:flex;gap:10px;max-width:600px;margin-bottom:20px}.inline-form input{flex:1}.reference-list{display:grid;gap:8px}.reference-list form{display:flex;gap:8px;align-items:center;padding:10px;background:#f6f8f6;border-radius:8px}.reference-list input[name=value]{flex:1}.inactive-value{text-decoration:line-through;color:#7c8783}@media(max-width:760px){.missing-filters{width:100%;flex-wrap:wrap}.reference-list form,.inline-form{flex-wrap:wrap}.reference-list input[name=value],.inline-form input{flex-basis:100%}}


