/* ==========================================================================
   Energy Ranch - Power the Frontier
   Single stylesheet. Sections:
     1. Base reset
     2. Design tokens
     3. Global / header / footer
     4. Home page sections
     5. Contact page
     6. Responsive
     7. Reduced motion
   ========================================================================== */

/* --------------------------------------------------------------------------
   1. BASE RESET
   -------------------------------------------------------------------------- */
*,:after,:before,::backdrop{box-sizing:border-box;border:0 solid;margin:0;padding:0}
html{-webkit-text-size-adjust:100%;tab-size:4;line-height:1.5;-webkit-tap-highlight-color:transparent}
h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}
a{color:inherit;text-decoration:inherit}
b,strong{font-weight:bolder}
small{font-size:80%}
ol,ul,menu{list-style:none}
img,svg,video,canvas,iframe{vertical-align:middle;display:block}
img,video{max-width:100%;height:auto}
button,input,select,textarea{font:inherit;letter-spacing:inherit;color:inherit;background-color:#0000;border-radius:0}
button,input:where([type=button],[type=reset],[type=submit]){appearance:button}
textarea{resize:vertical}
::placeholder{opacity:1}
[hidden]{display:none!important}

/* --------------------------------------------------------------------------
   2. DESIGN TOKENS
   -------------------------------------------------------------------------- */
:root{
  --ink:#0a0b0b;
  --paper:#e7e4dc;
  --muted:#a7aaa3;
  --line:#2b2d2b;
  --signal:#d6ff3f;
  --signal-deep:#6f8a12;   /* --signal is unreadable on --paper */
  --rust:#9e4f35;
  --font-geist-sans:"Geist","Helvetica Neue",Arial,sans-serif;
  --font-geist-mono:"Geist Mono",ui-monospace,SFMono-Regular,Menlo,monospace;
}

/* --------------------------------------------------------------------------
   3. GLOBAL / HEADER / FOOTER
   -------------------------------------------------------------------------- */
html{scroll-behavior:smooth;background:var(--ink)}
body{background:var(--ink);color:var(--paper);font-family:var(--font-geist-sans);margin:0;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}
a{color:inherit;text-decoration:none}

.site-header{border-bottom:1px solid var(--line);z-index:20;-webkit-backdrop-filter:blur(14px);backdrop-filter:blur(14px);background:#0a0b0be6;justify-content:space-between;align-items:center;height:70px;padding:0 3.2vw;display:flex;position:sticky;top:0}

/* Brand lockup - unchanged from the original build. */
.brand{letter-spacing:.08em;align-items:center;gap:14px;font-weight:700;display:flex}
/* One mark system shared across HC Capital, Energy Ranch and WranglerX: a square
   box, a border of 7% of the box, and a corner square pinned outside the lower
   right at 19.6% of the box. Everything derives from --box, so changing that one
   value rescales the whole mark. */
.brand-mark{--box:44px;--stroke:calc(var(--box)*.07);--dot:calc(var(--box)*.196);
    border:var(--stroke) solid var(--paper);width:var(--box);height:var(--box);
    font-size:calc(var(--box)*.35);flex:none;place-items:center;display:grid;position:relative}
.brand-mark:after{content:"";background:var(--signal);width:var(--dot);height:var(--dot);position:absolute;
    bottom:calc(var(--dot)*-.44);right:calc(var(--dot)*-.44)}
.brand-name{font-size:13px}
.brand-flag{filter:saturate(.9);margin-left:2px;font-size:22px;line-height:1}

nav{align-items:center;height:100%;display:flex}
nav a{border-left:1px solid var(--line);height:100%;font-family:var(--font-geist-mono);letter-spacing:.14em;text-transform:uppercase;place-items:center;padding:0 24px;font-size:13px;display:grid;position:relative;transition:color .28s ease,background-color .28s ease}
.nav-cta{border-right:1px solid var(--line);color:var(--signal)}

/* Hover / focus: a hairline of signal green wipes in from the left along the
   header's baseline, sitting directly on the header's own bottom border, so it
   reads as that line lighting up under the active item. */
nav a:before{content:"";background:var(--signal);transform-origin:0;transform:scaleX(0);transition:transform .4s cubic-bezier(.22,.61,.36,1);position:absolute;bottom:0;left:0;right:0;height:1px}
nav a:hover:before,nav a:focus-visible:before{transform:scaleX(1)}
nav a:hover,nav a:focus-visible{color:var(--signal);background:#d6ff3f08;outline:none}

/* The one call to action inverts to a solid fill instead - the same treatment
   the inquiry button uses, keeping both primary actions consistent. */
.nav-cta:before{display:none}
.nav-cta:hover,.nav-cta:focus-visible{background:var(--signal);border-color:var(--signal);color:var(--ink)}
nav a[aria-current=page]{background:#d6ff3f0f}
nav a[aria-current=page]:before{transform:scaleX(1)}

/* Menu button. Hidden until the tablet breakpoint, where the responsive section
   turns it on and converts <nav> into a panel. The bars cross into an X and the
   label swaps off the same aria-expanded attribute, so the visual state and the
   accessible state cannot drift apart. */
.menu-toggle{color:var(--paper);cursor:pointer;font-family:var(--font-geist-mono);font-size:13px;letter-spacing:.14em;text-transform:uppercase;background:none;border-left:1px solid var(--line);align-items:center;gap:13px;height:100%;padding:0 0 0 22px;transition:color .28s ease;display:none}
.menu-toggle .bars{flex:none;width:22px;height:12px;display:block;position:relative}
.menu-toggle .bars i{background:currentColor;transition:transform .34s cubic-bezier(.22,.61,.36,1);height:1px;position:absolute;left:0;right:0}
.menu-toggle .bars i:first-child{top:0}
.menu-toggle .bars i:last-child{bottom:0}
.menu-toggle .menu-label:before{content:"Menu"}
.menu-toggle:hover,.menu-toggle:focus-visible{color:var(--signal);outline:none}
.menu-toggle[aria-expanded=true]{color:var(--signal)}
.menu-toggle[aria-expanded=true] .bars i:first-child{transform:translateY(5.5px)rotate(45deg)}
.menu-toggle[aria-expanded=true] .bars i:last-child{transform:translateY(-5.5px)rotate(-45deg)}
.menu-toggle[aria-expanded=true] .menu-label:before{content:"Close"}

footer{grid-template-columns:1fr 1fr 1fr;align-items:end;gap:30px;padding:55px 3.2vw;display:grid}
footer p{color:var(--muted);margin:0}
footer>div:last-child{font-family:var(--font-geist-mono);text-transform:uppercase;letter-spacing:.1em;flex-direction:column;align-items:flex-end;gap:12px;font-size:12px;display:flex}
footer>div:last-child a{transition:color .28s ease}
footer>div:last-child a:hover{color:var(--signal)}

/* --------------------------------------------------------------------------
   4. HOME PAGE SECTIONS
   -------------------------------------------------------------------------- */

/* Hero. Two parallax layers: the line grid and the ring lag the scroll, the
   headline leads it slightly. --parallax is set by assets/site.js; with no JS
   (or with reduced motion) it stays 0 and everything sits where the static
   layout puts it. */
.hero{flex-direction:column;justify-content:space-between;min-height:calc(100vh - 70px);padding:5.5vw 3.2vw 3vw;display:flex;position:relative;overflow:hidden}
.hero-grid{pointer-events:none;opacity:.18;background-image:linear-gradient(var(--line) 1px,transparent 1px),linear-gradient(90deg,var(--line) 1px,transparent 1px);background-size:48px 48px;position:absolute;inset:0;transform:translate3d(0,var(--parallax,0px),0);-webkit-mask-image:linear-gradient(#000,#0000 80%);mask-image:linear-gradient(#000,#0000 80%);will-change:transform}
.hero:after{content:"";border:1px solid #343734;border-radius:50%;width:48vw;height:48vw;position:absolute;top:6vw;right:-18vw;transform:translate3d(0,var(--parallax,0px),0);box-shadow:0 0 0 8vw #d6ff3f04,0 0 0 16vw #d6ff3f03;will-change:transform}

.eyebrow,.section-index,.pillar-top{font-family:var(--font-geist-mono);letter-spacing:.14em;text-transform:uppercase;font-size:13px}
.eyebrow{z-index:1;color:var(--muted);gap:30px;display:flex;position:relative}
h1{letter-spacing:-.075em;z-index:1;margin:9vh 0;font-size:clamp(74px,12.6vw,190px);font-weight:400;line-height:.78;position:relative;transform:translate3d(0,var(--parallax,0px),0)}
h1 em,.cta em{color:var(--muted);font-style:normal}
.hero-bottom{border-top:1px solid var(--line);z-index:1;grid-template-columns:1fr 1fr;align-items:end;padding-top:24px;display:grid;position:relative;transform:translate3d(0,var(--parallax,0px),0)}
.hero-bottom p{letter-spacing:-.03em;max-width:620px;margin:0;font-size:clamp(18px,2vw,30px);line-height:1.28}

.arrow-link{font-family:var(--font-geist-mono);text-transform:uppercase;letter-spacing:.12em;justify-self:end;align-items:center;gap:40px;font-size:14px;display:flex;transition:color .3s ease}
.arrow-link span{color:var(--signal);font-size:30px;transition:transform .34s cubic-bezier(.22,.61,.36,1);display:inline-block}
.arrow-link:hover,.arrow-link:focus-visible{color:var(--signal);outline:none}
.arrow-link:hover span,.arrow-link:focus-visible span{transform:translateY(4px)}

/* Metrics band */
.metrics{border-top:1px solid var(--line);border-bottom:1px solid var(--line);grid-template-columns:repeat(4,1fr);display:grid}
.metrics article{border-right:1px solid var(--line);flex-direction:column;justify-content:space-between;min-height:150px;padding:30px 3.2vw;display:flex}
.metrics article:last-child{border-right:0}
.metrics strong{letter-spacing:-.06em;font-size:clamp(34px,4.5vw,72px);font-weight:400}
.metrics span{font-family:var(--font-geist-mono);text-transform:uppercase;letter-spacing:.1em;color:var(--muted);font-size:12px}

/* Statement */
.statement,.approach{padding:130px 3.2vw}
.section-index{color:var(--signal);margin-bottom:55px}
h2{letter-spacing:-.065em;margin:0;font-size:clamp(48px,7vw,108px);font-weight:400;line-height:.94}
.statement h2{max-width:1200px}
.statement>p{max-width:700px;color:var(--muted);margin:70px 0 0 50%;font-size:22px;line-height:1.5}

/* Infrastructure pillars. Each card carries a soft wash of signal green rising
   out of the bottom-left corner, layered over the flat background - faint at
   the corner and gone well before mid-card, so it reads as light in the room
   rather than as a gradient. */
.pillars{border-top:1px solid var(--line);grid-template-columns:repeat(2,1fr);display:grid}
.pillar{background:radial-gradient(88% 62% at 0% 100%,#d6ff3f14 0%,#d6ff3f06 34%,#d6ff3f00 62%);border-right:1px solid var(--line);border-bottom:1px solid var(--line);flex-direction:column;min-height:410px;padding:34px 3.2vw;display:flex}
.pillar-top{color:var(--muted);justify-content:space-between;display:flex}
.pillar h3{letter-spacing:-.06em;margin:auto 0 20px;font-size:clamp(56px,7vw,100px);font-weight:400}
.pillar p{color:var(--muted);max-width:560px;margin:0;font-size:17px;line-height:1.5}

/* Campus diagram */
.campuses{background:var(--paper);color:var(--ink);padding:130px 3.2vw}
.campuses .section-index{color:var(--rust)}
.campus-visual{grid-template-columns:1fr .65fr 1fr;align-items:center;margin:70px 0 100px;display:grid}
.campus-node{aspect-ratio:1;text-align:center;border:1px solid #9a9a90;border-radius:50%;flex-direction:column;justify-content:center;align-items:center;display:flex;position:relative}
.campus-node:before{content:"";border:1px dashed #aaa99f;border-radius:50%;position:absolute;inset:12%}
.campus-node span,.campus-node small{font-family:var(--font-geist-mono);letter-spacing:.12em;text-transform:uppercase;z-index:1;font-size:12px}
.campus-node strong{letter-spacing:-.04em;z-index:1;margin:16px 0 8px;font-size:clamp(22px,2.5vw,42px)}
.node-two{background:var(--ink);color:var(--paper)}
.connection{color:var(--rust);font-family:var(--font-geist-mono);letter-spacing:.1em;white-space:nowrap;align-items:center;font-size:11px;display:flex}
.connection i{background:var(--rust);flex:1;height:1px}
.connection span{padding:0 12px}
.campus-copy{grid-template-columns:1.4fr .6fr;align-items:end;gap:70px;display:grid}
.campus-copy h2{font-size:clamp(50px,6vw,96px)}
.campus-copy p{color:#5f605a;font-size:18px;line-height:1.55}

/* Development model */
.approach h2{margin-bottom:90px}
.stage-list{border-top:1px solid var(--line)}
.stage-list article{border-bottom:1px solid var(--line);grid-template-columns:100px 1fr 1fr;align-items:start;gap:30px;padding:26px 0;display:grid}
.stage-list span{font-family:var(--font-geist-mono);color:var(--signal);font-size:13px}
.stage-list h3{letter-spacing:-.04em;margin:0;font-size:42px;font-weight:400}
.stage-list p{max-width:520px;color:var(--muted);margin:5px 0 0;line-height:1.5}

/* Community */
.community{border-top:1px solid var(--line);background:#111312;grid-template-columns:1.15fr .85fr;gap:8vw;padding:130px 3.2vw;display:grid}
.community h2{font-size:clamp(50px,6vw,90px)}
.community-copy>p{color:var(--muted);margin:70px 0;font-size:21px;line-height:1.5}
.community ul{margin:0;padding:0;list-style:none}
.community li{border-top:1px solid var(--line);grid-template-columns:50px 1fr;padding:20px 0;line-height:1.45;display:grid}
.community li span{font-family:var(--font-geist-mono);color:var(--signal);font-size:13px}

/* Closing CTA band. There is no accent to shift to on a signal-green field, so
   the link borrows the nav's vocabulary: a solid ink bar wipes in over the
   existing hairline while the arrow steps the way it points. The bar is a
   positioned pseudo-element rather than a thicker border, so nothing reflows. */
.cta{background:var(--signal);min-height:75vh;color:var(--ink);flex-direction:column;justify-content:space-between;padding:120px 3.2vw;display:flex}
.cta .section-index{color:var(--ink)}
.cta h2{font-size:clamp(60px,9vw,140px)}
.cta em{color:#5a651f}
.cta a{border-bottom:1px solid var(--ink);font-family:var(--font-geist-mono);font-size:15px;text-transform:uppercase;letter-spacing:.12em;align-self:flex-end;align-items:center;gap:60px;padding:16px 0;display:flex;position:relative}
.cta a:after{content:"";background:var(--ink);transform-origin:0;transform:scaleX(0);transition:transform .42s cubic-bezier(.22,.61,.36,1);position:absolute;bottom:-1px;left:0;right:0;height:2px}
.cta a:hover:after,.cta a:focus-visible:after{transform:scaleX(1)}
.cta a span{transition:transform .34s cubic-bezier(.22,.61,.36,1);display:inline-block}
.cta a:hover span,.cta a:focus-visible span{transform:translate(4px,-4px)}
.cta a:focus-visible{outline:none}

/* --------------------------------------------------------------------------
   5. CONTACT PAGE
   -------------------------------------------------------------------------- */
.page-contact{padding:110px 3.2vw 120px}
.contact-grid{grid-template-columns:1.05fr .95fr;align-items:start;gap:8vw;display:grid}
.contact-intro h1{margin:0 0 34px;font-size:clamp(50px,7vw,108px);letter-spacing:-.065em;line-height:.94;transform:none}
.contact-intro h1 em{color:var(--signal);font-style:normal}
.contact-intro>p{color:var(--muted);max-width:520px;margin:0 0 50px;font-size:20px;line-height:1.55}
.contact-detail{border-top:1px solid var(--line);flex-direction:column;gap:26px;padding-top:28px;display:flex}
.contact-detail div{gap:9px;display:grid}
.contact-detail span{font-family:var(--font-geist-mono);font-size:13px;letter-spacing:.14em;text-transform:uppercase;color:var(--muted)}
.contact-detail p{color:var(--paper);margin:0;font-size:16px;line-height:1.6}

.inquiry{border:1px solid var(--line);background:#111312;padding:40px}
.inquiry-label{font-family:var(--font-geist-mono);font-size:13px;letter-spacing:.16em;text-transform:uppercase;color:var(--signal);margin-bottom:34px}
.field{gap:10px;margin-bottom:28px;display:grid}
.field label{font-family:var(--font-geist-mono);font-size:13px;letter-spacing:.14em;text-transform:uppercase;color:var(--muted)}
.field input,.field textarea{background:#0000;border-bottom:1px solid var(--line);color:var(--paper);letter-spacing:-.01em;padding:10px 0;font-family:inherit;font-size:16px}
.field textarea{min-height:118px;line-height:1.5;resize:vertical}
.field input:focus,.field textarea:focus{border-bottom-color:var(--signal);outline:none}
.field input::placeholder,.field textarea::placeholder{color:#5c5f5a}
.field input:invalid:not(:placeholder-shown){border-bottom-color:var(--rust)}
.hp{position:absolute;left:-9999px;width:1px;height:1px;overflow:hidden}
.submit{background:var(--signal);color:var(--ink);font-family:var(--font-geist-mono);font-size:13px;letter-spacing:.14em;text-transform:uppercase;cursor:pointer;justify-content:space-between;align-items:center;gap:40px;width:100%;margin-top:6px;padding:20px 22px;display:flex;transition:background-color .28s ease}
.submit span{font-size:16px}
.submit:hover{background:var(--paper)}
.form-note{font-family:var(--font-geist-mono);font-size:11px;letter-spacing:.12em;text-transform:uppercase;color:var(--muted);margin-top:20px;line-height:1.8}

/* --------------------------------------------------------------------------
   6. RESPONSIVE
   Four tiers, each narrowing what came before rather than restating it.
   -------------------------------------------------------------------------- */

/* ---- <=1180px : small laptop, large tablet landscape --------------------- */
@media (width<=1180px){
  .statement,.approach,.campuses,.community{padding:96px 4vw}
  .hero{padding:5vw 4vw 3vw}
  .pillar{padding:30px 4vw}
  .stage-list article{grid-template-columns:110px 1fr 1fr;gap:24px}
  .cta,footer{padding-left:4vw;padding-right:4vw}
  .page-contact{padding:96px 4vw 100px}
  .contact-grid{gap:5vw}
}

/* ---- <=1024px : tablet - the nav becomes a menu -------------------------- */
@media (width<=1024px){
  .menu-toggle{display:flex}

  /* The same <nav>, restyled as a panel covering everything below the header.
     It stays in the DOM and in source order; only its presentation changes. */
  nav{visibility:hidden;opacity:0;background:var(--ink);border-top:1px solid var(--line);flex-direction:column;align-items:stretch;height:auto;transition:opacity .3s ease,transform .38s cubic-bezier(.22,.61,.36,1),visibility .3s;position:fixed;inset:70px 0 0;transform:translateY(-10px);z-index:19;overflow-y:auto}
  nav[data-open=true]{visibility:visible;opacity:1;transform:none}
  nav a{border-left:0;border-bottom:1px solid var(--line);justify-content:start;place-items:center start;height:auto;padding:26px 4vw;font-size:14px;opacity:0;transform:translateY(12px);transition:opacity .35s ease,transform .35s ease,color .28s ease,background-color .28s ease}
  .nav-cta{border-right:0}
  nav[data-open=true] a{opacity:1;transform:none}
  nav[data-open=true] a:nth-child(1){transition-delay:.06s}
  nav[data-open=true] a:nth-child(2){transition-delay:.11s}
  nav[data-open=true] a:nth-child(3){transition-delay:.16s}
  nav[data-open=true] a:nth-child(4){transition-delay:.21s}
  .nav-cta:before{display:block}
  .nav-cta:hover,.nav-cta:focus-visible{background:#d6ff3f08;border-color:var(--line);color:var(--signal)}
  .site-header:has(.menu-toggle[aria-expanded=true]){background:var(--ink);-webkit-backdrop-filter:none;backdrop-filter:none}

  .metrics{grid-template-columns:1fr 1fr}
  .metrics article:nth-child(2){border-right:0}
  .statement>p{margin:48px 0 0 25%}
  .campus-copy{grid-template-columns:1fr;gap:36px}
  .community{grid-template-columns:1fr;gap:48px}
  .contact-grid{grid-template-columns:1fr;gap:48px}
  .contact-intro>p{max-width:none}
}

/* ---- <=820px : large phone, small tablet portrait ------------------------ */
@media (width<=820px){
  .pillars{grid-template-columns:1fr}
  .pillar{border-right:0;min-height:330px}
  .campus-visual{grid-template-columns:1fr;gap:0;margin:50px 0 70px}
  .campus-node{width:80%;margin:auto}
  .connection{flex-direction:column;justify-content:center;height:100px}
  .connection i{flex:1;width:1px}
  .connection span{padding:8px}
  .stage-list article{grid-template-columns:150px 1fr;gap:20px}
  .stage-list p{grid-column:2}
  .cta{min-height:0}
  .cta a{align-self:flex-start;margin-top:56px}
  footer{grid-template-columns:1fr}
  footer>div:last-child{align-items:flex-start}
}

/* ---- <=600px : phone ----------------------------------------------------- */
@media (width<=600px){
  .site-header{padding:0 20px}
  .brand-name{display:none}
  .brand-flag{margin-left:-5px;font-size:19px}
  nav{inset:70px 0 0}
  nav a{padding:22px 20px;font-size:13px}
  .hero{min-height:82vh;padding:38px 20px 24px}
  /* 23vw pushed "Power the" onto two lines and ran the headline to the edge.
     21vw is the largest size that keeps that line whole from 360px up. */
  h1{margin:8vh 0;font-size:21vw}
  /* The ring bled ~120px past the right edge, so it read as a cut-off shape
     rather than a graphic. Smaller and pulled in, it sits behind the headline
     as a clean arc. */
  .hero:after{width:68vw;height:68vw;top:4vh;right:-24vw;box-shadow:0 0 0 6vw #d6ff3f05}
  .hero-bottom{grid-template-columns:1fr;gap:34px}
  .arrow-link{justify-self:start}
  .metrics article{min-height:125px;padding:22px 20px}
  .statement,.approach,.campuses,.community{padding:80px 20px}
  .section-index{margin-bottom:38px}
  .statement>p{margin:45px 0 0}
  .pillar{min-height:300px;padding:26px 20px}
  .stage-list article{grid-template-columns:1fr;gap:12px}
  .stage-list p{grid-column:1}
  .community-copy>p{margin:20px 0 50px}
  .cta{padding:80px 20px}
  footer{padding:45px 20px}

  /* Contact page */
  .page-contact{padding:70px 20px 90px}
  .contact-intro h1{font-size:16vw}
  .inquiry{padding:26px 22px}
}

/* --------------------------------------------------------------------------
   7. REDUCED MOTION
   Hover states still change color and fill - they just arrive instantly, and
   the hero parallax is switched off in the script as well.
   -------------------------------------------------------------------------- */
@media (prefers-reduced-motion:reduce){
  nav,nav a,nav a:before,.menu-toggle,.menu-toggle .bars i,.arrow-link,.arrow-link span,.cta a:after,.cta a span{transition:none}
  nav a:hover:before,nav a:focus-visible:before,nav a[aria-current=page]:before{transform:none;transition:none}
  nav[data-open=true] a{transition:none;transform:none}
  nav[data-open=true] a:nth-child(1),nav[data-open=true] a:nth-child(2),nav[data-open=true] a:nth-child(3),nav[data-open=true] a:nth-child(4){transition-delay:0s}
  .hero-grid,.hero:after,h1,.hero-bottom{transform:none}
  .arrow-link:hover span,.cta a:hover span{transform:none}
  html{scroll-behavior:auto}
}


/* --------------------------------------------------------------------------
   Form status + Turnstile
   Added alongside the /api/contact Worker endpoint. The status block is
   hidden until assets/site.js writes a sending / success / error message
   into it.
   -------------------------------------------------------------------------- */
.form-status{display:none;margin:0 0 20px;padding:12px 14px;border:1px solid;font-size:14px;line-height:1.5}
.form-status.is-visible{display:block}
.form-status.is-success{color:#7fe0a7;border-color:rgba(127,224,167,.4)}
.form-status.is-error{color:#ff8f8f;border-color:rgba(255,143,143,.4)}
.field--turnstile{margin:4px 0 20px}
