/*
  pages.css — rules that belong to exactly one page
  ------------------------------------------------------------
  Optional by design: if a page's styling gets folded into shared
  components, its section below can just be deleted. Grouped by
  page so it's easy to find/delete a whole section at once.

  Loaded after core.css, so these can rely on core's base styles
  and only add what's specific to that page.
*/

/* =========================================================
   HOME  (/)
   ========================================================= */

/* "Who We Build For" 4-card grid — /home-draft/ only for now. Reuses the
   shared .card look, just needs its own column count (grid3 is 3-up). */
.solutions-grid {
  display: grid;
  grid-template-columns: repeat(4, 1fr);
  gap: 18px
}

.hero {
  position: relative;
  overflow: hidden;
  padding: 100px 20px 70px;
  min-height: 520px;
  box-sizing: border-box;
  background: radial-gradient(circle at 60% 10%, var(--tint-primary-glow), transparent 35%), var(--color-bg)
}

/* Subtle decorative backdrop (soft hill silhouette + glow), sits behind
   the hero content and never competes with it — low opacity, no pointer
   events, and the actual conversion elements (headline, price card) get
   z-index:1 so they always paint on top regardless of source order. */
.hero-illustration {
  position: absolute;
  inset: 0;
  width: 100%;
  height: 100%;
  object-fit: cover;
  object-position: top;
  pointer-events: none;
  z-index: 0
}

.hero-grid {
  position: relative;
  z-index: 1;
  max-width: 1120px;
  margin: auto;
  display: grid;
  grid-template-columns: 1.25fr .75fr;
  gap: 55px;
  align-items: center
}

.actions {
  display: flex;
  gap: 10px;
  align-items: center;
  flex-wrap: wrap
}

.pill {
  padding: 7px 12px;
  background: var(--color-brand-softer);
  border: 1px solid var(--color-brand-border);
  color: var(--color-brand-strong)
}

.pill::before {
  content: "";
  display: inline-block;
  width: 6px;
  height: 6px;
  margin-right: 7px;
  border-radius: 50%;
  background: currentColor;
  vertical-align: 1px
}

.hero h1 {
  font-size: clamp(36px, 5vw, 57px);
  line-height: 1.12;
  letter-spacing: -1.8px;
  margin: 20px 0;
  animation: heroTitleIn .8s cubic-bezier(.16, .84, .44, 1) both
}

.hero h1 em {
  font-style: normal;
  background: var(--gradient-hero-em);
  -webkit-background-clip: text;
  background-clip: text;
  color: transparent
}

/* Typing-cursor bar, shown only while app.js has added .typing to the em
   (see app.js — it clears the phrase and retypes it character-by-character
   after the headline's fade-up settles, then removes this class once done).
   A plain solid color, not currentColor: the em's own color is transparent
   (that's what makes the background-clip gradient text trick work), so
   currentColor would resolve to invisible here. */
.hero h1 em.typing::after {
  content: "";
  display: inline-block;
  width: 3px;
  height: .85em;
  margin-left: 3px;
  background: var(--color-brand);
  vertical-align: -0.1em;
  animation: heroCursorBlink .9s step-end infinite
}

/* One-time entrance on page load — not a looping/attention-grabbing
   effect, just a subtle settle-in for the first thing a visitor reads.
   Uses `both` fill-mode so the pre-animation state (opacity 0) applies
   immediately and the end state holds after — no flash of unstyled
   content, nothing to reset on repeat visits since it only runs once
   per page load. */
@keyframes heroTitleIn {
  from { opacity: 0; transform: translateY(16px) }
  to   { opacity: 1; transform: translateY(0) }
}

@keyframes heroCursorBlink {
  0%, 100% { opacity: 1 }
  50% { opacity: 0 }
}

@media (prefers-reduced-motion: reduce) {
  .hero h1,
  .hero h1 em.typing::after {
    animation: none
  }
}

.checks {
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: 9px;
  margin: 24px 0;
  color: var(--color-slate-700);
  font-size: 13px
}

