/* Layout for this product's own pages. Reads Face Kit tokens only; declares none. */
.page{ max-width:760px; margin:0 auto; padding:var(--space-6) var(--space-4) var(--space-8); display:flex; flex-direction:column; gap:var(--space-5); }
.page-wide{ max-width:1080px; }
.page h1{ font-size:var(--text-2xl); line-height:var(--leading-tight); }
.page h2{ font-size:var(--text-xl); }
.page h3{ font-size:var(--text-lg); }
.lead{ font-size:var(--text-lg); color:var(--muted); max-width:60ch; }
.intro{ display:flex; flex-direction:column; gap:var(--space-4); align-items:flex-start; padding:var(--space-7) 0 var(--space-5); }
.intro h1{ font-size:var(--text-3xl); max-width:18ch; }
.cards3{ grid-template-columns:repeat(auto-fit,minmax(220px,1fr)); }
.form-stack{ gap:var(--space-5); }
.form-actions{ justify-content:space-between; flex-wrap:wrap; }
.field textarea{ min-height:96px; width:100%; }
.field input:not([type="checkbox"]):not([type="radio"]):not([type="file"]),.field select{ width:100%; }
.field[data-invalid="true"] select,.field[data-invalid="true"] textarea{ border-color:var(--status-danger); }
.check{ align-items:flex-start; }
.check input{ width:20px; height:20px; margin-top:2px; flex:none; }
.file-list{ list-style:none; margin:0; padding:0; display:flex; flex-direction:column; gap:var(--space-1); font-size:var(--text-sm); }
.file-list li{ display:flex; align-items:center; gap:var(--space-2); justify-content:space-between; padding:var(--space-1) 0; border-bottom:1px solid var(--border); }
.gps-value{ font-variant-numeric:tabular-nums; }
.save-state{ font-size:var(--text-xs); color:var(--muted); min-height:1.4em; }
.ref{ font:600 var(--text-xl)/1 ui-monospace,SFMono-Regular,Menlo,monospace; letter-spacing:.04em; }
.site-nav{ justify-content:space-between; }
.site-nav ul{ margin:0 0 0 auto; }
@media (max-width:639.98px){
  .intro h1{ font-size:var(--text-2xl); }
  .site-nav ul{ gap:var(--space-3); }
}

/* Operator console */
.console{ display:grid; grid-template-columns:240px minmax(0,1fr); min-height:100vh; }
.console .main{ min-height:100vh; }
.console-menu{ display:none; }
.kpis{ grid-template-columns:repeat(auto-fit,minmax(180px,1fr)); }
.record-grid{ grid-template-columns:minmax(0,2fr) minmax(0,1fr); align-items:start; }
.kv{ grid-template-columns:minmax(120px,38%) 1fr; }
.kv dd{ overflow-wrap:anywhere; }
.plot{ width:100%; height:auto; background:var(--surface); border:1px solid var(--border); border-radius:var(--radius); }
.plot a:focus-visible circle{ stroke:var(--brand-text); stroke-width:3; }
.trail{ list-style:none; margin:0; padding:0; display:flex; flex-direction:column; gap:var(--space-2); font-size:var(--text-sm); }
.trail time{ color:var(--muted); font-size:var(--text-xs); display:block; }
.signin{ min-height:100vh; display:flex; align-items:center; justify-content:center; padding:var(--space-5); }
.signin .card{ width:min(400px,100%); }
td a,th a{ color:var(--brand-link); }
.backdrop{ position:fixed; inset:0; background:var(--scrim); z-index:var(--z-sticky); }
@media (max-width:1023.98px){
  .console{ grid-template-columns:1fr; }
  .console .admin-nav{ position:fixed; inset:0 auto 0 0; z-index:var(--z-dialog); transform:translateX(-100%); }
  .console[data-menu="open"] .admin-nav{ transform:none; }
  .console-menu{ display:inline-flex; }
  .record-grid{ grid-template-columns:1fr; }
}
.toast .btn{ background:transparent; }
.console h2{ font-size:var(--text-lg); }
.console .page-header h1{ font-size:var(--text-xl); }
.more-filters{ flex-basis:100%; }
.more-filters summary{ cursor:pointer; font-size:var(--text-sm); color:var(--brand-link); padding:var(--space-1) 0; }
.more-filters .filter-bar{ margin-top:var(--space-3); }
.kv dd .btn{ margin-left:var(--space-2); }

