/* ==========================================================================
   Sai Bioenergy — Base layer
   Reset · typography · layout primitives · utilities · a11y
   ========================================================================== */

/* ---- Reset ------------------------------------------------------------- */
*, *::before, *::after { box-sizing: border-box; }
* { margin: 0; }

html {
  -webkit-text-size-adjust: 100%;
  scroll-behavior: smooth;
  scroll-padding-top: calc(var(--header-h) + 1.5rem);
}
@media (prefers-reduced-motion: reduce) { html { scroll-behavior: auto; } }

body {
  font-family: var(--font-body);
  font-size: var(--fs-base);
  line-height: var(--lh-body);
  font-weight: var(--fw-regular);
  color: var(--color-text);
  background: var(--color-bg);
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
  text-rendering: optimizeLegibility;
  overflow-x: hidden;
}

img, picture, video, canvas, svg { display: block; max-width: 100%; }
img, video { height: auto; }
input, button, textarea, select { font: inherit; color: inherit; }
button { background: none; border: 0; cursor: pointer; }
p, li, h1, h2, h3, h4, h5, h6 { overflow-wrap: break-word; }
ul[class], ol[class] { list-style: none; padding: 0; }
table { border-collapse: collapse; width: 100%; }
:where(svg) { fill: currentColor; }

/* ---- Typography -------------------------------------------------------- */
h1, h2, h3, h4, h5, h6, .display {
  font-family: var(--font-display);
  color: var(--color-heading);
  font-weight: var(--fw-semi);
  line-height: var(--lh-heading);
  letter-spacing: var(--tracking-snug);
  text-wrap: balance;
}

.display   { font-size: var(--fs-display); line-height: var(--lh-tight); letter-spacing: var(--tracking-tight); font-weight: var(--fw-bold); }
h1, .h1    { font-size: var(--fs-h1); line-height: var(--lh-tight); letter-spacing: var(--tracking-tight); font-weight: var(--fw-bold); }
h2, .h2    { font-size: var(--fs-h2); }
h3, .h3    { font-size: var(--fs-h3); }
h4, .h4    { font-size: var(--fs-h4); }
h5, .h5    { font-size: var(--fs-h5); font-weight: var(--fw-semi); }
h6, .h6    { font-size: var(--fs-base); font-weight: var(--fw-semi); }

/* Eyebrow — the small tracked-out kicker used above almost every heading */
.eyebrow {
  display: inline-flex;
  align-items: center;
  gap: var(--sp-2);
  font-family: var(--font-body);
  font-size: var(--fs-eyebrow);
  font-weight: var(--fw-semi);
  letter-spacing: var(--tracking-eyebrow);
  text-transform: uppercase;
  color: var(--sbe-green-800);
  margin-bottom: var(--sp-4);
}
.eyebrow::before {
  content: "";
  width: 1.75rem; height: 2px; flex: none;
  background: var(--grad-accent);
  border-radius: var(--r-pill);
}
.eyebrow--center { justify-content: center; }
.eyebrow--on-dark { color: var(--sbe-lime-400); }

/* Lede — the intro paragraph under a section heading */
.lede {
  font-size: var(--fs-lede);
  line-height: var(--lh-snug);
  color: var(--color-text-soft);
  font-weight: var(--fw-regular);
  max-width: 60ch;
  text-wrap: pretty;
}
.prose p { max-width: 68ch; color: var(--color-text-soft); text-wrap: pretty; }
.prose > * + * { margin-top: var(--sp-5); }
.prose strong { color: var(--color-heading); font-weight: var(--fw-semi); }

.text-muted { color: var(--color-text-muted); }
.text-accent { color: var(--sbe-green-800); }
.text-balance { text-wrap: balance; }

/* Gradient-filled words for occasional headline emphasis */
.text-grad {
  background: var(--grad-accent);
  -webkit-background-clip: text; background-clip: text;
  -webkit-text-fill-color: transparent; color: transparent;
}