/* Home "Before You Start" section — soft diagonal mint wash instead of a
   bare white block, so it reads as its own distinct moment between the
   two .alt (grey) sections above and below. Kept to the same low-opacity
   tint family as .hero/.page-hero rather than --gradient-brand, since
   this section's text/icons are dark-on-light and a saturated gradient
   would need a full color rework to stay readable. */
#realtalk {
  background: linear-gradient(135deg, var(--color-primary-50), var(--color-bg) 60%)
}

/* "Why Work With Us" sits directly below #realtalk with no .alt band
   between them, so the gradient is mirrored (315deg vs 135deg) rather
   than repeated identically — keeps the two sections reading as a
   gentle flow of color down the page instead of one flat merged block. */
#whyus {
  background: linear-gradient(315deg, var(--color-primary-50), var(--color-bg) 60%)
}

/* Home hero price card (wraps the shared .price component) */
.price-card {
  padding: 25px;
  box-shadow: 0 20px 50px var(--tint-card-shadow)
}

.price-head {
  display: flex;
  justify-content: space-between;
  border-bottom: 1px solid var(--color-border);
  padding-bottom: 17px
}

.price-head small {
  display: block;
  font-size: 10px;
  color: var(--color-brand);
  font-weight: 800
}

/* Tourism & Hospitality audience cards */
.tour {
  padding: 24px;
  display: flex;
  flex-direction: column
}

.tour-top {
  display: flex;
  justify-content: space-between
}

.pain {
  background: var(--color-warn-50);
  border: 1px solid var(--color-warn-200);
  border-radius: 11px;
  padding: 11px;
  font-size: 11px;
  color: var(--color-text-soft);
  margin: 12px 0
}

.tour h4 {
  font-size: 11px;
  text-transform: uppercase;
  color: var(--color-slate-400);
  letter-spacing: .08em;
  margin: 5px 0
}


/* =========================================================
   SERVICES  (/services/)
   ========================================================= */

.three {
  grid-template-columns: repeat(3, 1fr);
  margin-top: 30px
}

/* Pricing block (#pricing) — merged in from the old standalone /pricing/
   page, now living at the top of Services above the existing 6-card
   grid below (that grid is unchanged). Just the standing starting price
   (.start-price) plus what's included — no separate offer card here;
   the ₹4,999 launch offer is only shown in the topbar announcement. */
.start-price {
  font-family: var(--font-subchild);
  font-size: 40px;
  font-weight: 900;
  color: var(--color-text);
  margin: 0
}

.pricing-includes {
  display: flex;
  justify-content: center;
  flex-wrap: wrap;
  gap: 10px
}

.pricing-includes>div {
  display: flex;
  align-items: center;
  gap: 8px;
  background: var(--color-white);
  border: 1px solid var(--color-border);
  border-radius: 12px;
  padding: 10px 16px;
  font-size: 12px;
  font-weight: 650;
  color: var(--color-slate-700)
}

.pi-icon {
  display: inline-flex;
  color: var(--color-brand)
}

.bench {
  display: grid;
  grid-template-columns: repeat(4, 1fr);
  gap: 15px;
  margin-bottom: 35px
}

.bench>div {
  background: var(--color-white);
  border: 1px solid var(--color-border);
  border-radius: 15px;
  padding: 18px;
  text-align: center;
  box-shadow: 0 4px 16px var(--tint-card-shadow)
}

.bench b {
  display: block;
  font-size: 20px;
  color: var(--color-brand)
}

.bench span,
.bench small {
  display: block;
  font-size: 11px
}

.bench small {
  color: var(--color-text-muted)
}

/* Plain logo strip (real brand marks from assets/images/icons/, same
   source as the About/footer credibility logos) — icons only, no card
   chrome, no name/description text. title+alt carry the name for a11y
   and hover tooltips instead of a visible label. */
.tech-logos {
  display: flex;
  flex-wrap: wrap;
  justify-content: center;
  align-items: center;
  gap: 14px
}

