/* ── HP Solar Systems — typewriter ledger design system (monochrome) ────── */
:root{
  --ink:#141414;
  --muted:#6b6b68;
  --muted-2:#8a8a86;
  --bg:#ffffff;
  --panel:#f5f5f4;
  --line:#d9d9d6;
  --dotted:#c9c9c5;
  --border-strong:#bcbcb7;
  --mono:'IBM Plex Mono','Courier New',Courier,monospace;
  --sans:'Inter',-apple-system,'Segoe UI',Arial,sans-serif;
  --surface:#FFFFFF;
}
*{box-sizing:border-box;margin:0;padding:0}
html{scroll-behavior:smooth}
body{font-family:var(--sans);color:var(--ink);background:var(--bg);line-height:1.55;font-size:15px}
.wrap{max-width:1040px;margin:0 auto;padding:0 24px}
a{color:var(--ink)}
h1,h2{font-family:var(--sans);font-weight:700;letter-spacing:-.02em;color:var(--ink)}
img{max-width:100%;display:block}

.preview-banner{background:var(--ink);color:#fff;text-align:center;font-family:var(--mono);
  font-size:11px;letter-spacing:.5px;padding:6px 10px}

/* ── Top preview declaration bar — sits above everything; a separate thing
   from the (currently unused) .preview-banner footer label ─────────────── */
.preview-declaration{background:#2B2B26;color:#fff;text-align:center;font-family:var(--mono);
  font-size:10.5px;font-weight:500;letter-spacing:.14em;text-transform:uppercase;
  padding:7px 10px;border-bottom:2px solid var(--ink)}

