/* 3D layer styles. Everything is gated on html.has3d-* classes that 3d.js only adds on success,
   so if WebGL/CDN fails the original layout is untouched. */
canvas.ready{opacity:1!important}

/* ---------- hero ---------- */
.hero-3d{display:none}
.has3d-hero .hero-3d{display:block;position:absolute;inset:0;width:100%;height:100%;z-index:1;opacity:0;transition:opacity 1.4s;cursor:grab}
.has3d-hero .hero-3d:active{cursor:grabbing}
.has3d-hero .hero-inner{pointer-events:none;width:100%;z-index:2}
.has3d-hero .hero-inner a,.has3d-hero .hero-inner .chips{pointer-events:auto}
.has3d-hero .hero{display:flex;align-items:center;min-height:min(86vh,760px)}
.has3d-hero .hero-bg::after{background:linear-gradient(90deg,rgba(14,27,20,.92) 0%,rgba(14,27,20,.7) 42%,rgba(14,27,20,.35) 100%),radial-gradient(60% 50% at 18% 0%,rgba(95,174,67,.2),transparent 60%)}
.hero-ctl{display:none}
.has3d-hero .hero-ctl{display:flex;position:absolute;z-index:4;right:24px;bottom:22px;align-items:center;gap:12px;color:#cfdccb;font-size:.78rem;font-weight:600}
.hc-chips,.est-chips div{display:flex;gap:1px;padding:3px;border-radius:99px;background:rgba(10,20,14,.62);-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);border:1px solid rgba(255,255,255,.12)}
.hc-chips button,.est-chips button{border:0;background:none;color:#dbe7d6;font:700 .72rem var(--body);padding:6px 10px;white-space:nowrap;border-radius:99px;cursor:pointer;transition:background .25s,color .25s}
.hc-chips button:hover,.est-chips button:hover{background:rgba(255,255,255,.12)}
.hc-chips button.on,.est-chips button.on{background:var(--green);color:#0e1b14}
.hc-hint{opacity:.75;letter-spacing:.04em}
.est-chips span{letter-spacing:.04em;background:rgba(10,20,14,.62);-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);padding:6px 10px;font-size:.7rem;border-radius:99px;border:1px solid rgba(255,255,255,.12)}
@media (min-width:1000px){
  .has3d-hero .hero{text-align:left}
  .has3d-hero .hero-title,.has3d-hero .hero-sub,.has3d-hero .chips,.has3d-hero .pill{max-width:560px}
  .has3d-hero .hero-sub{margin-left:0;margin-right:0}
  .has3d-hero .hero-cta,.has3d-hero .chips{justify-content:flex-start}
  .has3d-hero .hero-inner > *{margin-left:0}
  .has3d-hero .hero-dots{display:none}
}
@media (max-width:999px){
  .has3d-hero .hero{display:block;padding-bottom:400px}
  .has3d-hero .hero-3d{top:auto;bottom:0;height:420px}
  .has3d-hero .hero-bg::after{background:linear-gradient(180deg,rgba(14,27,20,.74) 0%,rgba(14,27,20,.6) 45%,rgba(14,27,20,.93) 100%)}
  .has3d-hero .hero-ctl{left:0;right:0;justify-content:center;bottom:14px}
  .has3d-hero .hc-hint,.has3d-hero .hero-dots{display:none}
}

/* ---------- how it works: sticky scene + scrolling steps ---------- */
.how-stage{display:none}
.has3d-how .how-3d{display:grid;grid-template-columns:1.15fr 1fr;gap:40px;align-items:start;margin-top:30px}
.has3d-how .how-stage{display:block;position:sticky;top:92px;height:min(70vh,560px);border-radius:24px;overflow:hidden;border:1px solid var(--line);box-shadow:0 40px 80px -40px rgba(0,0,0,.6);background:#1a2a22}
.has3d-how .how-stage canvas{width:100%;height:100%;display:block;opacity:0;transition:opacity 1s;cursor:grab}
.has3d-how .how-grid{grid-template-columns:1fr;margin:0;gap:0}
.has3d-how .how-step{min-height:60vh;display:flex;flex-direction:column;justify-content:center;margin:0 0 20vh;opacity:.4;transform:scale(.96) translateX(14px);transition:opacity .5s,transform .5s,box-shadow .5s}
.has3d-how .how-step:last-child{margin-bottom:10vh}
.has3d-how .how-step.active{opacity:1;transform:none;box-shadow:0 26px 56px -28px rgba(22,36,26,.5)}
.how-hud{position:absolute;left:14px;top:14px;margin:0;padding:11px 14px;list-style:none;display:grid;gap:7px;border-radius:16px;background:rgba(10,20,14,.58);-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);border:1px solid rgba(255,255,255,.12);color:#e8f0e4;font:700 .74rem var(--body);pointer-events:none}
.how-hud li{display:flex;align-items:center;gap:9px;opacity:.5;transition:opacity .4s}
.how-hud i{width:13px;height:13px;border-radius:50%;border:2px solid #9fb59a;box-sizing:border-box;transition:all .4s;position:relative}
.how-hud li.now{opacity:1}.how-hud li.now i{border-color:#ffd24d;box-shadow:0 0 0 4px rgba(255,210,77,.22);animation:hudPulse 1.2s ease-in-out infinite}
.how-hud li.done{opacity:1}.how-hud li.done i{background:var(--green);border-color:var(--green)}
.how-hud li.done i::after{content:"";position:absolute;left:2px;top:-1px;width:3px;height:6px;border:solid #0e1b14;border-width:0 2px 2px 0;transform:rotate(45deg)}
@keyframes hudPulse{50%{box-shadow:0 0 0 7px rgba(255,210,77,0)}}
.how-cap{position:absolute;left:18px;right:18px;bottom:16px;display:flex;flex-direction:column;gap:2px;color:#fff;text-shadow:0 2px 14px rgba(0,0,0,.65);pointer-events:none}
.how-cap small{font:800 .68rem var(--body);letter-spacing:.18em;color:#ffd24d}
.how-cap b{font:700 clamp(1.1rem,2.4vw,1.5rem) var(--head)}
@media (max-width:900px){
  .has3d-how .how-3d{grid-template-columns:1fr;gap:0}
  .has3d-how .how-stage{top:80px;height:38vh;z-index:3}
  .has3d-how .how-hud{padding:8px 10px;gap:4px;font-size:.64rem}
  .has3d-how .how-step{min-height:46vh;margin-bottom:10vh}
}

/* ---------- services: glossy spinning 3D icons ---------- */
.svc-3d{display:none}
.has3d-icons .svc-card .svc-icon{width:64px;height:64px;border-radius:18px;margin-top:-44px;margin-bottom:12px;overflow:visible;position:relative;transition:transform .5s cubic-bezier(.34,1.56,.64,1)}
.has3d-icons .svc-card:hover .svc-icon{transform:translateY(-6px) rotate(-3deg)}
.has3d-icons .svc-icon .icon{display:none}
.has3d-icons .svc-3d{display:block;position:absolute;inset:0;width:100%;height:100%;border-radius:18px;pointer-events:none;filter:drop-shadow(0 4px 4px rgba(0,0,0,.28))}

/* ---------- estimate: preview + service picker = one connected unit ---------- */
.est-3d{display:none}
.has3d-est .est-pick{margin:-34px -34px 26px;padding-bottom:22px;border-bottom:1px solid var(--line);background:linear-gradient(180deg,#1a2a22,rgba(26,42,34,0) 100%)}
.has3d-est .est-3d{display:block;position:relative;border-radius:var(--radius) var(--radius) 0 0;overflow:hidden;background:#1a2a22}
.est-3d canvas{width:100%;height:clamp(300px,36vw,380px);display:block;opacity:0;transition:opacity 1s;cursor:grab}
.has3d-est .est-pick-label{margin:14px 24px 8px;display:flex;flex-wrap:wrap;align-items:baseline;gap:4px 10px}
.has3d-est .est-pick-label small{font-weight:600;color:var(--green)}
.has3d-est .est-pick .svc-check-grid{margin:0 24px;grid-template-columns:repeat(3,1fr);gap:8px}
.has3d-est .est-pick .svc-check{padding:10px 12px;font-size:.84rem;font-weight:600;line-height:1.25;gap:8px;transition:background .25s,border-color .25s,transform .25s}
.has3d-est .est-pick .svc-check:hover{transform:translateY(-2px);border-color:rgba(95,174,67,.6)}
.has3d-est .est-pick .svc-check:has(input:checked){background:rgba(95,174,67,.18);border-color:var(--green)}
.est-chips{position:absolute;top:12px;right:12px;left:auto;display:flex;justify-content:flex-end;align-items:center;gap:6px;color:#e6efe2;font-size:.76rem;font-weight:600;pointer-events:none;text-shadow:0 1px 8px rgba(0,0,0,.5)}
.est-chips span{letter-spacing:.04em;background:rgba(10,20,14,.62);-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);padding:6px 10px;font-size:.7rem;border-radius:99px;border:1px solid rgba(255,255,255,.12)}
.est-chips div{pointer-events:auto}
.est-3d p{position:absolute;left:0;right:0;bottom:0;margin:0;padding:34px 18px 12px;text-align:center;font-weight:700;color:#fff;font-size:.95rem;background:linear-gradient(transparent,rgba(8,16,11,.78));text-shadow:0 1px 8px rgba(0,0,0,.5);pointer-events:none}
@media (max-width:900px){.has3d-est .est-pick .svc-check-grid{grid-template-columns:1fr 1fr}}
@media (max-width:600px){
  .has3d-est .est-pick{margin:-24px -24px 22px}
  .est-3d canvas{height:300px}
  .has3d-est .est-pick-label,.has3d-est .est-pick .svc-check-grid{margin-left:16px;margin-right:16px}
  .has3d-est .est-pick .svc-check{padding:9px 10px;font-size:.78rem}
  .has3d-est .est-pick .svc-check input{width:16px;height:16px}
}

/* ---------- service-area map: regular Google map, themed to the site ---------- */
.area-map{position:relative;border:1px solid rgba(95,174,67,.35);border-radius:24px;overflow:hidden;box-shadow:0 40px 80px -40px rgba(22,36,26,.55),0 0 0 6px rgba(95,174,67,.08);background:#d9e6d2}
.area-map iframe{filter:saturate(.75) sepia(.28) hue-rotate(58deg) brightness(.97) contrast(1.05);transition:filter .5s}
.area-map:hover iframe{filter:saturate(.95) sepia(.12) hue-rotate(40deg) brightness(1) contrast(1.05)}
.area-map::after{content:"";position:absolute;inset:0;pointer-events:none;box-shadow:inset 0 0 60px rgba(14,27,20,.22);border-radius:inherit}
.area-map::before{content:"Based in Santa Cruz";position:absolute;right:14px;top:14px;z-index:2;pointer-events:none;font:800 .78rem var(--body);color:#fff;background:var(--green-2);padding:8px 14px;border-radius:99px;box-shadow:0 8px 20px -8px rgba(0,0,0,.5);letter-spacing:.02em}
.area-list li{transition:background .2s,transform .2s,box-shadow .2s}
.area-list li:hover{background:#e7f3df;transform:translateY(-2px);box-shadow:0 8px 18px -10px rgba(22,36,26,.4)}

/* ---------- gallery: 3D tilt + glare + lightbox ---------- */
.tilt-grid{perspective:1100px}
.g-item{position:relative;display:block;border-radius:16px;overflow:hidden;transform-style:preserve-3d;transition:transform .35s var(--ease),box-shadow .35s;cursor:zoom-in;will-change:transform;opacity:0;transform:translateY(34px) rotateX(14deg)}
.g-item.in{opacity:1;transform:none;transition:opacity .7s var(--ease),transform .9s var(--ease),box-shadow .35s}
.g-item img{width:100%;height:220px;object-fit:cover;display:block;border:0;border-radius:0;transition:transform .5s var(--ease)!important;transform:scale(1)!important}
.g-item:hover img{transform:scale(1.08)!important}
.g-item::after{content:"";position:absolute;inset:0;background:radial-gradient(circle at var(--gx,50%) var(--gy,50%),rgba(255,255,255,.28),transparent 55%);opacity:0;transition:opacity .3s;pointer-events:none}
.g-item:hover::after{opacity:1}
.g-item:focus-visible{outline:3px solid var(--green);outline-offset:3px}
.lb{position:fixed;inset:0;z-index:200;display:flex;align-items:center;justify-content:center;background:rgba(6,12,9,.9);-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px)}
.lb[hidden]{display:none}
.lb figure{margin:0;max-width:min(92vw,1000px);perspective:1400px;text-align:center}
.lb img{max-width:100%;max-height:78vh;border-radius:18px;display:block;margin:0 auto;opacity:0;transform:rotateY(-24deg) scale(.9);transition:transform .6s var(--ease),opacity .45s;box-shadow:0 50px 100px -30px #000}
.lb img.in{opacity:1;transform:none}
.lb figcaption{color:var(--ink-soft);margin-top:14px;font-size:.95rem}
.lb button{position:absolute;border:0;background:rgba(255,255,255,.14);color:#fff;width:48px;height:48px;border-radius:50%;font-size:1.7rem;cursor:pointer;line-height:1;transition:background .2s,transform .2s}
.lb button:hover{background:rgba(255,255,255,.28);transform:scale(1.08)}
.lb-x{top:18px;right:18px}.lb-p{left:18px;top:50%}.lb-n{right:18px;top:50%}
body.lb-open{overflow:hidden}
@media (prefers-reduced-motion:reduce){.lb img,.g-item{transition:opacity .01ms;transform:none!important;opacity:1}}

/* tree icon: light tile so the green tree stands out */
.has3d-icons .svc-card:nth-of-type(4) .svc-icon{background:linear-gradient(135deg,#f7efd2,#d6c387);box-shadow:0 8px 20px -8px rgba(214,195,135,.6)}