.tech-logo-tile {
  width: 64px;
  height: 64px;
  border-radius: 16px;
  background: var(--color-white);
  border: 1px solid var(--color-border);
  box-shadow: 0 4px 16px var(--tint-card-shadow);
  display: grid;
  place-items: center;
  transition: transform .15s, box-shadow .15s
}

.tech-logo-tile:hover {
  transform: translateY(-3px);
  box-shadow: 0 8px 20px var(--tint-card-shadow)
}

.tech-logo-tile img {
  max-width: 28px;
  max-height: 28px;
  display: block
}

.tech-logo-github {
  color: #181717
}

/* Heading + icon, e.g. "Built for Speed, Stability & Clean Code" —
   .heading centers its content, so making the h2 itself an inline flex
   row keeps icon+text centered together as one unit. */
.heading h2 svg {
  color: var(--color-brand);
  vertical-align: -5px;
  margin-right: 8px
}


/* =========================================================
   PORTFOLIO  (/portfolio/)
   ------------------------------------------------------------
   Currently unused — the page ships as "who we serve" category
   cards (using the shared .card / .grid3 from core.css) rather
   than a real project grid. Kept here so a future real-projects
   grid can drop straight in without rebuilding the CSS.
   ========================================================= */

.filters {
  display: flex;
  justify-content: center;
  gap: 8px;
  flex-wrap: wrap;
  margin: -15px 0 30px
}

.filters button {
  border: 0;
  border-radius: 999px;
  padding: 8px 13px;
  font-size: 11px;
  background: var(--color-border);
  color: var(--color-text-soft)
}

.filters button.active {
  background: var(--color-brand);
  color: var(--color-white)
}

.portfolio-grid {
  display: grid;
  grid-template-columns: repeat(3, 1fr);
  gap: 20px
}

.portfolio {
  overflow: hidden
}

.portfolio img {
  width: 100%;
  height: 185px;
  object-fit: cover;
  display: block
}

.portfolio-body {
  padding: 17px
}

.portfolio-body p {
  font-size: 12px;
  color: var(--color-text-muted)
}

.portfolio-body strong {
  font-size: 11px;
  color: var(--color-brand)
}

/* Real client grid (#clientGrid) — the .portfolio-grid/.portfolio/
   .portfolio-body trio above, finally put to use. .card-link (core.css)
   handles each card's "Visit Site" line; app.js randomly reveals 6 of
   the .client-card elements per visit and hides the rest.

   The thumbnail is a real screenshot of each client's site (captured via
   `npm run thumbs`, see scripts/capture-thumbnails.js), not a live embed
   — a real snippet of the web work itself, not a picture of a hotel
   room, and immune to X-Frame-Options/hosting-WAF blocking since nothing
   is being framed. A client with no captured image yet falls back to
   the plain icon tile instead of a broken image link.

   Whole card acts as one link (.client-card-cover, an invisible overlay
   added in portfolio.njk) with a hover lift/shadow for affordance —
   .card-link stays as the one real, focusable link underneath for
   keyboard/screen-reader users. */
.client-card {
  position: relative;
  transition: transform .2s, box-shadow .2s, border-color .2s
}

.client-card:hover {
  transform: translateY(-3px);
  box-shadow: 0 10px 28px var(--tint-card-shadow);
  border-color: var(--color-brand-border)
}

.client-card-cover {
  position: absolute;
  inset: 0;
  z-index: 1
}

.client-thumb-wrap {
  position: relative;
  height: 175px;
  overflow: hidden;
  background: var(--color-bg-alt)
}

.client-thumb-wrap img {
  width: 100%;
  height: 100%;
  object-fit: cover;
  object-position: top;
  display: block
}

.client-thumb-fallback {
  display: grid;
  place-items: center
}

.client-thumb-fallback .icon {
  margin-bottom: 0
}

/* Category pill pinned over the top-left corner of the thumbnail —
   overrides core.css's .badge look (dark, squared-off "ribbon" instead of
   its default light pill) so it reads as a corner label over a photo. */