/* ── Landing page ─────────────────────────────────────────────────────────── */
.eyebrow{ font-size:var(--text-xs); font-weight:700; letter-spacing:.12em; text-transform:uppercase; color:var(--brand-accent); margin:0 0 var(--space-2); }
.btn-lg{ min-height:52px; padding:0 var(--space-5); font-size:var(--text-md); }
.btn-on-media{ background:transparent; color:var(--on-media); border-color:color-mix(in srgb,var(--on-media) 60%,transparent); min-height:52px; padding:0 var(--space-5); font-size:var(--text-md); }
.btn-on-media:hover{ background:color-mix(in srgb,var(--on-media) 12%,transparent); }

.landing-hero{ position:relative; min-height:min(78vh,640px); display:flex; align-items:flex-end; overflow:hidden; background:#1E2749; }
.landing-hero-photo{ position:absolute; inset:0; width:100%; height:100%; object-fit:cover; object-position:center 40%; }
.landing-hero-veil{ position:absolute; inset:0; background:linear-gradient(100deg,rgba(14,20,40,.86) 0%,rgba(14,20,40,.62) 45%,rgba(14,20,40,.12) 100%); }
.landing-hero-in{ position:relative; max-width:1080px; width:100%; margin:0 auto; padding:var(--space-8) var(--space-5) var(--space-7); display:flex; flex-direction:column; gap:var(--space-4); color:var(--on-media); }
.landing-hero-in .eyebrow{ color:#FFB27A; }
.landing-hero-in h1{ color:var(--on-media); font-size:clamp(34px,5.4vw,58px); line-height:1.04; max-width:15ch; letter-spacing:-.01em; }
.landing-lead{ font-size:clamp(17px,1.6vw,20px); max-width:56ch; color:color-mix(in srgb,var(--on-media) 92%,transparent); }
.landing-actions{ flex-wrap:wrap; margin-top:var(--space-2); }
.landing-trust{ display:flex; flex-wrap:wrap; gap:var(--space-2) var(--space-5); list-style:none; margin:var(--space-2) 0 0; padding:0; font-size:var(--text-sm); color:color-mix(in srgb,var(--on-media) 88%,transparent); }
.landing-trust li{ display:inline-flex; align-items:center; gap:var(--space-2); }
.landing-trust .icon{ color:#FFB27A; }

.landing{ display:flex; flex-direction:column; }
.landing-section{ max-width:1080px; width:100%; margin:0 auto; padding:var(--space-8) var(--space-5) 0; display:flex; flex-direction:column; gap:var(--space-3); }
.landing-section > h2{ font-size:clamp(26px,3vw,36px); line-height:1.12; margin-bottom:var(--space-4); max-width:24ch; }
.landing-narrow{ max-width:820px; }
.landing-band{ max-width:none; background:var(--surface); border-block:1px solid var(--border); margin-top:var(--space-8); padding-bottom:var(--space-8); }
.landing-band > *{ max-width:1080px; width:100%; margin-left:auto; margin-right:auto; }

.audience{ display:grid; grid-template-columns:repeat(3,minmax(0,1fr)); gap:var(--space-5); }
.audience-card{ background:var(--surface); border:1px solid var(--border); border-radius:var(--radius-lg); overflow:hidden; display:flex; flex-direction:column; box-shadow:var(--shadow-1); }
.audience-card img{ width:100%; aspect-ratio:4/3; object-fit:cover; display:block; }
.audience-card:nth-child(3) img{ object-position:center 62%; }
.audience-card:nth-child(2) img{ object-position:center 35%; }
.audience-body{ padding:var(--space-4) var(--space-5) var(--space-5); display:flex; flex-direction:column; gap:var(--space-2); }
.audience-body h3{ font-size:var(--text-lg); }
.audience-body p{ color:var(--muted); font-size:var(--text-sm); }

.steps-grid{ list-style:none; margin:0; padding:0; display:grid; grid-template-columns:repeat(4,minmax(0,1fr)); gap:var(--space-5); counter-reset:none; }
.steps-grid li{ display:flex; flex-direction:column; gap:var(--space-2); }
.steps-grid h3{ font-size:var(--text-md); }
.steps-grid p{ color:var(--muted); font-size:var(--text-sm); }
.step-n{ width:40px; height:40px; border-radius:var(--radius-full); display:grid; place-items:center; background:var(--brand-primary); color:var(--brand-button-text); font-weight:700; }

.ways{ display:grid; grid-template-columns:repeat(2,minmax(0,1fr)); gap:var(--space-5); }
.way{ background:var(--surface); border:1px solid var(--border); border-radius:var(--radius-lg); overflow:hidden; box-shadow:var(--shadow-1); display:flex; flex-direction:column; }
.way img{ width:100%; aspect-ratio:16/9; object-fit:cover; display:block; }
.way-body{ padding:var(--space-5); display:flex; flex-direction:column; gap:var(--space-3); }
.way-body h3{ font-size:var(--text-xl); }
.way-body > p{ color:var(--muted); }
.way-list{ margin:0; padding-left:var(--space-5); display:flex; flex-direction:column; gap:var(--space-1); font-size:var(--text-sm); }

.faq{ display:flex; flex-direction:column; border-top:1px solid var(--border); }
.faq-item{ border-bottom:1px solid var(--border); }
.faq-item summary{ list-style:none; cursor:pointer; display:flex; justify-content:space-between; align-items:center; gap:var(--space-3); padding:var(--space-4) 0; font-weight:600; }
.faq-item summary::-webkit-details-marker{ display:none; }
.faq-item summary .icon{ transform:rotate(90deg); transition:transform var(--duration-base,150ms) ease; flex:none; }
.faq-item[open] summary .icon{ transform:rotate(-90deg); }
.faq-item p{ padding:0 0 var(--space-4); color:var(--muted); max-width:68ch; }

.landing-cta{ margin:var(--space-8) auto var(--space-8); max-width:1080px; width:calc(100% - 2 * var(--space-5)); background:var(--brand-primary); color:var(--brand-button-text); border-radius:var(--radius-lg); padding:var(--space-7) var(--space-6); display:flex; flex-direction:column; align-items:flex-start; gap:var(--space-3); }
.landing-cta h2{ color:var(--brand-button-text); font-size:clamp(24px,2.6vw,32px); }
.landing-cta p{ color:color-mix(in srgb,var(--brand-button-text) 85%,transparent); }
.landing-cta .btn-primary{ background:var(--brand-accent); color:#fff; }

.credits a{ color:inherit; }

/* Generators: a door of their own on the landing page. */
.landing-hero-aside{ font-size:var(--text-sm); color:color-mix(in srgb,var(--on-media) 88%,transparent); margin:0; }
.landing-hero-aside a{ color:var(--on-media); font-weight:600; text-underline-offset:3px; }
.rates-strip{ display:flex; align-items:center; justify-content:space-between; gap:var(--space-5); background:var(--surface); border:1px solid var(--border); border-radius:var(--radius-lg); box-shadow:var(--shadow-1); padding:var(--space-6); }
.rates-strip h2{ font-size:var(--text-xl); }
.rates-strip .btn{ flex:none; }
.generators{ margin-top:var(--space-8); background:#1E2749; color:var(--on-media); }
.generators-in{ max-width:1080px; margin:0 auto; padding:var(--space-8) var(--space-5); display:grid; grid-template-columns:minmax(0,1.1fr) minmax(0,1fr); gap:var(--space-7); align-items:center; }
.generators .eyebrow{ color:#FFB27A; }
.generators h2{ color:var(--on-media); font-size:clamp(26px,3vw,36px); line-height:1.12; }
.generators-lead{ font-size:var(--text-md); color:color-mix(in srgb,var(--on-media) 88%,transparent); max-width:52ch; }
.generators-list{ list-style:none; margin:0; padding:0; display:flex; flex-direction:column; gap:var(--space-2); }
.generators-list li{ display:flex; gap:var(--space-2); align-items:flex-start; color:color-mix(in srgb,var(--on-media) 92%,transparent); }
.generators-list .icon{ color:#FFB27A; flex:none; margin-top:3px; }
.generators-steps{ list-style:none; margin:0; padding:var(--space-5); display:flex; flex-direction:column; gap:var(--space-5); background:color-mix(in srgb,var(--on-media) 7%,transparent); border:1px solid color-mix(in srgb,var(--on-media) 16%,transparent); border-radius:var(--radius-lg); }
.generators-steps li{ display:flex; gap:var(--space-4); align-items:flex-start; }
.generators-steps .step-n{ flex:none; }
.generators .btn-primary,.generators .step-n{ background:var(--brand-accent); border-color:var(--brand-accent); color:#fff; }
.generators .btn-primary:hover{ filter:brightness(1.08); }
.generators-steps h3{ color:var(--on-media); font-size:var(--text-md); }
.generators-steps p{ color:color-mix(in srgb,var(--on-media) 80%,transparent); font-size:var(--text-sm); }
.supply-layout{ display:grid; grid-template-columns:minmax(0,2fr) minmax(0,1fr); gap:var(--space-5); align-items:start; }
.supply-aside{ position:sticky; top:calc(64px + var(--space-4)); }
.pin-field{ gap:var(--space-3); }
.pin-label{ font-size:var(--text-sm); font-weight:600; margin:0; }
.pin-map{ height:320px; border:1px solid var(--border); border-radius:var(--radius); background:var(--surface-2,var(--surface)); overflow:hidden; display:grid; place-items:center; cursor:crosshair; }
.pin-map:focus-visible{ outline:2px solid var(--brand-link); outline-offset:2px; }
.pin-map.leaflet-container{ display:block; }
.pin-loading{ margin:0; padding:var(--space-4); text-align:center; }
.pin-actions{ flex-wrap:wrap; align-items:center; }
.pin-value{ font-size:var(--text-sm); color:var(--muted); font-variant-numeric:tabular-nums; }
.pin-manual summary{ cursor:pointer; font-size:var(--text-sm); color:var(--brand-link); padding:var(--space-1) 0; }
.pin-manual .form-grid{ margin-top:var(--space-3); }
.pin-marker{ background:none; border:none; }
.pin-marker span{ display:block; width:28px; height:28px; margin:0 auto; border-radius:50% 50% 50% 0; transform:rotate(-45deg); background:var(--brand-accent); border:3px solid #fff; box-shadow:0 2px 6px rgba(0,0,0,.4); }
@media (max-width:639.98px){ .pin-map{ height:260px; } }
.next-steps{ margin:0; padding-left:var(--space-5); display:flex; flex-direction:column; gap:var(--space-3); }
@media (max-width:1023.98px){
  .generators-in,.supply-layout{ grid-template-columns:1fr; }
  .supply-aside{ position:static; order:-1; }
}
@media (max-width:639.98px){
  .rates-strip{ flex-direction:column; align-items:flex-start; padding:var(--space-5); }
  .generators-in{ padding:var(--space-7) var(--space-4); }
}

@media (max-width:1023.98px){
  /* Three cards in two columns leave one stranded: at tablet width each card runs side by side instead. */
  .audience{ grid-template-columns:1fr; }
  .audience-card{ flex-direction:row; }
  .audience-card img{ width:40%; height:220px; aspect-ratio:auto; }
  .audience-card:nth-child(3) img{ object-position:center 72%; }
  .steps-grid{ grid-template-columns:1fr 1fr; }
}
@media (max-width:639.98px){
  .landing-hero{ min-height:560px; }
  .landing-hero-veil{ background:linear-gradient(180deg,rgba(14,20,40,.35) 0%,rgba(14,20,40,.9) 70%); }
  .landing-hero-in{ padding:var(--space-7) var(--space-4) var(--space-6); }
  .landing-section{ padding:var(--space-7) var(--space-4) 0; }
  .audience,.ways,.steps-grid{ grid-template-columns:1fr; }
  .audience-card{ flex-direction:column; }
  .audience-card img{ width:100%; height:auto; aspect-ratio:4/3; }
  .landing-cta{ width:calc(100% - 2 * var(--space-4)); padding:var(--space-6) var(--space-4); }
  .landing-actions .btn{ flex:1 1 100%; }
}
/* On a phone the two text links move to the footer (they are there already), so the bar keeps one line. */
@media (max-width:639.98px){
  .site-nav ul{ display:none; }
}

/* Logo: the mark beside a live-text wordmark */
.brand-logo{ display:inline-flex; align-items:center; gap:var(--space-2); text-decoration:none; }
.brand-logo img{ display:block; flex:none; }
.nav .brand-logo span, .brand-logo strong{ font-weight:800; letter-spacing:.06em; color:var(--brand-primary); }
.nav .brand-logo span{ font-size:var(--text-lg); }
.signin-mark{ display:block; margin-bottom:var(--space-2); }

/* ── Rates and suppliers ───────────────────────────────────────────────────── */
.rate-table{ width:100%; border-collapse:collapse; font-size:var(--text-sm); }
.rate-table th,.rate-table td{ padding:var(--space-2) var(--space-3); border-bottom:1px solid var(--border); text-align:left; white-space:nowrap; }
.rate-table thead th{ font-size:var(--text-xs); text-transform:none; letter-spacing:0; color:var(--muted); position:static; }
.rate-table thead th .muted{ display:block; font-weight:400; }
.rate-table td.num{ text-align:right; font-variant-numeric:tabular-nums; font-weight:600; }
.rate-table tbody tr:last-child th,.rate-table tbody tr:last-child td{ border-bottom:none; }
.offers{ display:grid; grid-template-columns:repeat(auto-fill,minmax(300px,1fr)); gap:var(--space-5); }
.offer-card{ background:var(--surface); border:1px solid var(--border); border-radius:var(--radius-lg); padding:var(--space-5); display:flex; flex-direction:column; gap:var(--space-3); box-shadow:var(--shadow-1); }
.offer-card h2{ font-size:var(--text-lg); }
.offer-supplier{ display:flex; flex-wrap:wrap; gap:var(--space-2); align-items:center; font-size:var(--text-sm); color:var(--muted); }
.offer-terms{ display:grid; grid-template-columns:1fr 1fr; gap:var(--space-2) var(--space-4); margin:0; font-size:var(--text-sm); }
.offer-terms dt{ color:var(--muted); }
.offer-terms dd{ margin:0; font-weight:600; }
.offer-card .btn{ margin-top:auto; }
.price-grid{ display:grid; grid-template-columns:auto 1fr 1fr; gap:var(--space-2) var(--space-3); align-items:center; }
.price-grid .field{ gap:0; }
.price-grid .head{ font-size:var(--text-xs); color:var(--muted); font-weight:600; }
.form-grid{ display:grid; grid-template-columns:repeat(auto-fit,minmax(220px,1fr)); gap:var(--space-4); }
.span-all{ grid-column:1/-1; }
@media (max-width:639.98px){ .price-grid{ gap:var(--space-2); } .price-grid input{ min-width:0; } }
.price-grid[data-seasonal="false"]{ grid-template-columns:auto 1fr; max-width:420px; }
.price-grid > span:not(.head){ font-size:var(--text-sm); font-weight:600; }

/* ── Map ─────────────────────────────────────────────────────────────────── */
.map-layers{ border:none; margin:0; padding:0; display:flex; flex-wrap:wrap; gap:var(--space-2) var(--space-5); }
.map-layer{ display:inline-flex; align-items:center; gap:var(--space-2); min-height:var(--control-h); font-size:var(--text-sm); font-weight:600; cursor:pointer; }
.map-frame{ border:1px solid var(--border); border-radius:var(--radius); overflow:hidden; background:var(--surface-2); }
.map-canvas{ height:min(68vh,620px); min-height:380px; width:100%; }
.map-canvas:focus-visible{ outline:var(--focus-ring-width) solid var(--focus-ring-color); outline-offset:-3px; }
.map-key{ display:inline-block; width:14px; height:14px; flex:none; }
.map-key-lead{ border-radius:50%; background:var(--status-ok); border:2px solid #fff; box-shadow:0 0 0 1px var(--border-strong); }
.map-key-supplier{ border-radius:4px; background:var(--brand-primary); }
.map-key-order{ height:0; width:18px; border-top:3px solid var(--status-ok); }
.map-supplier{ background:none; border:none; }
.map-supplier-mark{ display:grid; place-items:center; border-radius:8px; background:var(--brand-primary); border:2px solid #fff; box-shadow:0 2px 6px rgba(0,0,0,.35); }
.map-supplier-mark img{ width:70%; height:70%; }
.map-grid{ border-top:1px solid var(--border); padding-top:var(--space-2); }
.map-grid legend{ font-size:var(--text-xs); font-weight:700; color:var(--muted); text-transform:uppercase; letter-spacing:.06em; padding:0; margin-bottom:var(--space-1); float:left; width:100%; }
.map-kv{ font-weight:600; }
.map-kv select{ min-height:32px; margin-left:var(--space-1); }
.grid-station-icon{ background:none; border:none; }
.grid-station{ display:inline-grid; place-items:center; flex:none; box-sizing:border-box; background:#fff; color:var(--c); border:2px solid var(--c); border-radius:5px; box-shadow:0 1px 4px rgba(0,0,0,.35); }
.grid-station svg{ width:72%; height:72%; display:block; }
.grid-station-icon .grid-station{ transform:scale(var(--station-scale,1)); transition:transform .15s ease; }
@media (prefers-reduced-motion: reduce){ .grid-station-icon .grid-station{ transition:none; } }
.legend .grid-station, .map-layer .grid-station{ box-shadow:none; }
.map-key-grid-lines{ height:0; width:18px; border-top:3px solid #C2185B; }
.map-key-grid-mts{ border:1px dashed #455A64; background:transparent; }
.map-key-grid-local{ border:2px solid #00695C; background:transparent; }
.map-key-grid-supply{ border:3px solid #263238; background:transparent; }
.map-sources{ font-size:var(--text-xs); }
.gcca-cap{ display:flex; align-items:center; gap:6px; margin:8px 0 6px; font-size:14px; }
.gcca-dot{ width:12px; height:12px; border-radius:3px; flex:none; }
.gcca-table{ border-collapse:collapse; font-size:12px; font-variant-numeric:tabular-nums; width:100%; }
.gcca-table th,.gcca-table td{ padding:3px 5px; border-bottom:1px solid #e3e3e3; text-align:right; white-space:nowrap; }
.gcca-table th[scope="row"],.gcca-table thead th:first-child{ text-align:left; }
.gcca-table thead th{ position:static; background:none; text-transform:none; letter-spacing:0; font-size:11px; color:#5a5a5a; font-weight:600; white-space:normal; vertical-align:bottom; }
.gcca-table .gcca-limit{ outline:2px solid #C9473D; outline-offset:-2px; font-weight:700; }
.gcca-note{ font-size:11.5px; color:#5a5a5a; margin:6px 0 0; }
.gcca-lead{ margin:0 0 8px; }
.legend-heading{ font-weight:600; flex-basis:100%; }
.map-key-registration{ border-radius:4px; background:var(--surface); border:2px dashed var(--brand-accent); }
.map-supplier-mark.is-registration{ background:var(--surface); border:2px dashed var(--brand-accent); }
.map-supplier-mark.is-registration img{ display:none; }
.map-supplier-mark.is-registration::after{ content:'?'; font-weight:700; color:var(--brand-accent); }
.map-supplier-mark.is-inactive{ filter:grayscale(1); opacity:.7; }
.map-legend{ flex-direction:row; flex-wrap:wrap; gap:var(--space-2) var(--space-5); }
.legend-line{ display:inline-block; width:20px; height:0; border-top:3px solid var(--status-ok); }
.legend-line-waiting{ border-top:2px dashed var(--status-info); }
.leaflet-container{ font:inherit; }
.leaflet-popup-content a{ color:var(--brand-link); }
