/* ============================================================
   Kokkoma Oy - Nordic Clean × Trust & Authority
   Linkki "betoni työt" -kuvahakuun: https://www.google.com/search?q=betoni+ty%C3%B6t&udm=2
   ============================================================ */

/* Fonttien lataus on siirretty app/layout.js:n <head>-lohkoon. */

:root {
  --bone:        #F9F9F9;
  --surface:     #FFFFFF;
  --ink:         #1A1A1A;
  --slate:       #5A6470;
  --hairline:    #D9D4C9;
  --rust:        #6F9DC6;
  --rust-hover:  #527FA8;

  --serif: 'Newsreader', Georgia, serif;
  --sans:  'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif;

  --container: 1240px;
  --gutter: 20px;

  /* Frosted glass - käytössä mm. .path-card-bodyssa ja .hero-statsissa.
     Toimii vain kuvan tai muun kuvioidun taustan päällä. */
  --glass-bg:     rgba(16, 26, 43, 0.52);
  --glass-blur:   blur(16px) saturate(120%);
  --glass-border: rgba(255, 255, 255, 0.16);
  --glass-shadow: 0 24px 60px rgba(0, 0, 0, 0.28);

  --ease: cubic-bezier(0.25, 0.1, 0.25, 1);

  /* ============================================================
     TEKSTIROOLIT - kevyt design system.
     Seitsemän roolia. Uutta tekstityyliä ei kirjoiteta käsin:
     valitaan lähin rooli ja käytetään sitä. Näin fonttikokojen
     määrä pysyy kurissa ja ilme yhtenäisenä.
     ============================================================ */

  /* --- KOKOPORTAIKKO. Näiden ulkopuolelta ei oteta fonttikokoja. ---
     Kiinteät seitsemän askelta pienille teksteille ja UI:lle,
     neljä juoksevaa ramppia otsikoille. */
  --fs-xs:      0.75rem;     /* miniotsikot, tagit */
  --fs-sm:      0.875rem;    /* meta, pikkutekstit */
  --fs-md:      1rem;        /* napit, UI */
  --fs-base:    1.0625rem;   /* leipäteksti */
  --fs-h3:      1.125rem;    /* korttiotsikko */
  --fs-lead:    1.3125rem;   /* ingressi */
  --fs-xl:      1.5rem;      /* iso nosto */

  --fs-h3r:     clamp(1.375rem, 2.6vw, 1.875rem);
  --fs-h2r:     clamp(1.75rem, 4vw, 2.75rem);
  --fs-h1r:     clamp(2.25rem, 5vw, 3.5rem);
  --fs-display: clamp(2.75rem, 7vw, 6rem);

  /* otsikot - Oswald, versaali */
  --t-h1: 700 var(--fs-h1r)/1.04 'Oswald', var(--sans);
  --t-h2: 600 var(--fs-h2r)/1.1 'Oswald', var(--sans);
  --t-h3: 600 var(--fs-h3)/1.3 'Oswald', var(--sans);

  /* miniotsikko / eyebrow - Inter, versaali, harva välistys */
  --t-eyebrow: 500 var(--fs-xs)/1.4 var(--sans);

  /* tekstit - Inter */
  --t-lead: 400 var(--fs-lead)/1.55 var(--sans);
  --t-body: 400 var(--fs-base)/1.7 var(--sans);
  --t-meta: 400 var(--fs-sm)/1.5 var(--sans);

  /* kirjainvälistys rooleittain */
  --ls-heading: 0.03em;
  --ls-eyebrow: 0.12em;

  /* --- TEKSTIVÄRIT. Kolme väriä, ei muuta. ---
     Hierarkia tulee kokoportaikosta ja lihavuudesta, ei harmaan sävyistä. */
  --c-body:    var(--ink);    /* musta - otsikot ja leipäteksti */
  --c-accent:  var(--rust);   /* sininen - miniotsikot, linkit, korostukset */
  --c-on-dark: #FFFFFF;       /* valkoinen - tekstit tummalla taustalla */

  /* aliakset vanhoille nimille, jotta harmaa ei palaa takaovesta */
  --c-heading: var(--c-body);
  --c-muted:   var(--c-body);
}

* { box-sizing: border-box; margin: 0; padding: 0; }

html { scroll-behavior: smooth; }

body {
  font-family: var(--sans);
  font-size: var(--fs-base);
  line-height: 1.6;
  color: var(--c-body);
  background: var(--bone);
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
}

@media (min-width: 768px) {
  body { font-size: var(--fs-h3); }
}

img { max-width: 100%; height: auto; display: block; }

a { color: inherit; text-decoration: none; }

button { font: inherit; cursor: pointer; border: none; background: none; color: inherit; }

/* ============================================================
   Layout primitives
   ============================================================ */

.container {
  width: 100%;
  max-width: var(--container);
  margin: 0 auto;
  padding: 0 var(--gutter);
}

@media (min-width: 768px) {
  .container { padding: 0 32px; }
}

.section { padding: 64px 0; }
.section-lg { padding: 96px 0; }
.section-sm { padding: 40px 0; }

@media (min-width: 768px) {
  .section    { padding: 96px 0; }
  .section-lg { padding: 140px 0; }
  .section-sm { padding: 56px 0; }
}

.hairline {
  height: 1px;
  background: var(--hairline);
  border: 0;
  width: 100%;
}

/* ============================================================
   Typography
   ============================================================ */

h1, h2, h3, h4 { font-family: 'Oswald', var(--sans); font-weight: 600; color: var(--c-body); text-transform: uppercase; letter-spacing: 0.03em; }

h1 {
  font-size: var(--fs-display);
  line-height: 1.04;
  letter-spacing: 0.02em;
  font-weight: 700;
}
/* Puhelimella pitkä yksittäinen sana ("KOKONAISRATKAISUT") oli ruutua
   leveämpi. Koko sidotaan leveyteen, jotta sana mahtuu kokonaisena. */
@media (max-width: 480px) {
  h1 { font-size: min(var(--fs-display), 9.5vw); }
}

h2 {
  font-size: var(--fs-h2r);
  line-height: 1.1;
  letter-spacing: 0.015em;
  margin-bottom: 24px;
  font-weight: 600;
}

h3 {
  font-family: 'Oswald', var(--sans);
  font-weight: 600;
  font-size: var(--fs-h3);
  line-height: 1.3;
  margin-bottom: 12px;
  text-transform: uppercase;
  letter-spacing: 0.03em;
}

p { color: var(--c-body); }
p + p { margin-top: 16px; }

.lead {
  font-size: var(--fs-h3);
  line-height: 1.55;
  color: var(--c-body);
  max-width: 56ch;
}

@media (min-width: 768px) {
  .lead { font-size: var(--fs-lead); }
}

.eyebrow {
  font-family: var(--sans);
  font-weight: 500;
  font-size: var(--fs-xs);
  letter-spacing: 0.12em;
  text-transform: uppercase;
  color: var(--c-body);
  margin-bottom: 24px;
  display: inline-block;
}

.muted { color: var(--c-body); }

em, .serif-italic { font-family: var(--serif); font-style: italic; }

.accent { color: var(--c-accent); }

/* ============================================================
   Buttons
   ============================================================ */

.btn {
  display: inline-flex;
  align-items: center;
  gap: 10px;
  padding: 14px 28px;
  font-family: var(--sans);
  font-weight: 500;
  font-size: var(--fs-sm);
  letter-spacing: 0.01em;
  border: 1px solid var(--ink);
  /* pillimuoto, sama kuin .btn-pill ja .cta-band .btn */
  border-radius: 999px;
  transition: background 200ms var(--ease), color 200ms var(--ease), border-color 200ms var(--ease);
  cursor: pointer;
  min-height: 48px;
}

.btn-primary {
  background: var(--ink);
  color: var(--c-on-dark);
}
.btn-primary:hover, .btn-primary:focus-visible {
  background: var(--rust);
  border-color: var(--rust);
}

.btn-secondary {
  background: transparent;
  color: var(--c-body);
}
.btn-secondary:hover, .btn-secondary:focus-visible {
  background: var(--ink);
  color: var(--c-on-dark);
}

.btn-link {
  display: inline-flex;
  align-items: baseline;
  gap: 8px;
  color: var(--c-accent);
  font-family: var(--sans);
  font-weight: 500;
  font-size: var(--fs-sm);
  padding-bottom: 2px;
  position: relative;
}
.btn-link::after {
  content: '';
  position: absolute;
  left: 0; right: 100%;
  bottom: 0;
  height: 1px;
  background: var(--rust);
  transition: right 250ms var(--ease);
}
.btn-link:hover::after, .btn-link:focus-visible::after { right: 0; }

:focus-visible {
  outline: 2px solid var(--rust);
  outline-offset: 3px;
}

/* ============================================================
   Top navigation
   ============================================================ */

.nav {
  position: sticky;
  top: 0;
  z-index: 50;
  background: var(--bone);
  border-bottom: 1px solid transparent;
  transition: border-color 200ms var(--ease);
}
.nav.scrolled { border-bottom-color: var(--hairline); }

.nav-inner {
  display: flex;
  align-items: center;
  justify-content: space-between;
  height: 72px;
}

.brand {
  font-family: var(--serif);
  font-weight: 500;
  font-size: var(--fs-lead);
  letter-spacing: -0.01em;
  color: var(--c-body);
  display: inline-flex;
  align-items: baseline;
  gap: 6px;
}
.brand-sup {
  font-family: var(--sans);
  font-weight: 500;
  font-size: var(--fs-xs);
  letter-spacing: 0.12em;
  text-transform: uppercase;
  color: var(--c-body);
}

.nav-links {
  display: none;
  gap: 32px;
  list-style: none;
  align-items: center;
}
.nav-links a {
  font-family: var(--sans);
  font-weight: 500;
  font-size: var(--fs-sm);
  color: var(--c-body);
  padding: 8px 0;
  position: relative;
}
.nav-links a:hover { color: var(--c-accent); }
.nav-links a.active::after {
  content: '';
  position: absolute;
  left: 0; right: 0; bottom: 0;
  height: 1px;
  background: var(--ink);
}
.nav-dropdown { position: relative; }
/* Näkymätön "silta" linkin ja alasvetovalikon välisen raon yli: pitää
   .nav-dropdown:hoverin päällä kun kursori liikkuu linkistä valikkoon,
   jolloin valikko ei ehdi sulkeutua. */
.nav-dropdown::after {
  content: '';
  position: absolute;
  top: 100%;
  left: 0;
  right: 0;
  height: 10px;
}
.nav-dropdown-menu {
  position: absolute;
  top: calc(100% + 8px);
  left: -16px;
  background: var(--surface);
  border: 1px solid var(--hairline);
  min-width: 260px;
  padding: 8px;
  list-style: none;
  border-radius: 18px;
  box-shadow: 0 16px 40px rgba(13, 22, 38, 0.14);
  /* Animoidaan opacity + transform (ei display), jotta hover-avaus "rullaa
     alas" ja häivyttyy esiin. transform-origin ylhäällä = laskeutuu alaspäin. */
  opacity: 0;
  visibility: hidden;
  transform: translateY(-8px) scale(0.98);
  transform-origin: top center;
  transition: opacity 130ms ease,
    transform 170ms cubic-bezier(0.16, 1, 0.3, 1),
    visibility 0s linear 170ms;
}
.nav-dropdown:hover .nav-dropdown-menu,
.nav-dropdown:focus-within .nav-dropdown-menu {
  opacity: 1;
  visibility: visible;
  transform: translateY(0) scale(1);
  transition: opacity 130ms ease,
    transform 190ms cubic-bezier(0.16, 1, 0.3, 1),
    visibility 0s;
}
.nav-dropdown-menu li a {
  display: block;
  padding: 10px 16px;
  font-size: var(--fs-sm);
  border-radius: 10px;
  opacity: 0;
  transform: translateY(-5px);
  transition: opacity 130ms ease, transform 130ms ease, background 150ms ease, color 150ms ease;
}
.nav-dropdown:hover .nav-dropdown-menu li a,
.nav-dropdown:focus-within .nav-dropdown-menu li a { opacity: 1; transform: none; }
/* Nopea porrastus: vaihtoehdot ilmestyvät peräkkäin häivytyksellä. */
.nav-dropdown:hover .nav-dropdown-menu li:nth-child(1) a,
.nav-dropdown:focus-within .nav-dropdown-menu li:nth-child(1) a { transition-delay: 30ms; }
.nav-dropdown:hover .nav-dropdown-menu li:nth-child(2) a,
.nav-dropdown:focus-within .nav-dropdown-menu li:nth-child(2) a { transition-delay: 50ms; }
.nav-dropdown:hover .nav-dropdown-menu li:nth-child(3) a,
.nav-dropdown:focus-within .nav-dropdown-menu li:nth-child(3) a { transition-delay: 70ms; }
.nav-dropdown:hover .nav-dropdown-menu li:nth-child(4) a,
.nav-dropdown:focus-within .nav-dropdown-menu li:nth-child(4) a { transition-delay: 90ms; }
.nav-dropdown:hover .nav-dropdown-menu li:nth-child(5) a,
.nav-dropdown:focus-within .nav-dropdown-menu li:nth-child(5) a { transition-delay: 110ms; }
.nav-dropdown:hover .nav-dropdown-menu li:nth-child(6) a,
.nav-dropdown:focus-within .nav-dropdown-menu li:nth-child(6) a { transition-delay: 130ms; }
.nav-dropdown-menu li a:hover { background: var(--bone); color: var(--c-accent); }
@media (prefers-reduced-motion: reduce) {
  .nav-dropdown-menu,
  .nav-dropdown-menu li a { transition: opacity 80ms linear; transform: none; }
  .nav-dropdown:hover .nav-dropdown-menu li a,
  .nav-dropdown:focus-within .nav-dropdown-menu li a { transition-delay: 0s; }
}

.nav-phone {
  display: inline-flex;
  align-items: center;
  gap: 8px;
  font-family: var(--sans);
  font-weight: 500;
  font-size: var(--fs-sm);
  color: var(--c-body);
}
.nav-phone svg { width: 16px; height: 16px; flex-shrink: 0; }
.nav-phone:hover { color: var(--c-accent); }
/* Kenelle numero kuuluu: nimi pienenä numeron yläpuolella, ikoni pysyy sivussa. */
.nav-phone-text { display: flex; flex-direction: column; line-height: 1.2; }
.nav-phone-name {
  font-size: var(--fs-xs);
  font-weight: 500;
  letter-spacing: 0.02em;
  color: var(--c-muted, var(--slate));
}
.nav-phone-number { font-weight: 600; }

.nav-toggle {
  display: inline-flex;
  flex-direction: column;
  gap: 5px;
  padding: 12px;
  margin-right: -12px;
}
.nav-toggle span {
  width: 22px; height: 1.5px;
  background: var(--ink);
  transition: transform 200ms var(--ease), opacity 200ms var(--ease);
}
.nav-open .nav-toggle span:nth-child(1) { transform: translateY(6.5px) rotate(45deg); }
.nav-open .nav-toggle span:nth-child(2) { opacity: 0; }
.nav-open .nav-toggle span:nth-child(3) { transform: translateY(-6.5px) rotate(-45deg); }

.nav-mobile {
  position: fixed;
  inset: 72px 0 0 0;
  background: var(--bone);
  z-index: 49;
  padding: 40px var(--gutter);
  transform: translateX(100%);
  transition: transform 300ms var(--ease);
  overflow-y: auto;
}
.nav-open .nav-mobile { transform: translateX(0); }
.nav-mobile ul { list-style: none; }
.nav-mobile > ul > li { border-bottom: 1px solid var(--hairline); }
.nav-mobile > ul > li > a, .nav-mobile > ul > li > span {
  font-family: var(--serif);
  font-weight: 500;
  font-size: var(--fs-h3r);
  letter-spacing: -0.015em;
  display: block;
  padding: 20px 0;
  color: var(--c-body);
}
.nav-mobile-sub { padding-bottom: 16px; }
.nav-mobile-sub a {
  display: block;
  font-family: var(--sans);
  font-size: var(--fs-md);
  padding: 8px 0 8px 16px;
  color: var(--c-body);
}
.nav-mobile-sub a:hover { color: var(--c-accent); }
.nav-mobile-cta { margin-top: 32px; }

@media (min-width: 1024px) {
  .nav-links { display: flex; }
  .nav-toggle, .nav-mobile { display: none; }
}

/* ============================================================
   Hero
   ============================================================ */

.hero {
  position: relative;
  min-height: calc(100vh - 72px);
  display: flex;
  align-items: flex-end;
  overflow: hidden;
  background: var(--ink);
}
.hero-image {
  position: absolute;
  inset: 0;
  background-image: url('../images/hero-concrete-repair.jpg');
  background-size: cover;
  background-position: center;
  filter: saturate(0.85) brightness(0.78);
}
.hero-image::after {
  content: '';
  position: absolute; inset: 0;
  background: linear-gradient(180deg, rgba(26,26,26,0.15) 0%, rgba(26,26,26,0.55) 100%);
}
.hero-content {
  position: relative;
  z-index: 2;
  color: var(--c-on-dark);
  padding: 80px 0 64px;
  width: 100%;
}
.hero-content h1 { color: var(--c-on-dark); max-width: 18ch; }
.hero-content h1 .accent { color: var(--c-accent); }
.hero-content .lead { color: var(--c-on-dark); opacity: 0.92; margin-top: 24px; max-width: 52ch; }
.hero-eyebrow {
  font-family: var(--sans);
  font-weight: 500;
  font-size: var(--fs-xs);
  letter-spacing: 0.16em;
  text-transform: uppercase;
  color: var(--c-on-dark);
  opacity: 0.7;
  margin-bottom: 24px;
  display: flex;
  align-items: center;
  gap: 12px;
}
.hero-eyebrow::before {
  content: '';
  display: inline-block;
  width: 32px; height: 1px;
  background: var(--bone);
  opacity: 0.6;
}
.hero-ctas {
  display: flex; flex-wrap: wrap; gap: 16px;
  margin-top: 40px;
}
.hero-ctas .btn-primary {
  background: var(--bone); color: var(--c-body); border-color: var(--bone);
}
.hero-ctas .btn-primary:hover {
  background: var(--rust); color: var(--c-on-dark); border-color: var(--rust);
}
.hero-ctas .btn-secondary {
  border-color: var(--bone); color: var(--c-on-dark);
}
.hero-ctas .btn-secondary:hover {
  background: var(--bone); color: var(--c-body);
}

.hero-meta {
  position: absolute;
  bottom: 32px;
  right: 0;
  left: 0;
  z-index: 2;
  display: none;
}
@media (min-width: 1024px) {
  .hero-meta { display: block; }
  .hero-meta .container {
    display: flex; justify-content: flex-end;
  }
  .hero-meta-card {
    background: var(--bone);
    padding: 24px 32px;
    max-width: 320px;
  }
  .hero-meta-card .eyebrow { margin-bottom: 8px; }
  .hero-meta-card .num {
    font-family: var(--serif);
    font-size: var(--fs-h1r);
    line-height: 1;
    color: var(--c-body);
  }
  .hero-meta-card .label {
    font-family: var(--sans);
    font-size: var(--fs-sm);
    color: var(--c-body);
    margin-top: 8px;
  }
}

/* Hero variant for sub-pages */
.hero-sub {
  background: var(--bone);
  min-height: 0;
  padding: 80px 0 48px;
  border-bottom: 1px solid var(--hairline);
}
.hero-sub h1 { color: var(--c-body); max-width: 22ch; }
/* Referenssien listaussivu: sama otsikkokoko kuin kohdesivujen
   .rt-hero-title, jotta koko referenssiosio on yhtenäinen. */
.hero-sub--refs h1 { font-size: var(--fs-h2r); line-height: 1.08; }
.hero-sub .lead { color: var(--c-body); margin-top: 24px; }
@media (min-width: 768px) {
  .hero-sub { padding: 120px 0 80px; }
}

/* ============================================================
   Credibility strip
   ============================================================ */

.credstrip {
  border-top: 1px solid var(--hairline);
  border-bottom: 1px solid var(--hairline);
  padding: 24px 0;
}
.credstrip-inner {
  display: flex;
  flex-wrap: wrap;
  gap: 8px 32px;
  align-items: center;
  justify-content: center;
  font-family: var(--sans);
  font-weight: 500;
  font-size: var(--fs-xs);
  letter-spacing: 0.12em;
  text-transform: uppercase;
  color: var(--c-body);
  text-align: center;
}
.credstrip-inner span:not(:last-child)::after {
  content: '·';
  margin-left: 32px;
  display: none;
}
@media (min-width: 768px) {
  .credstrip-inner span:not(:last-child)::after { display: inline; }
  .credstrip-inner { gap: 0; }
}

/* ============================================================
   Section header
   ============================================================ */

.section-header { margin-bottom: 56px; max-width: 720px; }
.section-header .lead { margin-top: 16px; color: var(--c-body); }

/* ============================================================
   Services grid (homepage)
   ============================================================ */

/* ===== Services list (horizontal cards) ===== */
.services-list {
  display: flex;
  flex-direction: column;
  margin-top: 48px;
  border-top: 1px solid var(--hairline);
}

.service-row {
  display: grid;
  grid-template-columns: 1fr;
  gap: 24px;
  padding: 32px 0;
  border-bottom: 1px solid var(--hairline);
  align-items: center;
}

.service-row-image {
  display: block;
  width: 100%;
  aspect-ratio: 4/3;
  overflow: hidden;
  border-radius: 6px;
  background: var(--hairline);
}

.service-row-image img {
  width: 100%;
  height: 100%;
  object-fit: cover;
  display: block;
  transition: transform 400ms var(--ease);
}

.service-row-image:hover img { transform: scale(1.03); }

.service-row-body { display: flex; flex-direction: column; gap: 12px; }

.service-row-body h3 {
  margin: 0;
  font-size: var(--fs-xl);
  text-transform: none;
  font-family: var(--sans);
  font-weight: 600;
  letter-spacing: -0.01em;
  color: var(--c-body);
}

.service-row-meta {
  margin: 0;
  font-size: var(--fs-sm);
  color: var(--c-body);
  font-family: var(--sans);
}

.service-row-specs {
  list-style: none;
  display: flex;
  flex-wrap: wrap;
  gap: 16px;
  padding: 0;
  margin: 0;
  font-size: var(--fs-xs);
  color: var(--c-body);
}

.service-row-specs li {
  display: inline-flex;
  align-items: center;
  gap: 6px;
}

.service-row-specs svg { color: var(--c-body); flex-shrink: 0; }

.service-row-desc {
  margin: 0;
  color: var(--c-body);
  font-size: var(--fs-sm);
  line-height: 1.55;
  max-width: 52ch;
}

.service-row-actions {
  display: flex;
  gap: 8px;
  margin-top: 8px;
  flex-wrap: wrap;
}