.client-type-badge {
  position: absolute;
  top: 10px;
  left: 10px;
  z-index: 2;
  background: var(--color-dark-bg);
  color: var(--color-white);
  border: none;
  border-radius: 5px;
  box-shadow: 0 2px 8px var(--tint-card-shadow)
}


/* =========================================================
   ABOUT  (/about/)
   ========================================================= */

.coverage {
  padding: 16px;
  margin: 20px 0
}

.coverage ul {
  columns: 2;
  padding: 0;
  list-style: none;
  font-size: 11px;
  color: var(--color-text-soft)
}

.coverage li {
  margin: 5px 0;
  list-style: disc;
  margin-left: 15px
}

.coverage li::marker {
  color: var(--color-brand-light)
}

.adv-grid {
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: 14px
}

.adv {
  padding: 18px
}

.adv h3 {
  font-size: 13px
}

.adv p {
  font-size: 11px
}


/* =========================================================
   WHERE WE WORK  (/where-we-work/)
   ========================================================= */

/* Three quick-proof numbers under the hero — gives the page an
   immediate sense of scale before anyone scrolls into the district
   list, instead of jumping straight from hero into a wall of text. */
.stat-strip {
  display: grid;
  grid-template-columns: repeat(3, 1fr);
  gap: 16px;
  margin-bottom: 46px
}

.stat-strip .card {
  text-align: center;
  padding: 22px 16px
}

.stat-num {
  display: block;
  font-family: var(--font-parent);
  font-size: clamp(28px, 3.4vw, 36px);
  font-weight: 800;
  letter-spacing: -1px;
  color: var(--color-brand);
  line-height: 1
}

.stat-label {
  display: block;
  font-size: 12px;
  color: var(--color-text-muted);
  margin-top: 7px
}

/* Jump links to each district + Also Serving — lets someone land on
   the page and go straight to their own area instead of scrolling
   past everyone else's client proof first. */
.area-nav {
  display: flex;
  flex-wrap: wrap;
  gap: 8px;
  margin-bottom: 44px
}

.area-nav a {
  padding: 7px 14px;
  border-radius: 999px;
  background: var(--color-bg-alt);
  border: 1px solid var(--color-border);
  color: var(--color-text-soft);
  font-size: 12px;
  font-weight: 650
}

.area-nav a:hover {
  border-color: var(--color-brand-border);
  color: var(--color-brand)
}

/* Each district: fixed-width intro column (icon, live-site count,
   heading, keyword paragraph) beside its own client grid, instead of
   a full-width centered caption sitting on top of the cards — keeps
   districts with just 1-2 clients from reading as mostly empty space,
   since the text column carries visual weight even when the grid is
   short. */
.area-block {
  display: grid;
  grid-template-columns: 1fr 1.5fr;
  gap: 36px;
  padding: 40px 0;
  border-bottom: 1px solid var(--color-border);
  scroll-margin-top: 90px
}

.area-block:first-child {
  padding-top: 0
}

.area-block:last-child {
  border-bottom: none;
  padding-bottom: 0
}

.area-info h2 {
  font-family: var(--font-parent);
  font-size: clamp(21px, 2.6vw, 27px);
  letter-spacing: -.5px;
  margin: 12px 0 10px
}

.area-info p {
  color: var(--color-text-soft);
  font-size: 14px;
  line-height: 1.65
}

.area-count {
  margin-left: 8px
}

.area-grid {
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: 16px;
  align-content: start
}

.area-grid .client-thumb-wrap {
  height: 140px
}


/* =========================================================
   CONTACT  (/contact/)
   ========================================================= */

.contact-box {
  max-width: 850px;
  margin: auto;
  padding: 28px
}

.contact-box textarea {
  margin-top: 18px
}

.contact-box .btn {
  margin-top: 14px
}

/* Character counter, anchored to the textarea's own bottom-right corner
   (the conventional spot for a live char-limit readout) rather than as
   a separate line of text below the field. */