/* ---- Links -------------------------------------------------------------- */
a { color: var(--color-primary); text-decoration: none; transition: color var(--t-fast) var(--ease-out); }
a:hover { color: var(--sbe-green-800); }

.link-arrow {
  display: inline-flex; align-items: center; gap: var(--sp-2);
  font-weight: var(--fw-semi); font-size: var(--fs-sm);
  letter-spacing: .01em;
}
.link-arrow svg { width: 1.05em; height: 1.05em; transition: transform var(--t-base) var(--ease-out); }
.link-arrow:hover svg { transform: translateX(4px); }

/* Underline that draws in on hover */
.link-underline { position: relative; }
.link-underline::after {
  content: ""; position: absolute; left: 0; right: 0; bottom: -2px;
  height: 1.5px; background: currentColor;
  transform: scaleX(0); transform-origin: left;
  transition: transform var(--t-base) var(--ease-out);
}
.link-underline:hover::after { transform: scaleX(1); }

/* ---- Focus & skip link -------------------------------------------------- */
:focus-visible {
  outline: 3px solid var(--color-focus);
  outline-offset: 3px;
  border-radius: var(--r-xs);
}
.skip-link {
  position: absolute; left: var(--sp-4); top: var(--sp-4);
  z-index: var(--z-toast);
  transform: translateY(-160%);
  background: var(--sbe-blue-700); color: #fff;
  padding: var(--sp-3) var(--sp-5);
  border-radius: var(--r-pill);
  font-weight: var(--fw-semi); font-size: var(--fs-sm);
  transition: transform var(--t-base) var(--ease-out);
}
.skip-link:focus { transform: translateY(0); color: #fff; }

.visually-hidden {
  position: absolute !important; width: 1px; height: 1px;
  padding: 0; margin: -1px; overflow: hidden;
  clip: rect(0 0 0 0); clip-path: inset(50%); white-space: nowrap;
}

/* ---- Layout primitives -------------------------------------------------- */
.container      { width: 100%; max-width: var(--container); margin-inline: auto; padding-inline: var(--gutter); }
.container-wide { width: 100%; max-width: var(--container-wide); margin-inline: auto; padding-inline: var(--gutter); }
.container-text { width: 100%; max-width: var(--container-text); margin-inline: auto; padding-inline: var(--gutter); }

/* overflow:clip (not hidden) contains decorative .blob bleed without
   creating a scroll container — so position:sticky children still work. */
.section        { padding-block: var(--section-y); position: relative; overflow: clip; }
.section--tight { padding-block: var(--section-y-tight); }
.section--loose { padding-block: var(--section-y-loose); }
.section--flush-top { padding-top: 0; }
.section--alt   { background: var(--color-bg-alt); }
.section--sky   { background: var(--grad-sky); }
.section--mist  { background: var(--grad-mist); }
.section--leaf  { background: var(--grad-leaf); }

/* Dark sections are used sparingly — the brief calls for a bright site */
.section--deep {
  background: var(--sbe-blue-950);
  color: rgba(255, 255, 255, .88);
}
.section--deep :is(h1, h2, h3, h4, h5, h6) { color: #fff; }
.section--deep .lede, .section--deep .prose p { color: rgba(255, 255, 255, .78); }

/* Section header block: eyebrow + heading + lede */
.section-head { max-width: 46rem; margin-bottom: clamp(2rem, 1.5rem + 2vw, 3.75rem); }
.section-head--center { margin-inline: auto; text-align: center; }
.section-head--center .lede { margin-inline: auto; }
.section-head > * + * { margin-top: var(--sp-4); }
.section-head--wide { max-width: 58rem; }

/* Split header: heading left, supporting copy right */
.section-head-split {
  display: grid; gap: var(--sp-6) var(--sp-12);
  grid-template-columns: 1fr;
  align-items: end;
  margin-bottom: clamp(2rem, 1.5rem + 2vw, 3.75rem);
}
@media (min-width: 62rem) {
  .section-head-split { grid-template-columns: minmax(0, 1.05fr) minmax(0, .95fr); }
}

/* Generic auto-fit grid */
.grid { display: grid; gap: var(--sp-6); }
.grid--2 { grid-template-columns: repeat(auto-fit, minmax(min(100%, 21rem), 1fr)); }
.grid--3 { grid-template-columns: repeat(auto-fit, minmax(min(100%, 17.5rem), 1fr)); }
.grid--4 { grid-template-columns: repeat(auto-fit, minmax(min(100%, 14rem), 1fr)); }
.grid--tight { gap: var(--sp-4); }
.grid--loose { gap: clamp(1.5rem, 1rem + 2vw, 3rem); }

/* Fixed 2-col split that collapses cleanly */
.split {
  display: grid; gap: clamp(2rem, 1.5rem + 3vw, 4.5rem);
  grid-template-columns: 1fr; align-items: center;
}
@media (min-width: 60rem) {
  .split { grid-template-columns: 1fr 1fr; }
  .split--40-60 { grid-template-columns: 4fr 6fr; }
  .split--60-40 { grid-template-columns: 6fr 4fr; }
  .split--reverse > :first-child { order: 2; }
}
.split--top { align-items: start; }

.flow > * + * { margin-top: var(--sp-4); }
.flow-lg > * + * { margin-top: var(--sp-6); }
.stack-actions { display: flex; flex-wrap: wrap; gap: var(--sp-3) var(--sp-4); align-items: center; }
.stack-actions--center { justify-content: center; }

/* ---- Utilities ---------------------------------------------------------- */
.text-center { text-align: center; }
.mt-0 { margin-top: 0; } .mt-4 { margin-top: var(--sp-4); }
.mt-6 { margin-top: var(--sp-6); } .mt-8 { margin-top: var(--sp-8); }
.mt-12 { margin-top: var(--sp-12); }
.full-bleed { width: 100vw; margin-left: 50%; transform: translateX(-50%); }
.overlap-top { margin-top: clamp(-6rem, -4vw, -2.5rem); position: relative; z-index: var(--z-raised); }
.no-scroll { overflow: hidden; }

/* Decorative soft blobs for background depth. Purely presentational. */
.blob {
  position: absolute; border-radius: 50%;
  filter: blur(70px); opacity: .5; pointer-events: none; z-index: 0;
}
.blob--green { background: var(--sbe-green-200); }
.blob--lime  { background: var(--sbe-lime-200); }
.blob--blue  { background: var(--sbe-blue-200); }
.section > .container, .section > .container-wide { position: relative; z-index: var(--z-base); }

/* Thin brand rule */
.rule { height: 1px; background: var(--color-border); border: 0; }
.rule--accent { height: 3px; width: 4rem; background: var(--grad-accent); border-radius: var(--r-pill); border: 0; }

/* ---- Scroll reveal ------------------------------------------------------ */
/* Elements opt in with [data-reveal]; JS adds .is-visible via
   IntersectionObserver. Without JS everything stays visible. */
[data-reveal] {
  opacity: 0;
  transform: translateY(22px);
  transition: opacity var(--t-reveal) var(--ease-out), transform var(--t-reveal) var(--ease-out);
  transition-delay: var(--reveal-delay, 0ms);
}
[data-reveal="fade"]  { transform: none; }
[data-reveal="left"]  { transform: translateX(-28px); }
[data-reveal="right"] { transform: translateX(28px); }
[data-reveal="scale"] { transform: scale(.965); }
[data-reveal].is-visible { opacity: 1; transform: none; }
.no-js [data-reveal], html:not(.js) [data-reveal] { opacity: 1; transform: none; }

@media (prefers-reduced-motion: reduce) {
  [data-reveal] { opacity: 1 !important; transform: none !important; }
}

/* ---- Print -------------------------------------------------------------- */
@media print {
  .site-header, .site-footer, .hero__media, .cta-banner { display: none !important; }
  body { color: #000; background: #fff; }
}