/* ── Trust strip — site header area ──────────────────────────────────────── */
.trust-strip{background:var(--ink)}
.trust-strip-row{display:flex;flex-wrap:wrap;justify-content:space-between;align-items:center;
  gap:4px 16px;padding:6px 0;font-family:var(--mono);font-size:10px;letter-spacing:.1em;
  color:#fff;text-transform:uppercase}
.trust-right{font-style:italic;text-transform:none;letter-spacing:.02em;color:rgba(255,255,255,.72)}

/* ══════════════════════════════════════════════════════════════════════
   DESIGN SYSTEM — component species (a–h)
   Every interactive/structural element on the site is exactly one of
   these. Page-specific sections below apply these classes and only add
   layout/spacing context — they must not redefine shape, radius, or
   border treatment ad hoc.
   ══════════════════════════════════════════════════════════════════════ */

/* (a) NAV CHIP — mono 11px, 1px border, radius 6px. Contact = same chip,
   black-filled, white text (the one emphasized nav item). */
.nav-chip{font-family:var(--mono);font-size:11px;border:1px solid var(--border-strong);
  border-radius:6px;padding:7px 13px;color:var(--muted);background:transparent;
  text-decoration:none;transition:background .12s}
.nav-chip:hover{background:var(--panel)}
.nav-cta{background:var(--ink);color:#fff;border-color:var(--ink)}
.nav-cta:hover{background:#333}

/* (b) PRIMARY BUTTON / (c) SECONDARY BUTTON — same size/shape, radius 7px */
.btn-solid,.btn-line{display:inline-block;font-family:var(--mono);font-size:12.5px;
  font-weight:600;letter-spacing:.5px;text-decoration:none;text-transform:uppercase;
  text-align:center;cursor:pointer;border-radius:7px;padding:13px 24px;
  border:1px solid var(--ink);transition:background .12s}
.btn-solid{background:var(--ink);color:#fff}
.btn-solid:hover{background:#333}
.btn-line{background:transparent;color:var(--ink);border-color:var(--border-strong)}
.btn-line:hover{background:var(--panel)}
.btn-solid.full{display:block;width:100%;margin-top:14px}
.btn-solid:disabled{background:#bdbdbb;border-color:#bdbdbb;cursor:not-allowed}

/* (d) TITLED PANEL — grey surface, 1px border-strong, radius 10px; header
   row = 7px black square marker + mono 12px w600 title + 1px underline */
.titled-panel{border:1px solid var(--border-strong);border-radius:10px;background:var(--panel);
  padding:12px 16px 14px;margin-top:22px}
.titled-panel-head{display:flex;align-items:center;gap:8px;font-family:var(--mono);font-size:12px;
  font-weight:600;letter-spacing:.06em;color:var(--ink);text-transform:uppercase;
  padding-bottom:10px;margin-bottom:12px;border-bottom:1px solid var(--border-strong)}
.tp-marker{width:7px;height:7px;flex-shrink:0;background:var(--ink)}
.titled-panel .ledger{border-top:none}

/* Collapsible toggle row — replaces titled-panel-head for the manual-entry
   and SMS/call panels; dotted rules per the ledger-row language, not the
   panel's solid underline, since it's an interactive control, not a label */
.ws-toggle{display:flex;align-items:center;gap:8px;width:100%;background:none;
  border:none;border-top:1px dotted var(--dotted);border-bottom:1px dotted var(--dotted);
  cursor:pointer;font-family:var(--mono);font-size:11px;letter-spacing:.06em;
  color:var(--ink);text-transform:uppercase;padding:10px 0;text-align:left}
.ws-toggle-label{flex:1}
.ws-toggle-icon{font-family:var(--mono);font-size:15px;font-weight:600;color:var(--muted);line-height:1}
.ws-collapse{max-height:0;overflow:hidden;transition:max-height .25s ease}
.ws-collapse.open{max-height:600px}
.ws-skip-link{display:block;font-family:var(--mono);font-size:11px;color:var(--muted);
  text-decoration:none;margin:14px 0}
.ws-skip-link:hover{text-decoration:underline;color:var(--ink)}

/* (e) LEDGER ROW — label left (mono, secondary), value right (mono, dark,
   w600), 1px dotted row separators */
.ledger{border-top:1px solid var(--border-strong)}
.ledger .row{display:flex;justify-content:space-between;align-items:flex-start;gap:16px;
  padding:7px 0;border-bottom:1px dotted var(--dotted)}
.ledger .row:last-child{border-bottom:1px solid var(--border-strong)}
.ledger .label{font-family:var(--mono);color:var(--muted);font-size:14px;flex:1}
.ledger .value{font-family:var(--mono);color:var(--ink);font-weight:600;text-align:right;flex-shrink:0;overflow-wrap:break-word;max-width:100%}
.ledger .value.num{font-size:13.5px}
.ledger .value.check{font-size:15px;font-weight:700}

/* System-size override — editable inline in an otherwise-readonly ledger row */
.qkwp-value{display:flex;flex-direction:column;align-items:flex-end;gap:3px}
.qkwp-io{display:flex;align-items:baseline;gap:4px}
.qkwp-io input{width:52px;font:inherit;color:inherit;text-align:right;border:none;
  border-bottom:1px solid var(--border-strong);background:transparent;padding:0 0 1px}
.qkwp-io input:focus{outline:none;border-bottom-color:var(--ink)}
.qkwp-reset{font-family:var(--mono);font-size:10.5px;font-weight:500;color:var(--muted);text-decoration:none}
.qkwp-reset:hover{text-decoration:underline;color:var(--ink)}

/* (f) REFERENCE ROW — ledger row where the value is a link + mono "↗";
   whole row clickable; no button styling on links */
.ref-row{color:inherit;text-decoration:none;cursor:pointer;transition:background .12s}
.ref-row:hover{background:var(--panel)}
.ref-row:hover .s-body{text-decoration:underline}
.ref-row:hover .ext-arrow{color:var(--ink)}
.ext-arrow{font-family:var(--mono);font-size:11px;color:var(--muted);margin-left:2px}
.ref-list .value.num{color:var(--muted);font-weight:500}

/* (g) OR DIVIDER — rule / bordered mono "OR" chip, radius 4px / rule */
.or-divider{display:flex;align-items:center;gap:10px;margin:20px 0}
.or-divider::before,.or-divider::after{content:"";flex:1;border-top:1px solid var(--border-strong)}
.or-divider span{font-family:var(--mono);font-size:11px;letter-spacing:.12em;color:var(--muted);
  border:1px solid var(--border-strong);border-radius:4px;padding:3px 11px;background:var(--surface)}

/* (h) STAT CELL — bordered card divided by 1px hairlines; number mono
   ~22px w500 dark; label mono 10px letter-spaced muted */
.stat-strip{display:flex;border:1px solid var(--border-strong);border-radius:8px;overflow:hidden}
.stat-cell{flex:1;text-align:center;padding:14px 10px;border-left:1px solid var(--border-strong)}
.stat-cell:first-child{border-left:none}
.stat-num{display:block;font-family:var(--mono);font-size:22px;font-weight:500;color:var(--ink)}
.stat-label{display:block;font-family:var(--mono);font-size:10px;letter-spacing:.08em;
  color:var(--muted);text-transform:uppercase;margin-top:4px}

/* ── Section markers / numbering ──────────────────────────────────────── */
.section-marker{font-family:var(--mono);font-size:11px;letter-spacing:2px;color:var(--muted);
  margin-bottom:10px;text-transform:uppercase}
.section-intro{color:var(--muted);max-width:640px;margin-bottom:28px}
.placeholder-note{font-style:italic;font-size:13px}

/* ── Header / masthead ────────────────────────────────────────────────── */
header{border-bottom:1px solid var(--border-strong);position:sticky;top:0;background:rgba(255,255,255,.92);
  backdrop-filter:blur(6px);z-index:100}

/* ── Ticker: slim strip between 1px rules under the masthead ─────────── */
.ticker{border-bottom:1px solid var(--border-strong);background:#fff}
.ticker-row{display:flex;flex-wrap:wrap;justify-content:space-between;align-items:center;
  gap:2px 16px;padding:8px 0;
  font-family:var(--mono);font-size:10px;letter-spacing:.16em;color:var(--muted);text-transform:uppercase}
.nav{display:flex;align-items:center;justify-content:space-between;padding:16px 24px}
.wordmark{display:flex;flex-direction:column;line-height:1.2}
.wm-main{font-family:var(--mono);font-weight:500;font-size:20px;letter-spacing:.1em}
.wm-tag{font-family:var(--mono);font-size:10px;color:var(--muted);letter-spacing:.22em;margin-top:4px}
.wordmark.small{font-family:var(--mono);font-weight:500;font-size:13px;letter-spacing:.1em}
.nav-toggle{display:none;background:none;border:1px solid var(--border-strong);font-size:18px;padding:4px 10px;cursor:pointer}
.nav-links{display:flex;gap:10px;align-items:center}

/* ── Hero ─────────────────────────────────────────────────────────────── */
.hero{padding:64px 0 0}
.hero-headline{font-family:var(--mono);font-size:26px;font-weight:500;line-height:1.35;
  color:var(--ink);margin-bottom:18px}
.hero-headline .muted-dot{color:var(--muted)}
.cursor{display:inline-block;width:11px;height:24px;background:var(--ink);margin-left:4px;
  vertical-align:text-bottom;animation:blink 1s steps(1) infinite}
@keyframes blink{0%,49%{opacity:1}50%,100%{opacity:0}}
@media (prefers-reduced-motion:reduce){.cursor{animation:none;opacity:1}}
.hero-sub{color:var(--muted);max-width:560px;font-size:16px;margin-bottom:26px}
.hero-sub::before{content:"";display:inline-block;width:26px;height:1px;background:var(--ink);
  vertical-align:middle;margin-right:10px}
.hero-btns{display:flex;gap:12px;margin-bottom:36px}

.hero-stats{max-width:340px;margin-bottom:0}
/* Understated credibility markers, not primary CTAs — smaller than the base
   (h) STAT CELL species, but still a 44px+ tap target on touch devices */
.hero-stats.stat-strip{max-width:270px}
.hero-stats .stat-cell{padding:6px 10px;min-height:44px;display:flex;flex-direction:column;
  align-items:center;justify-content:center}
.hero-stats .stat-num{font-size:15px}
.hero-stats .stat-label{font-size:8.5px;margin-top:2px}

.partners{background:var(--panel);border-top:1px solid var(--border-strong);margin-top:40px;padding:28px 0 34px}
.group-label{font-family:var(--mono);font-size:10.5px;letter-spacing:1.2px;color:var(--muted);
  text-transform:uppercase;margin:18px 0 10px}
.group-label:first-of-type{margin-top:6px}
.logo-row{display:flex;flex-wrap:wrap;gap:10px}
.logo-row a{background:var(--surface);border:1px solid var(--border-strong);padding:10px 16px;display:flex;
  align-items:center;justify-content:center;min-width:110px;height:44px;text-decoration:none}
.logo-row img{max-height:24px;width:auto}
.dark-card{background:var(--ink)!important;border-color:var(--ink)!important}
.text-logo{font-family:var(--mono);font-size:11px;color:var(--muted);text-align:center;line-height:1.3}
.text-logo:hover{color:var(--ink)}

/* ── Generic section ──────────────────────────────────────────────────── */
.section{padding:72px 0}
.section.alt{background:var(--panel)}
.section h2{font-size:30px;margin-bottom:8px}
.section#estimator h2,.section#process h2,.section#work h2,footer h2{margin-bottom:8px}

/* Editable ledger rows (form inputs styled as values) */
.form-ledger .row{align-items:center}
.form-ledger label{font-family:var(--mono);color:var(--muted);font-size:13px;flex:1}
.form-ledger input{font-family:var(--mono);font-size:13.5px;text-align:right;border:none;border-bottom:1px solid var(--border-strong);
  background:transparent;color:var(--ink);padding:4px 2px;width:60%;outline:none}
.form-ledger input:focus{border-bottom-color:var(--ink)}
.form-ledger input::placeholder{color:#b8b8b4}

/* ── Bill-style field labels — mimics fields on an actual CSPDCL bill: tiny
   uppercase label above a bold monospace value, thin rule underneath ────── */
.bill-fields{display:grid;grid-template-columns:1fr 1fr;gap:16px 20px}
.bill-field{display:flex;flex-direction:column}
.bill-field-label{font-family:var(--mono);font-size:9.5px;font-weight:500;letter-spacing:.1em;
  color:var(--muted);text-transform:uppercase;margin-bottom:5px}
.bill-field input,.bill-field select{font-family:var(--mono);font-size:15px;font-weight:700;
  color:var(--ink);border:none;border-bottom:1px solid var(--border-strong);background:transparent;
  padding:3px 1px 6px;outline:none;width:100%;border-radius:0}
.bill-field input:focus,.bill-field select:focus{border-bottom-color:var(--ink)}
.bill-field input::placeholder{color:#b8b8b4;font-weight:500}
.bill-field-full{grid-column:1/-1}
@media (max-width:640px){.bill-fields{grid-template-columns:1fr}}

/* ── Tariff slab table — styled like the bill's own slab table ──────────── */
.tariff-table{width:100%;border-collapse:collapse;margin-top:6px;font-family:var(--mono);font-size:12.5px}
.tariff-table thead th{background:var(--ink);color:#fff;text-align:left;font-weight:600;
  letter-spacing:.06em;text-transform:uppercase;font-size:10px;padding:7px 10px}
.tariff-table thead th:last-child,.tariff-table td:last-child{text-align:right}
.tariff-table td{padding:6px 10px;border-bottom:1px solid var(--dotted);color:var(--muted)}
.tariff-table tr:last-child td{border-bottom:1px solid var(--border-strong)}
.tariff-table tr.slab-current td{background:var(--panel);border-left:3px solid var(--ink);
  color:var(--ink);font-weight:600}
.tariff-table tr.slab-current td:first-child{padding-left:7px}

/* ── Estimator ────────────────────────────────────────────────────────── */
.panel-heading{font-family:var(--sans);font-size:17px;font-weight:600;color:var(--ink);
  letter-spacing:-.01em;margin-bottom:7px}
#qGen.value.num,#qSaving.value.num{color:#228B22}
#qSaving.value.num{font-size:17px}

/* ── Savings Worksheet: single unified container replacing the old two-column layout.
   No independent max-width/margin: it must fill the same content column as every
   other section (the .wrap it lives inside), not center itself narrower within it. ── */
.worksheet{border:1px solid var(--border-strong);border-radius:10px;
  overflow:hidden;background:var(--surface)}
.worksheet-header{display:flex;justify-content:space-between;align-items:center;
  background:var(--panel);border-bottom:1px solid var(--border-strong);padding:10px 24px}
.ws-title{font-family:var(--mono);font-size:11px;font-weight:500;letter-spacing:.12em;
  color:var(--ink);text-transform:uppercase}
.ws-ref{font-family:var(--mono);font-size:10px;color:var(--muted)}
.worksheet-body{padding:20px 24px 22px}
.ws-steps{position:relative}
.ws-steps::before{content:"";position:absolute;top:13px;bottom:13px;left:13px;
  width:1px;background:var(--border-strong)}
.ws-step{display:grid;grid-template-columns:26px 1fr;column-gap:32px;align-items:start;position:relative}
.ws-step + .ws-step{margin-top:22px}
.ws-node{width:26px;height:26px;border:1px solid var(--ink);border-radius:0;background:var(--surface);
  color:var(--ink);display:flex;align-items:center;justify-content:center;
  font-family:var(--mono);font-size:12px;font-weight:600;position:relative;z-index:1}
.ws-step[data-step="2"],.ws-step[data-step="3"]{opacity:.45;pointer-events:none;transition:opacity .2s}
.worksheet.ws-active .ws-step[data-step="2"],
.worksheet.ws-active .ws-step[data-step="3"]{opacity:1;pointer-events:auto}
.worksheet.ws-active .ws-step[data-step="2"] .ws-node{background:var(--ink);color:#fff}
@media (max-width:640px){
  .ws-step{grid-template-columns:22px 1fr;column-gap:26px}
  .ws-node{width:22px;height:22px;font-size:11px}
  .ws-steps::before{left:11px}
}

/* ── Callback strip: no-context fast lane, always active, never dimmed ── */
.callback-sub{font-size:12.5px;color:var(--muted);margin-bottom:4px}
.callback-row{display:flex;gap:12px;margin-top:14px}
.callback-row input{flex:1;font-family:var(--mono);font-size:13.5px;color:var(--ink);
  border:1px solid var(--border-strong);border-radius:6px;padding:11px 14px;
  background:var(--surface);outline:none;min-width:0}
.callback-row input:focus{border-color:var(--ink)}
.callback-row input::placeholder{color:var(--muted)}
@media (max-width:640px){
  .callback-row{flex-direction:column}
}

.bill-drop{border:1px solid var(--border-strong);border-radius:7px;background:var(--surface);
  padding:16px 18px;text-align:center;cursor:pointer;display:flex;flex-direction:column;
  gap:8px;align-items:center;
  box-shadow:0 1px 2px rgba(0,0,0,.06),0 3px 10px rgba(0,0,0,.07);
  transition:box-shadow .15s,transform .15s,border-color .15s,background .15s}
.bill-drop:hover{box-shadow:0 2px 4px rgba(0,0,0,.08),0 6px 16px rgba(0,0,0,.1);transform:translateY(-1px)}
.bill-drop.dragover{border-style:dashed;border-color:var(--ink);background:var(--panel)}
.bill-drop.processing{border-color:var(--ink);cursor:progress}
.bill-drop.processing .bill-drop-icons{animation:billProcessingPulse 1.3s ease-in-out infinite}
@keyframes billProcessingPulse{
  0%,100%{opacity:1}
  50%{opacity:.4}
}
@media (prefers-reduced-motion:reduce){
  .bill-drop.processing .bill-drop-icons{animation:none}
}
.bill-drop-icons{display:flex;gap:14px;margin-bottom:2px}
.bill-icon{width:30px;height:30px;color:#9a9a9a}
.bill-drop-title{font-family:var(--sans);font-size:15px;font-weight:600;color:var(--ink)}
.bill-drop-sub{font-family:var(--mono);font-size:11.5px;color:var(--muted)}
.bill-status{font-family:var(--mono);font-size:12px;margin-top:10px;line-height:1.6}
.bill-status.info{color:var(--muted)}
.bill-status.ok{color:var(--ink)}
.bill-status.ok::before{content:"✓ ";font-weight:700}
.bill-status.err{color:var(--ink);font-weight:600}
.bill-status.err::before{content:"✗ ";font-weight:700}
.bill-summary{margin-top:10px;font-size:13px}

.gate-note{color:var(--muted);font-size:13px;margin-bottom:12px}
.export-rate-note{font-size:11px;margin:10px 0 0}
.field-err{font-family:var(--mono);font-size:11.5px;color:var(--ink);font-weight:600;margin:-6px 0 10px}
.hp-field{position:absolute;left:-9999px;top:auto;width:1px;height:1px;overflow:hidden}

.wa-block{margin-top:4px}
.wa-note{font-family:var(--mono);font-size:11.5px;color:var(--muted);text-align:center;margin-top:8px}
.consent-row{display:flex;align-items:flex-start;gap:10px;font-size:13px;margin-top:16px;cursor:pointer}
.consent-row input{margin-top:3px;accent-color:var(--ink)}
.consent-copy{font-size:11.5px;color:var(--muted);line-height:1.6;margin-top:10px;padding-top:10px;
  border-top:1px dotted var(--dotted)}
.form-msg{font-family:var(--mono);font-size:12px;margin-top:10px;min-height:14px}
.form-msg.ok{color:var(--ink)}
.form-msg.err{color:var(--ink);font-weight:600}
.fine-print{font-size:11.5px;color:var(--muted);margin-top:12px;font-style:italic}

/* ── Services / Process rows with index ──────────────────────────────── */
.services-list .row,.process-list .row{align-items:flex-start;gap:20px}
.idx{font-family:var(--mono);font-size:13px;color:var(--muted);flex-shrink:0;padding-top:2px}
.s-body{flex:1;font-size:14.5px}
.s-body strong{font-size:16px}
.s-body em{color:var(--muted);font-style:normal;font-family:var(--mono);font-size:12px;display:inline-block;margin-top:6px}

/* ── Process section: steps + Fig. 01 figure ──────────────────────────── */
.process-grid{display:grid;grid-template-columns:1fr 1fr;gap:32px;align-items:start}
.process-figure{display:block;width:100%;max-width:560px;height:auto}
@media (max-width:900px){
  .process-grid{grid-template-columns:1fr}
  .process-figure{max-width:none}
}
.process-list .row .value{flex-shrink:0;padding-top:2px}

/* ── Policy & Resources: reference-index rows ──────────────────────────── */
.policy-intro{color:var(--muted);font-size:14px;max-width:640px;margin-bottom:24px}
.ref-list{margin-bottom:28px}
.policy-disclaimer{font-family:var(--mono);font-size:11px;color:var(--muted);margin-top:4px}

/* ── Footer / contact ─────────────────────────────────────────────────── */
.footer{border-top:1px solid var(--border-strong)}
.footer .section-marker{color:var(--muted)}
.footer-grid{display:grid;grid-template-columns:2fr 1fr;gap:40px;margin-bottom:32px}
.contact-list{margin-bottom:0}

/* ── Notice footer strip — compliance/scheme notices ─────────────────────── */
.notice-strip{border-top:1px solid var(--ink);padding:14px 0;
  display:flex;flex-wrap:wrap;gap:6px 26px;font-family:var(--mono);font-size:10.5px;
  color:var(--muted);line-height:1.5}
.notice-strip strong{color:var(--ink);text-transform:uppercase;letter-spacing:.04em;font-weight:600}

.footer-bottom{display:flex;align-items:center;justify-content:space-between;gap:16px;
  font-family:var(--mono);font-size:11px;color:var(--muted);padding-top:18px;border-top:1px solid var(--border-strong)}
.footer-bottom a{text-decoration:none;color:var(--ink)}

/* ── Responsive ───────────────────────────────────────────────────────── */
@media (max-width:860px){
  .footer-grid{grid-template-columns:1fr;gap:28px}
  .hero-headline{font-size:20px}
}
@media (max-width:640px){
  .nav-toggle{display:block}
  .nav-links{position:absolute;top:100%;left:0;right:0;background:#fff;border-bottom:1px solid var(--border-strong);
    flex-direction:column;align-items:stretch;padding:14px 24px;gap:8px;display:none}
  .nav-links.open{display:flex}
  .footer-bottom{flex-direction:column;align-items:flex-start}
  .contact-list .row{flex-direction:column;align-items:flex-start;gap:4px}
  .contact-list .value{text-align:left}
  .ref-list .row{flex-direction:column;align-items:flex-start;gap:4px}
  .ref-list .value{text-align:left}
  .form-ledger .row{flex-direction:column;align-items:flex-start;gap:4px}
  .form-ledger input{width:100%;text-align:left}
}