.textarea-wrap {
  position: relative
}

.textarea-wrap textarea {
  padding-bottom: 26px
}

.char-count {
  position: absolute;
  right: 10px;
  bottom: 8px;
  font-size: 10px;
  color: var(--color-text-muted);
  background: var(--color-white);
  padding: 1px 5px;
  border-radius: 5px;
  pointer-events: none
}

/* Response-time / availability trust box, sits under the enquiry form */
.trust-box {
  margin-top: 18px;
  background: var(--color-brand-softer);
  border: 1px solid var(--color-brand-border);
  border-radius: 15px;
  padding: 16px 18px;
  box-shadow: 0 4px 16px var(--tint-card-shadow)
}

.trust-box-head {
  display: flex;
  align-items: center;
  gap: 8px;
  font-size: 14px;
  color: var(--color-brand-strong)
}

.trust-box p {
  font-size: 12px;
  color: var(--color-text-soft);
  margin: 8px 0 12px
}

.trust-hours {
  display: flex;
  flex-wrap: wrap;
  gap: 8px 18px;
  font-size: 11px;
  font-weight: 700;
  color: var(--color-text-muted)
}

.trust-hours span {
  display: inline-flex;
  align-items: center;
  gap: 5px
}

.trust-box.center .trust-box-head,
.trust-box.center .trust-hours {
  justify-content: center
}

.trust-review {
  margin-top: 10px;
  display: flex;
  flex-wrap: wrap;
  justify-content: center;
  gap: 6px 20px
}

.trust-review a {
  display: inline-flex;
  align-items: center;
  gap: 5px;
  font-size: 11px;
  font-weight: 700;
  color: var(--color-brand-strong)
}

.trust-review a:hover {
  text-decoration: underline
}

/* Embedded Google Map, styled like the surrounding cards */
.map-embed {
  margin-top: 24px;
  border: 1px solid var(--color-border);
  border-radius: 18px;
  overflow: hidden;
  line-height: 0
}

.map-embed iframe {
  display: block
}

.success {
  color: var(--color-brand);
  font-size: 12px;
  font-weight: 700
}

/* Contact form fields */
.formgrid {
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: 16px
}

label {
  font-size: 11px;
  font-weight: 750;
  color: var(--color-text-soft)
}

input,
select,
textarea {
  width: 100%;
  margin-top: 6px;
  border: 1px solid var(--color-border-strong);
  border-radius: 10px;
  background: var(--color-white);
  padding: 11px 12px;
  color: var(--color-text);
  outline: none
}

input:focus,
select:focus,
textarea:focus {
  border-color: var(--color-brand-light);
  box-shadow: 0 0 0 3px var(--tint-primary-ring)
}

textarea {
  min-height: 120px;
  resize: vertical
}


/* =========================================================
   FAQ  (/faq/)
   ========================================================= */

.search {
  margin-bottom: 20px
}


/* =========================================================
   LEGAL PAGES  (/terms/, /privacy-policy/, /refund-policy/)
   ------------------------------------------------------------
   Deliberately plain prose, not the marketing card/grid look used
   elsewhere — per Google's own trust-signal guidance these pages exist
   to be read and found, not to compete for keyword rankings, so no
   illustration, no card chrome, just clear sections.
   ========================================================= */

.legal h2 {
  font-family: var(--font-parent);
  font-size: 20px;
  letter-spacing: -.3px;
  margin: 34px 0 10px
}

.legal h2:first-of-type {
  margin-top: 0
}

.legal p {
  color: var(--color-text-soft);
  font-size: 14px;
  line-height: 1.7;
  margin: 0 0 12px
}

.legal ul {
  margin: 0 0 12px;
  padding-left: 20px;
  color: var(--color-text-soft);
  font-size: 14px;
  line-height: 1.7
}

.legal li {
  margin: 4px 0
}

.legal .updated {
  color: var(--color-text-muted);
  font-size: 12px;
  margin-bottom: 30px
}