.btn-solid {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  padding: 10px 18px;
  background: var(--ink);
  color: var(--c-on-dark);
  font-family: var(--sans);
  font-size: var(--fs-sm);
  font-weight: 600;
  border-radius: 4px;
  text-decoration: none;
  transition: background 200ms var(--ease);
}
.btn-solid:hover { background: #000; color: var(--c-on-dark); }

.btn-outline {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  padding: 10px 18px;
  background: transparent;
  color: var(--c-body);
  font-family: var(--sans);
  font-size: var(--fs-sm);
  font-weight: 600;
  border: 1px solid var(--hairline);
  border-radius: 4px;
  text-decoration: none;
  transition: border-color 200ms var(--ease), background 200ms var(--ease);
}
.btn-outline:hover { border-color: var(--ink); background: rgba(0,0,0,0.02); }

.service-row-stats {
  display: grid;
  grid-template-columns: repeat(3, 1fr);
  gap: 16px;
  padding: 16px 0 0;
  border-top: 1px solid var(--hairline);
}

.service-row-stat {
  display: flex;
  flex-direction: column;
  gap: 2px;
}

.service-row-stat .val {
  font-family: 'Oswald', var(--sans);
  font-size: var(--fs-xl);
  font-weight: 600;
  color: var(--c-body);
  letter-spacing: 0.01em;
  line-height: 1;
}

.service-row-stat .lbl {
  font-size: var(--fs-xs);
  color: var(--c-body);
  text-transform: uppercase;
  letter-spacing: 0.05em;
}

/* ===== Desktop: 3-column horizontal layout ===== */
@media (min-width: 900px) {
  .service-row {
    grid-template-columns: 280px 1fr auto;
    gap: 40px;
    padding: 40px 0;
    align-items: center;
  }

  .service-row-image { aspect-ratio: 4/3; }

  .service-row-stats {
    grid-template-columns: 1fr;
    border-top: none;
    padding: 0;
    gap: 24px;
    min-width: 140px;
  }

  .service-row-stat .val { font-size: var(--fs-h3r); }

  .service-row-body h3 { font-size: var(--fs-h3r); }
}

@media (min-width: 1100px) {
  .service-row { grid-template-columns: 320px 1fr 180px; gap: 56px; }
}

/* ============================================================
   Services section variants (B: Grid, C: Tabs)
   ============================================================ */
.services-variant { display: none; margin-top: 48px; }
[data-services="a"] .services-variant[data-services-variant="a"],
[data-services="b"] .services-variant[data-services-variant="b"],
[data-services="c"] .services-variant[data-services-variant="c"],
[data-services="d"] .services-variant[data-services-variant="d"] { display: block; }

/* ===== Variant D: Icon strip ===== */
.services-iconstrip {
  display: grid;
  grid-template-columns: repeat(5, 1fr);
  gap: 24px;
  align-items: start;
  padding: 32px 0;
}
.service-icon {
  display: flex;
  flex-direction: column;
  align-items: center;
  text-align: center;
  gap: 28px;
  padding: 16px 8px;
  text-decoration: none;
  color: var(--c-body);
}
.service-icon-art {
  color: var(--c-body);
  transition: color 220ms var(--ease), transform 220ms var(--ease);
}
.service-icon-art svg { width: 56px; height: 56px; display: block; }
.service-icon-label {
  font-family: var(--sans);
  font-weight: 700;
  font-size: var(--fs-xs);
  letter-spacing: 0.06em;
  text-transform: uppercase;
  line-height: 1.35;
  color: var(--c-body);
  transition: color 220ms var(--ease);
}
.service-icon:hover .service-icon-art { color: var(--c-accent); transform: translateY(-4px); }
.service-icon:hover .service-icon-label { color: var(--c-accent); }

@media (max-width: 900px) {
  .services-iconstrip { grid-template-columns: repeat(2, 1fr); gap: 32px 16px; }
}
@media (max-width: 480px) {
  .services-iconstrip { grid-template-columns: 1fr; }
}

[data-services="a"] .services-variant[data-services-variant="a"] .services-list { margin-top: 0; }

/* ===== Variant B: Card grid ===== */
.services-grid {
  display: flex;
  flex-wrap: wrap;
  justify-content: center;
  gap: 24px;
}

.service-card {
  display: flex;
  flex-direction: column;
  flex: 1 1 100%;
  border: 1px solid var(--hairline);
  border-radius: 16px;
  overflow: hidden;
  background: #fff;
  transition: box-shadow 200ms var(--ease), transform 200ms var(--ease);
}

.service-card:hover { box-shadow: 0 16px 40px rgba(0,0,0,0.06); transform: translateY(-2px); }

/* Image sits as its own inset "card" inside the service card, so a thin
   sliver of the card shows on its left, right and top edges. */
.service-card-image {
  display: block;
  position: relative;
  aspect-ratio: 4/3;
  overflow: hidden;
  background: var(--hairline);
  margin: 10px 10px 0;
  border-radius: 10px;
}

.service-card-image img {
  width: 100%;
  height: 100%;
  object-fit: cover;
  display: block;
  transition: transform 400ms var(--ease);
}

.service-card-image:hover img { transform: scale(1.04); }

.service-card-num {
  position: absolute;
  top: 12px;
  left: 12px;
  font-family: 'Oswald', var(--sans);
  font-size: var(--fs-xs);
  font-weight: 600;
  letter-spacing: 0.05em;
  color: var(--c-on-dark);
  background: rgba(26,26,26,0.7);
  padding: 4px 10px;
  border-radius: 999px;
}

.service-card-body {
  display: flex;
  flex-direction: column;
  gap: 10px;
  padding: 20px;
  flex: 1;
}

.service-card-body h3 {
  margin: 0;
  font-size: var(--fs-lead);
  text-transform: none;
  font-family: var(--sans);
  font-weight: 600;
  letter-spacing: -0.01em;
  color: var(--c-body);
}

/* .service-card-meta poistettu: se toisti työlajilistan sisällön
   kauttaviivoin eroteltuna, ja kortissa oli kolme lähes samannäköistä
   tummaa tekstilohkoa peräkkäin. */

.service-card-desc {
  margin: 0;
  color: var(--c-body);
  font-size: var(--fs-sm);
  line-height: 1.6;
}

/* "Työlajit" alkaa kaikissa korteissa samalta korkeudelta. Kuvaukset ovat
   eri mittaisia, joten niille varataan neljän rivin tila, mikä on pisimmän
   kuvauksen rivimäärä kapeimmalla monipalstaisella leveydellä.
   min-height vain täyttää eikä katkaise, joten pidempi teksti saa jatkaa
   normaalisti. Vain monipalstaisilla leveyksillä: yhdessä palstassa
   kortit ovat allekkain eikä tasauksella ole merkitystä, jolloin varaus
   tuottaisi vain turhaa tyhjää. */
@media (min-width: 640px) {
  .service-card-desc { min-height: calc(4 * 1.6em); }
}

/* Työlajilistan pikkuotsikko. Sivuston eyebrow-konventio: versaalit,
   harva kirjainväli ja aksenttiväri. Tämä tekee listasta selvästi
   eri rekisterin kuin yllä oleva leipäteksti. */
.service-card-tags-label {
  margin: 0;
  font-family: var(--sans);
  font-size: var(--fs-xs);
  font-weight: 700;
  letter-spacing: 0.18em;
  text-transform: uppercase;
  color: var(--c-accent);
}

.service-card-tags {
  list-style: none;
  display: flex;
  flex-wrap: wrap;
  gap: 8px;
  padding: 0;
  margin: 4px 0 0;
}

.service-card-tags li {
  font-size: var(--fs-xs);
  color: var(--c-body);
  background: var(--paper, #F5F2EC);
  border: 1px solid var(--hairline);
  border-radius: 999px;
  padding: 4px 10px;
}

/* Kaikki työlajit näkyvissä. Palluramuoto ei skaalaudu tähän: kolme
   palluraa on kevyt, mutta kahdestatoista tulee neljä riviä laatikoita ja
   kortti kasvaa hallitsemattomasti. Sama tieto ladotaan siksi tiiviiksi
   välimerkein erotetuksi listaksi, joka vie noin kolmasosan tilasta ja
   kestää myös sen, että työlajeja tulee lisää.
   Semantiikka säilyy: elementti on yhä <ul>, vain esitys on inline. */
.service-card-tags--all {
  display: block;
  margin: 6px 0 0;
  font-size: var(--fs-xs);
  line-height: 1.75;
  color: var(--slate);
}
/* Vaaleansininen laatikko työlajien taustalle. Sävy on brändin sinisestä
   (--rust) läpikuultavana, jolloin se pysyy samassa väriperheessä eikä
   ole erillinen kovakoodattu sävy. Laatikko seuraa leipätekstiä heti,
   joten tyhjä tila jää sen alapuolelle eikä yläpuolelle. */
.service-card-tagbox {
  margin-top: 14px;
  padding: 12px 16px 14px;
  background: rgba(111, 157, 198, 0.10);
  border: 1px solid rgba(111, 157, 198, 0.22);
  border-radius: 14px;
}
.service-card-tags-label { margin-top: 0; }
.service-card-tags--all li {
  display: inline;
  padding: 0;
  border: 0;
  border-radius: 0;
  background: none;
  color: inherit;
  font-size: inherit;
}
.service-card-tags--all li:not(:last-child)::after {
  content: ' · ';
  color: var(--c-accent);
}

/* Kortin otsikko linkkinä: peri otsikon tyyli, korosta vasta hoverilla. */
.service-card-body h2 a {
  color: inherit;
  text-decoration: none;
}
.service-card-body h2 a:hover { color: var(--c-accent); }

.service-card-link {
  /* auto tyontaa linkin kortin pohjalle. Kortit venyvat rivilla samaan
     korkeuteen (flex stretch), joten "Lue lisää" osuu kaikissa samalle
     korkeudelle vaikka tekstien pituudet vaihtelevat. */
  margin-top: auto;
  padding-top: 12px;
  font-family: var(--sans);
  font-size: var(--fs-sm);
  font-weight: 600;
  color: var(--c-body);
  text-decoration: none;
}

.service-card-link:hover { color: var(--c-accent); }

@media (min-width: 640px) {
  .service-card { flex: 1 1 calc(50% - 12px); max-width: calc(50% - 12px); }
}

@media (min-width: 1024px) {
  .service-card { flex: 1 1 calc(33.333% - 16px); max-width: calc(33.333% - 16px); }
}

/* ===== Variant C: Accordion list ===== */
.services-accordion { display: flex; flex-direction: column; }

.services-acc-row {
  display: grid;
  grid-template-columns: 1fr;
  gap: 24px;
  padding: 40px 0;
  border-top: 1px solid var(--hairline);
}

.services-acc-row:last-child { border-bottom: 1px solid var(--hairline); }

.services-acc-left { display: flex; flex-direction: column; gap: 12px; min-width: 0; }

.services-acc-num {
  font-family: 'Oswald', var(--sans);
  font-size: var(--fs-xs);
  font-weight: 600;
  letter-spacing: 0.05em;
  color: var(--c-accent);
}

.services-acc-left h3 {
  margin: 0;
  font-size: var(--fs-h3r);
  letter-spacing: -0.01em;
  text-transform: uppercase;
  font-family: var(--sans);
  font-weight: 700;
  color: var(--c-body);
  white-space: nowrap;
}

.services-acc-left p {
  margin: 0;
  color: var(--c-body);
  font-size: var(--fs-sm);
  line-height: 1.55;
  max-width: 40ch;
}

.services-acc-right { display: flex; flex-direction: column; }

.acc-item { border-bottom: 1px solid var(--hairline); }
.acc-item:first-child { border-top: 1px solid var(--hairline); }

.acc-trigger {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 16px;
  width: 100%;
  text-align: left;
  background: transparent;
  border: 0;
  padding: 18px 4px;
  cursor: pointer;
  font-family: var(--sans);
  font-size: var(--fs-base);
  font-weight: 500;
  color: var(--c-body);
  transition: color 200ms var(--ease);
}

.acc-item.open .acc-trigger,
.acc-item:hover .acc-trigger { color: var(--c-accent); }

.acc-icon {
  position: relative;
  flex-shrink: 0;
  width: 18px;
  height: 18px;
}
.acc-icon::before, .acc-icon::after {
  content: '';
  position: absolute;
  background: currentColor;
  top: 50%; left: 50%;
  transform: translate(-50%, -50%);
  transition: transform 350ms var(--ease);
}
.acc-icon::before { width: 14px; height: 1.5px; }
.acc-icon::after { width: 1.5px; height: 14px; }

.acc-item.open .acc-icon::after,
.acc-item:hover .acc-icon::after { transform: translate(-50%, -50%) rotate(90deg); }
.acc-item.open .acc-trigger { font-weight: 600; }

.acc-panel {
  display: grid;
  grid-template-rows: 0fr;
  overflow: hidden;
  transition: grid-template-rows 450ms var(--ease);
}
.acc-item.open .acc-panel,
.acc-item:hover .acc-panel { grid-template-rows: 1fr; }

.acc-panel-inner { min-height: 0; overflow: hidden; padding: 0 4px 20px; }

.acc-panel p {
  margin: 0;
  color: var(--c-body);
  font-size: var(--fs-sm);
  line-height: 1.6;
  max-width: 60ch;
  opacity: 0;
  transform: translateY(-6px);
  transition: opacity 300ms var(--ease), transform 350ms var(--ease);
}
.acc-item.open .acc-panel p,
.acc-item:hover .acc-panel p {
  opacity: 1;
  transform: translateY(0);
  transition-delay: 80ms;
}

@media (min-width: 900px) {
  .services-acc-row { grid-template-columns: minmax(0, 420px) minmax(0, 1fr); gap: 64px; padding: 56px 0; }
  .services-acc-left h3 { font-size: var(--fs-h2r); white-space: normal; }
}

@media (min-width: 1400px) {
  [data-services="c"] #palvelut .container { max-width: 1520px; }
  .services-acc-row { grid-template-columns: minmax(0, 520px) minmax(0, 1fr); gap: 96px; padding: 72px 0; }
  .services-acc-num { font-size: var(--fs-sm); }
  .services-acc-left h3 { font-size: var(--fs-h1r); }
  .services-acc-left p { font-size: var(--fs-base); max-width: 44ch; }
  .acc-trigger { font-size: var(--fs-lead); padding: 26px 4px; }
  .acc-icon { width: 22px; height: 22px; }
  .acc-icon::before { width: 18px; height: 2px; }
  .acc-icon::after { width: 2px; height: 18px; }
  .acc-panel-inner { padding: 0 4px 28px; }
  .acc-panel p { font-size: var(--fs-base); max-width: 68ch; }
}

/* ============================================================
   Stakeholder paths
   ============================================================ */

.paths {
  display: grid;
  grid-template-columns: 1fr;
  gap: 0;
  border-top: 1px solid var(--hairline);
  border-bottom: 1px solid var(--hairline);
}
.path {
  padding: 48px 0;
  display: flex;
  flex-direction: column;
  border-bottom: 1px solid var(--hairline);
}
.path:last-child { border-bottom: 0; }
.path .eyebrow { color: var(--c-accent); margin-bottom: 16px; }
.path-statement {
  font-family: var(--serif);
  font-weight: 500;
  font-size: var(--fs-xl);
  line-height: 1.3;
  letter-spacing: -0.01em;
  color: var(--c-body);
  margin-bottom: 32px;
  max-width: 32ch;
}
.path .btn-link { margin-top: auto; }

@media (min-width: 1024px) {
  .paths { grid-template-columns: 1fr 1fr 1fr; }
  .path {
    padding: 0 40px;
    border-bottom: 0;
    border-right: 1px solid var(--hairline);
    min-height: 320px;
    padding: 56px 40px;
  }
  .path:first-child { padding-left: 0; }
  .path:last-child  { padding-right: 0; border-right: 0; }
  .path-statement { font-size: var(--fs-h3r); }
}

/* ============================================================
   Big stat divider
   ============================================================ */

.stat-divider {
  border-top: 1px solid var(--hairline);
  padding: 64px 0;
}
.stat-divider .num {
  font-family: var(--serif);
  font-weight: 500;
  font-size: var(--fs-display);
  line-height: 1.1;
  letter-spacing: -0.03em;
  color: var(--c-body);
}
.stat-divider .label {
  font-family: var(--sans);
  font-size: var(--fs-md);
  color: var(--c-body);
  margin-top: 16px;
  max-width: 40ch;
}

/* ============================================================
   Why Kokkoma
   ============================================================ */

.why-grid {
  display: grid;
  grid-template-columns: 1fr;
  gap: 0;
  border-top: 1px solid var(--hairline);
}
.why-item {
  padding: 32px 0;
  border-bottom: 1px solid var(--hairline);
  display: flex;
  flex-direction: column;
  gap: 12px;
}
.why-num {
  font-family: var(--serif);
  font-weight: 500;
  font-size: var(--fs-h2r);
  line-height: 1;
  color: var(--c-body);
  letter-spacing: -0.02em;
}
.why-num .unit {
  font-size: var(--fs-md);
  font-family: var(--sans);
  font-weight: 500;
  color: var(--c-body);
  letter-spacing: 0;
  margin-left: 4px;
}
.why-body h3 {
  font-family: var(--serif);
  font-weight: 500;
  font-size: var(--fs-lead);
  margin-bottom: 4px;
}
.why-body p { color: var(--c-body); }
@media (min-width: 768px) {
  .why-grid { grid-template-columns: 1fr 1fr; column-gap: 64px; }
  .why-item { padding: 40px 0; }
  .why-num { font-size: var(--fs-h1r); }
}

/* ============================================================
   References (selected projects)
   ============================================================ */

/* ===== Featured references carousel ===== */
.refs-featured-header {
  display: flex;
  align-items: flex-end;
  justify-content: space-between;
  gap: 32px;
  margin-bottom: 40px;
  flex-wrap: wrap;
}

.refs-featured-title { max-width: 640px; }
.refs-featured-title h2 { margin-bottom: 0; }

.refs-featured-nav {
  display: flex;
  gap: 12px;
  align-items: center;
}

.refs-nav-btn {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: 48px;
  height: 48px;
  border-radius: 50%;
  background: transparent;
  border: 1px solid var(--hairline);
  color: var(--c-body);
  cursor: pointer;
  transition: all 200ms var(--ease);
}

.refs-nav-btn:hover {
  border-color: var(--ink);
  background: rgba(0,0,0,0.04);
}

.refs-nav-btn-accent {
  background: var(--rust);
  border-color: var(--rust);
  color: var(--c-on-dark);
}

.refs-nav-btn-accent:hover {
  background: var(--rust-hover);
  border-color: var(--rust-hover);
  color: var(--c-on-dark);
}

.refs-nav-btn:disabled {
  opacity: 0.4;
  cursor: not-allowed;
}

.refs-strip-wrap {
  overflow: hidden;
  margin: 0 calc(-1 * var(--gutter));
}

.refs-strip {
  display: flex;
  gap: 16px;
  overflow-x: auto;
  scroll-snap-type: x mandatory;
  scroll-behavior: smooth;
  padding: 8px var(--gutter) 24px;
  scrollbar-width: none;
}
.refs-strip::-webkit-scrollbar { display: none; }

.ref-card {
  flex: 0 0 auto;
  width: 280px;
  scroll-snap-align: start;
  border: none;
  outline: none;
  background: transparent;
}

.ref-card-link {
  display: block;
  text-decoration: none;
  color: inherit;
  border: none;
  outline: none;
}

.ref-card-img {
  position: relative;
  width: 100%;
  aspect-ratio: 3/4;
  border-radius: 12px;
  overflow: hidden;
  background: #000;
  display: block;
}

.ref-card-img::after {
  content: '';
  position: absolute;
  inset: 0;
  background: linear-gradient(180deg, rgba(0,0,0,0) 40%, rgba(0,0,0,0.75) 100%);
  pointer-events: none;
  z-index: 1;
}

.ref-card-img img {
  position: absolute;
  inset: 0;
  width: 100%;
  height: 100%;
  object-fit: cover;
  display: block;
  transition: transform 500ms var(--ease);
}

.ref-card:hover .ref-card-img img { transform: scale(1.05); }

.ref-card-body {
  position: absolute;
  left: 0;
  right: 0;
  bottom: 0;
  padding: 16px;
  z-index: 2;
  color: var(--c-on-dark);
}

.ref-card-title {
  font-family: 'Oswald', var(--sans);
  font-size: var(--fs-md);
  font-weight: 600;
  text-transform: uppercase;
  letter-spacing: 0.04em;
  line-height: 1.15;
  margin: 0 0 4px;
  color: var(--c-on-dark) !important;
}

.ref-card-meta {
  font-size: var(--fs-xs);
  color: var(--c-on-dark);
  font-family: var(--sans);
  margin: 0;
  letter-spacing: 0.05em;
  text-transform: uppercase;
}

@media (min-width: 768px) {
  .ref-card { width: 300px; }
  .ref-card-title { font-size: var(--fs-base); }
}

@media (min-width: 1100px) {
  .ref-card { width: 320px; }
}

/* ============================================================
   Final CTA band
   ============================================================ */

/* Rounded card: dark surface inset from the page background on all sides */
.cta-band {
  background: transparent;
  color: var(--c-on-dark);
  padding: 40px 0 96px;
}
.cta-band > .container {
  width: min(var(--container), calc(100% - 2 * var(--gutter)));
  max-width: none;
  background: var(--ink);
  border-radius: 32px;
  padding: 80px 56px;
}
/* Rounded (pill) CTA buttons, scoped to this section only */
.cta-band .btn { border-radius: 999px; }

/* Palvelusivujen CTA-palkki: teksti vasemmalle, muotokuva oikeaan reunaan.
   Kuvan oma tausta on musta, joten reunat häivytetään palkkiin maskilla. */
.cta-band--portrait > .container { position: relative; overflow: hidden; }
.cta-band-portrait { display: none; }
@media (min-width: 900px) {
  .cta-band--portrait > .container {
    display: grid;
    grid-template-columns: minmax(0, 1fr) minmax(0, 0.62fr);
    gap: 32px;
    align-items: center;
  }
  .cta-band-portrait {
    display: block;
    align-self: stretch;
    margin: -80px -56px -80px 0;
  }
  .cta-band-portrait img {
    width: 100%;
    height: 100%;
    min-height: 340px;
    object-fit: cover;
    object-position: center 28%;
    display: block;
    -webkit-mask-image: linear-gradient(90deg, transparent 0%, #000 26%);
    mask-image: linear-gradient(90deg, transparent 0%, #000 26%);
  }
}
@media (max-width: 640px) {
  .cta-band > .container { border-radius: 22px; padding: 56px 28px; }
}
.cta-band h2 { color: var(--c-on-dark); max-width: 18ch; }
.cta-band .lead { color: var(--c-on-dark); opacity: 0.85; margin-top: 24px; max-width: 56ch; }
.cta-band-row {
  display: flex;
  flex-direction: column;
  gap: 16px;
  margin-top: 40px;
  align-items: flex-start;
}
.cta-band .btn-primary {
  background: var(--bone); color: var(--c-body); border-color: var(--bone);
}
.cta-band .btn-primary:hover {
  background: var(--rust); color: var(--c-on-dark); border-color: var(--rust);
}
.cta-band .btn-secondary {
  border-color: var(--bone); color: var(--c-on-dark);
}
.cta-band .btn-secondary:hover {
  background: var(--bone); color: var(--c-body);
}
.cta-band-phone {
  font-family: var(--serif);
  font-weight: 500;
  font-size: var(--fs-h1r);
  letter-spacing: -0.02em;
  color: var(--c-on-dark);
  margin-top: 8px;
  display: inline-block;
}
.cta-band-phone:hover { color: var(--c-accent); }

/* Kenelle numero kuuluu. Oma rivi numeron yläpuolella, jotta numero pysyy
   osion isoimpana elementtinä. */
.cta-band-phone-name {
  display: block;
  margin-top: 24px;
  font-family: var(--sans);
  font-weight: 600;
  font-size: var(--fs-sm);
  letter-spacing: 0.02em;
  color: rgba(245, 242, 236, 0.7);
}
.cta-band-phone-name + .cta-band-phone { margin-top: 2px; }
/* Töihin meille -CTA:ssa nappi ja puhelin ovat pystysuorassa pinossa, jossa
   nimen oma yläpehmuste riittää ilman ylimääräistä väliä. */
.careers-cta-actions .cta-band-phone-name { margin-top: 8px; color: rgba(245, 242, 236, 0.7); }

@media (min-width: 768px) {
  .cta-band-row { flex-direction: row; align-items: center; gap: 24px; }
}

/* ============================================================
   Footer
   ============================================================ */

.footer {
  background: var(--bone);
  border-top: 1px solid var(--hairline);
  padding: 64px 0 32px;
}
.footer-grid {
  display: grid;
  grid-template-columns: 1fr;
  gap: 40px;
  margin-bottom: 48px;
}
.footer-col h4 {
  font-family: var(--sans);
  font-weight: 500;
  font-size: var(--fs-xs);
  letter-spacing: 0.12em;
  text-transform: uppercase;
  color: var(--c-body);
  margin-bottom: 16px;
}
.footer-col ul { list-style: none; }
.footer-col li { margin-bottom: 8px; font-size: var(--fs-sm); }
.footer-col a:hover { color: var(--c-accent); }
.footer-brand {
  font-family: var(--serif);
  font-weight: 500;
  font-size: var(--fs-h3r);
  letter-spacing: -0.01em;
  margin-bottom: 12px;
  display: inline-block;
}
.footer-tagline { color: var(--c-body); font-size: var(--fs-sm); max-width: 32ch; }
.footer-bottom {
  border-top: 1px solid var(--hairline);
  padding-top: 24px;
  display: flex;
  flex-wrap: wrap;
  gap: 16px;
  justify-content: space-between;
  align-items: center;
  font-size: var(--fs-xs);
  color: var(--c-body);
}

@media (min-width: 768px) {
  .footer-grid { grid-template-columns: 1.4fr 1fr 1fr 1fr; gap: 48px; }
}

/* ============================================================
   Floating mobile call button
   ============================================================ */

.fab-call {
  position: fixed;
  bottom: 20px; right: 20px;
  z-index: 40;
  width: 56px; height: 56px;
  background: var(--ink);
  color: var(--c-on-dark);
  border-radius: 50%;
  display: none;
  align-items: center;
  justify-content: center;
  box-shadow: 0 8px 24px rgba(26, 26, 26, 0.25);
  transition: background 200ms var(--ease), transform 200ms var(--ease);
}
.fab-call.visible { display: inline-flex; }
.fab-call:hover { background: var(--rust); transform: scale(1.05); }
.fab-call svg { width: 22px; height: 22px; }
@media (min-width: 1024px) { .fab-call { display: none !important; } }

/* ============================================================
   Content (service subpage / generic prose)
   ============================================================ */

.prose { max-width: 72ch; }
.prose h2 { margin-top: 56px; }
.prose h2:first-child { margin-top: 0; }
.prose h3 {
  font-family: var(--serif);
  font-weight: 500;
  font-size: var(--fs-lead);
  margin-top: 32px;
  margin-bottom: 8px;
}
.prose p { margin-bottom: 16px; color: var(--c-body); }
.prose ul {
  margin: 16px 0;
  padding-left: 0;
  list-style: none;
}
.prose ul li {
  padding-left: 24px;
  position: relative;
  margin-bottom: 8px;
}
.prose ul li::before {
  content: '\00b7';
  position: absolute;
  left: 0;
  color: var(--c-accent);
}

.two-col {
  display: grid;
  grid-template-columns: 1fr;
  gap: 48px;
  align-items: start;
}
@media (min-width: 1024px) {
  .two-col { grid-template-columns: 1fr 1.5fr; gap: 80px; }
  .two-col-sticky { position: sticky; top: 96px; }
}
.toc {
  border-top: 1px solid var(--hairline);
  padding-top: 24px;
}
.toc .eyebrow { margin-bottom: 16px; }
.toc ul { list-style: none; }
.toc li { padding: 6px 0; font-size: var(--fs-sm); }
.toc a:hover { color: var(--c-accent); }

/* ============================================================
   Contact form
   ============================================================ */

.form {
  display: grid;
  grid-template-columns: 1fr;
  gap: 32px;
  max-width: 640px;
}
.field { position: relative; }
.field label {
  display: block;
  font-family: var(--sans);
  font-size: var(--fs-xs);
  letter-spacing: 0.1em;
  text-transform: uppercase;
  color: var(--c-body);
  margin-bottom: 8px;
}
.field input, .field textarea, .field select {
  width: 100%;
  border: 0;
  border-bottom: 1px solid var(--slate);
  background: transparent;
  padding: 12px 0;
  font-family: var(--sans);
  font-size: var(--fs-md);
  color: var(--c-body);
  min-height: 48px;
  transition: border-color 200ms var(--ease);
}
/* Viestikenttä on kehystetty laatikko eikä pelkkä alaviiva: iso
   kirjoitusalue erottuu selvästi kentäksi, johon voi kirjoittaa. */
.field textarea {
  min-height: 160px;
  margin-top: 8px;
  padding: 14px 16px;
  line-height: 1.6;
  border: 1px solid var(--slate);
  border-radius: 10px;
  background: var(--surface);
  resize: vertical;
}
.field input:focus, .field textarea:focus, .field select:focus {
  outline: none;
  border-bottom-color: var(--rust);
}
.field textarea:focus { border-color: var(--rust); }
.form-actions { display: flex; flex-wrap: wrap; gap: 16px; align-items: center; }
.form-note { font-size: var(--fs-xs); color: var(--c-body); }

@media (min-width: 768px) {
  .form-row { display: grid; grid-template-columns: 1fr 1fr; gap: 32px; }
}

/* ============================================================
   Reference grid (referenssit page)
   ============================================================ */

.ref-grid {
  display: grid;
  grid-template-columns: 1fr;
  gap: 32px;
  margin-top: 48px;
}
@media (min-width: 640px)  { .ref-grid { grid-template-columns: 1fr 1fr; } }
@media (min-width: 1024px) { .ref-grid { grid-template-columns: 1fr 1fr 1fr; } }

.ref-card {
  border: 1px solid var(--hairline);
  padding: 24px;
  display: flex;
  flex-direction: column;
  gap: 16px;
  transition: border-color 200ms var(--ease);
  background: var(--bone);
}
.ref-card:hover { border-color: var(--ink); }
.ref-card-img {
  aspect-ratio: 4/3;
  background: var(--ink);
  margin: -24px -24px 0;
  position: relative;
  overflow: hidden;
}
.ref-card-img img {
  width: 100%;
  height: 100%;
  object-fit: cover;
  display: block;
}
.ref-card-img.placeholder::after {
  content: attr(data-label);
  position: absolute;
  inset: 0;
  display: flex; align-items: flex-end;
  padding: 16px;
  font-family: var(--serif);
  font-style: italic;
  color: var(--c-on-dark);
  background: linear-gradient(135deg, #2a2a2a 0%, #1a1a1a 100%);
}
.ref-card-meta {
  font-family: var(--sans);
  font-size: var(--fs-xs);
  letter-spacing: 0.1em;
  text-transform: uppercase;
  color: var(--c-body);
}
.ref-card-title {
  font-family: var(--serif);
  font-weight: 500;
  font-size: var(--fs-lead);
  line-height: 1.2;
  letter-spacing: -0.005em;
}
.ref-card-scope { font-size: var(--fs-sm); color: var(--c-body); }

/* ============================================================
   Team / contact people
   ============================================================ */

.team-grid {
  display: grid;
  grid-template-columns: 1fr;
  gap: 32px;
  margin-top: 48px;
}
@media (min-width: 640px)  { .team-grid { grid-template-columns: 1fr 1fr; } }
@media (min-width: 1024px) { .team-grid { grid-template-columns: 1fr 1fr 1fr; } }

.team-card {
  border: 1px solid var(--hairline);
  padding: 24px;
  display: flex;
  flex-direction: column;
  gap: 16px;
  background: var(--bone);
  transition: border-color 200ms var(--ease);
}
.team-card:hover { border-color: var(--ink); }

.team-card-img {
  aspect-ratio: 1/1;
  margin: -24px -24px 8px;
  background: #d6d2ca;
  overflow: hidden;
  position: relative;
}
.team-card-img img {
  width: 100%;
  height: 100%;
  object-fit: cover;
  display: block;
}
.team-card-img.placeholder::after {
  content: "";
  position: absolute;
  inset: 0;
  background:
    radial-gradient(circle at 50% 38%, #b8b3a8 0 22%, transparent 23%),
    radial-gradient(ellipse at 50% 100%, #b8b3a8 0 45%, transparent 46%);
}

.team-card-name {
  font-family: var(--sans);
  font-weight: 600;
  font-size: var(--fs-md);
  letter-spacing: 0.05em;
  text-transform: uppercase;
  color: var(--c-body);
}
.team-card-role {
  font-family: var(--sans);
  font-size: var(--fs-sm);
  color: var(--c-body);
  margin-top: -8px;
}
.team-card-tag {
  font-family: var(--sans);
  font-weight: 600;
  font-size: var(--fs-sm);
  color: var(--c-body);
  margin-top: 4px;
}
.team-card-scope {
  font-size: var(--fs-sm);
  color: var(--c-body);
  line-height: 1.5;
}
.team-card-contact {
  margin-top: auto;
  display: flex;
  flex-direction: column;
  gap: 4px;
  font-size: var(--fs-sm);
  padding-top: 8px;
}
.team-card-contact a { color: var(--c-accent); text-decoration: none; }
.team-card-contact a:hover { text-decoration: underline; }

/* ============================================================
   Utility
   ============================================================ */

.sr-only {
  position: absolute; width: 1px; height: 1px;
  padding: 0; margin: -1px; overflow: hidden;
  clip: rect(0,0,0,0); white-space: nowrap; border: 0;
}

/* ============================================================
   Marquee / infinite scroll strip
   ============================================================ */

.marquee-section {
  position: relative;
  overflow: hidden;
  padding: 32px 0 40px;
  background: var(--bone);
  border-top: 1px solid var(--hairline);
  border-bottom: 1px solid var(--hairline);
}
.marquee-label {
  text-align: center;
  font-family: var(--sans);
  font-size: var(--fs-xs);
  font-weight: 500;
  letter-spacing: 0.14em;
  text-transform: uppercase;
  color: var(--c-body);
  margin-bottom: 24px;
}

/* Fade edges */
.logos-row {
  display: flex;
  flex-wrap: wrap;
  justify-content: center;
  align-items: center;
  gap: 20px;
  padding: 0 var(--gutter);
}

/* Logo items - each in a white card */
.logo-item {
  flex-shrink: 0;
  display: flex;
  align-items: center;
  justify-content: center;
  background: #FFFFFF;
  border: 1px solid var(--hairline);
  border-radius: 16px;
  padding: 20px 36px;
  height: 96px;
  min-width: 180px;
  box-shadow: 0 2px 12px rgba(0, 0, 0, 0.06);
  transition: box-shadow 200ms var(--ease), transform 200ms var(--ease), border-color 200ms var(--ease);
}
.logo-item:hover {
  box-shadow: 0 8px 28px rgba(0, 0, 0, 0.12);
  transform: translateY(-3px);
  border-color: var(--rust);
}
.logo-item img {
  height: 52px;
  width: auto;
  max-width: 160px;
  object-fit: contain;
  transition: opacity 200ms var(--ease);
  opacity: 0.9;
}
.logo-item:hover img { opacity: 1; }

/* AAA jpg - already has white bg, just size it */
.logo-item-aaa img { height: 58px; }

/* JSY white logo - make it dark on white card */
.logo-item-dark img {
  filter: brightness(0) saturate(0);
  opacity: 0.7;
}
.logo-item-dark:hover img {
  filter: brightness(0) saturate(0);
  opacity: 1;
}


/* Base card */
.mcard {
  flex-shrink: 0;
  width: 260px;
  min-height: 200px;
  border-radius: 20px;
  padding: 24px;
  display: flex;
  flex-direction: column;
  gap: 10px;
  position: relative;
  overflow: hidden;
  cursor: default;
  transition: transform 200ms var(--ease), box-shadow 200ms var(--ease);
}
.mcard:hover {
  transform: translateY(-4px);
  box-shadow: 0 16px 40px rgba(0, 0, 0, 0.12);
}

.mcard-tag {
  font-family: var(--sans);
  font-size: var(--fs-xs);
  font-weight: 500;
  letter-spacing: 0.12em;
  text-transform: uppercase;
}

.mcard-title {
  font-family: var(--serif);
  font-weight: 500;
  font-size: var(--fs-lead);
  line-height: 1.2;
  letter-spacing: -0.01em;
}

.mcard-desc {
  font-family: var(--sans);
  font-size: var(--fs-sm);
  line-height: 1.5;
  flex: 1;
}

/* Bottom accent bar */
.mcard-accent {
  height: 3px;
  width: 40px;
  background: var(--rust);
  border-radius: 999px;
  margin-top: auto;
}

/* Image strip at bottom */
.mcard-img-strip {
  position: absolute;
  left: 0; right: 0; bottom: 0;
  height: 80px;
  background-size: cover;
  background-position: center;
  mask-image: linear-gradient(to bottom, transparent 0%, rgba(0,0,0,0.6) 100%);
  -webkit-mask-image: linear-gradient(to bottom, transparent 0%, rgba(0,0,0,0.6) 100%);
}

/* Dark variant */
.mcard-dark {
  background: var(--ink);
}
.mcard-dark .mcard-tag { color: var(--c-on-dark); }
.mcard-dark .mcard-title { color: var(--c-on-dark); }
.mcard-dark .mcard-desc { color: var(--c-on-dark); }

/* Light variant */
.mcard-light {
  background: #FFFFFF;
  border: 1px solid var(--hairline);
  min-height: 220px;
  padding-bottom: 88px;
}
.mcard-light .mcard-tag { color: var(--c-body); }
.mcard-light .mcard-title { color: var(--c-body); }
.mcard-light .mcard-desc { color: var(--c-body); }

/* Stat variant */
.mcard-stat {
  background: var(--rust);
  width: 220px;
  justify-content: center;
}
.mcard-stat-num {
  font-family: var(--serif);
  font-weight: 500;
  font-size: var(--fs-h1r);
  line-height: 1;
  letter-spacing: -0.02em;
  color: var(--c-on-dark);
}
.mcard-stat-label {
  font-family: var(--sans);
  font-weight: 600;
  font-size: var(--fs-xs);
  letter-spacing: 0.06em;
  text-transform: uppercase;
  color: var(--c-on-dark);
}
.mcard-stat-sub {
  font-family: var(--sans);
  font-size: var(--fs-xs);
  color: var(--c-on-dark);
  line-height: 1.4;
  margin-top: 4px;
}

/* ============================================================
   Nav - minimal (Vercel-style flat)
   ============================================================ */
.nav.nav-minimal {
  position: fixed;
  top: 0; left: 0; right: 0;
  z-index: 50;
  background: transparent;
  border-bottom: 1px solid rgba(217, 212, 201, 0.5);
  height: 56px;
  /* NOTE: backdrop-filter intentionally NOT here - it would create a new
     containing block and trap the position:fixed mobile menu inside the nav.
     We apply it on the ::before pseudo-element instead. */
}
.nav.nav-minimal::before {
  content: '';
  position: absolute;
  inset: 0;
  background: rgba(249, 249, 249, 0.72);
  backdrop-filter: saturate(180%) blur(14px);
  -webkit-backdrop-filter: saturate(180%) blur(14px);
  z-index: -1;
  pointer-events: none;
}
.nav.nav-minimal .nav-inner {
  height: 56px;
  max-width: var(--container);
  margin: 0 auto;
  padding: 0 var(--gutter);
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 24px;
}
@media (min-width: 768px) {
  .nav.nav-minimal .nav-inner { padding: 0 32px; }
}

.nav.nav-minimal .brand {
  font-family: var(--serif);
  font-weight: 500;
  font-size: var(--fs-base);
  color: var(--c-body);
  letter-spacing: -0.005em;
}
.nav.nav-minimal .brand-sup {
  font-size: var(--fs-xs);
  letter-spacing: 0.1em;
  color: var(--c-body);
}

.nav.nav-minimal .nav-links {
  gap: 4px;
}
.nav.nav-minimal .nav-links a {
  font-size: var(--fs-xs);
  font-weight: 500;
  color: var(--c-body);
  padding: 8px 12px;
  border-radius: 6px;
  transition: color 150ms var(--ease), background 150ms var(--ease);
}
.nav.nav-minimal .nav-links a:hover {
  color: var(--c-body);
  background: rgba(26, 26, 26, 0.05);
}
.nav.nav-minimal .nav-links a.active {
  color: var(--c-body);
}
.nav.nav-minimal .nav-links a.active::after { display: none; }
.nav.nav-minimal .nav-dropdown-menu {
  background: rgba(255,255,255,0.96);
  backdrop-filter: blur(12px);
  -webkit-backdrop-filter: blur(12px);
  border: 1px solid var(--hairline);
  border-radius: 16px;
  padding: 8px;
  box-shadow: 0 12px 32px rgba(0,0,0,0.08);
  top: calc(100% + 4px);
}
.nav.nav-minimal .nav-dropdown-menu li a { border-radius: 10px; }
.nav.nav-minimal .nav-dropdown-menu li a {
  font-size: var(--fs-xs);
  padding: 8px 12px;
  border-radius: 6px;
  color: var(--c-body);
}
.nav.nav-minimal .nav-dropdown-menu li a:hover {
  background: rgba(26,26,26,0.05);
  color: var(--c-body);
}

.nav.nav-minimal .nav-cta-pill {
  background: var(--ink);
  color: var(--c-on-dark);
  padding: 7px 14px;
  font-size: var(--fs-xs);
  font-weight: 500;
  border-radius: 6px;
  min-height: 0;
}
.nav.nav-minimal .nav-cta-pill:hover { background: #000; color: var(--c-on-dark); }

.nav.nav-minimal .nav-toggle { padding: 10px; margin-right: -10px; }

/* Push hero variants down so the fixed nav doesn't overlap */
body:has(.nav.nav-minimal) .hero-split,
body:has(.nav.nav-minimal) .hero-outline,
body:has(.nav.nav-minimal) .hero-architect,
body:has(.nav.nav-minimal) .hero-atmospheric {
  padding-top: 96px;
}
@media (min-width: 768px) {
  body:has(.nav.nav-minimal) .hero-split,
  body:has(.nav.nav-minimal) .hero-outline,
  body:has(.nav.nav-minimal) .hero-architect,
  body:has(.nav.nav-minimal) .hero-atmospheric {
    padding-top: 120px;
  }
}

/* Mobile menu offset for minimal nav */
.nav.nav-minimal .nav-mobile {
  inset: 56px 0 0 0;
  border-radius: 0;
  box-shadow: none;
  padding: 24px var(--gutter);
}

/* ============================================================
   Hero variants - switcher
   ============================================================ */

/* By default only variant A is visible.
   `body .hero-variant` bumps specificity to (0,1,1) so it beats the
   variants' own class rules like `.hero-split { display: flex }`
   (specificity 0,1,0) that appear later in the stylesheet. */
body .hero-variant { display: none; }
body[data-hero="a"] .hero-variant[data-hero="a"],
body[data-hero="b"] .hero-variant[data-hero="b"],
body[data-hero="c"] .hero-variant[data-hero="c"],
body[data-hero="d"] .hero-variant[data-hero="d"],
body[data-hero="e"] .hero-variant[data-hero="e"] { display: flex; }
body:not([data-hero]) .hero-variant[data-hero="a"] { display: flex; }

/* ============================================================
   Hero B - Panel (full-bleed image + navy overlay card)
   ============================================================ */
.hero-panel {
  position: relative;
  min-height: 100vh;
  padding: 0;
  background: var(--ink);
  overflow: hidden;
  align-items: center;
  justify-content: flex-start;
}

.hero-panel-image {
  position: absolute;
  inset: 0;
  background-size: cover;
  background-position: center;
  filter: saturate(0.9) brightness(0.85);
}

.hero-panel::before {
  content: '';
  position: absolute;
  inset: 0;
  background: linear-gradient(90deg, rgba(12,13,16,0.85) 0%, rgba(12,13,16,0.55) 35%, rgba(12,13,16,0.15) 65%, rgba(12,13,16,0) 85%);
  z-index: 1;
}

.hero-panel-container {
  position: relative;
  z-index: 2;
  width: 100%;
  max-width: none;
  margin-left: 0;
  display: flex;
  align-items: center;
  min-height: 100vh;
  padding-top: 96px;
  padding-bottom: 64px;
}

.hero-panel-card {
  max-width: 640px;
  width: 100%;
}

.hero-panel-eyebrow {
  font-family: var(--sans);
  font-weight: 500;
  font-size: var(--fs-xs);
  letter-spacing: 0.18em;
  text-transform: uppercase;
  color: var(--c-on-dark);
  margin: 0 0 24px;
  display: inline-flex;
  align-items: center;
  gap: 12px;
}
.hero-panel-eyebrow-line {
  display: inline-block;
  width: 28px; height: 1px;
  background: var(--rust);
}

/* Thin corner brackets - technical/blueprint framing */
.hero-panel-frame {
  position: absolute;
  inset: 28px;
  z-index: 2;
  pointer-events: none;
}
.hero-panel-frame .corner {
  position: absolute;
  width: 28px;
  height: 28px;
  border: 1px solid rgba(255,255,255,0.35);
}
.hero-panel-frame .corner-tl { top: 0; left: 0; border-right: none; border-bottom: none; }
.hero-panel-frame .corner-tr { top: 0; right: 0; border-left: none; border-bottom: none; }
.hero-panel-frame .corner-bl { bottom: 0; left: 0; border-right: none; border-top: none; }
.hero-panel-frame .corner-br { bottom: 0; right: 0; border-left: none; border-top: none; }

@media (max-width: 768px) {
  .hero-panel-frame { inset: 16px; }
}

.hero-panel-title {
  font-family: 'Oswald', var(--sans);
  font-weight: 600;
  text-transform: uppercase;
  font-size: var(--fs-h1r);
  line-height: 1.08;
  letter-spacing: 0.005em;
  color: var(--c-on-dark);
  margin: 0 0 24px;
  max-width: 18ch;
}

.hero-panel-lead {
  font-family: var(--sans);
  font-size: var(--fs-base);
  line-height: 1.55;
  color: var(--c-on-dark);
  margin: 0 0 36px;
  max-width: 48ch;
}

.hero-panel-ctas {
  display: flex;
  flex-wrap: wrap;
  gap: 14px;
  align-items: center;
}

.hero-panel-btn {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  padding: 16px 32px;
  font-family: var(--sans);
  font-weight: 500;
  font-size: var(--fs-sm);
  letter-spacing: 0.04em;
  text-transform: uppercase;
  border-radius: 999px;
  text-decoration: none;
  transition: background 200ms var(--ease), color 200ms var(--ease), border-color 200ms var(--ease);
  min-height: 50px;
}

.hero-panel-btn-light {
  background: #fff;
  color: var(--c-body);
  border: 1px solid #fff;
}
.hero-panel-btn-light:hover {
  background: var(--rust);
  color: var(--c-on-dark);
  border-color: var(--rust);
}
.hero-panel-btn-light .arrow {
  margin-left: 8px;
  transition: transform 200ms var(--ease);
}
.hero-panel-btn-light:hover .arrow { transform: translateX(4px); }

.hero-panel-stats {
  margin-top: 40px;
  padding-top: 32px;
  border-top: 1px solid rgba(255,255,255,0.18);
}
.hero-panel-stats .hero-stat .num { color: var(--c-on-dark); }
.hero-panel-stats .hero-stat .label { color: var(--c-on-dark); }

.hero-panel-btn-ghost {
  background: transparent;
  color: var(--c-on-dark);
  border: 1px solid rgba(255,255,255,0.35);
}
.hero-panel-btn-ghost:hover {
  background: rgba(255,255,255,0.10);
  border-color: var(--rust);
  color: var(--c-accent);
}

/* Wide displays - let the panel card grow instead of staying a small fixed island */
@media (min-width: 1600px) {
  .hero-panel-container { padding-left: 48px; }
  .hero-panel-card { max-width: 760px; }
  .hero-panel-eyebrow { font-size: var(--fs-xs); margin-bottom: 32px; }
  .hero-panel-title { font-size: var(--fs-display); max-width: 20ch; margin-bottom: 28px; }
  .hero-panel-lead { font-size: var(--fs-base); max-width: 50ch; margin-bottom: 44px; }
  .hero-panel-btn { padding: 18px 36px; font-size: var(--fs-sm); min-height: 56px; }
  .hero-panel-stats { margin-top: 48px; }
  .hero-panel-stats .hero-stat .num { font-size: var(--fs-h2r); }
}

@media (min-width: 2000px) {
  .hero-panel-container { padding-left: 80px; }
  .hero-panel-card { max-width: 880px; }
  .hero-panel-title { font-size: var(--fs-display); }
  .hero-panel-lead { font-size: var(--fs-lead); max-width: 54ch; }
  .hero-panel-stats .hero-stat .num { font-size: var(--fs-h2r); }
}

@media (max-width: 768px) {
  .hero-panel-container { padding-top: 80px; padding-bottom: 48px; }
  .hero-panel-btn { padding: 14px 24px; font-size: var(--fs-xs); }
}

/* Sticky floating "Ota yhteyttä" CTA - only on variant B hero.
   Sits above the chat FAB / phone FAB at the bottom-right. */
.hero-sticky-cta {
  position: fixed;
  z-index: 50;
  right: 20px;
  bottom: 152px; /* clear chat icon (88px) + phone fab on mobile (~64px) */
  display: inline-flex;
  align-items: center;
  gap: 8px;
  padding: 12px 20px;
  background: var(--ink);
  color: var(--c-on-dark);
  font-family: var(--sans);
  font-weight: 500;
  font-size: var(--fs-sm);
  letter-spacing: 0.02em;
  border-radius: 999px;
  box-shadow: 0 12px 30px rgba(26, 26, 26, 0.28);
  text-decoration: none;
  transition: background 200ms var(--ease), transform 200ms var(--ease);
  opacity: 0;
  transform: translateY(8px);
  pointer-events: none;
}
.hero-sticky-cta:hover,
.hero-sticky-cta:focus-visible {
  background: var(--rust);
  transform: translateY(0) scale(1.03);
  outline: none;
}
@media (min-width: 1024px) {
  .hero-sticky-cta { bottom: 96px; }
}

/* Show the sticky CTA only when variant B is the active hero */
body[data-hero="b"] .hero-sticky-cta {
  opacity: 1;
  transform: translateY(0);
  pointer-events: auto;
}

/* ============================================================
   Hero B (LEGACY) - Split 50/50 (no longer in HTML)
   ============================================================ */
.hero-split-half {
  min-height: 100vh;
  padding: 0;
  background: var(--bone);
  flex-direction: column;
  overflow: hidden;
}

.hero-split-half-image {
  position: relative;
  flex: 1 1 50vh;
  min-height: 50vh;
  overflow: hidden;
  background: var(--ink);
}
.hero-split-half-image img {
  position: absolute;
  inset: 0;
  width: 100%;
  height: 100%;
  object-fit: cover;
  display: block;
}

.hero-split-half-badges {
  position: absolute;
  bottom: 20px;
  left: 20px;
  display: flex;
  gap: 8px;
  flex-wrap: wrap;
  z-index: 2;
}
.hero-split-half-badge {
  font-family: var(--sans);
  font-size: var(--fs-xs);
  letter-spacing: 0.14em;
  text-transform: uppercase;
  color: var(--c-body);
  padding: 8px 14px;
  border-radius: 999px;
  background:
    linear-gradient(180deg,
      rgba(255, 255, 255, 0.55) 0%,
      rgba(255, 255, 255, 0.25) 100%);
  backdrop-filter: saturate(180%) blur(16px);
  -webkit-backdrop-filter: saturate(180%) blur(16px);
  box-shadow:
    0 8px 20px rgba(10, 30, 60, 0.10),
    inset 0 1px 1px rgba(255, 255, 255, 0.95),
    0 0 0 1px rgba(255, 255, 255, 0.4);
}

.hero-split-half-content {
  flex: 1 1 50%;
  display: flex;
  align-items: center;
  padding: 80px var(--gutter);
  background: var(--bone);
}

.hero-split-half-inner {
  max-width: 560px;
  width: 100%;
  margin: 0 auto;
}

.hero-split-half-inner .eyebrow {
  color: var(--c-body);
  margin-bottom: 20px;
  display: flex;
  align-items: center;
  gap: 12px;
}
.hero-split-half-inner .eyebrow::before {
  content: '';
  width: 28px;
  height: 1px;
  background: var(--slate);
  opacity: 0.6;
}

.hero-split-half-title {
  font-family: 'Oswald', var(--sans);
  font-weight: 500;
  text-transform: uppercase;
  font-size: var(--fs-h1r);
  line-height: 1;
  letter-spacing: 0.005em;
  color: var(--c-body);
  margin: 0 0 24px;
  max-width: 16ch;
}
.hero-split-half-title em {
  color: var(--c-accent);
  font-style: normal;
  font-weight: 500;
}

.hero-split-half-lead {
  font-family: var(--sans);
  font-size: var(--fs-base);
  line-height: 1.55;
  color: var(--c-body);
  opacity: 0.9;
  margin: 0 0 32px;
  max-width: 44ch;
}

.hero-split-half-ctas {
  display: flex;
  flex-wrap: wrap;
  gap: 14px;
  align-items: center;
  margin-bottom: 32px;
}

.hero-split-half-stats {
  display: grid;
  grid-template-columns: repeat(3, 1fr);
  gap: 24px;
  margin-top: 40px;
  padding-top: 32px;
  border-top: 1px solid var(--hairline);
}
.hero-split-half-stats > div {
  display: flex;
  flex-direction: column;
  gap: 4px;
}
.hero-split-half-stats .val {
  font-family: 'Oswald', var(--sans);
  font-weight: 600;
  font-size: var(--fs-xl);
  color: var(--c-body);
  letter-spacing: 0.02em;
}
.hero-split-half-stats .lbl {
  font-size: var(--fs-xs);
  letter-spacing: 0.1em;
  text-transform: uppercase;
  color: var(--c-body);
}

/* Desktop - true 50/50 */
@media (min-width: 1024px) {
  .hero-split-half {
    flex-direction: row;
    min-height: 100vh;
  }
  .hero-split-half-image { min-height: 100vh; flex: 1 1 50%; }
  .hero-split-half-content { flex: 1 1 50%; padding: 96px 64px; }
  .hero-split-half-badges { bottom: 32px; left: 32px; }
}

@media (min-width: 1400px) {
  .hero-split-half-content { padding: 120px 96px; }
}

@media (max-width: 600px) {
  .hero-split-half-image { min-height: 40vh; }
  .hero-split-half-content { padding: 48px var(--gutter); }
  .hero-split-half-stats { gap: 12px; padding-top: 24px; margin-top: 32px; }
  .hero-split-half-stats .val { font-size: var(--fs-lead); }
}

/* ============================================================
   Hero B (LEGACY) - Outline (no longer used in HTML)
   ============================================================ */
.hero-outline {
  background: var(--bone);
  color: var(--c-body);
  padding: 110px 0 64px;
  flex-direction: column;
  min-height: 100vh;
  position: relative;
  overflow: hidden;
}
.hero-outline .container {
  display: flex;
  flex-direction: column;
  gap: 24px;
  width: 100%;
}

.hero-outline-top {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 32px;
  flex-wrap: wrap;
}

.eyebrow-pill {
  font-family: var(--sans);
  font-size: var(--fs-xs);
  letter-spacing: 0.12em;
  text-transform: uppercase;
  padding: 8px 16px;
  border: 1px solid var(--ink);
  border-radius: 999px;
  color: var(--c-body);
}

.hero-outline-stats {
  display: flex;
  gap: 32px;
  list-style: none;
  margin: 0; padding: 0;
}
.hero-outline-stats li { display: flex; flex-direction: column; align-items: flex-end; gap: 2px; }
.hero-outline-stats .val {
  font-family: 'Oswald', var(--sans);
  font-weight: 600;
  font-size: var(--fs-xl);
  letter-spacing: 0.02em;
  color: var(--c-body);
}
.hero-outline-stats .lbl {
  font-size: var(--fs-xs);
  letter-spacing: 0.1em;
  text-transform: uppercase;
  color: var(--c-body);
}

.hero-outline-title {
  font-family: 'Oswald', var(--sans);
  font-weight: 600;
  font-size: var(--fs-display);
  line-height: 0.95;
  letter-spacing: 0.005em;
  text-transform: uppercase;
  margin: 0;
  text-align: center;
  display: flex;
  flex-direction: column;
}
.line-fill { color: var(--c-body); }
.line-outline {
  color: transparent;
  -webkit-text-stroke: 1.5px var(--ink);
  text-stroke: 1.5px var(--ink);
  margin-left: clamp(40px, 8vw, 120px);
}

.hero-outline-card {
  position: relative;
  width: 100%;
  max-width: 560px;
  margin: 16px auto 0;
  aspect-ratio: 16/10;
  border-radius: 16px;
  overflow: hidden;
  box-shadow: 0 24px 48px rgba(0,0,0,0.15);
}
.hero-outline-card img { width: 100%; height: 100%; object-fit: cover; }
.hero-outline-card-tag {
  position: absolute;
  left: 16px; bottom: 16px;
  background: rgba(255,255,255,0.92);
  color: var(--c-body);
  font-family: var(--sans);
  font-size: var(--fs-xs);
  letter-spacing: 0.1em;
  text-transform: uppercase;
  padding: 8px 14px;
  border-radius: 999px;
}

.hero-outline-lead {
  font-family: var(--sans);
  font-size: var(--fs-base);
  color: var(--c-body);
  text-align: center;
  max-width: 56ch;
  margin: 8px auto 0;
}
.hero-outline-lead em { color: var(--c-accent); font-style: italic; font-family: var(--serif); }

.hero-outline-ctas {
  display: flex;
  gap: 12px;
  justify-content: center;
  flex-wrap: wrap;
  margin-top: 8px;
}

@media (min-width: 768px) {
  .hero-outline { padding: 130px 0 80px; }
  .hero-outline-card { aspect-ratio: 21/9; max-width: 720px; }
}

/* ============================================================
   Hero C - Construction (split layout: left panel, right image)
   ============================================================ */
.hero-construction {
  position: relative;
  min-height: 100vh;
  padding: 0;
  background: var(--ink);
  display: flex;
  flex-direction: column;
  overflow: hidden;
}

.hero-construction-panel {
  flex: 1 1 50%;
  background:
    linear-gradient(100deg, rgba(12, 16, 24, 0.85) 0%, rgba(12, 16, 24, 0.7) 40%, rgba(12, 16, 24, 0.5) 70%, rgba(12, 16, 24, 0.3) 100%),
    url('../images/references-bg.jpg');
  background-size: 100% 100%, auto 145%;
  background-position: center, right center;
  background-repeat: no-repeat, no-repeat;
  display: flex;
  align-items: center;
  padding: 80px var(--gutter);
  position: relative;
  z-index: 2;
  clip-path: polygon(0 0, calc(100% - 65vh) 0, 100% 100%, 0 100%);
}

.hero-construction-inner {
  max-width: 560px;
  width: 100%;
}

.hero-construction-eyebrow {
  font-family: var(--sans);
  font-weight: 500;
  font-size: var(--fs-xs);
  letter-spacing: 0.12em;
  text-transform: uppercase;
  color: var(--c-on-dark);
  margin: 0 0 20px;
  display: flex;
  align-items: center;
  gap: 12px;
}
.hero-construction-eyebrow::before {
  content: '';
  width: 28px;
  height: 1px;
  background: rgba(255,255,255,0.7);
  display: inline-block;
}

.hero-construction-title {
  font-family: 'Oswald', 'Inter', sans-serif;
  font-weight: 500;
  text-transform: uppercase;
  font-size: var(--fs-h1r);
  line-height: 1.02;
  letter-spacing: 0.005em;
  color: var(--c-on-dark);
  margin: 0;
  max-width: 24ch;
}
.hero-construction-title .accent {
  color: var(--c-accent);
  font-style: normal;
  font-weight: 500;
}

.hero-construction-lead {
  font-family: var(--sans);
  font-size: var(--fs-base);
  line-height: 1.55;
  color: var(--c-on-dark);
  margin: 20px 0 0;
  max-width: 46ch;
}

.hero-construction-ctas {
  display: flex;
  align-items: center;
  gap: 20px;
  margin-top: 32px;
}

.hero-construction-btn {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  padding: 16px 32px;
  font-family: var(--sans);
  font-weight: 600;
  font-size: var(--fs-sm);
  letter-spacing: 0.04em;
  text-transform: uppercase;
  background: var(--rust);
  color: var(--c-on-dark);
  border: none;
  border-radius: 4px;
  text-decoration: none;
  cursor: pointer;
  transition: background 200ms var(--ease), transform 200ms var(--ease);
  min-height: 50px;
}
.hero-construction-btn:hover {
  background: #d9573a;
  transform: translateY(-2px);
}

.hero-construction-btn-play {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: 56px;
  height: 56px;
  background: var(--rust);
  color: var(--c-on-dark);
  border: none;
  border-radius: 50%;
  cursor: pointer;
  transition: background 200ms var(--ease), transform 200ms var(--ease);
  flex-shrink: 0;
}
.hero-construction-btn-play:hover {
  background: #d9573a;
  transform: scale(1.08);
}

.hero-construction-image {
  position: absolute;
  right: 0;
  top: 0;
  bottom: 0;
  background: var(--ink);
  z-index: 1;
  transform: translateX(25%);
}
.hero-construction-image img {
  height: 100%;
  width: auto;
  display: block;
}

/* Desktop: navy panel fixed on the left half, image behind it on the right */
@media (min-width: 1024px) {
  .hero-construction { flex-direction: row; }
  .hero-construction-panel {
    flex: 0 0 78%;
    padding: 96px 64px;
  }
}

/* Mobile: stack vertically */
@media (max-width: 768px) {
  .hero-construction-panel { padding: 60px 24px; flex: 1 1 auto; }
  .hero-construction-image { flex: 0 0 50vh; }
  .hero-construction-title { font-size: var(--fs-h2r); }
}

/* Legacy architect styles kept for backwards compat (no longer used in HTML) */
.hero-architect {
  position: relative;
  min-height: 100vh;
  padding: 110px 0 0;
  background: #1a1a1a;
  color: var(--c-on-dark);
  overflow: hidden;
  flex-direction: column;
}
.hero-architect-bg {
  position: absolute; inset: 0;
  background-size: cover;
  background-position: center;
  filter: grayscale(0.4) brightness(0.55);
}
.hero-architect-overlay {
  position: absolute; inset: 0;
  background: linear-gradient(180deg, rgba(0,0,0,0.2) 0%, rgba(0,0,0,0.55) 70%, rgba(0,0,0,0.85) 100%);
}
.hero-architect-inner {
  position: relative;
  z-index: 2;
  display: flex;
  flex-direction: column;
  justify-content: space-between;
  flex: 1;
  min-height: calc(100vh - 110px);
  padding-bottom: 32px;
  width: 100%;
}

.hero-architect-text { max-width: 100%; }
.hero-architect-text h1 {
  font-family: 'Oswald', var(--sans);
  font-weight: 300;
  font-size: var(--fs-display);
  line-height: 0.95;
  letter-spacing: 0.005em;
  color: var(--c-on-dark);
  text-transform: uppercase;
  margin: 0;
}
.hero-architect-text h1 .accent { color: var(--c-accent); font-weight: 400; }

.hero-architect-lead {
  margin-top: 32px;
  max-width: 42ch;
  font-size: var(--fs-sm);
  line-height: 1.55;
  color: var(--c-on-dark);
}

.hero-architect-cards {
  margin-top: 56px;
  display: grid;
  grid-template-columns: 1fr;
  gap: 16px;
  align-items: center;
}

.hero-arch-card {
  background: rgba(255,255,255,0.08);
  backdrop-filter: blur(12px);
  -webkit-backdrop-filter: blur(12px);
  border: 1px solid rgba(255,255,255,0.12);
  border-radius: 28px;
  padding: 14px;
  display: flex;
  align-items: center;
  gap: 16px;
  color: var(--c-on-dark);
}
.hero-arch-card-img {
  flex-shrink: 0;
  width: 88px; height: 88px;
  border-radius: 20px;
  overflow: hidden;
}
.hero-arch-card-img img { width: 100%; height: 100%; object-fit: cover; }
.hero-arch-card p {
  font-family: var(--sans);
  font-size: var(--fs-sm);
  color: var(--c-on-dark);
  line-height: 1.45;
  margin: 0;
}

.hero-arch-circle {
  justify-self: center;
  width: 110px; height: 110px;
  border-radius: 50%;
  background: #fff;
  color: var(--c-body);
  display: inline-flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  gap: 4px;
  font-family: 'Oswald', var(--sans);
  font-weight: 600;
  font-size: var(--fs-xs);
  letter-spacing: 0.12em;
  text-transform: uppercase;
  text-decoration: none;
  transition: transform 200ms var(--ease), background 200ms var(--ease);
}
.hero-arch-circle:hover { background: var(--rust); color: var(--c-on-dark); transform: scale(1.05); }

@media (min-width: 900px) {
  .hero-architect-cards {
    grid-template-columns: 1fr auto 1fr;
    gap: 24px;
    align-items: end;
  }
  .hero-arch-circle { width: 130px; height: 130px; }
}

/* ============================================================
   Hero D - Atmospheric (fog inspired)
   ============================================================ */
.hero-atmospheric {
  position: relative;
  min-height: 100vh;
  padding: 110px 0 64px;
  background: linear-gradient(180deg, #b8c5d6 0%, #d4dae3 100%);
  color: var(--c-body);
  overflow: hidden;
  flex-direction: column;
}
.hero-atmospheric-bg {
  position: absolute;
  inset: 0;
  background-size: cover;
  background-position: center 30%;
  opacity: 0.85;
}
.hero-atmospheric-fade {
  position: absolute;
  inset: 0;
  background:
    linear-gradient(180deg, rgba(184,197,214,0) 30%, rgba(212,218,227,0.85) 70%, rgba(225,230,236,1) 100%),
    linear-gradient(180deg, rgba(184,197,214,0.4) 0%, rgba(184,197,214,0) 25%);
}
.hero-atmospheric-content {
  position: relative;
  z-index: 2;
  display: flex;
  flex-direction: column;
  justify-content: flex-end;
  flex: 1;
  min-height: calc(100vh - 174px);
  text-align: left;
  width: 100%;
}
.hero-atmospheric-content .eyebrow { color: var(--c-body); margin-bottom: 16px; }
.hero-atmospheric-content h1 {
  font-family: 'Oswald', var(--sans);
  font-weight: 500;
  text-transform: uppercase;
  font-size: var(--fs-h2r);
  line-height: 1.04;
  letter-spacing: 0.005em;
  color: var(--c-body);
  margin: 0;
  max-width: 18ch;
}
.hero-atmospheric-content h1 em {
  font-family: var(--serif);
  font-style: italic;
  font-weight: 400;
  text-transform: none;
  color: var(--c-body);
  letter-spacing: -0.01em;
}
.hero-atmospheric-lead {
  margin-top: 20px;
  font-size: var(--fs-md);
  color: var(--c-body);
  opacity: 0.85;
  max-width: 48ch;
}
.hero-atmospheric-ctas {
  display: flex;
  gap: 12px;
  margin-top: 32px;
  flex-wrap: wrap;
}
.btn-pill-ghost-dark {
  background: transparent;
  color: var(--c-body);
  border: 1px solid var(--ink);
}
.btn-pill-ghost-dark:hover { background: var(--ink); color: var(--c-on-dark); }

.hero-atmospheric-meta {
  display: flex;
  gap: 40px;
  margin-top: 56px;
  padding-top: 24px;
  border-top: 1px solid rgba(26,26,26,0.18);
  flex-wrap: wrap;
}
.hero-atmospheric-meta div { display: flex; flex-direction: column; gap: 4px; }
.hero-atmospheric-meta .num {
  font-family: 'Oswald', var(--sans);
  font-weight: 600;
  font-size: var(--fs-xl);
  color: var(--c-body);
}
.hero-atmospheric-meta .lbl {
  font-size: var(--fs-xs);
  letter-spacing: 0.1em;
  text-transform: uppercase;
  color: var(--c-body);
}

/* ============================================================
   Hero picker (floating client preview switcher)
   ============================================================ */
.hero-picker {
  position: fixed;
  bottom: 20px;
  left: 50%;
  transform: translateX(-50%);
  background: rgba(26,26,26,0.95);
  backdrop-filter: blur(12px);
  -webkit-backdrop-filter: blur(12px);
  border-radius: 999px;
  padding: 8px 8px 8px 20px;
  display: flex;
  align-items: center;
  gap: 6px;
  z-index: 999;
  box-shadow: 0 16px 48px rgba(0,0,0,0.3);
  font-family: var(--sans);
}
.hero-picker.hidden { display: none; }
.hero-picker-label {
  color: var(--c-on-dark);
  font-size: var(--fs-xs);
  letter-spacing: 0.12em;
  text-transform: uppercase;
  margin-right: 8px;
}
.hero-picker button {
  background: transparent;
  border: 0;
  color: var(--c-on-dark);
  font-size: var(--fs-xs);
  font-weight: 500;
  padding: 8px 14px;
  border-radius: 999px;
  cursor: pointer;
  transition: background 200ms var(--ease), color 200ms var(--ease);
  white-space: nowrap;
}
.hero-picker button:hover { color: var(--c-on-dark); background: rgba(255,255,255,0.08); }
.hero-picker button.active { background: var(--rust); color: var(--c-on-dark); }
.hero-picker-close {
  width: 32px; height: 32px;
  padding: 0 !important;
  font-size: var(--fs-h3) !important;
  color: var(--c-on-dark) !important;
  margin-left: 4px;
}
.hero-picker-close:hover { color: var(--c-on-dark) !important; background: rgba(255,255,255,0.1) !important; }

.services-picker {
  left: auto;
  right: 20px;
  bottom: 20px;
  transform: none;
}

@media (max-width: 640px) {
  .hero-picker {
    padding: 6px 6px 6px 14px;
    gap: 2px;
    bottom: 12px;
    width: calc(100% - 24px);
    max-width: 480px;
    justify-content: center;
  }
  .hero-picker-label { display: none; }
  .hero-picker button { font-size: var(--fs-xs); padding: 6px 10px; }

  .services-picker {
    right: auto;
    left: 50%;
    transform: translateX(-50%);
    bottom: 64px;
  }
}

/* ============================================================
   Contact page hero (form first)
   ============================================================ */

.contact-hero {
  padding: 64px 0 72px;
  border-bottom: 1px solid var(--hairline);
}

.contact-hero-grid {
  display: grid;
  grid-template-columns: 1fr;
  gap: 56px;
  align-items: start;
}

@media (min-width: 960px) {
  .contact-hero { padding: 80px 0 96px; }
  .contact-hero-grid { grid-template-columns: 1fr 340px; gap: 80px; }
}

.contact-form-col h1 {
  font-size: var(--fs-h2r);
  margin-top: 12px;
}

.contact-info-col {}

.contact-info-block { display: flex; flex-direction: column; gap: 8px; }

.contact-phone-link {
  font-family: var(--serif);
  font-weight: 500;
  font-size: var(--fs-h3r);
  letter-spacing: -0.01em;
  color: var(--c-body);
  display: block;
  margin-top: 8px;
}
.contact-phone-link:hover { color: var(--c-accent); }

/* ============================================================
   Hero credentials grid (right column on Concept A)
   ============================================================ */

.hero-credentials {
  display: flex;
  flex-direction: column;
  gap: 14px;
  align-items: flex-start;
  margin-top: 48px;
}

.hero-credentials-label {
  font-family: var(--sans);
  font-size: var(--fs-xs);
  letter-spacing: 0.14em;
  text-transform: uppercase;
  color: var(--c-body);
  margin: 0 0 4px;
}

/* Credentials band - standalone section under the hero */
/* --- Ympäristö & vastuullisuus: full-bleed photo band -------------------
   Left column of text on the image, right column a light card. */
.eco-band {
  position: relative;
  padding: clamp(88px, 11vw, 140px) 0;
  background: #16202e url('../images/eco-band-bg.jpg') center center / cover no-repeat;
  color: var(--c-on-dark);
  overflow: hidden;
}
.eco-band-overlay {
  position: absolute;
  inset: 0;
  background: linear-gradient(100deg, rgba(15, 34, 54, 0.92) 0%, rgba(15, 34, 54, 0.72) 55%, rgba(15, 34, 54, 0.55) 100%);
}
.eco-band > .container { position: relative; z-index: 1; }

.eco-band-grid {
  display: grid;
  grid-template-columns: 1fr;
  gap: 32px;
  align-items: center;
}
/* Vasen palsta: otsikko + laatikko. Oikea: leipateksti, pystykeskitettynä
   laatikkoa vasten. Palstasuhteet ovat entiset peilattuina (0.85 / 1.15),
   jotta laatikko on tasan saman levyinen kuin oikeassa palstassa ollessaan.
   Otsikko ja viiva pysyvät oikealle tasattuina kuten ennen; laatikon oma
   teksti palautetaan vasempaan tasaukseen, ettei se peri otsikon tasausta. */
@media (min-width: 900px) {
  .eco-band-grid { grid-template-columns: 1.15fr 0.85fr; gap: 56px; }
  .eco-band-text { text-align: right; }
  .eco-band-rule { margin-left: auto; }
  .eco-band-card,
  .eco-band-body { text-align: left; }
  /* Kuvakaista on tarkoituksella korkea, jotta taustakuva saa tilaa. */
  .eco-band { padding: clamp(96px, 10vw, 160px) 0; }
}

.eco-band-text h2 {
  margin: 0;
  font-size: var(--fs-h2r);
  line-height: 1.1;
  color: var(--c-on-dark);
}
.eco-band-rule {
  display: block;
  width: 200px;
  max-width: 100%;
  height: 1px;
  margin: 24px 0;
  background: rgba(255, 255, 255, 0.35);
}
/* position: relative nostaa kappaleen samaan piirtokerrokseen kuin
   yllä oleva (positioitu) lasikortti. Muuten kortin pudotusvarjo
   piirtyisi tekstin päälle ja himmentäisi ensimmäisen rivin. */
.eco-band-body {
  position: relative;
  margin: 28px 0 0;
  font-size: var(--fs-md);
  line-height: 1.75;
  color: var(--c-on-dark);
}

/* Liquid glass -kortti tumman kuvakaistan päällä. Kolme kerrosta tekee
   lasin: (1) läpinäkyvä, sumennettu ja kylläistetty tausta, joka poimii
   alla olevan valokuvan värit, (2) vaalea ylareuna ja tumma alareuna
   (inset-varjot), jotka antavat paneelille paksuuden, ja (3) vino
   heijastuskaista ::before-kerroksessa. Ilman kaikkia kolmea pinta lukeutuu
   pelkkana laakeana laatikkona eika lasina.
   Teksti kaantyy valkoiseksi: lapinakyvan paneelin alla on tumma kaista,
   joten alkuperainen musta leipateksti ei erottuisi. */
.eco-band-card {
  position: relative;
  isolation: isolate;
  overflow: hidden;
  border-radius: 24px;
  padding: clamp(28px, 3.5vw, 44px);
  background: linear-gradient(
    145deg,
    rgba(255, 255, 255, 0.18) 0%,
    rgba(255, 255, 255, 0.07) 48%,
    rgba(255, 255, 255, 0.12) 100%
  );
  /* saturate nostaa taustakuvan värit läpi: pelkkä blur harmaannuttaisi
     lasin ja se näyttäisi savulasilta. */
  -webkit-backdrop-filter: blur(20px) saturate(165%);
  backdrop-filter: blur(20px) saturate(165%);
  border: 1px solid rgba(255, 255, 255, 0.22);
  box-shadow:
    inset 0 1px 0 rgba(255, 255, 255, 0.45),
    inset 0 -1px 0 rgba(10, 20, 32, 0.35),
    0 24px 56px rgba(6, 16, 28, 0.35);
  color: var(--c-on-dark);
}
/* Vino heijastuskaista yläkulmasta: liikkumaton, mutta antaa pinnalle
   suunnan ja katkaisee tasaisen läpinäkyvyyden. */
.eco-band-card::before {
  content: '';
  position: absolute;
  inset: 0;
  z-index: -1;
  background: linear-gradient(
    118deg,
    rgba(255, 255, 255, 0.28) 0%,
    rgba(255, 255, 255, 0.06) 26%,
    rgba(255, 255, 255, 0) 52%
  );
  pointer-events: none;
}
/* Ilman backdrop-filteriä läpinäkyvä paneeli jäisi lukukelvottomaksi
   valokuvan päällä, joten tausta tummennetaan umpinaiseksi. */
@supports not ((backdrop-filter: blur(1px)) or (-webkit-backdrop-filter: blur(1px))) {
  .eco-band-card { background: rgba(15, 34, 54, 0.86); }
}
.eco-band-card p {
  margin: 0 0 24px;
  font-size: var(--fs-md);
  line-height: 1.75;
  color: var(--c-on-dark);
}
.eco-band-link {
  display: inline-flex;
  align-items: center;
  gap: 10px;
  font-family: var(--sans);
  font-size: var(--fs-sm);
  font-weight: 700;
  letter-spacing: 0.06em;
  text-transform: uppercase;
  /* Vaaleampi sävy kuin --rust: aksenttisininen jää lasin läpi näkyvää
     tummaa taustaa vasten liian lähelle taustan omaa sinistä. */
  color: #A9C9E6;
}
.eco-band-link:hover { color: var(--c-on-dark); }
.eco-band-link span { transition: transform 200ms var(--ease); }
.eco-band-link:hover span { transform: translateX(4px); }

/* Nosturikaista: otsikko kuvan takana. Kuva on lapinakyva (alfakanava),
   joten teksti nakyy sen tyhjista kohdista ja katoaa puomin, auton ja
   kivikasan taakse — savu haivyttaa sen valissa pehmeasti. */
.crane-band {
  position: relative;
  /* Kivikasa yltaa kuvan alareunaan asti, joten ilman tata se osuisi suoraan
     kiinni alapuoliseen tummaan kaistaan. */
  padding-bottom: clamp(48px, 6vw, 88px);
}
.crane-band-img {
  display: block;
  width: 100%;
  height: auto;
  position: relative;
  z-index: 1;
  /* Kuva on tekstin paalla, joten se sieppaisi klikkaukset napilta. */
  pointer-events: none;
}
.crane-band-layer {
  position: absolute;
  inset: 0;
  z-index: 0;
  display: flex;
  align-items: center;
}
.crane-band-text {
  display: flex;
  flex-direction: column;
  align-items: flex-start;
  gap: 20px;
}
/* Iso otsikko tarkoituksella: vasta talla koolla teksti yltaa puomin ja
   auton alle, jolloin limitys nakyy. Pienempana se jaisi kokonaan kuvan
   tyhjaan vasempaan laitaan eika efektia syntyisi. */
/* Sivun ylimpana osiona kaista tarvitsee tilaa kiinteän navigaation alle,
   samaan tapaan kuin .hero-sub-otsikkoalue muilla alasivuilla. Taustakuva
   tekee kaistasta tumman, joten teksti kaantyy valkoiseksi ja leikekuvan
   kivikasa asettuu taustan harjanteen paalle. */
.crane-band--hero {
  padding-top: 96px;
  background: #0d1626 url('../images/kalusto-hero-bg.jpg') center bottom / cover no-repeat;
  color: var(--c-on-dark);
}
@media (min-width: 768px) {
  .crane-band--hero { padding-top: 128px; }
}
.crane-band--hero .crane-band-text h1,
.crane-band--hero .crane-band-text h2,
.crane-band--hero .crane-band-text .eyebrow { color: var(--c-on-dark); }
/* Valkoinen haivytys alareunasta: kaista sulautuu sivun taustaan sen sijaan
   etta tumma pinta paattyisi suoraan viivaan. Peite on kuvan ylapuolella
   (z-index 2), jotta myos leikekuvan kivikasa haipyy — muuten kuvan
   alareuna jaisi teravana viivana haivytyksen paalle. */
.crane-band--hero::after {
  content: '';
  position: absolute;
  inset: 0;
  z-index: 2;
  pointer-events: none;
  background: linear-gradient(
    180deg,
    rgba(249, 249, 249, 0) 38%,
    rgba(249, 249, 249, 0.32) 60%,
    rgba(249, 249, 249, 0.78) 80%,
    rgba(249, 249, 249, 1) 94%
  );
}
.crane-band-text h1,
.crane-band-text h2 {
  margin: 0;
  max-width: 17ch;
  font-size: var(--fs-display);
  line-height: 0.98;
  letter-spacing: -0.01em;
  color: var(--c-body);
}
/* Kapealla naytolla kuva jaa niin matalaksi ettei otsikko mahdu sen taakse,
   joten teksti palaa normaaliin virtaan kuvan ylapuolelle. */
@media (max-width: 900px) {
  .crane-band-layer { position: static; display: block; }
  .crane-band-text { padding-top: 8px; padding-bottom: 24px; }
  .crane-band-text h1,
  .crane-band-text h2 { max-width: none; font-size: var(--fs-h2r); }
}

/* --- Layered section edges ---------------------------------------------
   A soft shadow along a section's top edge makes the section above read as
   a separate layer sitting on top of it. Drawn inside the section itself,
   so there are no z-index/stacking conflicts between siblings. */
.layer-edge { position: relative; }
.layer-edge::before {
  content: '';
  position: absolute;
  top: 0;
  left: 0;
  right: 0;
  height: 22px;
  background: linear-gradient(180deg, rgba(15, 23, 36, 0.07) 0%, rgba(15, 23, 36, 0) 100%);
  pointer-events: none;
  z-index: 2;
}
/* Keep real content above the shadow overlay */
.layer-edge > * { position: relative; z-index: 3; }

/* Rounded dark-navy card, inset from the page edges - matches the
   "Miksi Kokkoma" / CTA band / srv-highlight treatment used elsewhere. */
.credentials-band {
  padding: 40px 0;
}
/* Pulled up so the card sits directly under, and slightly over, the hero's
   fading bottom edge instead of leaving an empty gap. */
.credentials-band-overlap {
  position: relative;
  z-index: 5;
  margin-top: -64px;
}
@media (max-width: 640px) {
  .credentials-band-overlap { margin-top: -36px; }
}
.credentials-band .hero-credentials-label {
  text-align: center;
  margin: 0 0 24px;
}
.credentials-band-grid {
  display: grid;
  grid-template-columns: repeat(4, minmax(0, 1fr));
  gap: 20px;
  max-width: 880px;
  margin: 0 auto;
}
.credentials-band-grid .cred-card {
  height: 120px;
}
@media (max-width: 768px) {
  .credentials-band { padding: 40px 0 4px; }
  .credentials-band-grid {
    grid-template-columns: 1fr 1fr;
    gap: 14px;
    max-width: 420px;
  }
  .credentials-band-grid .cred-card { height: 96px; }
  /* Matalampi kortti: sisäkorkeus 96px - 28px padding = 68px. */
  .credentials-band-grid .cred-card img[alt="Julkisivuyhdistys"] { max-height: 64px; }
}

.hero-credentials-grid {
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: 12px;
  width: 100%;
  max-width: 320px;
}

.cred-card {
  position: relative;
  display: flex;
  align-items: center;
  justify-content: center;
  height: 88px;
  border-radius: 16px;
  padding: 14px 18px;
  background:
    linear-gradient(180deg,
      rgba(255, 255, 255, 0.55) 0%,
      rgba(255, 255, 255, 0.25) 45%,
      rgba(255, 255, 255, 0.35) 100%);
  backdrop-filter: saturate(180%) blur(18px);
  -webkit-backdrop-filter: saturate(180%) blur(18px);
  box-shadow:
    0 12px 28px rgba(10, 30, 60, 0.10),
    0 3px 8px rgba(10, 30, 60, 0.06),
    inset 0 1px 1px rgba(255, 255, 255, 0.95),
    inset 1px 0 1px rgba(255, 255, 255, 0.55),
    0 0 0 1px rgba(255, 255, 255, 0.4);
  isolation: isolate;
  overflow: hidden;
  transition: transform 200ms var(--ease);
}
.cred-card:hover { transform: translateY(-2px); }

.cred-card::before {
  content: '';
  position: absolute;
  inset: 1px 1px auto 1px;
  height: 50%;
  background: linear-gradient(180deg,
    rgba(255,255,255,0.5) 0%,
    rgba(255,255,255,0.12) 60%,
    rgba(255,255,255,0) 100%);
  border-radius: 16px 16px 80% 80% / 16px 16px 100% 100%;
  pointer-events: none;
}

.cred-card img {
  position: relative;
  z-index: 1;
  max-height: 56px;
  max-width: 100%;
  width: auto;
  object-fit: contain;
  display: block;
}

.cred-card-aaa img { max-height: 60px; }
.cred-card-dark img { filter: brightness(0) saturate(0); opacity: 0.78; }

/* Julkisivuyhdistyksen tunnus on neliö, muut logot leveitä. Yhteinen
   56px korkeusraja jättäisi sen leveydeltään puoleen muista, joten se
   saa oman rajansa. Kortin sisäkorkeus on 120px - 28px padding = 92px. */
.cred-card img[alt="Julkisivuyhdistys"] { max-height: 84px; }

/* Hide right column on mobile - credentials move below the trust pill */
@media (max-width: 1023px) {
  .hero-credentials {
    align-items: center;
    margin: 32px auto 0;
    width: 100%;
  }
  .hero-credentials-grid {
    grid-template-columns: repeat(4, 1fr);
    gap: 10px;
    max-width: 480px;
  }
  .cred-card { height: 64px; padding: 10px 12px; border-radius: 12px; }
  .cred-card img { max-height: 38px; }
  .cred-card-aaa img { max-height: 40px; }
}

@media (max-width: 480px) {
  .cred-card img { max-height: 30px; }
}

/* Make sure the hero grid actually places the credentials on the right at desktop */
@media (min-width: 1024px) {
  .hero-split-grid {
    grid-template-columns: 1.4fr 1fr !important;
    gap: 56px;
    align-items: start;
  }
  .hero-credentials { margin-top: 8px; align-items: flex-end; }
  .hero-credentials-grid { max-width: 360px; }
  .cred-card { height: 96px; }
}

@media (max-width: 640px) {
.ref-card { flex-basis: min(82vw, 300px); }
}

/* ============================================================
   Service page hero (full-bleed dramatic)
   ============================================================ */

.service-hero {
  position: relative;
  /* Herolla oli 96px ylämarginaali navigaation alla; otsikko täyttää nyt
     sen tilan, joten erillistä marginaalia ei tarvita. */
  padding: clamp(28px, 4vw, 48px) 0 0;
}

.service-hero-media {
  position: relative;
  min-height: 48vh;
  /* Pieni irtoama sivun reunoista ja pyöristetyt kulmat, sama säde kuin
     Yritys-sivun herokuvassa (.yc-hero-media). */
  margin: 0 clamp(8px, 1vw, 14px);
  border-radius: 14px;
  overflow: hidden;
  background-size: cover;
  background-position: center;
  background-color: #1a1a1a;
}

/* Kevyempi kuin ennen: kuvan päällä ei ole enää tekstiä, jonka luettavuutta
   tummennus turvaisi. */
.service-hero-overlay {
  position: absolute;
  inset: 0;
  background: linear-gradient(180deg, rgba(0,0,0,0.12) 0%, rgba(0,0,0,0.28) 100%);
  pointer-events: none;
}

.service-hero-content {
  text-align: center;
  display: flex;
  flex-direction: column;
  align-items: center;
  padding-bottom: clamp(24px, 3vw, 40px);
}

.service-hero-eyebrow {
  font-family: var(--sans);
  font-weight: 500;
  font-size: var(--fs-xs);
  letter-spacing: 0.18em;
  text-transform: uppercase;
  color: var(--c-body);
  margin: 0 0 16px;
  display: inline-flex;
  align-items: center;
  gap: 12px;
}
.service-hero-eyebrow::before,
.service-hero-eyebrow::after {
  content: '';
  width: 28px; height: 1px;
  background: currentColor;
  opacity: 0.4;
  display: inline-block;
}

.service-hero-title {
  font-family: 'Oswald', var(--sans);
  font-weight: 700;
  font-size: var(--fs-display);
  line-height: 1;
  letter-spacing: 0.005em;
  text-transform: uppercase;
  color: var(--c-body);
  margin: 0;
  max-width: 22ch;
}
/* Kapealla näytöllä pisin yksittäinen palvelunimi ("KALLIORAKENTAMINEN")
   oli ruutua leveämpi. Koko sidotaan leveyteen, jotta sana mahtuu
   kokonaisena eikä sitä tarvitse katkaista. */
@media (max-width: 480px) {
  .service-hero-title { font-size: min(var(--fs-display), 9.5vw); }
}

.service-hero-card {
  background: var(--rust);
  color: var(--c-on-dark);
  border-radius: 14px;
  padding: 28px 32px;
  max-width: 720px;
  width: 100%;
  box-shadow: 0 24px 56px rgba(0,0,0,0.30);
  display: flex;
  flex-direction: column;
  gap: 18px;
  margin-bottom: -80px;
  position: relative;
  z-index: 3;
}

.service-hero-card p {
  color: var(--c-on-dark);
  font-family: var(--sans);
  font-size: var(--fs-base);
  line-height: 1.55;
  margin: 0;
  text-align: center;
}

.service-hero-card-actions {
  display: flex;
  gap: 12px;
  justify-content: center;
  flex-wrap: wrap;
}

.btn-pill-on-blue {
  background: #fff;
  color: var(--c-body);
  border: 1px solid #fff;
}
.btn-pill-on-blue:hover { background: var(--ink); color: var(--c-on-dark); border-color: var(--ink); }

.btn-pill-ghost-on-blue {
  background: transparent;
  color: var(--c-on-dark);
  border: 1px solid rgba(255,255,255,0.6);
}
.btn-pill-ghost-on-blue:hover { background: rgba(255,255,255,0.12); border-color: #fff; }

@media (max-width: 768px) {
  .service-hero { padding-top: 24px; }
  .service-hero-media { min-height: 36vh; }
  .service-hero-card { padding: 22px 20px; border-radius: 12px; margin-bottom: -60px; }
  .service-hero-card-actions { flex-direction: column; }
  .service-hero-card-actions .btn-pill { width: 100%; justify-content: center; }
}

/* ============================================================
   Service page body sections
   ============================================================ */

.srv-intro {
  max-width: 880px;
  margin: 0 auto;
  text-align: center;
}
.srv-intro h2 { font-size: var(--fs-h2r); margin-bottom: 20px; }
.srv-intro p.lead { margin: 0 auto 16px; }
.srv-intro p { margin-top: 0; color: var(--c-body); max-width: 64ch; margin-left: auto; margin-right: auto; }
.srv-intro-actions {
  display: flex;
  gap: 12px;
  justify-content: center;
  flex-wrap: wrap;
  margin-top: 32px;
}

/* --- Highlight section (manttelointi) --- */
/* Rounded card, page background showing as a margin on every side -
   matches the "Miksi Kokkoma" / CTA band treatment on the homepage. */
.srv-highlight {
  background: transparent;
  color: var(--c-on-dark);
  padding-top: 40px;
  padding-bottom: 40px;
}
.srv-highlight > .container {
  width: min(var(--container), calc(100% - 2 * var(--gutter)));
  max-width: none;
  background: #16293a;
  border-radius: 32px;
  padding: 64px 56px;
}
@media (max-width: 640px) {
  .srv-highlight > .container { border-radius: 20px; padding: 40px 28px; }
}
/* minmax(0, …) eikä pelkkä 1fr: 1fr ei kutistu pisintä sanaa kapeammaksi,
   joten esim. "RUISKUBETONIMANTTELOINTI" venytti puhelimella koko
   tekstisarakkeen tumman laatikon yli. */
.srv-highlight-grid {
  display: grid;
  grid-template-columns: minmax(0, 1fr);
  gap: 40px;
  align-items: center;
}
@media (min-width: 900px) {
  .srv-highlight-grid { grid-template-columns: minmax(0, 1.1fr) minmax(0, 1fr); gap: 80px; }
}
/* Pitkät yhdyssanat tavutetaan (html lang="fi"); overflow-wrap katkaisee
   sanan varmuuden vuoksi, jos selain ei osaa suomen tavutusta. */
.srv-highlight-text h2 {
  font-size: var(--fs-h2r);
  margin-bottom: 20px;
  color: var(--c-on-dark);
  hyphens: auto;
  overflow-wrap: break-word;
}
.srv-highlight-text p { color: var(--c-on-dark); }
.eyebrow.accent { color: var(--c-accent); }

.srv-checklist {
  list-style: none;
  padding: 0;
  margin: 24px 0 0;
  display: flex;
  flex-direction: column;
  gap: 10px;
}
.srv-checklist li {
  position: relative;
  padding-left: 28px;
  font-family: var(--sans);
  font-size: var(--fs-sm);
  color: var(--c-on-dark);
}
.srv-checklist li::before {
  content: '';
  position: absolute;
  left: 0; top: 8px;
  width: 16px; height: 16px;
  background: var(--rust);
  border-radius: 50%;
  background-image: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='white' stroke-width='3' stroke-linecap='round' stroke-linejoin='round'><polyline points='20 6 9 17 4 12'/></svg>");
  background-size: 11px;
  background-position: center;
  background-repeat: no-repeat;
}

.srv-highlight-image {
  border-radius: 14px;
  overflow: hidden;
  aspect-ratio: 5/4;
  background: var(--hairline);
}
.srv-highlight-image img {
  width: 100%; height: 100%;
  object-fit: cover;
  display: block;
}

/* Leikekuva kehyksen sijaan: kohde kelluu kortin taustalla, joten ei
   kehysta, rajausta eika taustaa. Varjo on ::before-pseudoelementti eika
   kuvatiedosto: se piirtyy ennen kuvaa, ja koska kohde on
   position: relative, kuva maalataan varjon paalle ilman z-indexeja. */
.srv-highlight-image--cutout {
  position: relative;
  background: none;
  border-radius: 0;
  overflow: visible;
  aspect-ratio: auto;
}
.srv-highlight-image--cutout img {
  width: 100%;
  height: auto;
  object-fit: contain;
}
/* Maavarjo. Kohde nayttaa lepaavan alustalla vasta kun varjo on kiinni
   renkaissa: jokainen kosketuskohta saa oman tiukan varjonsa ja niiden
   ymparille jaa yksi laaja pehmea varjo. Yhtena isona lattana laikkuna
   kohde nayttaa leijuvan varjon ylapuolella.
   Sijainnit on mitattu kuvan alfasta: etupyora koskettaa maata kohdassa
   (20 %, 83.5 %) ja taka-akselisto (62 %, 87 %) kuvan koosta laskettuna.
   Laatikko on tasmalleen kuvan kokoinen, joten prosentit vastaavat kuvan
   omia kohtia myos kuvan skaalautuessa. */
.srv-highlight-image--cutout::before {
  content: '';
  position: absolute;
  inset: 0;
  pointer-events: none;
  background:
    /* etupyoran kosketusvarjo */
    radial-gradient(8% 2.8% at 20% 83.5%, rgba(0, 0, 0, 0.92) 0%, rgba(0, 0, 0, 0) 100%),
    /* taka-akseliston kosketusvarjo */
    radial-gradient(17% 3.4% at 62% 87%, rgba(0, 0, 0, 0.92) 0%, rgba(0, 0, 0, 0) 100%),
    /* pehmea ymparysvarjo koko alustan alla */
    radial-gradient(
      44% 10% at 43% 86%,
      rgba(0, 0, 0, 0.6) 0%,
      rgba(0, 0, 0, 0.28) 55%,
      rgba(0, 0, 0, 0) 100%
    ),
    /* Alusta. Tummalla kortilla musta varjo yksin ei riita: mustan ja kortin
       valilla on niin vahan kontrastia, ettei varjo erotu. Siksi varjojen
       alle maalataan vaalea valolaikku, joka lukeutuu valaistuna lattiana —
       vasta sita vasten kosketusvarjot nakyvat ja kohde asettuu pinnalle. */
    radial-gradient(
      70% 19% at 45% 88%,
      rgba(255, 255, 255, 0.24) 0%,
      rgba(255, 255, 255, 0.09) 50%,
      rgba(255, 255, 255, 0) 82%
    );
  filter: blur(6px);
}
/* Kohde varjon paalle: ::before on ensimmainen lapsi, joten kuva maalataan
   sen jalkeen — riittaa etta kuva on positioitu. */
.srv-cutout-object { position: relative; }
/* Kelluva leikekuva saa enemman tilaa kuin kehystetty kuva: se ei tarvitse
   samaa reunusta kortin sisalla, joten sarake levenee ja kuva ulottuu
   kortin oikean reunuksen yli. */
@media (min-width: 900px) {
  .srv-highlight-grid--cutout { grid-template-columns: 1fr 1.75fr; gap: 44px; }
  /* -56px on kortin oma sisareunus: leikekuvan laatikko yltaa siis kortin
     reunaan asti. Kuvan oma lapinakyva marginaali jattaa silti ilmaa. */
  .srv-highlight-grid--cutout .srv-highlight-image--cutout {
    width: calc(100% + 56px);
    margin-right: -56px;
  }
}

/* --- Explainer --- */
.srv-explainer {
  display: grid;
  grid-template-columns: 1fr;
  gap: 32px;
  max-width: 1080px;
  margin: 0 auto;
}
@media (min-width: 900px) {
  .srv-explainer { grid-template-columns: 1fr 1.6fr; gap: 80px; }
}
.srv-explainer-header h2 { font-size: var(--fs-h2r); margin-bottom: 0; }
.srv-explainer-body p { color: var(--c-body); font-size: var(--fs-base); line-height: 1.65; }
.srv-explainer-body p + p { margin-top: 16px; }

/* --- Uses (bullet grid) --- */
.srv-uses-section { background: var(--bone); border-top: 1px solid var(--hairline); }

.srv-uses {
  list-style: none;
  padding: 0;
  margin: 0;
  display: grid;
  grid-template-columns: 1fr;
  gap: 0;
  border-top: 1px solid var(--hairline);
}
@media (min-width: 640px)  { .srv-uses { grid-template-columns: 1fr 1fr; } }
@media (min-width: 1024px) { .srv-uses { grid-template-columns: 1fr 1fr 1fr; } }

.srv-uses li {
  display: flex;
  align-items: center;
  gap: 14px;
  padding: 16px 0;
  border-bottom: 1px solid var(--hairline);
  font-family: var(--sans);
  font-size: var(--fs-sm);
  color: var(--c-body);
}
@media (min-width: 640px) {
  .srv-uses li:nth-child(odd)  { padding-right: 24px; }
  .srv-uses li:nth-child(even) { padding-left: 24px; border-left: 1px solid var(--hairline); }
}
@media (min-width: 1024px) {
  .srv-uses li { padding: 16px 24px; border-left: 1px solid var(--hairline); }
  .srv-uses li:nth-child(3n+1) { border-left: 0; padding-left: 0; }
}

.srv-uses li::before {
  content: '';
  flex-shrink: 0;
  width: 8px; height: 8px;
  background: var(--rust);
  border-radius: 50%;
}

/* --- Methods comparison --- */
.srv-methods {
  display: grid;
  grid-template-columns: 1fr;
  gap: 24px;
  margin-top: 32px;
}
@media (min-width: 900px) { .srv-methods { grid-template-columns: 1fr 1fr; gap: 32px; } }

.srv-method {
  background: var(--bone);
  border: 1px solid var(--hairline);
  border-radius: 14px;
  padding: 36px 32px;
  display: flex;
  flex-direction: column;
  gap: 16px;
  transition: border-color 200ms var(--ease), transform 200ms var(--ease);
}
.srv-method:hover { border-color: var(--ink); transform: translateY(-2px); }

.srv-method-num {
  font-family: 'Newsreader', Georgia, serif;
  font-style: italic;
  font-size: var(--fs-h3);
  color: var(--c-body);
}
.srv-method h3 {
  font-size: var(--fs-xl);
  text-transform: none;
  font-family: var(--sans);
  font-weight: 600;
  letter-spacing: -0.01em;
  margin: 0;
}
.srv-method p { color: var(--c-body); margin: 0; }

.srv-method-tags {
  list-style: none;
  padding: 16px 0 0;
  margin: 0;
  display: flex;
  flex-direction: column;
  gap: 8px;
  border-top: 1px solid var(--hairline);
}
.srv-method-tags li {
  font-family: var(--sans);
  font-size: var(--fs-sm);
  color: var(--c-body);
  position: relative;
  padding-left: 18px;
}
.srv-method-tags li::before {
  content: '\00b7';
  position: absolute; left: 0;
  color: var(--c-accent);
}

.srv-method-accent {
  background: var(--ink);
  color: var(--c-on-dark);
  border-color: var(--ink);
}
.srv-method-accent h3 { color: var(--c-on-dark); }
.srv-method-accent p,
.srv-method-accent .srv-method-num { color: var(--c-on-dark); }
.srv-method-accent .srv-method-tags { border-color: rgba(255,255,255,0.18); }
.srv-method-accent .srv-method-tags li { color: var(--c-on-dark); }
.srv-method-accent .srv-method-tags li::before { color: var(--c-accent); }
.srv-method-accent:hover { transform: translateY(-2px); border-color: var(--rust); }

/* --- Sub-service grid (level-2 services within a category) --- */
.srv-subservices-grid {
  display: grid;
  grid-template-columns: 1fr;
  gap: 20px;
  margin-top: 32px;
}
@media (min-width: 768px) { .srv-subservices-grid { grid-template-columns: 1fr 1fr; gap: 24px; } }

.srv-subservice-card {
  background: var(--bone);
  border: 1px solid var(--hairline);
  border-radius: 14px;
  padding: 28px 32px;
  display: flex;
  flex-direction: column;
  gap: 12px;
  transition: border-color 200ms var(--ease), transform 200ms var(--ease);
}
.srv-subservice-card:hover { border-color: var(--ink); transform: translateY(-2px); }

.srv-subservice-card h3 {
  font-size: var(--fs-h3);
  text-transform: none;
  font-family: var(--sans);
  font-weight: 600;
  letter-spacing: -0.01em;
  margin: 0;
}
.srv-subservice-card p { color: var(--c-body); margin: 0; font-size: var(--fs-sm); line-height: 1.65; }

.srv-subservice-example {
  margin-top: 4px;
  padding-top: 12px;
  border-top: 1px dashed var(--hairline);
  font-size: var(--fs-xs);
  color: var(--c-body);
}
.srv-subservice-example strong { color: var(--c-body); }

/* --- References list --- */
.srv-refs {
  list-style: none;
  padding: 0;
  margin: 0;
  border-top: 1px solid var(--hairline);
}
.srv-refs li {
  display: flex;
  flex-direction: column;
  gap: 4px;
  padding: 20px 0;
  border-bottom: 1px solid var(--hairline);
}
@media (min-width: 640px) {
  .srv-refs li { flex-direction: row; align-items: baseline; gap: 24px; }
  .srv-refs li strong { min-width: 320px; }
}
.srv-refs li strong {
  font-family: 'Oswald', var(--sans);
  font-weight: 600;
  text-transform: uppercase;
  letter-spacing: 0.03em;
  font-size: var(--fs-base);
  color: var(--c-body);
}
.srv-refs li span {
  color: var(--c-body);
  font-family: var(--sans);
  font-size: var(--fs-sm);
}

/* --- Blue benefit cards (match the hero card) --- */
.srv-bluecards {
  display: grid;
  grid-template-columns: 1fr;
  gap: 20px;
}
@media (min-width: 768px) {
  .srv-bluecards { grid-template-columns: repeat(3, 1fr); gap: 24px; }
}
.srv-bluecard {
  background: var(--rust);
  color: var(--c-on-dark);
  border-radius: 14px;
  padding: 32px 28px;
  box-shadow: 0 18px 40px rgba(20, 50, 90, 0.18);
  display: flex;
  flex-direction: column;
  gap: 12px;
  transition: transform 220ms var(--ease), box-shadow 220ms var(--ease);
}
.srv-bluecard:hover {
  transform: translateY(-4px);
  box-shadow: 0 26px 56px rgba(20, 50, 90, 0.26);
}
.srv-bluecard-num {
  font-family: 'Newsreader', Georgia, serif;
  font-style: italic;
  font-size: var(--fs-h3);
  color: var(--c-on-dark);
}
.srv-bluecard h3 {
  font-family: var(--sans);
  font-weight: 600;
  font-size: var(--fs-lead);
  letter-spacing: -0.01em;
  text-transform: none;
  color: var(--c-on-dark);
  margin: 0;
}
.srv-bluecard p {
  margin: 0;
  color: var(--c-on-dark);
  font-size: var(--fs-sm);
  line-height: 1.6;
}

/* --- Use-cases section with background photo + dark filter --- */
.srv-uses-bg {
  position: relative;
  background-size: cover;
  background-position: center;
  background-color: #0d1118;
  border-top: 0;
}
@media (min-width: 1024px) {
  .srv-uses-bg { background-attachment: fixed; }
}
.srv-uses-overlay {
  position: absolute;
  inset: 0;
  background: linear-gradient(180deg, rgba(8,12,18,0.84) 0%, rgba(8,12,18,0.90) 100%);
  pointer-events: none;
}
.srv-uses-bg .container { position: relative; z-index: 1; }
.srv-uses-bg .section-header .eyebrow { color: var(--c-on-dark); }
.srv-uses-bg .section-header h2 { color: var(--c-on-dark); }
.srv-uses-bg .srv-uses { border-top: 0 !important; gap: 12px; }
.srv-uses-bg .srv-uses li {
  color: var(--c-on-dark);
  border: 1px solid rgba(255,255,255,0.16) !important;
  border-radius: 10px;
  padding: 16px 18px !important;
  background: rgba(255,255,255,0.06);
  backdrop-filter: blur(6px);
  -webkit-backdrop-filter: blur(6px);
  transition: background 220ms var(--ease), transform 220ms var(--ease), border-color 220ms var(--ease);
}
.srv-uses-bg .srv-uses li:hover {
  background: rgba(255,255,255,0.12);
  border-color: var(--rust) !important;
  transform: translateY(-3px);
}

/* --- Full-width project image band --- */
.srv-imageband {
  position: relative;
  width: 100%;
  min-height: clamp(340px, 56vh, 620px);
  background-size: cover;
  background-position: center;
  background-color: #0d1118;
  display: flex;
  align-items: flex-end;
  overflow: hidden;
}
@media (min-width: 1024px) {
  .srv-imageband { background-attachment: fixed; }
}
.srv-imageband-overlay {
  position: absolute;
  inset: 0;
  background: linear-gradient(180deg, rgba(8,12,18,0.10) 0%, rgba(8,12,18,0) 35%, rgba(8,12,18,0.70) 100%);
  pointer-events: none;
}
.srv-imageband .container {
  position: relative;
  z-index: 1;
  padding-bottom: 32px;
}
.srv-imageband-caption {
  margin: 0;
  color: var(--c-on-dark);
  font-family: var(--sans);
  font-size: var(--fs-xs);
  font-weight: 500;
  letter-spacing: 0.12em;
  text-transform: uppercase;
  display: inline-flex;
  align-items: center;
  gap: 12px;
}
.srv-imageband-caption::before {
  content: '';
  width: 32px;
  height: 2px;
  background: var(--rust);
  display: inline-block;
}

/* ============================================================
   Nav variant: on dark backgrounds (service hero pages)
   ============================================================ */
.nav.nav-minimal.nav-on-dark {
  background: transparent;
  border-bottom-color: rgba(255, 255, 255, 0.12);
}
.nav.nav-minimal.nav-on-dark::before {
  background: rgba(10, 10, 10, 0.45);
}
.nav.nav-minimal.nav-on-dark .brand,
.nav.nav-minimal.nav-on-dark .nav-links a.active { color: var(--c-on-dark); }
.nav.nav-minimal.nav-on-dark .brand-sup { color: var(--c-on-dark); }
.nav.nav-minimal.nav-on-dark .nav-links a { color: var(--c-on-dark); }
.nav.nav-minimal.nav-on-dark .nav-links a:hover {
  color: var(--c-on-dark);
  background: rgba(255, 255, 255, 0.08);
}
.nav.nav-minimal.nav-on-dark .nav-cta-pill {
  background: #fff;
  color: var(--c-body);
}
.nav.nav-minimal.nav-on-dark .nav-cta-pill:hover { background: var(--rust); color: var(--c-on-dark); }
.nav.nav-minimal.nav-on-dark .nav-toggle span { background: #fff; }

/* ============================================================
   Trust pill (social proof - under hero CTAs)
   ============================================================ */

.trust-pill {
  position: relative;
  display: inline-flex;
  align-items: center;
  gap: 14px;
  background:
    linear-gradient(180deg,
      rgba(255, 255, 255, 0.55) 0%,
      rgba(255, 255, 255, 0.25) 45%,
      rgba(255, 255, 255, 0.35) 100%);
  backdrop-filter: saturate(180%) blur(22px);
  -webkit-backdrop-filter: saturate(180%) blur(22px);
  border-radius: 999px;
  padding: 8px 20px 8px 10px;
  margin-top: 28px;
  font-family: var(--sans);
  box-shadow:
    /* outer drop shadow - light, far */
    0 18px 44px rgba(10, 30, 60, 0.14),
    /* close hugging shadow */
    0 4px 12px rgba(10, 30, 60, 0.08),
    /* inner top highlight (mimics light hitting the top edge) */
    inset 0 1px 1px rgba(255, 255, 255, 0.95),
    /* inner left highlight */
    inset 1px 0 1px rgba(255, 255, 255, 0.55),
    /* inner bottom refraction line */
    inset 0 -1px 2px rgba(255, 255, 255, 0.35),
    /* hairline outer ring */
    0 0 0 1px rgba(255, 255, 255, 0.4);
  isolation: isolate;
  overflow: hidden;
}

/* Specular highlight - that subtle glossy sheen on top */
.trust-pill::before {
  content: '';
  position: absolute;
  inset: 1px 1px auto 1px;
  height: 50%;
  background: linear-gradient(180deg,
    rgba(255, 255, 255, 0.55) 0%,
    rgba(255, 255, 255, 0.15) 60%,
    rgba(255, 255, 255, 0) 100%);
  border-radius: 999px 999px 999px 999px / 999px 999px 100% 100%;
  pointer-events: none;
  z-index: 1;
}

/* Edge refraction glow */
.trust-pill::after {
  content: '';
  position: absolute;
  inset: 0;
  border-radius: inherit;
  background: radial-gradient(120% 80% at 20% 0%,
    rgba(255, 255, 255, 0.35) 0%,
    rgba(255, 255, 255, 0) 50%);
  pointer-events: none;
  z-index: 1;
}

.trust-pill > * { position: relative; z-index: 2; }

.trust-pill-avatars {
  display: inline-flex;
}

.trust-pill-avatar {
  width: 36px;
  height: 36px;
  border-radius: 50%;
  background: var(--hairline);
  color: var(--c-on-dark);
  display: inline-flex;
  align-items: center;
  justify-content: center;
  font-size: var(--fs-xs);
  font-weight: 600;
  letter-spacing: 0.04em;
  border: 2px solid #fff;
  box-shadow: 0 2px 6px rgba(0,0,0,0.12);
  object-fit: cover;
  object-position: center top;
}
.trust-pill-avatar + .trust-pill-avatar { margin-left: -12px; }

.trust-pill-avatar-initials {
  background: var(--rust);
  color: var(--c-on-dark);
  font-size: var(--fs-xs);
  letter-spacing: 0.02em;
}

.trust-pill-body {
  display: flex;
  flex-direction: column;
  gap: 2px;
  line-height: 1.2;
}

.trust-pill-stars {
  display: inline-flex;
  align-items: center;
  gap: 2px;
}

.trust-pill-rating {
  font-weight: 600;
  font-size: var(--fs-sm);
  color: var(--c-body);
  margin-left: 8px;
  letter-spacing: -0.005em;
}

.trust-pill-text {
  font-size: var(--fs-xs);
  color: var(--c-body);
  margin: 2px 0 0;
  letter-spacing: 0.01em;
}

@media (max-width: 480px) {
  .trust-pill {
    padding: 6px 16px 6px 8px;
    gap: 10px;
    margin-top: 24px;
  }
  .trust-pill-avatar { width: 30px; height: 30px; font-size: var(--fs-xs); }
  .trust-pill-avatar + .trust-pill-avatar { margin-left: -10px; }
  .trust-pill-rating { font-size: var(--fs-xs); }
  .trust-pill-text { font-size: var(--fs-xs); }
}

/* ============================================================
   Mobile responsiveness
   ============================================================ */

@media (max-width: 767px) {
  /* Hero: less top padding, cover bg on portrait */
  .hero-split {
    padding: 100px 0 56px;
    background-size: cover;
    background-position: center top;
  }

  /* Mobiilin pystysuuntainen vaalennus poistettu yhdessä työpöydän
     vaakagradientin kanssa. */

  /* Hero stats: tighter */
  .hero-stats {
    gap: 20px;
    margin-top: 40px;
  }
  .hero-stat .num { font-size: var(--fs-xl); }

  /* Hero CTAs: stack on very narrow screens */
  .hero-split-ctas { gap: 10px; }
  .btn-pill { padding: 14px 22px; font-size: var(--fs-sm); min-height: 48px; }

  /* Services: landscape image ratio - less tall on mobile */
  .service-row-image { aspect-ratio: 16/9; }

  /* Service stats row: smaller values */
  .service-row-stat .val { font-size: var(--fs-lead); }

  /* Section headers: less bottom margin */
  .section-header { margin-bottom: 36px; }

  /* References: stack title + nav buttons */
  .refs-featured-header {
    flex-direction: column;
    align-items: flex-start;
    gap: 20px;
    margin-bottom: 28px;
  }

  /* CTA band: less vertical padding */
  .cta-band { padding: 64px 0; }

  /* Stat divider: less padding */
  .stat-divider { padding: 48px 0; }

  /* Stakeholder paths: less padding per item */
  .path { padding: 28px 0; }

  /* Why grid: less padding */
  .why-item { padding: 24px 0; }

  /* Footer: less top padding */
  .footer { padding: 48px 0 24px; }
  .footer-grid { gap: 28px; margin-bottom: 32px; }
}

@media (max-width: 480px) {
  .hero-split { padding: 88px 0 48px; }

  /* Nav pill: shrink brand font slightly */
  .brand { font-size: var(--fs-h3); }

  /* Ref cards: slightly narrower for small phones */
  .ref-card { width: 240px; }

  /* Buttons: full width stacked on tiny screens */
  .hero-split-ctas { flex-direction: column; }
  .btn-pill { width: 100%; justify-content: center; }
}

/* Reduced motion */
@media (prefers-reduced-motion: reduce) {
  *, *::before, *::after {
    animation-duration: 0.01ms !important;
    transition-duration: 0.01ms !important;
    scroll-behavior: auto !important;
  }
}

/* ============================================================
   Floating pill nav (homepage variant)
   ============================================================ */

.nav.nav-floating {
  position: fixed;
  top: 16px; left: 0; right: 0;
  background: transparent;
  border: 0;
  z-index: 50;
  height: auto;
}
.nav.nav-floating .nav-inner {
  background: var(--bone);
  border-radius: 999px;
  height: 64px;
  padding: 0 24px;
  box-shadow: 0 12px 36px rgba(0, 0, 0, 0.22);
  max-width: 1240px;
  margin: 0 auto;
}
.nav.nav-floating .nav-links { gap: 28px; }
.nav.nav-floating .nav-links a { font-size: var(--fs-sm); }
.nav.nav-floating .nav-phone { display: none; }

.nav-cta-pill {
  display: inline-flex;
  align-items: center;
  gap: 8px;
  background: var(--ink);
  color: var(--c-on-dark);
  border-radius: 999px;
  padding: 12px 22px;
  font-family: var(--sans);
  font-weight: 500;
  font-size: var(--fs-sm);
  transition: background 200ms var(--ease);
  min-height: 44px;
}
.nav-cta-pill:hover { background: var(--rust); color: var(--c-on-dark); }

@media (max-width: 1023px) {
  .nav.nav-floating .nav-inner { padding: 0 12px 0 20px; }
  .nav-cta-pill { display: none; }
  .nav.nav-floating .nav-toggle { padding: 12px; margin-right: 0; }
}
@media (min-width: 1024px) {
  .nav.nav-floating .nav-inner { padding: 0 8px 0 32px; }
}

/* When floating-nav is on the page, nav-mobile sits below it */
.nav.nav-floating + .nav-mobile,
body.nav-open .nav.nav-floating ~ .nav-mobile,
.nav.nav-floating .nav-mobile {
  /* nav-mobile is a child of .nav so this targets correctly */
  inset: 80px 16px 16px 16px;
  border-radius: 28px;
  padding: 32px 28px;
  box-shadow: 0 16px 48px rgba(0, 0, 0, 0.25);
}

/* ============================================================
   Split hero (homepage variant) - light theme
   ============================================================ */

/* Kuori antaa kolikolle asemointipisteen heron ULKOPUOLELLA (maski koskee
   myös lapsielementtejä) ja kantaa mitat, jotta lovi ja kolikko osuvat
   varmasti kohdakkain. */
.hero-shell {
  /* --hero-slice = valkoisen taustan tilkka kortin kummallakin puolella */
  --hero-slice: clamp(8px, 0.7vw, 12px);
  --hero-radius: 28px;

  position: relative;
  /* Marginaalit molemmin puolin, EI 100vw-laskentaa: 100vw sisältää
     pystyvierityspalkin, jolloin oikea reuna jää kapeammaksi. */
  margin: var(--hero-slice) var(--hero-slice) 0;

  /* Varjo kuoreen, ei .hero-splitiin: siellä lovi-maski leikkaisi myös
     laatikon ulkopuolelle piirtyvän varjon pois. Sama sävy kuin
     osioiden välisissä varjoissa (.layer-edge). */
  border-radius: var(--hero-radius);
  box-shadow:
    0 26px 50px -14px rgba(15, 23, 36, 0.18),
    0 8px 18px -8px rgba(15, 23, 36, 0.10);
}
@media (max-width: 640px) { .hero-shell { --hero-radius: 20px; } }

.hero-split {
  position: relative;
  width: auto;
  margin: 0;
  border-radius: var(--hero-radius);
  /* Kortin vasen laita on vaalennettu lähes taustan väriseksi (#F7F7F7 vs
     #F9F9F9), joten ilman reunusta vasen tilkka sulautuu taustaan ja
     reunat näyttävät eri levyisiltä vaikka ovat samat. */
  border: 1px solid var(--hairline);
  /* center top: kun kortti madaltuu, rajaus tulee alareunasta eikä
     molemmista päistä kuten center center tekisi */
  background: #D9DDE3 url('../images/home-hero-bg.jpg') center top / cover no-repeat;
  color: var(--c-body);
  padding: 140px 0 80px;
  min-height: calc(93vh - var(--hero-slice));
  display: flex;
  align-items: flex-start;
  overflow: hidden;
}
/* Mobiilissa kevyempi 1080 px versio. Raja vastaa etusivun esilatausta
   (app/(site)/page.jsx), jotta esiladattu kuva on sama jota CSS kayttaa. */
@media (max-width: 640px) {
  .hero-split { background-image: url('../images/home-hero-bg-mobile.jpg'); }
}
/* pyöristys tulee kuoren --hero-radius-muuttujasta, jotta kortti ja sen
   varjo pysyvät samanmuotoisina myös mobiilissa */
/* Valkoinen häivennys poistettu: kuva näkyy nyt sellaisenaan reunasta
   reunaan. Otsikko on kuvan päällä ilman vaalennusta, joten luettavuus
   riippuu taustakuvan omasta kontrastista. */
.hero-split > .container { position: relative; z-index: 2; }

.hero-split-grid {
  display: grid;
  grid-template-columns: 1fr;
  gap: 48px;
  align-items: center;
  width: 100%;
}

.hero-split-text { position: relative; z-index: 2; }
.hero-split-text .eyebrow {
  color: var(--c-body);
  margin-bottom: 20px;
  display: flex;
  align-items: center;
  gap: 12px;
}
.hero-split-text .eyebrow::before {
  content: '';
  width: 28px; height: 1px;
  background: var(--slate);
  opacity: 0.7;
  display: inline-block;
}
/* Valkoinen teksti: hero-kuvan päältä poistettiin vaalennus, joten
   otsikko tarvitsee suurimman mahdollisen kontrastin valokuvaa vasten. */
.hero-split-text h1 {
  font-family: 'Oswald', 'Inter', sans-serif;
  font-weight: 500;
  color: var(--c-on-dark);
  max-width: 24ch;
  font-size: var(--fs-h1r);
  /* 1.02 oli niin tiukka etta seuraavan rivin Ä:n ja Ö:n pisteet osuivat
     ylempaan riviin. Oswaldin versaalit ovat korkeat ja umlaut-pisteet
     nousevat viela versaalikorkeuden ylapuolelle, joten rivi tarvitsee
     hieman enemman tilaa kuin pelkka versaaliladonta antaisi ymmartaa. */
  line-height: 1.1;
  letter-spacing: 0.005em;
  text-transform: uppercase;
  margin: 0;
}
/* Korostussana säilyy brändin sinisenä myös valkoisen otsikon rinnalla. */
.hero-split-text h1 .accent {
  color: var(--c-accent);
  font-style: normal;
  font-weight: 500;
}
.hero-split-text .lead {
  /* Samassa lohkossa kuvan päällä kuin h1, joten sama valkoinen. */
  color: var(--c-on-dark);
  opacity: 0.9;
  margin-top: 20px;
  max-width: 46ch;
  font-size: var(--fs-base);
  line-height: 1.55;
}

.hero-split-ctas {
  display: flex;
  flex-wrap: wrap;
  gap: 14px;
  margin-top: 32px;
  align-items: center;
}

.btn-pill {
  display: inline-flex;
  align-items: center;
  gap: 10px;
  padding: 16px 28px;
  font-family: var(--sans);
  font-weight: 500;
  font-size: var(--fs-sm);
  border-radius: 999px;
  border: 1px solid transparent;
  transition: background 200ms var(--ease), color 200ms var(--ease), border-color 200ms var(--ease), transform 200ms var(--ease);
  min-height: 52px;
  cursor: pointer;
}
.btn-pill-light {
  background: var(--ink);
  color: var(--c-on-dark);
  border-color: var(--ink);
}
.btn-pill-light:hover {
  background: var(--rust);
  color: var(--c-on-dark);
  border-color: var(--rust);
}
.btn-pill-ghost {
  background: transparent;
  color: var(--c-body);
  border-color: var(--ink);
}
.btn-pill-ghost:hover {
  background: var(--ink);
  color: var(--c-on-dark);
  border-color: var(--ink);
}
.btn-pill .arrow {
  display: inline-block;
  transition: transform 200ms var(--ease);
}
.btn-pill:hover .arrow { transform: translateX(4px); }

/* Hero stats row (under CTAs) - sits lower in the hero block */
.hero-stats {
  display: flex;
  gap: 36px;
  margin-top: 64px;
  flex-wrap: wrap;
}
.hero-stat .num {
  font-family: var(--serif);
  font-weight: 500;
  font-size: var(--fs-h3r);
  line-height: 1;
  letter-spacing: -0.02em;
  color: var(--c-body);
}
.hero-stat .label {
  font-family: var(--sans);
  font-size: var(--fs-xs);
  letter-spacing: 0.12em;
  text-transform: uppercase;
  color: var(--c-body);
  margin-top: 8px;
}

/* Hero visual (right side) */
.hero-split-visual {
  display: flex;
  align-items: flex-start;
  justify-content: flex-end;
  z-index: 2;
  position: relative;
}
.hero-card { display: none; }

/* Duo card component */
.hero-duo-card {
  background: rgba(26, 26, 26, 0.82);
  backdrop-filter: blur(8px);
  -webkit-backdrop-filter: blur(8px);
  border-radius: 32px;
  padding: 20px 20px 24px;
  display: flex;
  flex-direction: column;
  gap: 20px;
  width: 320px;
}

.hero-duo-images {
  display: flex;
  gap: 12px;
}

.hero-duo-img {
  flex: 1;
  aspect-ratio: 3 / 4;
  border-radius: 999px;
  overflow: hidden;
}

.hero-duo-img img {
  width: 100%;
  height: 100%;
  object-fit: cover;
}

.hero-duo-footer {
  display: flex;
  align-items: center;
  justify-content: space-between;
  padding: 0 8px;
  gap: 8px;
}

.hero-duo-stat {
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: 4px;
}

.hero-duo-num {
  font-family: var(--serif);
  font-weight: 500;
  font-size: var(--fs-lead);
  line-height: 1;
  color: var(--c-on-dark);
  letter-spacing: -0.01em;
}

.hero-duo-label {
  font-family: var(--sans);
  font-size: var(--fs-xs);
  font-weight: 500;
  letter-spacing: 0.06em;
  text-transform: uppercase;
  color: var(--c-on-dark);
  text-align: center;
}

.hero-duo-divider {
  width: 1px;
  height: 32px;
  background: rgba(255, 255, 255, 0.2);
  flex-shrink: 0;
}

/* Floating chips - dark on light background for contrast */
.hero-chip {
  position: absolute;
  background: var(--ink);
  color: var(--c-on-dark);
  border-radius: 999px;
  padding: 12px 20px;
  font-family: var(--sans);
  font-size: var(--fs-sm);
  font-weight: 500;
  display: inline-flex;
  align-items: center;
  gap: 10px;
  box-shadow: 0 12px 32px rgba(0, 0, 0, 0.18);
  white-space: nowrap;
  z-index: 3;
}
.hero-chip::before {
  content: '';
  width: 8px; height: 8px;
  border-radius: 50%;
  background: var(--rust);
  flex-shrink: 0;
}
.hero-chip-tl { top: 32px; left: -16px; }
.hero-chip-br { bottom: 56px; right: -20px; }

.hero-chip-card {
  position: absolute;
  bottom: 24px;
  left: 50%;
  transform: translateX(-50%);
  background: #FFFFFF;
  color: var(--c-body);
  border: 1px solid var(--hairline);
  border-radius: 18px;
  padding: 16px 20px;
  font-family: var(--sans);
  font-size: var(--fs-xs);
  display: flex;
  align-items: center;
  gap: 14px;
  box-shadow: 0 16px 40px rgba(0, 0, 0, 0.14);
  z-index: 3;
  min-width: 240px;
}
.hero-chip-card .dot {
  width: 36px; height: 36px;
  border-radius: 50%;
  background: var(--ink);
  color: var(--c-on-dark);
  display: inline-flex;
  align-items: center;
  justify-content: center;
  font-family: var(--serif);
  font-style: italic;
  flex-shrink: 0;
}
.hero-chip-card .label {
  font-size: var(--fs-xs);
  letter-spacing: 0.12em;
  text-transform: uppercase;
  color: var(--c-body);
  margin-bottom: 2px;
  display: block;
}
.hero-chip-card .value {
  font-family: var(--serif);
  font-size: var(--fs-md);
  font-weight: 500;
  color: var(--c-body);
}

/* Floating nav over light hero - transparent, just the CTA is pilled */
.nav.nav-floating .nav-inner {
  background: transparent;
  border: 0;
  box-shadow: none;
}
.nav.nav-floating .brand { color: var(--c-body); }
.nav.nav-floating .brand-sup { color: var(--c-body); }
.nav.nav-floating .nav-links a {
  color: var(--c-body);
}
.nav.nav-floating .nav-links a:hover { color: var(--c-accent); }
.nav.nav-floating .nav-links a.active { color: var(--c-body); }
.nav.nav-floating .nav-links a.active::after {
  background: var(--rust);
  height: 2px;
}
.nav.nav-floating .nav-toggle span { background: var(--ink); }
.nav.nav-floating .nav-dropdown-menu {
  background: #FFFFFF;
  border-color: var(--hairline);
  box-shadow: 0 12px 32px rgba(0, 0, 0, 0.12);
}
.nav.nav-floating .nav-dropdown-menu li a { color: var(--c-body); }

@media (min-width: 1024px) {
  .hero-split { padding: 140px 0 96px; }
  .hero-split-grid { grid-template-columns: 1fr auto; gap: 64px; max-width: 100%; align-items: start; }
  .hero-chip-tl { top: 56px; left: -28px; }
  .hero-chip-br { bottom: 80px; right: -32px; }
}

/* Wide displays - let the hero breathe instead of hugging a 1240px column */
@media (min-width: 1600px) {
  .hero-split > .container { max-width: 1480px; }
  .hero-split { padding: 160px 0 120px; }
  .hero-split-grid { gap: 96px; }
  .hero-split-text h1 { font-size: var(--fs-display); max-width: 22ch; }
  .hero-split-text .lead { font-size: var(--fs-base); max-width: 52ch; }
  .hero-credentials-grid { grid-template-columns: repeat(2, 200px); }
}

@media (min-width: 2000px) {
  .hero-split > .container { max-width: 1760px; }
  .hero-split { padding: 200px 0 160px; min-height: 92vh; }
  .hero-split-grid { gap: 128px; }
  .hero-split-text h1 { font-size: var(--fs-display); }
  .hero-split-text .lead { font-size: var(--fs-lead); max-width: 56ch; }
  .hero-split-text .hero-stats .num { font-size: var(--fs-h2r); }
  .hero-credentials-grid { grid-template-columns: repeat(2, 240px); gap: 18px; }
}

@media (max-width: 767px) {
  .hero-split-visual { max-width: 480px; }
  .hero-card { border-radius: 20px; }
  .hero-chip-tl { top: 20px; left: 0; }
  .hero-chip-br { bottom: 40px; right: 0; }
  .hero-chip-card { min-width: 200px; }
}

/* ============================================================
   HERO D - Arc (dark text panel left, white panel with circular
   photo cutouts right). Inspired by Gapura's split-circle look.
   ============================================================ */

.hero-arc {
  --arc-dark: #0c1822;
  position: relative;
  width: 100%;
  min-height: 100vh;
  color: var(--c-on-dark);
  overflow: hidden;
  isolation: isolate;
}

/* LAYER 1 - bottom slot. Drop a background-image here later to put a
   full-bleed photo behind the whole hero. The dark shape will mask it. */
.hero-arc-bg-slot {
  position: absolute;
  inset: 0;
  z-index: 0;
  background: #d9dde3 url('../images/potentialheropagebackground.kokkoma.jpg') center / cover no-repeat;
}

/* LAYER 2 - SVG dark shape with circular cutouts (sits over the slot) */
.hero-arc-shape {
  position: absolute;
  inset: 0;
  width: 100%;
  height: 100%;
  z-index: 1;
  pointer-events: none;
  display: block;
}

/* LAYER 3 - content (sits over both) */
.hero-arc-content {
  position: relative;
  z-index: 2;
  min-height: 100vh;
  display: flex;
  align-items: center;
  padding: 140px clamp(40px, 5vw, 96px) 80px clamp(40px, 8vw, 140px);
}

.hero-arc-left-inner {
  position: relative;
  z-index: 2;
  max-width: 620px;
  width: 100%;
}

.hero-arc-eyebrow {
  font-family: var(--sans);
  font-size: var(--fs-xs);
  text-transform: uppercase;
  letter-spacing: 0.18em;
  color: var(--c-body);
  margin: 0 0 28px;
  display: flex;
  align-items: center;
  gap: 12px;
}
.hero-arc-eyebrow::before {
  content: '';
  width: 32px; height: 1px;
  background: var(--slate);
  opacity: 0.7;
}

.hero-arc-title {
  font-family: 'Oswald', 'Inter', sans-serif;
  font-weight: 500;
  text-transform: uppercase;
  color: var(--c-body);
  font-size: var(--fs-display);
  line-height: 1.02;
  letter-spacing: 0.005em;
  margin: 0 0 24px;
  max-width: 14ch;
}
.hero-arc-accent {
  color: var(--c-accent);
  font-weight: 500;
}

.hero-arc-lead {
  font-family: var(--sans);
  color: var(--c-body);
  opacity: 0.85;
  font-size: var(--fs-base);
  line-height: 1.6;
  max-width: 48ch;
  margin: 0 0 36px;
}

.hero-arc-ctas {
  display: flex;
  flex-wrap: wrap;
  gap: 14px;
  margin-bottom: 56px;
}

.hero-arc-meta {
  display: grid;
  grid-template-columns: repeat(4, minmax(0, 1fr));
  gap: 24px;
  border-top: 1px solid var(--hairline);
  padding-top: 32px;
  margin-bottom: 56px;
}
.hero-arc-meta > div { display: flex; flex-direction: column; gap: 4px; }
.hero-arc-meta .num {
  font-family: 'Newsreader', Georgia, serif;
  font-size: var(--fs-h3r);
  font-weight: 400;
  color: var(--c-body);
  letter-spacing: 0.01em;
}
.hero-arc-meta .lbl {
  font-family: var(--sans);
  font-size: var(--fs-xs);
  text-transform: uppercase;
  letter-spacing: 0.14em;
  color: var(--c-body);
}

.hero-arc-scroll {
  display: inline-flex;
  align-items: center;
  gap: 14px;
  padding: 12px 16px 12px 20px;
  border: 1px solid rgba(26, 26, 26, 0.18);
  border-radius: 999px;
  font-family: var(--sans);
  font-size: var(--fs-xs);
  text-transform: uppercase;
  letter-spacing: 0.14em;
  color: var(--c-body);
  text-decoration: none;
  transition: border-color 200ms, background 200ms;
}
.hero-arc-scroll:hover { border-color: rgba(26, 26, 26, 0.4); background: rgba(26, 26, 26, 0.04); }
.hero-arc-scroll-dot {
  width: 28px; height: 28px;
  border-radius: 50%;
  background: var(--ink);
  color: var(--c-on-dark);
  display: inline-flex; align-items: center; justify-content: center;
}
.hero-arc-scroll-dot svg { width: 14px; height: 14px; }

/* Credentials grid - floats top-right over the right-side cutout photos */
.hero-arc-credentials {
  position: absolute;
  top: clamp(40px, 6vh, 80px);
  right: clamp(24px, 3vw, 56px);
  width: clamp(280px, 26vw, 420px);
  z-index: 3;
  display: flex;
  flex-direction: column;
  align-items: flex-end;
  gap: 14px;
}
.hero-arc-credentials-label {
  margin: 0;
  font-family: var(--sans);
  font-size: var(--fs-xs);
  text-transform: uppercase;
  letter-spacing: 0.18em;
  color: var(--c-on-dark);
  text-shadow: 0 1px 3px rgba(0, 0, 0, 0.35);
}
.hero-arc-credentials-grid {
  display: grid;
  grid-template-columns: repeat(2, 1fr);
  gap: 12px;
  width: 100%;
}

/* Trust pill placement inside the credentials column - liquid-glass to match cred-card */
.hero-arc-trust {
  align-self: stretch;
  width: 100%;
  position: relative;
  isolation: isolate;
  overflow: hidden;
  border-radius: 16px;
  background:
    linear-gradient(180deg,
      rgba(255, 255, 255, 0.55) 0%,
      rgba(255, 255, 255, 0.25) 45%,
      rgba(255, 255, 255, 0.35) 100%);
  backdrop-filter: saturate(180%) blur(18px);
  -webkit-backdrop-filter: saturate(180%) blur(18px);
  box-shadow:
    0 12px 28px rgba(10, 30, 60, 0.10),
    0 3px 8px rgba(10, 30, 60, 0.06),
    inset 0 1px 1px rgba(255, 255, 255, 0.95),
    inset 1px 0 1px rgba(255, 255, 255, 0.55),
    0 0 0 1px rgba(255, 255, 255, 0.4);
  border: 0;
}
.hero-arc-trust::before {
  content: '';
  position: absolute;
  inset: 1px 1px auto 1px;
  height: 50%;
  background: linear-gradient(180deg,
    rgba(255,255,255,0.5) 0%,
    rgba(255,255,255,0.12) 60%,
    rgba(255,255,255,0) 100%);
  border-radius: 16px 16px 80% 80% / 16px 16px 100% 100%;
  pointer-events: none;
  z-index: 0;
}
.hero-arc-trust > * { position: relative; z-index: 1; }

@media (max-width: 1023px) {
  .hero-arc-credentials {
    position: static;
    width: 100%;
    align-items: flex-start;
    margin-top: 32px;
  }
  .hero-arc-credentials-label { color: var(--c-body); text-shadow: none; }
}

/* "Pyydä tarjous" floating pill - sits in the dark navy area between the
   two cutout circles (bottom-right region), like Gapura's "Join us". */
.hero-arc-pill {
  position: absolute;
  bottom: 48px;
  right: 48px;
  display: inline-flex;
  align-items: center;
  gap: 14px;
  padding: 16px 22px 16px 28px;
  background: var(--rust);
  color: var(--c-on-dark);
  border-radius: 999px;
  font-family: var(--sans);
  font-size: var(--fs-sm);
  font-weight: 500;
  text-decoration: none;
  letter-spacing: 0.02em;
  box-shadow: 0 12px 28px rgba(82, 127, 168, 0.4);
  transition: transform 220ms var(--ease), background 220ms var(--ease);
  z-index: 3;
}
.hero-arc-pill:hover { transform: translateY(-2px); background: var(--rust-hover); }
.hero-arc-pill > span {
  width: 28px; height: 28px;
  border-radius: 50%;
  background: var(--bone);
  color: var(--c-accent);
  display: inline-flex; align-items: center; justify-content: center;
  font-size: var(--fs-md);
}

/* ---------- Responsive ---------- */
@media (max-width: 1023px) {
  .hero-arc-content { padding: 100px 24px 64px; }
  .hero-arc-pill { bottom: 28px; right: 28px; padding: 12px 18px 12px 22px; font-size: var(--fs-sm); }
  .hero-arc-meta { grid-template-columns: repeat(2, 1fr); gap: 20px; }
}

@media (max-width: 600px) {
  .hero-arc-content { padding: 84px 20px 48px; }
  .hero-arc-meta { grid-template-columns: repeat(2, 1fr); }
  .hero-arc-ctas { flex-direction: column; align-items: stretch; }
  .hero-arc-ctas .btn-pill { justify-content: center; }
  .hero-arc-pill { bottom: 20px; right: 20px; }
}

/* Wide screens - scale up the type */
@media (min-width: 1600px) {
  .hero-arc-left-inner { max-width: 720px; }
  .hero-arc-title { font-size: var(--fs-display); }
  .hero-arc-lead { font-size: var(--fs-lead); max-width: 52ch; }
}
@media (min-width: 2000px) {
  .hero-arc-title { font-size: var(--fs-display); }
}


/* ============================================================
   Referenssit - kategoriaosiot listanäkymässä
   ============================================================ */

.ref-category + .ref-category { padding-top: 0; }
.ref-category-header { max-width: 60ch; margin-bottom: 8px; }
.ref-category-header h2 { margin-top: 16px; font-size: var(--fs-h2r); }

/* Card as a link */
a.ref-card {
  color: inherit;
  text-decoration: none;
  cursor: pointer;
}

/* Category tag overlay on the card image */
.ref-card-img { position: relative; }
.ref-card-tag {
  position: absolute;
  top: 12px;
  left: 12px;
  background: rgba(255, 255, 255, 0.92);
  color: var(--c-body);
  font-family: var(--sans);
  font-size: var(--fs-xs);
  font-weight: 600;
  letter-spacing: 0.06em;
  text-transform: uppercase;
  padding: 5px 12px;
  border-radius: 999px;
  backdrop-filter: blur(4px);
  -webkit-backdrop-filter: blur(4px);
  z-index: 1;
}

/* "Lue koko referenssi →" link text inside cards */
.ref-card-link {
  display: inline-flex;
  align-items: center;
  margin-top: auto;
  padding-top: 8px;
  font-family: var(--sans);
  font-weight: 600;
  font-size: var(--fs-xs);
  letter-spacing: 0.04em;
  color: var(--c-accent);
  transition: color 200ms var(--ease), transform 200ms var(--ease);
}
a.ref-card:hover .ref-card-link {
  color: var(--c-body);
  transform: translateX(4px);
}

/* ============================================================
   Referenssit - yksittäisen referenssin detail-näkymä
   ============================================================ */

.ref-detail-hero {
  background: var(--ink);
  color: var(--c-on-dark);
  padding: 96px 0 56px;
}
.ref-detail-back {
  display: inline-flex;
  align-items: center;
  font-family: var(--sans);
  font-size: var(--fs-sm);
  color: var(--c-on-dark);
  margin-bottom: 32px;
  transition: color 200ms var(--ease);
}
.ref-detail-back:hover { color: var(--c-on-dark); }

.ref-detail-tag {
  display: inline-block;
  font-family: var(--sans);
  font-size: var(--fs-xs);
  font-weight: 600;
  letter-spacing: 0.12em;
  text-transform: uppercase;
  color: var(--c-on-dark);
  background: var(--rust);
  padding: 5px 14px;
  border-radius: 999px;
  margin-bottom: 20px;
}

.ref-detail-title {
  font-family: var(--serif);
  font-weight: 500;
  font-size: var(--fs-h1r);
  line-height: 1.05;
  letter-spacing: -0.02em;
  color: var(--c-on-dark);
  max-width: 18ch;
}

/* Meta bar */
.ref-detail-meta { background: var(--bone); border-bottom: 1px solid var(--hairline); }
.ref-detail-meta-grid {
  display: grid;
  grid-template-columns: 1fr;
  gap: 0;
}
@media (min-width: 768px) {
  .ref-detail-meta-grid { grid-template-columns: repeat(4, 1fr); }
}

.meta-cell {
  padding: 24px 0;
  border-bottom: 1px solid var(--hairline);
}
.meta-cell:last-child { border-bottom: 0; }
@media (min-width: 768px) {
  .meta-cell {
    padding: 24px 28px;
    border-right: 1px solid var(--hairline);
    border-bottom: 0;
  }
  .meta-cell:first-child { padding-left: 0; }
  .meta-cell:last-child { border-right: 0; padding-right: 0; }
}

.meta-label {
  font-family: var(--sans);
  font-size: var(--fs-xs);
  font-weight: 500;
  letter-spacing: 0.12em;
  color: var(--c-body);
  text-transform: uppercase;
  margin-bottom: 6px;
}
.meta-value {
  font-family: var(--sans);
  font-weight: 600;
  font-size: var(--fs-sm);
  color: var(--c-body);
}

/* Body blocks */
.ref-detail-blocks {
  display: grid;
  grid-template-columns: 1fr;
  gap: 48px;
  max-width: 960px;
}
@media (min-width: 768px) {
  .ref-detail-blocks { grid-template-columns: 1fr 1fr; gap: 56px 64px; }
}

.ref-detail-block .eyebrow { color: var(--c-accent); margin-bottom: 12px; }
.ref-detail-block h3 {
  font-family: var(--serif);
  font-weight: 500;
  font-size: var(--fs-lead);
  margin-bottom: 12px;
}
.ref-detail-block p {
  font-family: var(--sans);
  font-size: var(--fs-md);
  line-height: 1.7;
  color: var(--c-body);
}

/* Quote */
.ref-detail-quote {
  grid-column: 1 / -1;
  background: var(--surface, #fff);
  border-left: 4px solid var(--rust);
  padding: 32px 36px;
  border-radius: 0 8px 8px 0;
  margin: 0;
}
.ref-detail-quote-text {
  font-family: var(--serif);
  font-style: italic;
  font-size: var(--fs-lead);
  line-height: 1.55;
  color: var(--c-body);
  margin-bottom: 12px;
}
.ref-detail-quote-author {
  font-family: var(--sans);
  font-size: var(--fs-sm);
  font-weight: 600;
  color: var(--c-body);
  letter-spacing: 0.02em;
}

/* Detail-page footer CTAs */
.ref-detail-cta {
  display: flex;
  flex-wrap: wrap;
  gap: 16px;
  align-items: center;
  justify-content: space-between;
  margin-top: 80px;
  padding-top: 40px;
  border-top: 1px solid var(--hairline);
}

/* ============================================================
   Concept E: Blueprint - desaturated architectural collage,
   thin technical framing, monochrome + accent.
   ============================================================ */
.hero-blueprint {
  --bp-accent: var(--rust);
  position: relative;
  min-height: 100vh;
  background: #EFEBE3;
  overflow: hidden;
  display: flex;
  align-items: flex-end;
  padding: 0;
}

.hero-blueprint-bg {
  position: absolute;
  inset: 0;
  background-size: cover;
  background-position: center;
}
.hero-blueprint::before {
  content: '';
  position: absolute;
  inset: 0;
  background: linear-gradient(90deg, #EFEBE3 0%, rgba(239,235,227,0.85) 30%, rgba(239,235,227,0.15) 55%, rgba(239,235,227,0) 70%);
  z-index: 1;
}

/* Thin corner brackets - technical/blueprint framing */
.hero-blueprint-frame {
  position: absolute;
  inset: 28px;
  z-index: 2;
  pointer-events: none;
}
.hero-blueprint-frame .corner {
  position: absolute;
  width: 28px;
  height: 28px;
  border: 1px solid rgba(26,26,26,0.25);
}
.corner-tl { top: 0; left: 0; border-right: none; border-bottom: none; }
.corner-tr { top: 0; right: 0; border-left: none; border-bottom: none; }
.corner-bl { bottom: 0; left: 0; border-right: none; border-top: none; }
.corner-br { bottom: 0; right: 0; border-left: none; border-top: none; }

.hero-blueprint-container {
  position: relative;
  z-index: 3;
  width: 100%;
  max-width: none;
  margin-left: 0;
  padding-top: 120px;
  padding-bottom: 80px;
}

.hero-blueprint-tag {
  display: inline-flex;
  align-items: center;
  gap: 14px;
  font-family: var(--sans);
  font-weight: 500;
  font-size: var(--fs-xs);
  letter-spacing: 0.22em;
  text-transform: uppercase;
  color: var(--c-body);
  margin: 0 0 28px;
}
.hero-blueprint-tag-line {
  display: inline-block;
  width: 40px;
  height: 1px;
  background: var(--bp-accent);
}

.hero-blueprint-title {
  font-family: 'Oswald', var(--sans);
  font-weight: 600;
  text-transform: uppercase;
  font-size: var(--fs-display);
  line-height: 1.05;
  letter-spacing: 0.005em;
  color: var(--c-body);
  margin: 0 0 28px;
  max-width: 18ch;
}
.hero-blueprint-title .accent { color: var(--c-accent); }

.hero-blueprint-lead {
  font-family: var(--sans);
  font-size: var(--fs-base);
  line-height: 1.6;
  color: var(--c-body);
  margin: 0 0 40px;
  max-width: 48ch;
}

.hero-blueprint-ctas {
  display: flex;
  flex-wrap: wrap;
  gap: 14px;
  align-items: center;
  margin-bottom: 56px;
}
.hero-blueprint-ctas .btn-pill-light {
  background: var(--bp-accent);
  border-color: var(--bp-accent);
}
.hero-blueprint-ctas .btn-pill-light:hover {
  background: var(--ink);
  border-color: var(--ink);
}
.hero-blueprint-ctas .btn-pill-ghost:hover {
  background: rgba(26,26,26,0.05);
  border-color: var(--bp-accent);
  color: var(--c-accent);
}

.hero-blueprint-specs {
  display: flex;
  gap: 48px;
  flex-wrap: wrap;
  padding-top: 32px;
  border-top: 1px solid var(--hairline);
}
.hero-blueprint-specs .spec {
  display: flex;
  flex-direction: column;
  gap: 6px;
}
.hero-blueprint-specs .spec-num {
  font-family: var(--serif);
  font-weight: 500;
  font-size: var(--fs-h3r);
  line-height: 1;
  letter-spacing: -0.02em;
  color: var(--c-body);
}
.hero-blueprint-specs .spec-label {
  font-family: var(--sans);
  font-size: var(--fs-xs);
  letter-spacing: 0.14em;
  text-transform: uppercase;
  color: var(--c-body);
}

@media (max-width: 768px) {
  .hero-blueprint-frame { inset: 16px; }
  .hero-blueprint-container { padding-top: 96px; padding-bottom: 56px; }
  .hero-blueprint-title { font-size: var(--fs-h2r); }
  .hero-blueprint-specs { gap: 32px; }
}

@media (min-width: 1600px) {
  .hero-blueprint-title { font-size: var(--fs-display); }
  .hero-blueprint-lead { font-size: var(--fs-base); max-width: 52ch; }
  .hero-blueprint-specs { gap: 64px; }
  .hero-blueprint-specs .spec-num { font-size: var(--fs-h2r); }
}

/* --- clone: service explainer "Who We Are" two-column (method section) --- */
.srv-method { background: var(--bone); }
.srv-method-grid {
  display: grid;
  grid-template-columns: minmax(0, 0.88fr) minmax(0, 1fr);
  gap: clamp(32px, 5vw, 84px);
  align-items: center;
}
/* Kuvat ovat kohdekohtaisia eikä niitä ole kaikille palveluille. Ilman
   kuvaparia teksti latoutuu yhteen palstaan sen sijaan että jäisi
   puolikkaaseen ruudukkoon tyhjän palstan viereen. */
.srv-method-grid--nomedia {
  grid-template-columns: minmax(0, 1fr);
  max-width: 72ch;
}
.srv-method-media { position: relative; aspect-ratio: 1 / 1; }
.srv-method-media img {
  position: absolute;
  object-fit: cover;
  border-radius: 14px;
}
.srv-method-img1 { top: 0; left: 0; width: 72%; height: 70%; }
/* Yksi kuva: ei limitystä, joten kuva täyttää koko alueen. */
.srv-method-media--single .srv-method-img1 { inset: 0; width: 100%; height: 100%; }
.srv-method-img2 {
  right: 0;
  bottom: 0;
  width: 58%;
  height: 58%;
  z-index: 2;
  border: 6px solid var(--bone);
}

.srv-method-eyebrow {
  display: inline-flex;
  align-items: center;
  gap: 10px;
  margin-bottom: 18px;
  font-family: var(--sans);
  font-weight: 600;
  font-size: var(--fs-xs);
  letter-spacing: 0.18em;
  text-transform: uppercase;
  color: var(--c-body);
}
.srv-method-eyebrow::before {
  content: "";
  width: 16px;
  height: 16px;
  background:
    linear-gradient(var(--rust), var(--rust)) 0 0 / 6px 6px no-repeat,
    linear-gradient(var(--rust), var(--rust)) 10px 0 / 6px 6px no-repeat,
    linear-gradient(var(--rust), var(--rust)) 0 10px / 6px 6px no-repeat,
    linear-gradient(var(--rust), var(--rust)) 10px 10px / 6px 6px no-repeat;
}
.srv-method-title {
  margin: 0 0 20px;
  max-width: 20ch;
  font-family: 'Oswald', var(--sans);
  font-size: var(--fs-h2r);
  font-weight: 600;
  line-height: 1.1;
  letter-spacing: 0.02em;
  text-transform: uppercase;
  color: var(--c-body);
}
.srv-method-body { max-width: 54ch; color: var(--c-body); line-height: 1.7; }
.srv-method-body p { margin: 0 0 14px; }

.srv-method-list {
  list-style: none;
  margin: 28px 0;
  padding: 0;
  display: grid;
  gap: 14px;
}
.srv-method-list li {
  display: flex;
  align-items: center;
  gap: 14px;
  font-weight: 600;
  font-size: var(--fs-md);
  color: var(--c-body);
}
.srv-method-list li::before {
  content: "–";
  flex: 0 0 auto;
  color: var(--c-accent);
  font-weight: 600;
}

/* "Lue lisää" -painike poistettu palvelusivuilta, joten .srv-method-actions
   ja .srv-method-btn on siivottu pois. */

@media (max-width: 860px) {
  .srv-method-grid { grid-template-columns: 1fr; gap: 32px; }
  /* Puhelimella teksti ensin, kuva sen alle: lukija näkee heti mistä
     osiossa on kyse eikä selaa ensin kuvan ohi. */
  .srv-method-media { aspect-ratio: 4 / 3; order: 2; }
  /* Yksittäinen pitkä sana ("ERIKOISBETONOINTIMENETELMÄ") ei mahdu
     kapealle näytölle --fs-h2r:n minimikoolla. Pienempi koko ja tavutus
     pitävät sen ruudulla; overflow-wrap katkaisee sanan viimeisenä
     keinona niissä selaimissa, jotka eivät osaa tavuttaa suomea. */
  .srv-method-title {
    font-size: clamp(1.4rem, 6.4vw, 1.75rem);
    hyphens: auto;
    -webkit-hyphens: auto;
    overflow-wrap: break-word;
  }
}

/* --- Stakeholder paths as cards (image + circular arrow button) --- */
.paths {
  grid-template-columns: 1fr;
  gap: 28px;
  border: 0;
}
@media (min-width: 760px) {
  .paths { grid-template-columns: repeat(3, 1fr); }
}
.path-card {
  display: flex;
  flex-direction: column;
  background: var(--surface);
  border: 1px solid var(--hairline);
  border-radius: 16px;
  overflow: hidden;
  text-decoration: none;
  color: inherit;
  transition: transform 200ms var(--ease), box-shadow 200ms var(--ease);
}
.path-card:hover {
  transform: translateY(-4px);
  box-shadow: 0 16px 40px rgba(0, 0, 0, 0.1);
}
.path-card-media { aspect-ratio: 16 / 11; overflow: hidden; }
.path-card-media img { width: 100%; height: 100%; object-fit: cover; display: block; }
.path-card-body {
  display: flex;
  flex-direction: column;
  flex: 1;
  padding: 26px 26px 24px;
}
.path-card .eyebrow { color: var(--c-accent); margin-bottom: 12px; }
.path-card .path-statement {
  font-family: var(--serif);
  font-weight: 500;
  font-size: var(--fs-lead);
  line-height: 1.32;
  letter-spacing: -0.01em;
  color: var(--c-body);
  margin: 0 0 24px;
  max-width: none;
}
.path-card-arrow {
  margin-top: auto;
  width: 48px;
  height: 48px;
  border-radius: 50%;
  background: var(--rust);
  color: var(--c-on-dark);
  display: grid;
  place-items: center;
  font-size: var(--fs-lead);
  transition: background 200ms var(--ease), transform 200ms var(--ease);
}
.path-card:hover .path-card-arrow { background: var(--rust-hover); transform: translateX(3px); }

/* --- Meistä teaser (homepage): two overlapping photos + mission copy --- */
.about-teaser-grid {
  display: grid;
  grid-template-columns: 1fr;
  gap: 48px;
  align-items: start;
}
/* Tyopoydalla kortti limittyy kuvan oikean reunan ylle. Aiemmin kuva ja
   kortti olivat vierekkain omissa sarakkeissaan valin erottamina, jolloin
   ne lukeutuivat kahtena irrallisena palana; limitys sitoo ne yhdeksi
   sommitelmaksi ja tuo syvyytta. Kortti on absoluuttinen, joten osion
   korkeuden maaraa kuva — kortti mahtuu sen sisaan reilusti. */
/* Tyopoydalla kortti limittyy kuvan oikean reunan ylle. Aiemmin kuva ja
   kortti olivat vierekkain omissa sarakkeissaan valin erottamina, jolloin
   ne lukeutuivat kahtena irrallisena palana; limitys sitoo ne yhdeksi
   sommitelmaksi ja tuo syvyytta. Kortti on absoluuttinen, joten osion
   korkeuden maaraa kuva — kortti mahtuu sen sisaan reilusti. */
@media (min-width: 900px) {
  .about-teaser-grid { display: block; position: relative; }
  .about-teaser-media { width: 54%; aspect-ratio: 16 / 10; }
  /* Kortti hieman sisaan oikeasta reunasta, jotta kuvan kavettya limitys
     sailyy: 54 % + 48 % + 3 % sisennys = noin 5 % paallekkain. */
  .about-teaser-col {
    position: absolute;
    right: 3%;
    top: 50%;
    transform: translateY(-50%);
    width: 48%;
  }
  .about-teaser-content {
    padding: 44px;
    /* Varjo erottaa kortin kuvasta: ilman sita limitys nayttaisi silta etta
       kortti on leikattu kuvaan kiinni. */
    box-shadow: 0 30px 70px rgba(6, 16, 28, 0.3);
  }
}

.about-teaser-col {
  display: flex;
  flex-direction: column;
  gap: 32px;
}

/* Dark navy card: top edge flush with the photo's top edge (both columns
   start at the grid row's top via align-items:start on .about-teaser-grid). */
.about-teaser-content {
  background: #0f2236;
  border-radius: 20px;
  padding: 40px;
}
.about-teaser-content .eyebrow { color: var(--c-on-dark); }
.about-teaser-content h2 { color: var(--c-on-dark); }
.about-teaser-content > p { color: var(--c-on-dark); }
.about-teaser-content .about-teaser-btn {
  margin-top: 8px;
  background: #fff;
  color: var(--c-body);
  border-color: #fff;
}
.about-teaser-content .about-teaser-btn:hover {
  background: var(--rust);
  color: var(--c-on-dark);
  border-color: var(--rust);
}
@media (max-width: 640px) {
  .about-teaser-content { padding: 28px; }
}

/* Facts row: three short lines under a thin rust accent rule */
.about-teaser-facts {
  display: grid;
  grid-template-columns: 1fr;
  gap: 20px;
}
@media (min-width: 560px) {
  .about-teaser-facts { grid-template-columns: repeat(3, 1fr); gap: 24px; }
}
.about-teaser-fact {
  padding-top: 14px;
  border-top: 2px solid var(--rust);
  font-family: var(--sans);
  font-size: var(--fs-sm);
  line-height: 1.5;
  color: var(--c-body);
}

.about-teaser-link { font-size: var(--fs-sm); font-weight: 700; align-self: flex-start; }

.about-teaser-media {
  position: relative;
  aspect-ratio: 4 / 3;
}
.about-teaser-photo {
  width: 100%;
  height: 100%;
  object-fit: cover;
  display: block;
  border-radius: 20px;
}
/* Truck cutout: angled, overlapping the bottom-right corner of the photo */
.about-teaser-truck {
  position: absolute;
  right: -16%;
  bottom: -20%;
  width: 88%;
  max-width: 520px;
  transform: rotate(-6deg);
  filter: drop-shadow(0 18px 32px rgba(15, 23, 36, 0.28));
  pointer-events: none;
}
@media (max-width: 640px) {
  .about-teaser-truck { width: 74%; right: -10%; bottom: -14%; }
}

.about-teaser-content h2 { margin: 14px 0 18px; }
.about-teaser-content > p {
  max-width: 46ch;
  color: var(--c-body);
  line-height: 1.7;
  margin-bottom: 28px;
}
/* --- clone: truck + services-list section (reference, Phase 1) --- */
/* overflow-x: clip: kuvan tahallinen ylitys (width 118 %) leventäisi
   puhelimella koko sivua, jolloin sivu heiluisi sivusuunnassa. clip
   (ei hidden) jättää pystysuunnan ja varjon rajaamatta. */
.truck-section { background: transparent; overflow-x: clip; }
.truck-grid {
  display: grid;
  grid-template-columns: 1fr;
  gap: 40px;
  align-items: center;
}
@media (min-width: 900px) {
  .truck-grid { grid-template-columns: 1.85fr 1fr; gap: 24px; }
}
.truck-media {
  position: relative;
  aspect-ratio: 16 / 10;
  overflow: visible;
}
.truck-media img {
  width: 118%;
  max-width: none;
  height: 100%;
  object-fit: contain;
  margin-left: -12%;
  filter: drop-shadow(0 14px 18px rgba(0, 0, 0, 0.16));
}
.truck-title {
  margin: 0 0 18px;
  font-family: 'Oswald', var(--sans);
  font-size: var(--fs-h2r);
  font-weight: 500;
  line-height: 1.08;
  letter-spacing: 0.02em;
  text-transform: uppercase;
  color: var(--c-body);
  /* Otsikon rivinvaihto tulee CMS:n tekstin rivinvaihdosta, ei <br/>:sta:
     merkkijonoa ei voi pilkkoa ilman etta Presentationin klikkaa-ja-muokkaa
     rikkoutuu. */
  white-space: pre-line;
}
.truck-lead {
  margin: 0 0 28px;
  max-width: 48ch;
  color: var(--c-body);
  line-height: 1.7;
}
.truck-list { list-style: none; margin: 0; padding: 0; display: grid; gap: 22px; }
.truck-list-item { display: flex; align-items: flex-start; gap: 16px; }
.truck-list-icon {
  flex: 0 0 auto;
  display: grid;
  place-items: center;
  width: 48px;
  height: 48px;
  border-radius: 50%;
  background: #2f6df6;
  color: var(--c-on-dark);
}
.truck-list-text h3 {
  margin: 4px 0 4px;
  font-family: 'Oswald', var(--sans);
  font-size: var(--fs-h3);
  font-weight: 500;
  text-transform: uppercase;
  letter-spacing: 0.03em;
  color: var(--c-body);
}
.truck-list-text p { margin: 0; color: var(--c-body); font-size: var(--fs-sm); }
.truck-content {
  background: var(--surface);
  border-radius: 18px;
  padding: clamp(28px, 4vw, 52px);
}

/* --- "Miksi Kokkoma" - reference-style 3-column (number accent + title + text) --- */
.why-section .section-header {
  text-align: center;
  max-width: 760px;
  margin-left: auto;
  margin-right: auto;
}
/* Rounded dark-blue card behind the "Miksi Kokkoma" heading - the page
   background shows as a margin on every side. */
.why-section .why-band {
  width: min(var(--container), calc(100% - 2 * var(--gutter)));
  max-width: none;
  margin: 0 auto;
  padding: 72px 24px;
  text-align: center;
  background: #0f2236;
  border-radius: 20px;
}
.why-section .why-band .why-band-inner { max-width: 900px; margin: 0 auto; }
.why-section .why-band .eyebrow { color: var(--c-on-dark); }
.why-section .why-band h2,
.why-section .why-band em { color: var(--c-on-dark); }
@media (max-width: 640px) {
  .why-section .why-band { border-radius: 14px; }
}
.why-section .why-grid {
  grid-template-columns: 1fr;
  gap: 36px;
  border-top: 1px solid var(--hairline);
  padding-top: 52px;
  margin-top: 44px;
}
@media (min-width: 600px) {
  .why-section .why-grid { grid-template-columns: repeat(2, 1fr); column-gap: 48px; row-gap: 44px; }
}
@media (min-width: 980px) {
  .why-section .why-grid { grid-template-columns: repeat(4, 1fr); column-gap: 40px; }
}
.why-section .why-item {
  padding: 0;
  border-bottom: 0;
  gap: 8px;
}
.why-section .why-num {
  font-family: var(--sans);
  font-weight: 700;
  font-size: var(--fs-h2r);
  line-height: 1;
  letter-spacing: -0.01em;
  color: var(--c-accent);
}
.why-section .why-num .unit {
  margin-left: 4px;
  font-size: var(--fs-md);
  font-weight: 500;
  color: var(--c-body);
  letter-spacing: 0;
}
.why-section .why-body h3 { margin: 8px 0 2px; font-size: var(--fs-base); }
.why-section .why-body p { color: var(--c-body); }

/* Unify "Miksi Kokkoma" + truck into one reference-style panel */
.why-truck-block { background: linear-gradient(170deg, #fafbfc 0%, #eef1f5 100%); }
.why-truck-block .why-section { background: transparent; padding-bottom: 8px; }
.why-truck-block .truck-section { padding-top: 8px; }

/* ===================== References - template look (rt-*) ===================== */
.rt-grid { display: grid; grid-template-columns: 1fr; gap: 20px; }
@media (min-width: 640px) { .rt-grid { grid-template-columns: 1fr 1fr; } }
@media (min-width: 980px) { .rt-grid { grid-template-columns: repeat(3, 1fr); } }

.rt-card {
  display: flex;
  flex-direction: column;
  background: var(--surface);
  border: 1px solid var(--hairline);
  border-radius: 12px;
  overflow: hidden;
  text-decoration: none;
  color: inherit;
  box-shadow: 0 1px 3px rgba(0, 0, 0, 0.05);
  transition: transform 200ms var(--ease), box-shadow 200ms var(--ease);
}
.rt-card:hover { transform: translateY(-4px); box-shadow: 0 16px 36px rgba(0, 0, 0, 0.1); }
.rt-card-img { position: relative; aspect-ratio: 16 / 10; background: var(--ink); overflow: hidden; }
.rt-card-img img { width: 100%; height: 100%; object-fit: cover; display: block; transition: transform 300ms var(--ease); }
.rt-card:hover .rt-card-img img { transform: scale(1.04); }
.rt-card-img-ph { position: absolute; inset: 0; display: grid; place-items: center; color: var(--c-body); font-size: var(--fs-xs); }
.rt-card-tag {
  position: absolute;
  top: 12px;
  left: 12px;
  background: rgba(255, 255, 255, 0.94);
  color: var(--c-body);
  font-family: var(--sans);
  font-size: var(--fs-xs);
  font-weight: 700;
  letter-spacing: 0.04em;
  padding: 4px 11px;
  border-radius: 14px;
}
.rt-card-body { display: flex; flex-direction: column; flex: 1; padding: 18px 20px 20px; }
.rt-card-title {
  margin-bottom: 10px;
  font: var(--t-h3);
  text-transform: uppercase;
  letter-spacing: var(--ls-heading);
  color: var(--c-body);
}
.rt-card-intro { margin-bottom: 14px; font: var(--t-meta); color: var(--c-body); }
.rt-card-link { margin-top: auto; font: var(--t-meta); font-weight: 600; color: var(--c-accent); }
.rt-card:hover .rt-card-link { color: var(--rust-hover); }

/* Referenssiluettelot - RALA CTA */
.ref-luettelo-cta {
  padding: 28px clamp(20px, 3vw, 36px);
  border: 1px solid var(--hairline);
  border-radius: 14px;
  background: var(--bone);
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  justify-content: space-between;
  gap: 20px 32px;
}
.ref-luettelo-cta-text {
  color: var(--c-body);
  font-size: var(--fs-base);
  line-height: 1.6;
  max-width: 62ch;
  margin: 0;
}
.ref-luettelo-cta-text strong { font-weight: 600; }
.ref-luettelo-cta .btn { flex: 0 0 auto; white-space: nowrap; }

/* Detail (contained card) */
.rt-wrap { max-width: 1040px; }
.rt-back { display: inline-block; margin-bottom: 20px; font-family: var(--sans); font-size: var(--fs-sm); font-weight: 600; color: var(--c-body); }
.rt-back:hover { color: var(--c-accent); }
.rt-detail { background: var(--surface); border: 1px solid var(--hairline); border-radius: 16px; overflow: hidden; }
.rt-hero {
  position: relative;
  min-height: 250px;
  display: flex;
  flex-direction: column;
  justify-content: flex-end;
  padding: 28px;
  background: linear-gradient(135deg, #2b2b2b, var(--ink));
  background-size: cover;
  background-position: center;
}
.rt-hero-tag {
  position: absolute;
  top: 18px;
  left: 18px;
  background: rgba(255, 255, 255, 0.94);
  color: var(--c-body);
  font-family: var(--sans);
  font-size: var(--fs-xs);
  font-weight: 700;
  letter-spacing: 0.04em;
  padding: 6px 14px;
  border-radius: 16px;
}
.rt-hero-title {
  font-family: 'Oswald', var(--sans);
  font-weight: 600;
  text-transform: uppercase;
  font-size: var(--fs-h2r);
  line-height: 1.08;
  letter-spacing: 0.01em;
  color: var(--c-on-dark);
  max-width: 20ch;
}
.rt-meta { display: grid; grid-template-columns: 1fr; border-bottom: 1px solid var(--hairline); }
@media (min-width: 720px) { .rt-meta { grid-template-columns: repeat(4, 1fr); } }
.rt-meta-cell { padding: 16px 22px; border-bottom: 1px solid var(--hairline); }
.rt-meta-cell:last-child { border-bottom: 0; }
@media (min-width: 720px) {
  .rt-meta-cell { border-bottom: 0; border-right: 1px solid var(--hairline); }
  .rt-meta-cell:last-child { border-right: 0; }
}
.rt-meta-label {
  margin-bottom: 5px;
  font: var(--t-eyebrow);
  letter-spacing: var(--ls-eyebrow);
  text-transform: uppercase;
  color: var(--c-body);
}
.rt-meta-value { font: var(--t-meta); color: var(--c-body); }
/* Kohdetiedot: valinnainen faktalista meta-ruudukon alla (vain osalla kohteista) */
.rt-facts {
  display: grid;
  grid-template-columns: 1fr;
  gap: 18px;
  padding: clamp(22px, 3vw, 30px) clamp(24px, 3vw, 34px);
  border-bottom: 1px solid var(--hairline);
  background: var(--bone);
}
@media (min-width: 720px) { .rt-facts { grid-template-columns: repeat(3, 1fr); gap: 28px; } }
.rt-fact dt {
  margin-bottom: 6px;
  font: var(--t-eyebrow);
  letter-spacing: var(--ls-eyebrow);
  text-transform: uppercase;
  color: var(--c-body);
}
.rt-fact dd { font: var(--t-body); color: var(--c-body); margin: 0; }

.rt-body { display: grid; grid-template-columns: 1fr; gap: 28px; padding: clamp(24px, 3vw, 34px); }
@media (min-width: 720px) { .rt-body { grid-template-columns: 1fr 1fr; gap: 28px 36px; } }
/* sama miniotsikkorooli kuin .rt-meta-label - ei omaa kokoa eikä väriä */
.rt-block h3 {
  margin-bottom: 10px;
  font: var(--t-eyebrow);
  letter-spacing: var(--ls-eyebrow);
  text-transform: uppercase;
  color: var(--c-body);
}
.rt-block p { font: var(--t-body); color: var(--c-body); }
.rt-block p + p { margin-top: 10px; }
.rt-muted { color: var(--c-body); font-style: italic; }
.rt-gallery-block { grid-column: 1 / -1; }
.rt-gallery { display: grid; grid-template-columns: repeat(auto-fit, minmax(180px, 1fr)); gap: 12px; margin-top: 6px; }
.rt-gallery img { width: 100%; aspect-ratio: 4 / 3; object-fit: cover; border-radius: 8px; }
.rt-quote {
  grid-column: 1 / -1;
  margin: 4px 0 0;
  background: var(--bone);
  border-left: 4px solid var(--rust);
  border-radius: 0 10px 10px 0;
  padding: 24px 28px;
}
.rt-quote-text {
  margin-bottom: 12px;
  font-family: var(--serif);
  font-style: italic;
  font-size: var(--fs-lead);
  line-height: 1.6;
  color: var(--c-body);
}
.rt-quote-author { font-family: var(--sans); font-size: var(--fs-xs); font-weight: 700; color: var(--c-body); }
.rt-detail-cta { margin-top: 28px; }

/* Brand logo in nav */
.brand { display: inline-flex; align-items: center; }
.brand-logo { height: 40px; width: auto; display: block; }
@media (max-width: 768px) { .brand-logo { height: 34px; } }

/* ===================== Hero concept C - Cinema (full-bleed photo) ===================== */
.hero-cinema {
  position: relative;
  min-height: 88vh;
  display: flex;
  align-items: flex-end;
  overflow: hidden;
}
.hero-cinema-bg { position: absolute; inset: 0; z-index: 0; background-size: cover; background-position: center; }
.hero-cinema-overlay {
  position: absolute;
  inset: 0;
  z-index: 1;
  background:
    linear-gradient(to top, rgba(0, 0, 0, 0.9) 0%, rgba(0, 0, 0, 0.2) 46%, rgba(0, 0, 0, 0.45) 100%),
    linear-gradient(to right, rgba(0, 0, 0, 0.98) 0%, rgba(0, 0, 0, 0.92) 18%, rgba(0, 0, 0, 0.6) 40%, rgba(0, 0, 0, 0) 72%);
}
.hero-cinema-content {
  position: relative;
  z-index: 2;
  width: 100%;
  padding-top: 120px;
  padding-bottom: clamp(48px, 8vh, 104px);
  color: var(--c-on-dark);
}
.hero-cinema-eyebrow {
  margin-bottom: 18px;
  font-family: var(--sans);
  font-size: var(--fs-xs);
  font-weight: 600;
  letter-spacing: 0.16em;
  text-transform: uppercase;
  color: var(--c-on-dark);
}
.hero-cinema-title {
  margin: 0 0 20px;
  max-width: 16ch;
  font-family: 'Oswald', var(--sans);
  font-weight: 600;
  text-transform: uppercase;
  font-size: var(--fs-display);
  line-height: 1.02;
  letter-spacing: 0.01em;
  color: var(--c-on-dark);
  text-shadow: 0 4px 40px rgba(0, 0, 0, 0.45);
}
.hero-cinema-title .accent { color: var(--c-accent); }
.hero-cinema-lead {
  margin: 0 0 32px;
  max-width: 52ch;
  font-family: var(--sans);
  font-size: var(--fs-base);
  line-height: 1.6;
  color: var(--c-on-dark);
}
.hero-cinema-ctas { display: flex; gap: 14px; flex-wrap: wrap; }
.hero-cinema-ctas .btn-pill-ghost { color: var(--c-on-dark); border-color: rgba(255,255,255,0.55); }
.hero-cinema-ctas .btn-pill-ghost:hover { background: rgba(255,255,255,0.12); border-color: #fff; color: var(--c-on-dark); }
.hero-cinema-stats { margin-top: 38px; display: flex; gap: clamp(28px, 4vw, 60px); flex-wrap: wrap; }
.hero-cinema-stats .hero-stat .num {
  font-family: 'Oswald', var(--sans);
  font-weight: 600;
  font-size: var(--fs-h2r);
  line-height: 1;
  color: var(--c-on-dark);
}
.hero-cinema-stats .hero-stat .label { margin-top: 6px; font-family: var(--sans); font-size: var(--fs-xs); letter-spacing: 0.04em; color: var(--c-on-dark); }
@media (max-width: 768px) { .hero-cinema { min-height: 78vh; } }

/* ===================== Injektointi service page (proto v3) ===================== */
.inj .container { max-width: 1040px; }
.inj-hero { padding: clamp(48px, 7vw, 76px) 0 clamp(36px, 5vw, 56px); }
.inj-eyebrow {
  display: flex;
  align-items: center;
  gap: 12px;
  margin-bottom: 18px;
  font-size: var(--fs-xs);
  font-weight: 700;
  letter-spacing: 0.18em;
  text-transform: uppercase;
  color: var(--c-accent);
}
.inj-eyebrow::before { content: ""; display: block; width: 28px; height: 1px; background: var(--rust); }
.inj-title {
  margin-bottom: 24px;
  font-family: 'Oswald', var(--sans);
  font-weight: 700;
  text-transform: uppercase;
  font-size: var(--fs-h1r);
  line-height: 1.08;
  letter-spacing: -0.5px;
  color: var(--c-body);
}
.inj-title .accent { color: var(--c-accent); }
.inj-hero-text { max-width: 720px; margin-bottom: 32px; }
.inj-hero-text p { margin-bottom: 14px; font-size: var(--fs-md); line-height: 1.8; color: var(--c-body); }
.inj-cta-row { display: flex; gap: 14px; flex-wrap: wrap; }
.inj-btn-dark,
.inj-btn-outline,
.inj-btn-light {
  display: inline-flex;
  align-items: center;
  gap: 10px;
  padding: 16px 28px;
  border-radius: 30px;
  font-size: var(--fs-sm);
  font-weight: 700;
  text-decoration: none;
  transition: opacity 200ms var(--ease), background 200ms var(--ease), color 200ms var(--ease);
}
.inj-btn-dark { background: var(--ink); color: var(--c-on-dark); }
.inj-btn-dark:hover { opacity: 0.88; }
.inj-btn-outline { background: transparent; border: 1.5px solid var(--ink); color: var(--c-body); }
.inj-btn-outline:hover { background: var(--ink); color: var(--c-on-dark); }
.inj-btn-light { background: #fff; color: var(--c-body); }
.inj-btn-light:hover { opacity: 0.9; }

.inj-section { padding-bottom: clamp(40px, 6vw, 56px); }
.inj-two-col {
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: 32px;
  padding-top: 32px;
  border-top: 1px solid var(--hairline);
}
/* h2 markupissa otsikkohierarkian vuoksi; ulkoasu on tarkoituksella
   pienen väliotsikon näköinen eikä osion pääotsikko. */
.inj-col h2 {
  margin-bottom: 14px;
  font-family: var(--sans);
  font-size: var(--fs-xs);
  font-weight: 700;
  letter-spacing: 0.1em;
  text-transform: uppercase;
  color: var(--c-body);
}
.inj-col ul { list-style: none; padding: 0; margin: 0; }
.inj-col li { padding: 10px 0; border-bottom: 1px solid var(--hairline); font-size: var(--fs-sm); color: var(--c-body); }
.inj-col li:last-child { border-bottom: none; }

/* --- Menetelmat-kaista valokuvataustalla --------------------------------
   Sama koko leveyden kaista kuin .eco-band: osio itse on reunasta reunaan
   ja sisalto pysyy .containerissa. Taustakuva tulee sivulta inline-tyylina
   (slug-kohtainen), joten tassa maaritellaan vain rajaus ja peite.
   Peite on yksi 90 asteen liuku: keskella se on sen verran lapinakyva etta
   kuva nakyy mutta valkoinen teksti pysyy luettavana, ja kumpaakin reunaa
   kohti se syvenee lahes umpinaiseksi — kuva haipyy tummansiniseen. */
.inj-band {
  position: relative;
  /* Edellisen osion alareunus on vain 8 px, koska vaalea versio tasta
     osiosta toi oman ylapehmusteensa. Kaistalla pehmuste on kuvan sisalla,
     joten valjyys otetaan marginaalista — muuten kaista alkaisi kiinni
     ylapuolisista napeista. */
  margin-top: clamp(40px, 5vw, 64px);
  padding: clamp(40px, 5vw, 60px) 0;
  /* Rajaus hieman ylapuolelle keskilinjaa: silloin kaistalle osuu kaarteen
     betonipinta eika pelkka nurmi. */
  background-color: #0f2236;
  background-position: center 40%;
  background-size: cover;
  background-repeat: no-repeat;
  color: var(--c-on-dark);
  overflow: hidden;
}
.inj-band-overlay {
  position: absolute;
  inset: 0;
  background: linear-gradient(
    90deg,
    rgba(15, 34, 54, 0.98) 0%,
    rgba(15, 34, 54, 0.82) 16%,
    rgba(15, 34, 54, 0.62) 50%,
    rgba(15, 34, 54, 0.82) 84%,
    rgba(15, 34, 54, 0.98) 100%
  );
  pointer-events: none;
}
.inj-band > .container { position: relative; z-index: 1; }
/* Kaistan oma ylareuna erottaa osion jo itsessaan, joten vaalean taustan
   erotinviivaa ei tarvita — muuten se piirtyisi turhaan kaistan sisalle. */
.inj-band .inj-two-col { border-top: none; padding-top: 0; }
.inj-band .inj-col h2 { color: var(--c-on-dark); }
.inj-band .inj-col li {
  color: rgba(255, 255, 255, 0.9);
  border-bottom-color: rgba(255, 255, 255, 0.16);
}
/* Kapealla naytolla sarakkeet menevat allekkain keskelle, jolloin sivuille
   haipyva liuku peittaisi tekstin. Tasainen tummennus tilalle. */
@media (max-width: 900px) {
  .inj-band-overlay { background: rgba(15, 34, 54, 0.88); }
}

.inj-section2 { padding: clamp(36px, 5vw, 52px) 0; border-top: 1px solid var(--hairline); }
.inj-section-eyebrow {
  margin-bottom: 10px;
  font-size: var(--fs-xs);
  font-weight: 700;
  letter-spacing: 0.18em;
  text-transform: uppercase;
  color: var(--c-accent);
}
.inj-section-title {
  margin-bottom: 24px;
  font-family: 'Oswald', var(--sans);
  font-size: var(--fs-h3r);
  font-weight: 600;
  text-transform: uppercase;
  letter-spacing: -0.5px;
  color: var(--c-body);
}
.inj-b-grid { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 14px; }
.inj-b-card { padding: 22px; background: #faf9f6; border: 1px solid var(--hairline); border-radius: 14px; }
.inj-b-card-title {
  margin-bottom: 10px;
  font-family: 'Oswald', var(--sans);
  font-size: var(--fs-h3);
  font-weight: 600;
  letter-spacing: 0;
  color: var(--c-body);
}
.inj-b-card-text { margin-bottom: 14px; font-size: var(--fs-sm); color: var(--c-body); line-height: 1.7; }
.inj-b-card-example {
  margin: 0;
  padding-top: 10px;
  border-top: 1px dashed var(--hairline);
  font-size: var(--fs-xs);
  color: var(--c-body);
  line-height: 1.6;
}
.inj-b-card-example b { color: var(--c-body); }

/* ---------- Alapalvelut: avattavat osiot (natiivi <details>) ---------- */
/* ---------- Tyolajit juoksevana tekstina ----------
   Haitari korvattiin tavallisella tekstilla: sisalto on kokonaisia
   kappaleita eika sita piiloteta klikkauksen taakse. Osioita ei eroteta
   viivoilla eika laatikoilla vaan hyvin vaimealla taustasavyn vaihtelulla,
   jolloin sivu lukeutuu yhtena dokumenttina mutta osiot erottuvat. */
.svc-prose { margin-top: 28px; }
.svc-prose-item {
  /* Ankkurilinkista saavuttaessa otsikko ei jaa sticky-navin alle. */
  scroll-margin-top: 96px;
  padding: clamp(26px, 3.2vw, 40px) clamp(20px, 2.4vw, 32px);
}
/* Joka toinen osio hitusen sivun taustaa (#F9F9F9) tummempi ja lampimampi.
   Ero on tarkoituksella juuri ja juuri havaittava: se rytmittaa listan
   ilman etta osiot alkavat nayttaa korteilta. Ei pyoristysta, jotta
   perakkaiset kaistat liittyvat toisiinsa yhtenaisena pintana.
   Savy alkaa ENSIMMAISESTA osiosta (odd, ei even): silloin listan alku
   erottuu heti osion otsikon alta eika ensimmainen tyolaji sulaudu
   ylapuoliseen valkoiseen. */
.svc-prose-item:nth-child(odd) { background: #F2F1ED; }

.svc-prose-title {
  margin: 0 0 10px;
  /* Poikkeus otsikkokonventioon: tyolajien nimet ovat pitkia suomalaisia
     yhdyssanoja ja niita on listassa jopa 12, joten ne ladotaan Interilla
     ja pienaakkosin. Oswald versaaleina tekisi listasta raskaan. */
  font-family: var(--sans);
  /* Askel isompi kuin osion sisaiset valiotsikot (.svc-prose-heading):
     kun aksenttipallura on poistettu, koko on ainoa asia joka erottaa
     tyolajin nimen sen alta alkavista valiotsikoista. */
  font-size: var(--fs-xl);
  font-weight: 700;
  line-height: 1.3;
  letter-spacing: -0.01em;
  text-transform: none;
  color: var(--c-body);
}
.svc-prose-lead {
  margin: 0 0 20px;
  max-width: 72ch;
  font-size: var(--fs-base);
  line-height: 1.7;
  color: var(--slate);
}
.svc-prose-block { max-width: 72ch; }
.svc-prose-block + .svc-prose-block { margin-top: 24px; }
.svc-prose-heading {
  margin: 0 0 8px;
  font-family: var(--sans);
  font-size: var(--fs-h3);
  font-weight: 600;
  letter-spacing: -0.01em;
  text-transform: none;
  color: var(--c-body);
}
.svc-prose-block p {
  margin: 0 0 14px;
  font-size: var(--fs-base);
  line-height: 1.75;
  color: var(--c-body);
}
.svc-prose-block p:last-child { margin-bottom: 0; }
.svc-prose-example {
  margin: 22px 0 0;
  padding-top: 12px;
  border-top: 1px dashed var(--hairline);
  max-width: 72ch;
  font-size: var(--fs-sm);
  line-height: 1.6;
  color: var(--c-body);
}
/* ---------- Kohteet: tummennettu kuvakaista ----------
   Sama käsittely kuin etusivun .eco-band: valokuva taustalla, tumma
   liukuväri päällä ja valkoinen teksti. Taustakuva tulee inline-tyylinä
   palvelukohtaisesti, joten se ei ole tässä. */
.apps-band {
  position: relative;
  /* Epäsymmetrinen pystypehmuste: teksti asettuu kaistan alalaitaan,
     ei keskelle. Alapehmuste jää silti niin isoksi, ettei teksti
     törmää kuvan reunaan. */
  padding: clamp(96px, 14vw, 200px) 0 clamp(40px, 5vw, 64px);
  background-color: #16202e;
  background-position: center center;
  background-size: cover;
  background-repeat: no-repeat;
  color: var(--c-on-dark);
  overflow: hidden;
}
/* Ilman taustakuvaa tämä ei ole kaista vaan tavallinen osio: sama vaalea
   pohja kuin muulla sivulla, ja tekstit siksi tummina. Iso yläpehmuste oli
   olemassa vain jotta valokuvaa näkyisi tekstin yläpuolella, joten se
   tasataan samalla molempiin päihin. */
.apps-band--flat {
  padding: clamp(48px, 6vw, 80px) 0;
  background-color: var(--bone);
  color: var(--c-body);
}

.apps-band-overlay {
  position: absolute;
  inset: 0;
  background: linear-gradient(
    100deg,
    rgba(15, 34, 54, 0.92) 0%,
    rgba(15, 34, 54, 0.72) 55%,
    rgba(15, 34, 54, 0.55) 100%
  );
}
/* Keskitetyn 1240px-containerin sijaan teksti aloittaa läheltä kaistan
   vasenta reunaa. Sisennys on silti reilu, joten teksti pysyy kuvan
   sisällä eikä liimaudu reunaan. Rivinpituutta rajaa .apps-band-inner. */
.apps-band > .container {
  position: relative;
  z-index: 1;
  max-width: none;
  padding-inline: clamp(20px, 5vw, 80px);
}
.apps-band-inner { max-width: 72ch; }
.apps-band h2 {
  margin: 0;
  /* Puolivali --fs-h3r:n ja --fs-h2r:n valilta. Ei omaa tokenia, koska
     otsikkoramppeja on tarkoituksella vain nelja: h2r teki tasta osiosta
     ylemman tasoisen kuin se on, h3r taas sulautti sen tyolajiosion
     otsikkoon. Sama kolmen arvon rakenne kuin rampeilla, jotta se
     skaalautuu samaa tahtia. */
  font-size: clamp(1.5rem, 3.2vw, 2.25rem);
  line-height: 1.1;
  color: var(--c-on-dark);
}
.apps-band-rule {
  display: block;
  width: 200px;
  max-width: 100%;
  height: 1px;
  margin: 24px 0;
  background: rgba(255, 255, 255, 0.35);
}
.apps-band p {
  margin: 0 0 16px;
  font-size: var(--fs-md);
  line-height: 1.75;
  color: var(--c-on-dark);
}
.apps-band p:last-child { margin-bottom: 0; }

/* Kuvattoman version tekstivärit. Nämä ovat tarkoituksella vasta
   .apps-band h2/p/-rule -sääntöjen JÄLKEEN: spesifisyys on sama, joten
   pelkästään aiemmin määriteltyinä valkoiset värit voittaisivat ne. */
.apps-band--flat h2,
.apps-band--flat p { color: var(--c-body); }
.apps-band--flat .apps-band-rule { background: var(--hairline); }

.inj-cta-band { padding: clamp(32px, 5vw, 44px) 0; background: var(--ink); color: var(--c-on-dark); }
.inj-cta-band-inner { display: flex; justify-content: space-between; align-items: center; flex-wrap: wrap; gap: 16px; }
.inj-cta-band-text {
  font-family: 'Oswald', var(--sans);
  font-size: var(--fs-lead);
  font-weight: 600;
  text-transform: uppercase;
  letter-spacing: -0.3px;
  line-height: 1.2;
}
.inj-cta-band-text .accent { color: var(--c-accent); }

@media (max-width: 760px) {
  .inj-two-col { grid-template-columns: 1fr; gap: 24px; }
  .inj-b-grid { grid-template-columns: 1fr; }
  .inj-cta-band-inner { flex-direction: column; align-items: flex-start; }
}

/* ============================================================
   Töihin meille - kolme vaihtoehtoa (variantti-valitsin)
   ============================================================ */

/* Näytä/piilota: oletuksena variantti A */
.careers-variant { display: none; }
body[data-careers="a"] .careers-variant[data-careers="a"],
body[data-careers="b"] .careers-variant[data-careers="b"],
body[data-careers="c"] .careers-variant[data-careers="c"] { display: block; }
body:not([data-careers]) .careers-variant[data-careers="a"] { display: block; }

/* Picker sijoitettu vasemmalle, ettei mene services-pickerin päälle */
.careers-picker { left: 20px; right: auto; transform: none; }
@media (max-width: 640px) {
  .careers-picker { left: 50%; right: auto; transform: translateX(-50%); bottom: 12px; }
}

/* ---------- Variantti B - kortit + CTA-band ---------- */
.careers-b-header { max-width: 60ch; margin-bottom: 40px; }
.careers-b-header h2 { margin-top: 16px; }

.careers-cards {
  display: grid;
  grid-template-columns: 1fr;
  gap: 16px;
}
@media (min-width: 640px)  { .careers-cards { grid-template-columns: 1fr 1fr; } }
@media (min-width: 1024px) { .careers-cards { grid-template-columns: 1fr 1fr 1fr; } }

.careers-card {
  border: 1px solid var(--hairline);
  background: var(--surface, #fff);
  border-radius: 12px;
  padding: 28px 24px;
  display: flex;
  flex-direction: column;
  gap: 14px;
  transition: border-color 200ms var(--ease), transform 200ms var(--ease);
}
.careers-card:hover { border-color: var(--ink); transform: translateY(-3px); }
.careers-card-num {
  font-family: var(--serif);
  font-weight: 500;
  font-size: var(--fs-xl);
  color: var(--c-accent);
  line-height: 1;
}
.careers-card p { font-size: var(--fs-md); line-height: 1.55; color: var(--c-body); }

.careers-roles-row {
  display: grid;
  grid-template-columns: 1fr;
  gap: 24px;
  padding-top: 40px;
  border-top: 1px solid var(--hairline);
}
@media (min-width: 768px) { .careers-roles-row { grid-template-columns: 1fr 2fr; gap: 48px; align-items: start; } }
.careers-roles-title { font-family: var(--serif); font-weight: 500; font-size: var(--fs-xl); margin-top: 12px; }

.careers-chips { list-style: none; margin: 0; padding: 0; display: flex; flex-wrap: wrap; gap: 10px; }
.careers-chip {
  font-family: var(--sans);
  font-size: var(--fs-sm);
  font-weight: 500;
  color: var(--c-body);
  background: var(--bone);
  border: 1px solid var(--hairline);
  border-radius: 999px;
  padding: 10px 18px;
}

.careers-cta-band { background: var(--ink); color: var(--c-on-dark); padding: 72px 0; }
.careers-cta-inner {
  display: grid;
  grid-template-columns: 1fr;
  gap: 28px;
  align-items: center;
}
@media (min-width: 768px) { .careers-cta-inner { grid-template-columns: 1.4fr 1fr; gap: 48px; } }
.careers-cta-band h2 { color: var(--c-on-dark); }
.careers-cta-band p { color: var(--c-on-dark); margin-top: 12px; max-width: 48ch; }
.careers-cta-actions { display: flex; flex-direction: column; gap: 12px; align-items: flex-start; }
@media (min-width: 768px) { .careers-cta-actions { align-items: flex-end; } }
.careers-cta-phone { font-family: var(--serif); font-size: var(--fs-lead); color: var(--c-on-dark); }
.careers-cta-phone:hover { color: var(--c-accent); }

/* ---------- Variantti C - tumma split ---------- */
.careers-split { background: var(--ink); color: var(--c-on-dark); padding: 96px 0; }
.careers-split-grid {
  display: grid;
  grid-template-columns: 1fr;
  gap: 56px;
  align-items: start;
}
@media (min-width: 900px) { .careers-split-grid { grid-template-columns: 1fr 1fr; gap: 80px; } }

.careers-split-title {
  font-family: var(--serif);
  font-weight: 500;
  font-size: var(--fs-h2r);
  line-height: 1.08;
  letter-spacing: -0.02em;
  color: var(--c-on-dark);
  margin-top: 16px;
}
.careers-split-lead { color: var(--c-on-dark); margin-top: 20px; max-width: 46ch; line-height: 1.65; }
.careers-split-actions { display: flex; flex-wrap: wrap; gap: 14px; margin-top: 32px; }
.careers-split-note { color: var(--c-on-dark); font-size: var(--fs-sm); margin-top: 24px; max-width: 46ch; }

.careers-split-block + .careers-split-block { margin-top: 40px; }
.careers-split-label {
  display: block;
  font-family: var(--sans);
  font-size: var(--fs-xs);
  font-weight: 500;
  letter-spacing: 0.14em;
  text-transform: uppercase;
  color: var(--c-on-dark);
  margin-bottom: 16px;
}
.careers-numbered {
  list-style: none;
  margin: 0;
  padding: 0;
  counter-reset: careers;
}
.careers-numbered li {
  counter-increment: careers;
  position: relative;
  padding: 14px 0 14px 44px;
  border-top: 1px solid rgba(245,242,236,0.14);
  color: var(--c-on-dark);
  line-height: 1.5;
}
.careers-numbered li::before {
  content: counter(careers, decimal-leading-zero);
  position: absolute;
  left: 0;
  top: 14px;
  font-family: var(--serif);
  color: var(--c-accent);
  font-size: var(--fs-sm);
}
.careers-chips-dark .careers-chip {
  background: rgba(245,242,236,0.06);
  border-color: rgba(245,242,236,0.18);
  color: var(--c-on-dark);
}

/* Töihin meille - A-vaihtoehdon tiimikuva (koko kuva näkyvissä, ei rajausta) */
.careers-photo {
  display: block;
  width: 100%;
  height: auto;
  border-radius: 12px;
}

/* ============================================================
   Töihin meille - scroll-reveal + projektijohtaja-nostot
   ============================================================ */

/* Kevyt scroll-reveal - puhdas CSS (animation-timeline: view()), ei JS-riippuvuutta.
   Selaimissa jotka eivät tue tätä (@supports epäonnistuu) sisältö näkyy staattisena
   eikä koskaan jää piiloon. Reduced-motion huomioitu. */
@keyframes reveal-in {
  from { opacity: 0; transform: translateY(20px); }
  to   { opacity: 1; transform: none; }
}
@keyframes reveal-in-photo {
  from { opacity: 0; transform: translateY(20px) scale(1.015); }
  to   { opacity: 1; transform: none; }
}

@media (prefers-reduced-motion: no-preference) {
  @supports (animation-timeline: view()) {
    [data-reveal] {
      animation: reveal-in linear both;
      animation-timeline: view();
      animation-range: entry 5% cover 22%;
      will-change: opacity, transform;
    }
    .careers-photo[data-reveal] {
      animation-name: reveal-in-photo;
      animation-range: entry 0% cover 25%;
    }
  }
}

/* ---------- Featured-paneeli (variantti A) ---------- */
.careers-featured {
  border: 1px solid var(--hairline);
  border-left: 4px solid var(--rust);
  background: var(--surface, #fff);
  border-radius: 0 14px 14px 0;
  padding: 40px clamp(24px, 4vw, 48px);
}
.careers-featured-tag {
  display: inline-block;
  font-family: var(--sans);
  font-size: var(--fs-xs);
  font-weight: 600;
  letter-spacing: 0.14em;
  text-transform: uppercase;
  color: var(--c-on-dark);
  background: var(--rust);
  padding: 5px 14px;
  border-radius: 999px;
}
.careers-featured-title {
  font-family: var(--serif);
  font-weight: 500;
  font-size: var(--fs-h2r);
  line-height: 1.1;
  letter-spacing: -0.015em;
  margin: 18px 0 14px;
}
.careers-featured-desc { color: var(--c-body); line-height: 1.65; max-width: 62ch; }
.careers-featured-points {
  list-style: none;
  margin: 24px 0 0;
  padding: 0;
  display: grid;
  grid-template-columns: 1fr;
  gap: 10px;
}
@media (min-width: 700px) { .careers-featured-points { grid-template-columns: 1fr 1fr; gap: 10px 32px; } }
.careers-featured-points li {
  position: relative;
  padding-left: 26px;
  font-size: var(--fs-sm);
  color: var(--c-body);
  line-height: 1.5;
}
.careers-featured-points li::before {
  content: '';
  position: absolute;
  left: 0; top: 8px;
  width: 8px; height: 8px;
  border-radius: 50%;
  background: var(--rust);
}
.careers-featured-actions {
  margin-top: 32px;
  display: flex;
  gap: 16px;
  flex-wrap: wrap;
}

/* ---------- Feature-kuvasplit (variantti B) ---------- */
.careers-feature {
  display: grid;
  grid-template-columns: 1fr;
  gap: 40px;
  align-items: center;
}
@media (min-width: 900px) { .careers-feature { grid-template-columns: 1.05fr 0.95fr; gap: 56px; } }
.careers-feature-text .accent { color: var(--c-accent); }
.careers-feature-title {
  font-family: var(--serif);
  font-weight: 500;
  font-size: var(--fs-h2r);
  line-height: 1.08;
  letter-spacing: -0.015em;
  margin: 16px 0 16px;
}
.careers-feature-text > p { color: var(--c-body); line-height: 1.65; max-width: 54ch; }
.careers-feature-list {
  list-style: none;
  margin: 24px 0 0;
  padding: 0;
  display: flex;
  flex-direction: column;
  gap: 12px;
}
.careers-feature-list li {
  display: flex;
  align-items: flex-start;
  gap: 12px;
  font-size: var(--fs-sm);
  line-height: 1.5;
  color: var(--c-body);
}
.careers-feature-list svg { color: var(--c-accent); flex-shrink: 0; margin-top: 3px; }
.careers-feature-actions { margin-top: 32px; display: flex; gap: 16px; flex-wrap: wrap; }
.careers-feature-media img {
  width: 100%;
  height: 100%;
  min-height: 280px;
  max-height: 520px;
  object-fit: cover;
  border-radius: 14px;
  display: block;
}

/* ============================================================
   Etusivu - intro/kuvaus + hero-stats-huomautus
   ============================================================ */

/* Selite pitää "1000+ projektia" -luvun täsmällisenä, joten se jää.
   Ei omaa fonttikokoa: käyttää meta-roolia kuten muutkin pikkutekstit. */
.hero-stats-note {
  margin-top: 16px;
  font: var(--t-meta);
  color: var(--c-body);
}

.home-intro { border-bottom: 1px solid var(--hairline); }
/* Sama kokorooli kuin osioiden h2-otsikoilla (esim. "Kokonaisratkaisut
   yhdeltä toteuttajalta."), jotta otsikkotasot vastaavat toisiaan. */
.home-intro-lead {
  font-family: 'Oswald', var(--sans);
  font-weight: 600;
  font-size: var(--fs-h2r);
  line-height: 1.1;
  letter-spacing: 0.015em;
  text-transform: uppercase;
  color: var(--c-body);
  max-width: 24ch;
  margin-bottom: 24px;
}
.home-intro-text {
  font-family: var(--sans);
  font-size: var(--fs-lead);
  line-height: 1.65;
  color: var(--c-body);
  max-width: 74ch;
}
/* Text column on the left, supporting photo on the right */
/* Kuva on pystymallinen (1080×1920). Kehystä ei pakoteta vaakasuhteeseen,
   vaan kuva saa oman muotonsa - korkeus katotaan, jottei osiosta tule
   kohtuuttoman korkea. */
.home-intro-media {
  margin-top: 32px;
  display: flex;
  justify-content: center;
}
.home-intro-media img {
  width: auto;
  height: auto;
  max-width: 100%;
  max-height: clamp(360px, 48vw, 620px);
  border-radius: 20px;
  display: block;
}
@media (min-width: 900px) {
  .home-intro .container {
    display: grid;
    grid-template-columns: 1.1fr 1fr;
    gap: 64px;
    align-items: center;
  }
  .home-intro-media { margin-top: 0; }
}

/* ============================================================
   Yritys-sivu
   ============================================================ */

.yritys-header { max-width: 60ch; margin-bottom: 48px; }
.yritys-header h2 { margin-top: 16px; }

/* ---------- Historia / virstanpylväät ---------- */
.yritys-milestones {
  display: grid;
  grid-template-columns: 1fr;
  gap: 32px;
}
@media (min-width: 768px) { .yritys-milestones { grid-template-columns: 1fr 1.4fr; gap: 56px; } }

.yritys-milestone {
  border-top: 2px solid var(--ink);
  padding-top: 24px;
}
.yritys-milestone-year {
  display: block;
  font-family: var(--serif);
  font-weight: 500;
  font-size: var(--fs-h1r);
  line-height: 1;
  letter-spacing: -0.02em;
  color: var(--c-accent);
  margin-bottom: 14px;
}
.yritys-milestone h3 {
  font-family: var(--sans);
  font-weight: 600;
  font-size: var(--fs-base);
  margin-bottom: 10px;
}
.yritys-milestone p { color: var(--c-body); line-height: 1.65; }

/* ---------- Kuva + teksti -lohko ---------- */
.yritys-feature {
  display: grid;
  grid-template-columns: 1fr;
  gap: 40px;
  align-items: center;
}
@media (min-width: 900px) {
  .yritys-feature { grid-template-columns: 1fr 1fr; gap: 64px; }
  .yritys-feature-reverse .yritys-feature-text { order: 2; }
  .yritys-feature-reverse .yritys-feature-media { order: 1; }
}
.yritys-feature-text .accent { color: var(--c-accent); }
.yritys-feature-title {
  font-family: var(--serif);
  font-weight: 500;
  font-size: var(--fs-h2r);
  line-height: 1.1;
  letter-spacing: -0.015em;
  margin: 16px 0 16px;
}
.yritys-feature-text > p { color: var(--c-body); line-height: 1.65; max-width: 52ch; }
.yritys-feature-media img {
  width: 100%;
  height: 100%;
  max-height: 480px;
  object-fit: cover;
  border-radius: 14px;
  display: block;
}

/* ---------- Osaamis-chipit ---------- */
.yritys-chips {
  list-style: none;
  margin: 28px 0 0;
  padding: 0;
  display: flex;
  flex-wrap: wrap;
  gap: 10px;
}
.yritys-chip {
  font-family: var(--sans);
  font-size: var(--fs-sm);
  font-weight: 500;
  color: var(--c-body);
  background: var(--bone);
  border: 1px solid var(--hairline);
  border-radius: 999px;
  padding: 9px 18px;
}

/* ---------- Perusarvot ---------- */
.yritys-values {
  display: grid;
  grid-template-columns: 1fr;
  gap: 24px;
}
@media (min-width: 768px)  { .yritys-values { grid-template-columns: 1fr 1fr; } }
@media (min-width: 1024px) { .yritys-values { grid-template-columns: repeat(3, 1fr); } }

.yritys-value {
  border: 1px solid var(--hairline);
  background: var(--surface, #fff);
  border-radius: 12px;
  padding: 32px 28px;
  display: flex;
  flex-direction: column;
  gap: 12px;
  transition: border-color 200ms var(--ease), transform 200ms var(--ease);
}
.yritys-value:hover { border-color: var(--ink); transform: translateY(-3px); }
.yritys-value-num {
  font-family: var(--serif);
  font-weight: 500;
  font-size: var(--fs-xl);
  line-height: 1;
  color: var(--c-accent);
}
.yritys-value h3 {
  font-family: var(--sans);
  font-weight: 600;
  font-size: var(--fs-base);
  line-height: 1.3;
}
.yritys-value p { color: var(--c-body); font-size: var(--fs-sm); line-height: 1.6; }

/* ---------- Vastuullisuus ---------- */
.yritys-responsibility {
  background: var(--ink);
  color: var(--c-on-dark);
}
.yritys-responsibility .eyebrow { color: var(--c-on-dark); }
.yritys-responsibility-title {
  font-family: var(--serif);
  font-weight: 500;
  font-size: var(--fs-h2r);
  line-height: 1.12;
  letter-spacing: -0.015em;
  color: var(--c-on-dark);
  max-width: 22ch;
  margin-top: 16px;
}
.yritys-responsibility-text {
  color: var(--c-on-dark);
  margin-top: 20px;
  max-width: 56ch;
  line-height: 1.65;
}

/* ---------- Yritys: kuvat isossa roolissa ---------- */

/* Hero - valokuva taustalla, tumma gradientti tekstin luettavuudelle */
.yritys-hero {
  position: relative;
  background: var(--ink) url('../images/yritys-tyomaa.jpg') center 35% / cover no-repeat;
  border-bottom: 0;
  padding: 120px 0 96px;
  overflow: hidden;
}
@media (min-width: 768px) {
  .yritys-hero { padding: 168px 0 140px; min-height: 62vh; display: flex; align-items: center; }
}
.yritys-hero::before {
  content: '';
  position: absolute;
  inset: 0;
  background: linear-gradient(
    100deg,
    rgba(18, 20, 24, 0.90) 0%,
    rgba(18, 20, 24, 0.74) 42%,
    rgba(18, 20, 24, 0.40) 72%,
    rgba(18, 20, 24, 0.22) 100%
  );
  pointer-events: none;
}
.yritys-hero > .container { position: relative; z-index: 2; width: 100%; }
.yritys-hero .eyebrow { color: var(--c-on-dark); }
.yritys-hero h1 { color: var(--c-on-dark); }
.yritys-hero .lead { color: var(--c-on-dark); }

/* Otsikkolohkon leipäteksti */
.yritys-header-text {
  margin-top: 20px;
  color: var(--c-body);
  line-height: 1.65;
  max-width: 58ch;
}

/* Full-bleed kuvakaista - rikkoo containerin reunasta reunaan */
.yritys-fullbleed {
  position: relative;
  width: 100vw;
  margin: 56px 0 0;
  margin-left: calc(50% - 50vw);
  overflow: hidden;
}
.yritys-fullbleed img {
  display: block;
  width: 100%;
  aspect-ratio: 16 / 9;
  object-fit: cover;
  object-position: center;
}
@media (min-width: 900px) { .yritys-fullbleed img { aspect-ratio: 2.4 / 1; } }
.yritys-fullbleed figcaption {
  font-family: var(--sans);
  font-size: var(--fs-xs);
  color: var(--c-body);
  letter-spacing: 0.01em;
  padding: 14px var(--gutter) 0;
  max-width: var(--container);
  margin: 0 auto;
}
@media (min-width: 768px) { .yritys-fullbleed figcaption { padding-left: 40px; padding-right: 40px; } }

/* ============================================================
   Töihin meille - avoimet työpaikat
   ============================================================ */

.careers-why-text {
  color: var(--c-body);
  line-height: 1.7;
  font-size: var(--fs-base);
  max-width: 60ch;
}

.careers-jobs-header { max-width: 60ch; margin-bottom: 40px; }
.careers-jobs-header h2 { margin-top: 16px; }

.careers-jobs {
  display: grid;
  grid-template-columns: 1fr;
  gap: 20px;
}

.careers-job {
  border: 1px solid var(--hairline);
  border-left: 4px solid var(--rust);
  background: var(--surface, #fff);
  border-radius: 0 12px 12px 0;
  padding: 32px clamp(24px, 3.5vw, 40px);
  display: flex;
  flex-direction: column;
  gap: 16px;
  transition: border-color 200ms var(--ease), transform 200ms var(--ease);
}
.careers-job:hover { transform: translateY(-2px); }

.careers-job-head {
  display: flex;
  flex-wrap: wrap;
  align-items: baseline;
  justify-content: space-between;
  gap: 12px;
}
.careers-job-title {
  font-family: var(--serif);
  font-weight: 500;
  font-size: var(--fs-h3r);
  line-height: 1.15;
  letter-spacing: -0.01em;
  color: var(--c-body);
}
.careers-job-period {
  font-family: var(--sans);
  font-size: var(--fs-xs);
  font-weight: 500;
  letter-spacing: 0.04em;
  color: var(--c-body);
  background: var(--bone);
  border: 1px solid var(--hairline);
  border-radius: 999px;
  padding: 6px 14px;
  white-space: nowrap;
}
.careers-job-desc {
  color: var(--c-body);
  line-height: 1.65;
  max-width: 70ch;
  white-space: pre-line;
}

.careers-job-how {
  border-top: 1px solid var(--hairline);
  padding-top: 16px;
}
.careers-job-label {
  display: block;
  font-family: var(--sans);
  font-size: var(--fs-xs);
  font-weight: 600;
  letter-spacing: 0.14em;
  text-transform: uppercase;
  color: var(--c-body);
  margin-bottom: 8px;
}
.careers-job-how p {
  color: var(--c-body);
  line-height: 1.6;
  max-width: 70ch;
  white-space: pre-line;
}

.careers-job-footer {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: 16px;
  margin-top: 4px;
}
.careers-job-expiry {
  font-family: var(--sans);
  font-size: var(--fs-sm);
  color: var(--c-body);
}

/* Tyhjä tila - ei avoimia paikkoja */
.careers-jobs-empty {
  border: 1px dashed var(--hairline);
  border-radius: 12px;
  padding: 40px clamp(24px, 4vw, 48px);
  background: var(--bone);
}
.careers-jobs-empty p {
  color: var(--c-body);
  font-size: var(--fs-base);
  line-height: 1.65;
  max-width: 60ch;
}

/* ============================================================
   Töihin meille - AURA-tyylinen hero + tilastot + intro
   ============================================================ */

/* ---------- Hero: täysleveä kuva + lasikortti ---------- */
.careers-hero {
  position: relative;
  overflow: hidden;
  background: #0e1726;
  min-height: min(86vh, 760px);
  display: flex;
}
.careers-hero-media { position: absolute; inset: 0; z-index: 0; }
.careers-hero-media img { width: 100%; height: 100%; object-fit: cover; object-position: center 32%; }
.careers-hero-media::after {
  content: '';
  position: absolute; inset: 0;
  /* Vaakahaivytys kantaa nyt tekstin luettavuuden yksin, koska lasikortti
     on poistettu: vasen reuna on lahes umpeen tummennettu ja aukeaa vasta
     kuvan puolivalissa, jotta oikean laidan tyontekijat jaavat kirkkaiksi.
     Pystyhaivytys on kevennetty (alareuna 0.82 -> 0.55), muuten kuva
     tummuisi kahteen kertaan nyt kun vaakakerros on painavampi. */
  background:
    linear-gradient(184deg, rgba(14,23,38,0.52) 0%, rgba(14,23,38,0.14) 30%, rgba(14,23,38,0.22) 58%, rgba(14,23,38,0.55) 100%),
    linear-gradient(90deg, rgba(14,23,38,0.92) 0%, rgba(14,23,38,0.80) 20%, rgba(14,23,38,0.52) 42%, rgba(14,23,38,0.18) 62%, rgba(14,23,38,0) 80%);
}

.careers-hero-inner {
  position: relative;
  z-index: 2;
  width: 100%;
  display: flex;
  flex-direction: column;
  justify-content: space-between;
  gap: 40px;
  padding-top: 140px;
  padding-bottom: 52px;
}

.careers-hero-title {
  color: var(--c-on-dark);
  font-size: var(--fs-display);
  line-height: 0.94;
  font-weight: 600;
  letter-spacing: 0.02em;
  max-width: 18ch;
  text-shadow: 0 2px 40px rgba(0,0,0,0.28);
}
.careers-hero-eyebrow {
  color: var(--c-on-dark);
  margin-bottom: 20px;
}

/* Ei enaa lasikorttia vaan pelkka tekstilohko suoraan kuvan paalla.
   Ilman paddingia teksti asettuu samaan vasempaan linjaan otsikon kanssa. */
.careers-hero-card {
  align-self: flex-start;
  max-width: 560px;
}
.careers-hero-card-title {
  font-family: var(--serif);
  font-weight: 500;
  color: var(--c-on-dark);
  font-size: var(--fs-h3r);
  line-height: 1.28;
  letter-spacing: -0.01em;
  /* Sama pehmea varjo kuin otsikossa: teksti on nyt suoraan valokuvan
     paalla, joten se tarvitsee oman kontrastinsa haivytyksen lisaksi. */
  text-shadow: 0 2px 40px rgba(0,0,0,0.28);
}
.careers-hero-card-actions {
  display: flex;
  align-items: center;
  flex-wrap: wrap;
  gap: 14px;
  margin-top: 24px;
}
.careers-hero-round {
  width: 52px;
  height: 52px;
  flex: 0 0 auto;
  border-radius: 50%;
  display: grid;
  place-items: center;
  background: rgba(255,255,255,0.92);
  color: var(--c-body);
  font-size: var(--fs-lead);
  transition: background 200ms var(--ease), transform 200ms var(--ease), color 200ms var(--ease);
}
.careers-hero-round:hover { background: var(--rust); color: var(--c-on-dark); transform: translateY(-2px); }

@media (max-width: 640px) {
  .careers-hero { min-height: 0; }
  .careers-hero-inner { padding-top: 120px; padding-bottom: 40px; gap: 28px; }
}

/* ---------- Tilastorivi ---------- */
.careers-stats {
  background: var(--bone);
  border-bottom: 1px solid var(--hairline);
  padding: clamp(44px, 6vw, 64px) 0;
}
.careers-stats-grid {
  display: grid;
  grid-template-columns: repeat(2, 1fr);
  gap: 36px 28px;
}
@media (min-width: 880px) { .careers-stats-grid { grid-template-columns: repeat(4, 1fr); gap: 40px; } }

.careers-stat .num {
  display: block;
  font-family: 'Oswald', var(--sans);
  font-weight: 600;
  font-size: var(--fs-h1r);
  line-height: 1;
  letter-spacing: 0.01em;
  color: var(--c-accent);
}
.careers-stat .lbl {
  display: block;
  margin-top: 12px;
  font-family: var(--sans);
  font-weight: 600;
  font-size: var(--fs-sm);
  letter-spacing: 0.02em;
  color: var(--c-body);
}
.careers-stat .desc {
  margin-top: 8px;
  color: var(--c-body);
  font-size: var(--fs-sm);
  line-height: 1.55;
  max-width: 28ch;
}

/* ---------- Intro: iso lause + inset-kuva ---------- */
.careers-intro { padding: clamp(64px, 8vw, 96px) 0; }
.careers-intro-lead {
  font-family: var(--serif);
  font-weight: 500;
  font-size: var(--fs-h2r);
  line-height: 1.28;
  letter-spacing: -0.015em;
  color: var(--c-body);
  max-width: 24ch;
  margin-top: 22px;
}
.careers-intro-cols {
  display: grid;
  grid-template-columns: 1fr;
  gap: 32px;
  align-items: center;
  margin-top: 48px;
}
@media (min-width: 860px) { .careers-intro-cols { grid-template-columns: 0.9fr 1.1fr; gap: 56px; } }
.careers-intro-media {
  border-radius: 18px;
  overflow: hidden;
  aspect-ratio: 4 / 3;
}
.careers-intro-media img { width: 100%; height: 100%; object-fit: cover; display: block; }
.careers-intro-body {
  color: var(--c-body);
  line-height: 1.72;
  font-size: var(--fs-base);
  max-width: 54ch;
}


/* ============================================================
   REFERENSSI-VARIANTIT (esikatselu: /preview/referenssit/[a|b|c])
   Vertailua varten. Poistetaan kun lopullinen valinta on tehty.
   ============================================================ */
/* --- clone: recent work grid (PHASE 2 - Kokkoma look) ---
   Reference geometry kept as-is; surfaces restyled to the site's palette
   and typography (Oswald headings, --rust accent, dark navy ground). */
.clone-rw {
  background: var(--bone);
  /* yläpadding on pieni: edellinen osio (.section-lg) tuo jo oman
     alapaddinginsa, ja täysi 96/130px kahdentaisi välin */
  padding: 32px 0 96px;
}
@media (min-width: 1024px) { .clone-rw { padding: 40px 0 130px; } }

.clone-rw-eyebrow {
  display: flex;
  align-items: center;
  gap: 12px;
  margin: 0 0 22px;
  font-family: var(--sans);
  font-size: var(--fs-xs);
  font-weight: 600;
  letter-spacing: 0.18em;
  text-transform: uppercase;
  color: var(--c-accent);
}
.clone-rw-dash { width: 30px; height: 1px; background: var(--rust); flex: none; }

/* h2 inherits the site's Oswald / uppercase heading treatment */
.clone-rw-title {
  margin: 0;
  max-width: 16ch;
  font-size: var(--fs-h1r);
  line-height: 1.12;
  color: var(--c-body);
}

.clone-rw-rule {
  height: 1px;
  background: var(--hairline);
  margin: 44px 0 40px;
}

/* 3 columns, tight gutters, no card panel - media sits straight on the bg */
/* Horizontal carousel: cards run off to the side instead of wrapping onto
   new rows. Scrollbar is hidden, so the nav buttons carry the affordance. */
.clone-rw-grid {
  display: flex;
  gap: 24px;
  overflow-x: auto;
  scroll-snap-type: x mandatory;
  scroll-behavior: smooth;
  scrollbar-width: none;
  padding-bottom: 4px;
}
.clone-rw-grid::-webkit-scrollbar { display: none; }
.clone-rw-card {
  flex: 0 0 min(78vw, 330px);
  scroll-snap-align: start;
}

/* Header row: title left, carousel controls right */
.clone-rw-head {
  display: flex;
  align-items: flex-end;
  justify-content: space-between;
  gap: 24px;
  flex-wrap: wrap;
}
.clone-rw-nav { display: flex; gap: 10px; flex: none; }
.clone-rw-nav-btn {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: 44px;
  height: 44px;
  border-radius: 50%;
  background: transparent;
  border: 1px solid var(--hairline);
  color: var(--c-body);
  cursor: pointer;
  transition: background 200ms var(--ease), border-color 200ms var(--ease);
}
.clone-rw-nav-btn:hover { background: var(--surface); border-color: var(--ink); }

.clone-rw-card-media {
  display: block;
  position: relative;
  aspect-ratio: 1 / 1;
  overflow: hidden;
  background: var(--hairline);
  border-radius: 14px;
}
/* kuvaton kohde: sama paikanpitäjä kuin /referenssit-sivun .rt-card-img-ph */
.clone-rw-card-ph {
  position: absolute;
  inset: 0;
  display: grid;
  place-items: center;
  color: var(--c-body);
  font-size: var(--fs-xs);
}
.clone-rw-card-media img {
  width: 100%;
  height: 100%;
  object-fit: cover;
  display: block;
  transition: transform 300ms var(--ease);
}
.clone-rw-card:hover .clone-rw-card-media img { transform: scale(1.04); }

.clone-rw-card-meta {
  margin: 18px 0 6px;
  font-family: var(--sans);
  font-size: var(--fs-xs);
  font-weight: 600;
  letter-spacing: 0.12em;
  text-transform: uppercase;
  color: var(--c-accent);
}
.clone-rw-card-title {
  margin: 0 0 10px;
  font-size: var(--fs-md);
  line-height: 1.35;
  color: var(--c-body);
}
.clone-rw-card-title a { color: inherit; }
.clone-rw-card-title a:hover { color: var(--c-accent); }
.clone-rw-card-text {
  margin: 0 0 16px;
  font-size: var(--fs-sm);
  line-height: 1.65;
  color: var(--c-body);
}

.clone-rw-card-link {
  display: inline-flex;
  align-items: center;
  gap: 10px;
  font-family: var(--sans);
  font-size: var(--fs-sm);
  font-weight: 600;
  color: var(--c-body);
}
.clone-rw-card-link:hover { color: var(--c-accent); }
.clone-rw-badge {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: 24px;
  height: 24px;
  border-radius: 50%;
  background: var(--rust);
  color: var(--c-on-dark);
  flex: none;
  transition: background 200ms var(--ease);
}
.clone-rw-card-link:hover .clone-rw-badge { background: var(--rust-hover); }

.clone-rw-footer {
  margin-top: 56px;
  padding-top: 32px;
  border-top: 1px solid var(--hairline);
}
.clone-rw-all {
  display: inline-flex;
  align-items: center;
  gap: 8px;
  font-family: var(--sans);
  font-size: var(--fs-sm);
  font-weight: 600;
  color: var(--c-body);
}
.clone-rw-all:hover { color: var(--c-accent); }

/* ============================================================
   yritys (Flaire-referenssi) - PHASE 2, Kokkoma-ilme.
   Kloonin geometria + sivuston paletti, fontit ja tokenit.
   ============================================================ */
:root {
  --yc-blue: var(--rust);     /* sivuston vakiosininen (#6F9DC6) - kortti + nappi */
  --yc-green: var(--rust);    /* aksentti valkoisilla korteilla (tähdet, luvut) */
  --yc-line: var(--hairline);
  --yc-ink: var(--ink);
  --yc-muted: var(--slate);
}

/* Hero */
.yc-hero { padding: 48px 0 0; }
.yc-hero-top {
  display: grid;
  grid-template-columns: 1fr;
  gap: 20px;
  align-items: start;
}
@media (min-width: 900px) { .yc-hero-top { grid-template-columns: 1.5fr 1fr; gap: 48px; } }
.yc-hero-title {
  font-family: 'Oswald', var(--sans);
  text-transform: uppercase;
  font-size: var(--fs-display);
  line-height: 1.0;
  font-weight: 600;
  letter-spacing: 0.01em;
  color: var(--c-body);
  /* Rivinvaihto tulee CMS:n tekstistä, ei <br/>:sta - ks. .truck-title. */
  white-space: pre-line;
}
.yc-hero-desc {
  color: var(--c-body);
  font-size: var(--fs-md);
  line-height: 1.6;
  max-width: 42ch;
}

/* Lead omassa laatikossaan hero-kuvan paalla. Sama umpinainen kortti kuin
   palvelusivujen ennen/jalkeen-kuvissa (.svc-ba-card): vaalea pinta ja tumma
   teksti, ei lasipintaa — teksti pysyy yhta luettavana osui kortti sitten
   kuvan vaaleaan tai tummaan kohtaan. */
.yc-hero-card {
  padding: clamp(18px, 2vw, 26px);
  background: var(--bone);
  border-radius: 14px;
}
.yc-hero-card .yc-hero-desc { margin: 0; max-width: none; padding-top: 0; }
@media (min-width: 900px) {
  /* Ylakulmaan eika pystykeskitettyna: kortti kasvaa alaspain kun teksti
     rivittyy kapeammalla, ja alaoikeassa kulmassa on jo vierityspainike. */
  .yc-hero-card {
    position: absolute;
    top: clamp(16px, 2vw, 28px);
    right: clamp(16px, 2vw, 28px);
    width: min(42ch, 42%);
  }
}
.yc-hero-media {
  position: relative;
  margin-top: 32px;
  border-radius: 14px;
  overflow: hidden;
}
.yc-hero-media img {
  width: 100%;
  height: clamp(280px, 42vw, 520px);
  object-fit: cover;
  display: block;
}
.yc-hero-fab {
  position: absolute;
  right: 24px;
  bottom: 24px;
  width: 60px;
  height: 60px;
  border-radius: 50%;
  background: var(--yc-blue);
  color: var(--c-on-dark);
  display: grid;
  place-items: center;
  transition: background 200ms var(--ease), transform 200ms var(--ease);
}
.yc-hero-fab:hover { background: var(--rust-hover); transform: translateY(-2px); }

/* Intro: iso teksti + värillinen kortti */
.yc-intro { padding: 64px 0; }
.yc-intro-grid {
  display: grid;
  grid-template-columns: 1fr;
  gap: 24px;
  align-items: stretch;
}
@media (min-width: 900px) { .yc-intro-grid { grid-template-columns: 1.25fr 1fr; gap: 32px; } }
.yc-intro-left { display: flex; flex-direction: column; }
.yc-intro-quote {
  font-family: var(--serif);
  font-size: var(--fs-h1r);
  line-height: 0.7;
  color: var(--hairline);
}
.yc-intro-lead {
  font-family: var(--serif);
  font-weight: 500;
  font-size: var(--fs-h3r);
  line-height: 1.4;
  letter-spacing: -0.01em;
  color: var(--c-body);
  margin-top: 12px;
  max-width: 34ch;
}
.yc-intro-expertise { margin-top: 28px; }
.yc-intro-expertise .yritys-chips { margin-top: 14px; }
/* Kuva on oma sarakkeensa tekstin vieressä (aiemmin se pinottiin tekstin
   alle vasempaan sarakkeeseen). */
.yc-intro-img { align-self: center; }
@media (max-width: 899px) { .yc-intro-img { padding-top: 28px; } }
.yc-intro-img img {
  width: 100%;
  height: auto;
  display: block;
  border-radius: 12px;
}
.yc-card {
  background: var(--yc-blue);
  border-radius: 18px;
  padding: clamp(24px, 3vw, 36px);
  color: var(--c-on-dark);
}
.yc-card-top {
  display: flex;
  align-items: center;
  justify-content: space-between;
  margin-bottom: 22px;
}
.yc-card-label {
  font-size: var(--fs-xs);
  letter-spacing: 0.16em;
  text-transform: uppercase;
  color: var(--c-on-dark);
}
.yc-card-ast { color: var(--c-on-dark); display: inline-flex; }
.yc-card p { color: var(--c-on-dark); line-height: 1.62; font-size: var(--fs-md); }
.yc-card p + p { margin-top: 16px; }

/* Tilastopilleri */
.yc-stats { padding: 8px 0 48px; }
.yc-stats-pill {
  border: 1px solid var(--yc-line);
  border-radius: 16px;
  background: var(--surface);
  padding: 28px clamp(20px, 3vw, 40px);
  display: grid;
  grid-template-columns: 1fr;
  gap: 24px;
}
@media (min-width: 760px) { .yc-stats-pill { grid-template-columns: repeat(3, 1fr); } }
.yc-stat {
  position: relative;
  display: flex;
  align-items: center;
  justify-content: center;
  gap: 14px;
}
@media (min-width: 760px) {
  .yc-stat + .yc-stat::before {
    content: '';
    position: absolute;
    left: 0;
    top: 50%;
    transform: translateY(-50%);
    height: 46px;
    width: 1px;
    background: var(--yc-line);
  }
}
.yc-stat-num {
  font-family: 'Oswald', var(--sans);
  font-size: var(--fs-h2r);
  font-weight: 600;
  line-height: 1;
  color: var(--c-accent);
}
.yc-stat-lbl { font-size: var(--fs-xs); color: var(--c-body); line-height: 1.35; }

/* Vision / Mission / Values -kortit */
.yc-vmv { padding: 0 0 72px; }
.yc-vmv-grid {
  display: grid;
  grid-template-columns: 1fr;
  gap: 20px;
}
@media (min-width: 760px) { .yc-vmv-grid { grid-template-columns: repeat(3, 1fr); } }
.yc-vmv-card {
  border: 1px solid var(--yc-line);
  border-radius: 16px;
  background: var(--surface);
  padding: 30px;
  min-height: 220px;
  display: flex;
  flex-direction: column;
}
.yc-vmv-top {
  display: flex;
  align-items: center;
  justify-content: space-between;
  margin-bottom: 20px;
}
.yc-vmv-num {
  font-family: 'Oswald', var(--sans);
  font-size: var(--fs-lead);
  font-weight: 600;
  color: var(--c-accent);
  letter-spacing: 0.02em;
}
.yc-vmv-title {
  font-family: 'Oswald', var(--sans);
  text-transform: uppercase;
  font-size: var(--fs-lead);
  line-height: 1.15;
  font-weight: 600;
  letter-spacing: 0.01em;
  color: var(--c-body);
}
.yc-vmv-ast { color: var(--c-accent); display: inline-flex; }
.yc-vmv-text { margin-top: 12px; color: var(--c-body); line-height: 1.6; font-size: var(--fs-md); }
.yc-vmv-card.has-img { padding: 0; overflow: hidden; }
.yc-vmv-card.has-img img { width: 100%; height: 100%; min-height: 210px; object-fit: cover; display: block; }

/* ============================================================
   FROSTED GLASS -KOKEILU (esikatselu: etusivu ?glass=1)
   Sama lasipinta kuin töihin-meille-heron kortissa, testattuna
   kahteen etusivun kohtaan. Vertailua varten - poistetaan kun
   valinta on tehty. Tokenit: --glass-* :root-lohkossa.
   ============================================================ */

/* Uudelleenkäytettävä apuluokka: mille tahansa kuvan päällä olevalle laatalle. */
.glass {
  background: var(--glass-bg);
  backdrop-filter: var(--glass-blur);
  -webkit-backdrop-filter: var(--glass-blur);
  border: 1px solid var(--glass-border);
  box-shadow: var(--glass-shadow);
}

/* ---------- A) Hero-tilastot lasipaneelina ----------
   Hero-osiolla on taustakuva (home-hero-bg.jpg), joten luvut ovat
   nyt suoraan valokuvan päällä. Lasilaatta antaa niille alustan. */
[data-glass='1'] .hero-stats {
  gap: clamp(24px, 3vw, 44px);
  margin-top: 44px;
  padding: 26px clamp(22px, 2.6vw, 32px);
  width: fit-content;
  max-width: 100%;
  border-radius: 20px;
  background: var(--glass-bg);
  backdrop-filter: var(--glass-blur);
  -webkit-backdrop-filter: var(--glass-blur);
  border: 1px solid var(--glass-border);
  box-shadow: var(--glass-shadow);
}
[data-glass='1'] .hero-stat .num { color: var(--c-on-dark); }
[data-glass='1'] .hero-stat .label { color: var(--c-on-dark); }
[data-glass='1'] .hero-stats-note { color: var(--c-body); }

/* erotinviivat lukujen väliin, jotta laatta lukeutuu yhtenä ryhmänä */
[data-glass='1'] .hero-stat + .hero-stat {
  padding-left: clamp(24px, 3vw, 44px);
  border-left: 1px solid rgba(255, 255, 255, 0.18);
}
@media (max-width: 640px) {
  [data-glass='1'] .hero-stat + .hero-stat { padding-left: 0; border-left: 0; }
}

/* ---------- B) Path-kortit: kuva täyttää kortin, teksti kelluu lasilla ----------
   Nykyisin kuva on ylhäällä ja valkoinen tekstiosa sen alla. Lasiversiossa
   kuva täyttää koko kortin ja tekstilaatta kelluu sen päällä. */
[data-glass='1'] .path-card {
  position: relative;
  min-height: 420px;
  border: 0;
  background: none;
  border-radius: 16px;
  overflow: hidden;
}
[data-glass='1'] .path-card-media {
  position: absolute;
  inset: 0;
  aspect-ratio: auto;
}
/* tummennus kuvan päälle, jotta lasilaatta ei jää vaalealle taivaalle */
[data-glass='1'] .path-card-media::after {
  content: '';
  position: absolute;
  inset: 0;
  background: linear-gradient(to top, rgba(16, 26, 43, 0.55), rgba(16, 26, 43, 0) 62%);
}
[data-glass='1'] .path-card-body {
  position: relative;
  z-index: 2;
  flex: none;
  margin: auto 14px 14px;
  padding: 24px 24px 20px;
  border-radius: 14px;
  background: var(--glass-bg);
  backdrop-filter: var(--glass-blur);
  -webkit-backdrop-filter: var(--glass-blur);
  border: 1px solid var(--glass-border);
  box-shadow: var(--glass-shadow);
}
[data-glass='1'] .path-card .eyebrow { color: var(--c-accent); }
[data-glass='1'] .path-card .path-statement { color: var(--c-on-dark); }
[data-glass='1'] .path-card-arrow {
  margin-top: 18px;
  background: rgba(255, 255, 255, 0.14);
  border: 1px solid var(--glass-border);
  color: var(--c-on-dark);
}
[data-glass='1'] .path-card:hover .path-card-arrow { background: var(--rust); border-color: var(--rust); }

/* ---------- Varautuminen: selain ei tue backdrop-filteriä ----------
   Ilman sumennusta läpikuultava pinta jää sekavaksi, joten tiivistetään. */
@supports not ((backdrop-filter: blur(1px)) or (-webkit-backdrop-filter: blur(1px))) {
  .glass,
  [data-glass='1'] .hero-stats,
  [data-glass='1'] .path-card-body {
    background: rgba(16, 26, 43, 0.86);
  }
}


/* ============================================================
   FROZEN GLASS - referenssikortit (etusivun karuselli)
   Matta, huurteinen jääpinta: paksu sumennus, kylmä sävy,
   laskettu kylläisyys ja hienojakoinen rakeisuus. Ei liikkuvaa
   kiiltoa eikä terävää specular-reunusta - huurre on staattista.
   Osion taakse jää pehmeä värikenttä, jotta sumennuksella on
   jotain hajotettavaa.
   ============================================================ */

/* ---------- osion taustakenttä ----------
   Siniset sumennetut liukuvärit poistettu korttirivin takaa. Osio
   käyttää nyt pelkkää --bone-taustaa, joka määritellään ylempänä.
   position/isolation/overflow jäävät: overflow-x pitää karusellin
   sisällään, eikä sen poisto liity väriin. */
.clone-rw {
  position: relative;
  isolation: isolate;
  overflow: hidden;
}
.clone-rw > .container { position: relative; z-index: 1; }

/* karusellilla on overflow-x, joka leikkaisi korttien varjot - tilaa reunoille */
.clone-rw-grid {
  padding: 10px 6px 22px;
  margin: -10px -6px -22px;
}

/* ---------- kortin pinta ----------
   Sama väri kuin "Kenelle"-osion .path-card-korteilla: tasainen
   --surface ja --hairline-reunus. Aiempi huurrelasi (sinertävä
   läpikuultava liukuväri, backdrop-filter sekä kohina- ja
   kiiltokerrokset) purettiin, koska se antoi referenssikorteille
   oman sävynsä muista sivuston korteista poiketen. */
.clone-rw-card {
  position: relative;
  padding: 12px 12px 20px;
  border-radius: 22px;
  background: var(--surface);
  border: 1px solid var(--hairline);
  box-shadow:
    0 14px 34px rgba(16, 26, 43, 0.10),
    0 2px 6px rgba(16, 26, 43, 0.05);
  transition: transform 320ms var(--ease), box-shadow 320ms var(--ease);
}
.clone-rw-card:hover {
  transform: translateY(-5px);
  box-shadow:
    0 22px 48px rgba(16, 26, 43, 0.14),
    0 3px 8px rgba(16, 26, 43, 0.06);
}

/* ---------- sisältö ---------- */
.clone-rw-card-media { border-radius: 14px; position: relative; z-index: 3; }
.clone-rw-card-meta,
.clone-rw-card-title,
.clone-rw-card-text,
.clone-rw-card-link { position: relative; z-index: 3; }
.clone-rw-card-meta { margin: 16px 2px 6px; color: var(--c-accent); }
.clone-rw-card-title { margin: 0 2px 10px; }
.clone-rw-card-text { margin: 0 2px 16px; color: var(--c-body); }
.clone-rw-card-link { margin-left: 2px; }

/* ---------- liike pois, jos käyttäjä on sen pyytänyt ---------- */
@media (prefers-reduced-motion: reduce) {
  .clone-rw-card { transition: none; }
  .clone-rw-card:hover { transform: none; }
}

/* ============================================================
   YRITYS - "Miksi Kokkoma": kuva ja sen alla otsikko ja teksti.
   Aiemmin teksti oli liquid glass -korteilla kuvan päällä.
   ============================================================ */

/* Pyöristys kuvalle eikä figurelle: figcaption on figuren sisällä, ja
   figuren pyöristetty alakulma leikkasi kuvatekstin viimeisen rivin
   ensimmäisen kirjaimen. */
.yritys-why-media {
  margin: 0;
}
.yritys-why-media img {
  border-radius: 22px;
  width: 100%;
  height: clamp(280px, 38vw, 520px);
  object-fit: cover;
  object-position: center;
  display: block;
}
.yritys-why-media figcaption {
  margin-top: 12px;
  font-family: var(--sans);
  font-size: var(--fs-xs);
  line-height: 1.5;
  color: var(--c-muted, var(--slate));
}

/* Otsikkopari on kuvan ylapuolella, leipateksti sen alapuolella. */
.yritys-why-head { max-width: 68ch; margin-bottom: clamp(24px, 3vw, 36px); }
.yritys-why-body { margin-top: clamp(28px, 4vw, 44px); max-width: 68ch; }
.yritys-why-title { margin-top: 16px; }
.yritys-why-text {
  /* Ei omaa ylapehmustetta: kappale on nyt .yritys-why-bodyn ainoa lapsi,
     joten valjyys kuvatekstiin tulee jo bodyn margin-topista. */
  color: var(--c-body);
  font-size: var(--fs-base);
  line-height: 1.7;
}

/* ============================================================
   Palvelusivun intro - hero-kortin teksti kuvan alla (ei sinistä laatikkoa)
   ============================================================ */
.svc-intro { padding: 56px 0 8px; }
.svc-intro-text { max-width: 66ch; }
/* Ingressi erottuu leipatekstista koolla, ei varilla: se on osion
   ensimmainen lause ja usein se, jonka hakukone nostaa hakutulokseen.
   Valitsin on .svc-intro-text .svc-intro-lead eika pelkka luokka, koska
   .svc-intro-text p voittaisi muuten fonttikoon spesifisyydessa. */
.svc-intro-text .svc-intro-lead {
  margin: 0 0 20px;
  /* Sama ladonta kuin tyolajien otsikoissa (.svc-prose-title): Inter ja
     lihavuus 700. Otsikot ovat askelta isompia (--fs-xl), koska ne ovat
     otsikoita - ingressi jaa --fs-leadiin eika kilpaile niiden kanssa. */
  font-family: var(--sans);
  font-size: var(--fs-lead);
  font-weight: 700;
  line-height: 1.3;
  letter-spacing: -0.01em;
  color: var(--c-body);
}
.svc-intro-text p { color: var(--c-body); line-height: 1.7; font-size: var(--fs-base); }
.svc-intro-text p + p { margin-top: 16px; }
.svc-intro-actions {
  margin-top: 28px;
  display: flex;
  align-items: center;
  gap: 24px;
  flex-wrap: wrap;
}
.svc-intro-phone { font-family: var(--serif); font-size: var(--fs-lead); color: var(--c-body); }
.svc-intro-phone:hover { color: var(--c-accent); }

/* Intro split: teksti | kuva (slug-kohtainen, esim. ruiskubetonointi) */
.svc-intro--split { display: grid; grid-template-columns: 1fr; gap: 32px; align-items: center; }
@media (min-width: 900px) { .svc-intro--split { grid-template-columns: 1.05fr 0.95fr; gap: 56px; } }
.svc-intro-media img { width: 100%; height: auto; border-radius: 16px; display: block; }
/* Taustaton kuva kelluu sivun taustalla, joten pyöristetty kehys jäisi
   näkyviin tyhjänä kulmana. */
.svc-intro-media--cutout img { border-radius: 0; }

/* Etusivun hero - tärkein pääviesti / osaaminen */
.hero-keymsg {
  display: inline-flex;
  align-items: center;
  gap: 12px;
  margin-top: 20px;
  /* Inter eikä Oswald: h1 yläpuolella on Oswaldia, joten eri kirjasin
     erottaa tukitekstin otsikosta sen sijaan että kilpailisi sen kanssa. */
  font-family: var(--sans);
  text-transform: uppercase;
  font-size: var(--fs-base);
  font-weight: 500;
  letter-spacing: var(--ls-eyebrow);
  line-height: 1.4;
  /* Valkoinen kuten h1: sama tekstilohko, sama kontrastitarve. */
  color: var(--c-on-dark);
}
.hero-keymsg::before {
  content: '';
  flex: 0 0 auto;
  /* palkki kevenee tekstin mukana, ettei se jää hallitsevaksi */
  width: 26px;
  height: 2px;
  background: var(--rust);
}
/* Mobiilissa palkki pois: kapealla ruudulla se vie tilaa tekstiltä eikä
   erota mitään, koska teksti alkaa muutenkin reunasta. */
@media (max-width: 767px) {
  .hero-keymsg::before { display: none; }
}

/* Footer - somelinkit */
.footer-social {
  display: flex;
  gap: 10px;
  list-style: none;
  margin: 24px 0 0;
  padding: 0;
}
.footer-social-link {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: 40px;
  height: 40px;
  border: 1px solid var(--hairline);
  border-radius: 999px;
  color: var(--c-body);
  transition: background 200ms var(--ease), border-color 200ms var(--ease), color 200ms var(--ease);
}
.footer-social-link svg { width: 18px; height: 18px; }
.footer-social-link:hover,
.footer-social-link:focus-visible {
  background: var(--rust);
  border-color: var(--rust);
  color: var(--c-on-dark);
}

/* ============================================================
   AVAINLUVUT - oma kaista heron alapuolella.
   Luvut siirrettiin pois hero-tekstipalstasta, jotta sloganin
   ympärille jää vain yksi tukiteksti.
   ============================================================ */
.keyfigures {
  padding: 48px 0;
  background: var(--bone);
  border-bottom: 1px solid var(--hairline);
}
@media (min-width: 768px) { .keyfigures { padding: 72px 0; } }

.keyfigures-grid {
  display: grid;
  grid-template-columns: 1fr;
  gap: 32px 0;
}
@media (min-width: 640px) {
  .keyfigures-grid { grid-template-columns: repeat(3, 1fr); gap: 0; }
  /* Pystyviivat erottimina. --hairline (#D9D4C9) jäi bone-taustaa vasten
     lähes näkymättömäksi, joten viiva on neutraalimpi ja tummempi. */
  .keyfigure + .keyfigure { border-left: 1px solid rgba(26, 26, 26, 0.22); }
}

.keyfigure {
  /* pystypadding pidentää erotinviivaa tekstin ylä- ja alapuolelle */
  padding: clamp(6px, 1.2vw, 16px) clamp(12px, 2.5vw, 32px);
  text-align: center;
}
.keyfigure-num {
  font-family: var(--serif);
  font-weight: 500;
  font-size: var(--fs-h1r);
  line-height: 1;
  letter-spacing: -0.02em;
  color: var(--c-body);
}
.keyfigure-label {
  margin-top: 10px;
  font-family: var(--sans);
  font-size: var(--fs-xs);
  letter-spacing: var(--ls-eyebrow);
  text-transform: uppercase;
  color: var(--c-body);
}
.keyfigures-note {
  margin-top: 28px;
  text-align: center;
  font: var(--t-meta);
  color: var(--c-body);
}

/* ============================================================
   HERO CTA - sivuston tärkein CTA. Isompi ja umpivalkoinen.
   Oma luokka, ei .btn-pill-ghostin muokkaus, koska sitä
   käytetään myös muualla.
   ============================================================ */
.hero-cta {
  /* isompi kuin vakiopilleri: 52px -> 64px */
  min-height: 64px;
  padding: 20px 38px;
  gap: 12px;
  font-size: var(--fs-md);
  font-weight: 600;
  color: var(--c-body);

  /* Umpivalkoinen pinta: nappi ei ime väriä alla olevasta kuvasta, joten
     kontrasti on sama riippumatta siitä mihin hero-kuva osuu. */
  background: #fff;
  border: 1px solid #fff;
  box-shadow:
    0 10px 28px rgba(16, 26, 43, 0.18),
    0 2px 6px rgba(16, 26, 43, 0.10);
}
.hero-cta svg { width: 20px; height: 20px; flex: none; }

.hero-cta:hover,
.hero-cta:focus-visible {
  background: var(--ink);
  border-color: var(--ink);
  color: var(--c-on-dark);
}

/* Mobiilissa tausta on tummempi kuvarajaus, joten varjoa vahvistetaan -
   tämä on sivuston tärkein CTA eikä se saa hukkua. */
@media (max-width: 767px) {
  .hero-cta {
    min-height: 60px;
    padding: 18px 30px;
    box-shadow: 0 12px 30px rgba(16, 26, 43, 0.28);
  }
}

/* Footer - somelinkkien otsikko ja lakilinkit */
.footer-social-label {
  margin: 28px 0 10px;
  font-family: var(--sans);
  font-size: var(--fs-xs);
  font-weight: 500;
  letter-spacing: var(--ls-eyebrow);
  text-transform: uppercase;
  color: var(--c-accent);
}
.footer-social { margin-top: 0; }
.footer-legal {
  display: inline-flex;
  align-items: center;
  gap: 10px;
  flex-wrap: wrap;
}
.footer-legal a { text-decoration: underline; text-underline-offset: 3px; }
.footer-legal a:hover { color: var(--c-accent); }

/* Laskutustiedot */
.billing-table {
  max-width: 640px;
  margin: 0 0 48px;
  border-top: 1px solid var(--hairline);
}
.billing-row {
  display: grid;
  grid-template-columns: 1fr;
  gap: 2px;
  padding: 16px 0;
  border-bottom: 1px solid var(--hairline);
}
@media (min-width: 560px) {
  .billing-row { grid-template-columns: 200px 1fr; gap: 24px; align-items: baseline; }
}
.billing-label {
  margin: 0;
  font-family: var(--sans);
  font-size: var(--fs-xs);
  font-weight: 500;
  letter-spacing: var(--ls-eyebrow);
  text-transform: uppercase;
  color: var(--c-accent);
}
.billing-value {
  margin: 0;
  font-family: var(--sans);
  font-size: var(--fs-base);
  font-weight: 500;
  color: var(--c-body);
}

/* ============================================================
   Yritys-sivun viimeistely (.yr-page)
   Sivukohtaisia hienosäätöjä olemassa olevien komponenttien
   päälle: yhtenäiset kuvakehykset, tarttuva mediapalsta,
   avainlukujen pystyasettelu, korttien nostot ja tumman
   palkin pyöristys samaan tapaan kuin etusivun CTA-palkissa.
   ============================================================ */

.yr-page { --yr-radius: 16px; }

/* ---------- Otsikot Oswaldilla myös serif-tyylisissä lohkoissa ---------- */
.yr-page .yritys-feature-title,
.yr-page .yritys-responsibility-title {
  font-family: 'Oswald', var(--sans);
  font-weight: 600;
  text-transform: uppercase;
  letter-spacing: var(--ls-heading);
  line-height: 1.1;
}

/* ---------- Kuvat: sama pyöristys ja pehmeä varjo kaikkialla ---------- */
.yr-page .yr-figure { margin: 0; }
.yr-page .yr-figure img,
.yr-page .yritys-feature-media img,
.yr-page .yc-intro-img img {
  border-radius: var(--yr-radius);
  box-shadow: 0 18px 40px -22px rgba(15, 23, 36, 0.4);
}

/* ---------- Eyebrow'n alle lyhyt aksenttiviiva ---------- */
.yr-page .yr-rule {
  display: block;
  width: 44px;
  height: 2px;
  margin: 16px 0 0;
  border: 0;
  background: var(--c-accent);
}

/* ---------- Avainluvut: luku ylös, selite alle ---------- */
.yr-page .yr-stats .yc-stats-pill {
  padding: 36px clamp(20px, 3vw, 44px);
  box-shadow: 0 22px 48px -30px rgba(15, 23, 36, 0.35);
}
.yr-page .yr-stats .yc-stat {
  flex-direction: column;
  align-items: flex-start;
  justify-content: flex-start;
  gap: 10px;
}
@media (min-width: 760px) {
  .yr-page .yr-stats .yc-stat + .yc-stat { padding-left: 32px; }
  .yr-page .yr-stats .yc-stat + .yc-stat::before { height: 100%; top: 0; transform: none; }
}
.yr-page .yr-stats .yc-stat-num {
  font-size: clamp(2.25rem, 4.4vw, 3rem);
  letter-spacing: -0.01em;
}
.yr-page .yr-stats .yc-stat-lbl { max-width: 34ch; }

/* ---------- Kortit: hienovarainen nosto ---------- */
.yr-page .yc-vmv-card {
  transition: transform 220ms var(--ease), border-color 220ms var(--ease), box-shadow 220ms var(--ease);
}
.yr-page .yc-vmv-card:hover {
  transform: translateY(-4px);
  border-color: var(--c-accent);
  box-shadow: 0 20px 40px -28px rgba(15, 23, 36, 0.5);
}
.yr-page .team-card {
  transition: transform 220ms var(--ease), border-color 220ms var(--ease);
  border-radius: 16px;
  /* Kuva vuotaa negatiivisella marginaalilla kortin reunoihin, joten
     leikkaus pitää sen yläkulmat kortin kaarella. */
  overflow: hidden;
}
.yr-page .team-card:hover { transform: translateY(-3px); }

/* ---------- Arvokortit: abstrakti ikoni numeroinnin tilalla ---------- */
.yr-page .yr-vmv-icon {
  width: 52px;
  height: 52px;
  display: block;
  margin: -6px 0;
}

/* ---------- Kevyempi ylapehmuste: osio nousee lahemmas edellista ---------- */
.yr-page .yr-tight-top { padding-top: clamp(40px, 5vw, 64px); }

/* ---------- Kehitys-lohko: vaaleansininen pyöristetty kortti ---------- */
.yr-page .yritys-responsibility {
  background: transparent;
  /* negatiivinen ylämarginaali kuroo umpeen edellisen osion alapehmustetta */
  margin-top: clamp(-112px, -9vw, -56px);
  padding: 0 0 clamp(72px, 9vw, 112px);
}
.yr-page .yritys-responsibility > .container {
  width: min(var(--container), calc(100% - 2 * var(--gutter)));
  max-width: none;
  background: var(--rust);
  border-radius: 28px;
  padding: clamp(48px, 6vw, 80px) clamp(28px, 4vw, 56px);
  display: grid;
  grid-template-columns: 1fr;
  gap: clamp(28px, 4vw, 52px);
  align-items: center;
}
@media (min-width: 900px) {
  .yr-page .yritys-responsibility > .container { grid-template-columns: 1.15fr 0.85fr; }
}
.yr-page .yr-kehitys-media { margin: 0; }
.yr-page .yr-kehitys-media img {
  width: 100%;
  aspect-ratio: 4 / 3;
  object-fit: cover;
  border-radius: 18px;
  box-shadow: 0 26px 52px -30px rgba(10, 17, 28, 0.7);
}
@media (max-width: 640px) {
  .yr-page .yritys-responsibility > .container { border-radius: 20px; }
}

/* ============================================================
   Etusivun työmaavideo — click-to-play + oma play-nappi
   ============================================================ */
/* .home-video-lohkon pehmusteet ja rajaus: ks. "Etusivun videolohko"
   tiedoston lopussa. */

.video-player {
  position: relative;
  max-width: 960px;
  margin: 0 auto;
  border-radius: 16px;
  overflow: hidden;
  background: #0d1626;
  box-shadow: 0 18px 48px rgba(13, 22, 38, 0.18);
}
.video-player video { display: block; width: 100%; height: auto; }
.video-player:not(.is-playing)::after {
  content: '';
  position: absolute;
  inset: 0;
  background: rgba(13, 22, 38, 0.28);
  pointer-events: none;
  z-index: 1;
}
.video-player-play {
  position: absolute;
  inset: 0;
  margin: auto;
  width: 84px;
  height: 84px;
  border-radius: 50%;
  border: none;
  cursor: pointer;
  display: grid;
  place-items: center;
  color: var(--c-accent, #6F9DC6);
  background: rgba(255, 255, 255, 0.94);
  box-shadow: 0 10px 30px rgba(13, 22, 38, 0.35);
  transition: transform 200ms ease, background 200ms ease;
  z-index: 2;
}
.video-player-play:hover { transform: scale(1.06); background: #fff; }
.video-player-play:focus-visible { outline: 3px solid var(--c-accent, #6F9DC6); outline-offset: 3px; }
.video-player-play svg { margin-left: 4px; } /* play-kolmion optinen keskitys */

/* ============================================================
   Etusivun videolohko
   Tiivis pystyvalistys, taysleveä soitin ja 2:1-rajaus, joka
   ottaa ylimaaraisen korkeuden pois videon ylareunasta.
   ============================================================ */
/* Vali palveluosioon tulee kokonaan taman lohkon ylapehmusteesta:
   edellisen osion oma alapehmuste (96-200px) kumotaan, koska ilman
   otsikkoa se jattaisi videon ylle liian suuren tyhjan. */
.home-video { padding: clamp(64px, 7.5vw, 136px) 0 clamp(24px, 3vw, 40px); }
.section-lg:has(+ .home-video) { padding-bottom: 0; }
.home-video .video-player {
  /* Taysleveä kaista: ei container-rajausta, jotta kuva jatkuu
     selainikkunan reunasta reunaan. Peruskomponentin 16px pyoristys
     jaa voimaan; varjo pois, koska taysleveana se nakyisi vain
     ohuena raitana ylla ja alla. */
  max-width: none;
  box-shadow: none;
  /* Lahde on 16:9 (1.78); 2.4:1 leikkaa siita n. 26 % korkeutta. */
  aspect-ratio: 2.4 / 1;
}
.home-video .video-player video {
  height: 100%;
  object-fit: cover;
  /* keskitetty rajaus -> leikkautuva osa jakautuu yla- ja alareunaan */
  object-position: 50% 50%;
}
@media (max-width: 640px) {
  /* Kapealla ruudulla loivempi rajaus, muuten kaistasta tulee liian matala. */
  .home-video .video-player { aspect-ratio: 2 / 1; }
}

/* ============================================================
   Etusivun heron suodin
   Tumman sininen kerros kuvan paalle nostaa valkoisen otsikon
   kontrastia. Tyopoydalla hyvin kevyt, mobiilissa selvasti
   vahvempi: kapealla ruudulla kuva rajautuu tiukemmin ja tekstin
   taakse osuu vaaleita kohtia. Teksti on .hero-split-textissa
   (z-index 2), joten se jaa suotimen ylle.
   ============================================================ */
.hero-split::before {
  content: '';
  position: absolute;
  inset: 0;
  z-index: 1;
  pointer-events: none;
  background:
    /* Tummansininen haivytys vasempaan reunaan otsikon taakse. Sama savy
       kuin sivuston muissa tummissa pinnoissa (.inj-band, .eco-band), ja se
       sammuu runsaassa kolmanneksessa, jottei kuva tummu keskelta.
       Mobiilisaanto alla korvaa taustan kokonaan: siella pystysuodin on jo
       niin vahva, ettei erillista reunahaivytysta tarvita. */
    linear-gradient(
      90deg,
      rgba(15, 34, 54, 0.72) 0%,
      rgba(15, 34, 54, 0.34) 16%,
      rgba(15, 34, 54, 0) 36%
    ),
    linear-gradient(
      180deg,
      rgba(16, 26, 43, 0.26) 0%,
      rgba(16, 26, 43, 0.14) 45%,
      rgba(16, 26, 43, 0.30) 100%
    );
}
@media (max-width: 768px) {
  .hero-split::before {
    background: linear-gradient(
      180deg,
      rgba(16, 26, 43, 0.74) 0%,
      rgba(16, 26, 43, 0.56) 45%,
      rgba(16, 26, 43, 0.80) 100%
    );
  }
}

/* ============================================================
   Palvelusivun maaritelmakortti
   Intro-osion alussa, otsikon alla ja leipatekstin ylla. Vastaa
   itsenaisesti kysymykseen "mita X on", joten se erotetaan
   omaksi kortikseen leipatekstista.
   ============================================================ */
.svc-definition {
  background: var(--surface);
  border: 1px solid var(--hairline);
  border-left: 3px solid var(--c-accent);
  border-radius: 14px;
  padding: clamp(20px, 2.4vw, 28px) clamp(20px, 2.6vw, 32px);
  margin-bottom: 28px;
  box-shadow: 0 16px 34px -26px rgba(15, 23, 36, 0.4);
}
/* h2, mutta pikkuotsikon ulkoasu: font-lyhenne nollaa myos globaalin
   h1-h4-saannon Oswaldin ja koon. */
.svc-definition-label {
  font: var(--t-eyebrow);
  letter-spacing: var(--ls-eyebrow);
  text-transform: uppercase;
  color: var(--c-accent);
  margin: 0 0 10px;
}
.svc-definition-text {
  font-size: var(--fs-base);
  line-height: 1.65;
  color: var(--c-body);
  max-width: 62ch;
  margin: 0;
}

/* ============================================================
   BIG-SCREEN OPTIMOINTI — leveät näytöt (≥1440px, ≥1920px)
   Skaalaa layoutin ydinmuuttujat, jotta sisältö ei jää kapeaksi
   keskelle isoa ruutua. Yksi lähde: kaikki menee token-muuttujien
   kautta, joten ilme pysyy yhtenäisenä. Poista tämä lohko
   palauttaaksesi entisen käytöksen.
   ============================================================ */
@media (min-width: 1440px) {
  :root {
    --container: 1400px;
    --gutter:    40px;
    --fs-base:   1.1875rem;   /* leipäteksti kasvaa isolla näytöllä */
    --fs-h3:     1.25rem;     /* = body ≥768px + korttiotsikot */
    --fs-lead:   1.4375rem;
    --fs-xl:     1.625rem;
  }
  .section    { padding: 120px 0; }
  .section-lg { padding: 168px 0; }
}

@media (min-width: 1920px) {
  :root {
    --container: 1600px;
    --gutter:    56px;
    --fs-base:   1.25rem;
    --fs-h3:     1.3125rem;
    --fs-lead:   1.5rem;
    --fs-xl:     1.75rem;

    /* Nostetaan otsikkoramppien kattoja, ettei display/h1 jää
       suhteessa pieneksi ultraleveällä ruudulla. */
    --fs-h2r:     clamp(1.75rem, 4vw, 3.25rem);
    --fs-h1r:     clamp(2.25rem, 5vw, 4.25rem);
    --fs-display: clamp(2.75rem, 7vw, 7rem);
  }
  .section    { padding: 140px 0; }
  .section-lg { padding: 200px 0; }

  /* Enemmän sarakkeita hyötyy leveydestä ilman että kortit levenevät liikaa.
     Henkilöstö jää kolmeen sarakkeeseen: viisi korttia asettuu silloin
     3 + 2 -muodostelmaan neljän ja yksinäisen kortin sijaan. */
  .ref-grid  { grid-template-columns: repeat(4, 1fr); }
}

/* Palvelukortit hyötyvät leveydestä enemmän kuin tekstiosiot: annetaan
   niille oma, tekstiä leveämpi container jo tavallisella työpöytäruudulla,
   jotta kolme korttia leviävät ruudulle "reunasta reunaan" eivätkä jää
   kapeaan keskisarakkeeseen. Katto 1800px pitää yksittäisen kortin
   luettavan levyisenä myös ultraleveällä näytöllä. */
@media (min-width: 1200px) {
  #palvelut > .container { max-width: min(1800px, 94vw); }
}

/* Toimipisteen osoite Google Maps -linkkina yhteystiedoissa. Alleviivaus
   pidetaan nakyvissa: linkki on keskella tekstilohkoa, jossa ei ole muita
   linkkeja, joten pelkka varimuutos ei erottuisi linkiksi. */
.office-map-link {
  color: var(--c-accent);
  text-decoration: underline;
  text-underline-offset: 3px;
}
.office-map-link:hover,
.office-map-link:focus-visible { color: var(--rust-hover); }

/* ============================================================
   Ennen / jälkeen -osio (svc-ba)
   Otsikkopari ylimpänä. Sen alla kaksi saraketta: vasemmalla
   ennen-kuva koko osion korkuisena, oikealla kolme prosessinostoa
   rivissä ja niiden alla jälkeen-kuva. Kuvien tekstit ovat kuvan
   päällä lasipaneelissa, jolloin kuvapari saa koko leveyden eikä
   tekstit riko sitä omiksi riveikseen.
   ============================================================ */
/* padding-block eikä padding: osio on myös .container, ja lyhenne
   nollaisi sen sivupehmusteen, jolloin puhelimella tekstit osuisivat
   ruudun reunaan. */
.svc-ba { padding-block: clamp(48px, 7vw, 88px); }

.svc-ba-eyebrow {
  display: block;
  font: var(--t-eyebrow);
  letter-spacing: var(--ls-eyebrow);
  text-transform: uppercase;
  color: var(--c-accent);
  margin-bottom: 10px;
}
.svc-ba-heading {
  font: var(--t-h2);
  letter-spacing: var(--ls-heading);
  text-transform: uppercase;
  color: var(--c-body);
  margin: 0;
  text-wrap: balance;
}
/* Lyhyt aksenttiviiva otsikon ja sisällön väliin: erottaa otsikon ilman
   että väliin tarvitaan isoa tyhjää. */
.svc-ba-rule {
  display: block;
  width: 56px;
  height: 2px;
  margin: clamp(16px, 1.8vw, 22px) 0 clamp(24px, 3vw, 40px);
  background: var(--c-accent);
}

.svc-ba-layout {
  display: grid;
  grid-template-columns: 1fr;
  gap: clamp(16px, 2vw, 28px);
}
/* stretch: vasen kuva venyy oikean sarakkeen koko korkeuteen, jolloin
   sarakkeiden ala- ja ylareunat osuvat samalle linjalle. Oikean sarakkeen
   korkeuden maarittaa jalkeen-kuvan kuvasuhde, joten kierrettä ei synny. */
@media (min-width: 900px) {
  .svc-ba-layout {
    grid-template-columns: 1fr 1fr;
    align-items: stretch;
  }
}

/* Oikea sarake: nostot omalla korkeudellaan, kuva vie loput. */
.svc-ba-col {
  display: grid;
  grid-template-rows: auto auto;
  gap: clamp(20px, 2.4vw, 32px);
}

/* --- Kolme prosessinostoa --- */
.svc-ba-benefits {
  display: grid;
  grid-template-columns: repeat(3, 1fr);
  gap: clamp(14px, 1.8vw, 26px);
  margin: 0;
  padding: 0;
  list-style: none;
}
@media (max-width: 700px) {
  .svc-ba-benefits { grid-template-columns: 1fr; }
}
/* Aksenttiviiva noston yläpuolella: kolme viivaa rivissä antaa nostoille
   yhteisen ylalinjan, vaikka tekstit rivittyisivät eri mittaan. */
.svc-ba-benefit {
  border-top: 2px solid var(--c-accent);
  padding-top: clamp(12px, 1.4vw, 18px);
}
.svc-ba-benefit-title {
  font: var(--t-h3);
  letter-spacing: var(--ls-heading);
  text-transform: uppercase;
  color: var(--c-body);
  margin: 0 0 6px;
}
.svc-ba-benefit-text {
  margin: 0;
  font: var(--t-meta);
  color: var(--c-body);
}

/* --- Kuvat --- */
.svc-ba-frame {
  position: relative;
  margin: 0;
  /* Tekstikortti ulottuu puoliksi kuvan alareunan yli, joten kehys ei saa
     leikata sisältöään. Pyöristys on siksi kuvalla eikä kehyksellä. */
  --ba-radius: clamp(16px, 2vw, 24px);
  /* Kortin ulkoneva puolikas: tämän verran tilaa kuvan alle, ettei kortti
     mene seuraavan sisällön päälle. Arvio puolesta kortin korkeudesta
     (1–2 tekstiriviä). */
  --ba-overhang: clamp(44px, 5vw, 56px);
  margin-bottom: var(--ba-overhang);
}
/* Kapealla kortin teksti rivittyy 2–3 riville, joten ulkoneva puolikas
   on arviota korkeampi ja seuraava nosto osuisi kiinni korttiin. */
@media (max-width: 899px) {
  .svc-ba-frame { --ba-overhang: 72px; }
}
/* Vaakasuhde 16/10: matala rajaus pitää oikean sarakkeen — ja sitä kautta
   koko osion — matalana. object-fit: cover leikkaa lähdekuvasta ylä- ja
   alareunan, joten kalliopinta säilyy keskellä. */
.svc-ba-img {
  display: block;
  width: 100%;
  aspect-ratio: 16 / 10;
  object-fit: cover;
  border-radius: var(--ba-radius);
}
/* Vasen kuva täyttää sarakkeen korkeuden: kuvasuhde väistyy ja kuva
   rajautuu siihen korkeuteen jonka oikea sarake määrää. */
@media (min-width: 900px) {
  /* Rinnakkain kuvat päättyvät samaan linjaan, joten ulkonemalle varataan
     tila koko asettelun alle eikä kummallekin kuvalle erikseen: height:100%
     ja oma alamarginaali venyttäisivät vasemman kuvan riviä pidemmäksi. */
  .svc-ba-layout { padding-bottom: clamp(44px, 5vw, 56px); }
  .svc-ba-frame { margin-bottom: 0; }
  .svc-ba-frame--tall { height: 100%; }
  .svc-ba-frame--tall .svc-ba-img {
    position: absolute;
    inset: 0;
    height: 100%;
    aspect-ratio: auto;
  }
}
/* "Ennen"-kuva hieman haaleampi: pari lukeutuu aikajanana eikä kahtena
   rinnakkaisena työmaakuvana. Vaikutus on pieni, jotta kalliopinnan
   yksityiskohdat säilyvät näkyvissä. */
.svc-ba-frame--before .svc-ba-img { filter: saturate(0.7) brightness(0.94); }

/* Tekstipaneeli puoliksi kuvan päällä, puoliksi sen alapuolella:
   bottom: 0 + translateY(50%) keskittää kortin kuvan alareunalle kortin
   korkeudesta riippumatta. Kortti on sivun taustan värinen, joten
   ulkoneva puolikas tarvitsee pehmeän varjon erottuakseen sivusta. */
.svc-ba-card {
  position: absolute;
  left: clamp(12px, 1.4vw, 20px);
  right: clamp(12px, 1.4vw, 20px);
  bottom: 0;
  transform: translateY(50%);
  padding: clamp(14px, 1.6vw, 20px);
  border-radius: 14px;
  background: var(--bone);
  border: none;
  box-shadow:
    0 18px 40px -16px rgba(15, 23, 36, 0.22),
    0 4px 12px -6px rgba(15, 23, 36, 0.10);
  color: var(--c-body);
}
.svc-ba-card-label {
  display: block;
  font: var(--t-eyebrow);
  letter-spacing: var(--ls-eyebrow);
  text-transform: uppercase;
  color: var(--c-body);
  margin-bottom: 6px;
}
/* Aksenttisininen erottaa lopputuloksen lahtotilanteesta; vaalealla
   pinnalla se toimii sellaisenaan eika tarvitse omaa vaaleampaa savya. */
.svc-ba-card-label--after { color: var(--c-accent); }
.svc-ba-text {
  margin: 0;
  font: var(--t-meta);
  color: var(--c-body);
}
