/* =========================================================
   CASE COMPONENTS
   One source of truth for every portfolio case.
   SwipBox is the reference format.
   ========================================================= */

:root {
  --case-width: 1184px;
  --case-column-gap: 64px;
  --case-media-gap: 32px;
  --case-section-gap: 56px;
  --case-sticker-gap: 24px;
}

/* Shared case width. SwipBox source media is composed around 1184px. */
.case-page .case-shell,
.case-page .case-editorial {
  width: min(var(--case-width), calc(100% - 40px));
  margin-inline: auto;
}

/* ---------------------------------------------------------
   Hero annotations — identical placement in every case
   --------------------------------------------------------- */

.case-page .case-intro__annotated-media {
  position: relative;
  overflow: visible;
}

.case-page .case-intro__annotated-media .case-keyword,
.case-page .case-intro__annotated-media .case-postit {
  position: absolute;
  z-index: 5;
}

.case-page .case-intro__annotated-media .case-keyword--1 {
  left: -18px;
  top: 18%;
  right: auto;
  bottom: auto;
}

.case-page .case-intro__annotated-media .case-keyword--2 {
  right: -20px;
  top: 47%;
  left: auto;
  bottom: auto;
}

.case-page .case-intro__annotated-media .case-keyword--3 {
  left: 32%;
  bottom: -16px;
  right: auto;
  top: auto;
}

.case-page .case-intro__annotated-media .case-postit--1 {
  top: -24px;
  right: 28px;
  left: auto;
  bottom: auto;
}

.case-page .case-intro__annotated-media .case-postit--2 {
  left: -28px;
  top: 58%;
  right: auto;
  bottom: auto;
}

.case-page .case-intro__annotated-media .case-postit--3 {
  right: -24px;
  top: 72%;
  left: auto;
  bottom: auto;
}

/* ---------------------------------------------------------
   Challenge / Approach component
   Row 1: sticker
   Row 2: heading | bread text
   --------------------------------------------------------- */

.case-page .case-editorial--sticker {
  display: grid;
  grid-template-columns: repeat(2, minmax(0, 1fr));
  grid-template-areas:
    "sticker ."
    "heading body"
    "full full"
    "media media";
  column-gap: var(--case-column-gap);
  align-items: start;
}

.case-page .case-editorial--sticker > .case-editorial__sticker {
  grid-area: sticker;
  justify-self: start;
  margin: 0 0 var(--case-sticker-gap) !important;
}

.case-page .case-editorial--sticker > .case-editorial__heading {
  grid-area: heading;
  align-self: start;
  margin: 0 !important;
  padding: 0 !important;
}

.case-page .case-editorial--sticker > .case-editorial__body {
  grid-area: body;
  align-self: start;
  min-width: 0;
  max-width: none;
  margin: 0 !important;
  padding: 0 !important;
}

.case-page .case-editorial--sticker > .case-editorial__body > :first-child {
  margin-top: 0 !important;
  padding-top: 0 !important;
}

.case-page .case-editorial--sticker > .case-editorial__full {
  grid-area: full;
  width: 100%;
  min-width: 0;
  margin-top: 48px;
}

.case-page .case-editorial--sticker > .case-media-grid {
  grid-area: media;
  width: 100%;
  margin-top: var(--case-section-gap);
}

/* ---------------------------------------------------------
   Plain two-column component
   --------------------------------------------------------- */

.case-page .case-editorial--plain {
  display: grid;
  grid-template-columns: repeat(2, minmax(0, 1fr));
  grid-template-areas:
    "lead body"
    "media media";
  column-gap: var(--case-column-gap);
  align-items: start;
}

.case-page .case-editorial--plain > .case-editorial__lead {
  grid-area: lead;
  min-width: 0;
}

.case-page .case-editorial--plain > .case-editorial__body {
  grid-area: body;
  min-width: 0;
  max-width: none;
  margin: 0;
  padding: 0;
}

.case-page .case-editorial--plain > .case-editorial__lead > :first-child,
.case-page .case-editorial--plain > .case-editorial__body > :first-child {
  margin-top: 0 !important;
}

.case-page .case-editorial--plain > .case-media-grid {
  grid-area: media;
  width: 100%;
  margin-top: var(--case-section-gap);
}

/* ---------------------------------------------------------
   Case media
   Preserve supplied image proportions. Never crop body media.
   --------------------------------------------------------- */

.case-page .case-media-grid {
  width: 100%;
  display: grid;
  gap: var(--case-media-gap);
  align-items: start;
}

.case-page .case-media-natural {
  display: block;
  width: 100%;
  height: auto !important;
  max-width: 100%;
  object-fit: contain !important;
  border-radius: 8px;
}

.case-page .case-media-pair {
  display: grid;
  gap: var(--case-media-gap);
  align-items: start;
}

.case-page .case-media-pair--700-452 {
  grid-template-columns: minmax(0, 700fr) minmax(0, 452fr);
}

.case-page .case-media-pair--402-750 {
  grid-template-columns: minmax(0, 402fr) minmax(0, 750fr);
}

.case-page .case-media-grid--2 {
  grid-template-columns: repeat(2, minmax(0, 1fr));
}

/* SwipBox raw compositions. */
.case-page .case-media-grid--section1 {
  grid-template-columns: minmax(0, 700fr) minmax(0, 452fr);
}

.case-page .case-media-grid--section2 {
  grid-template-columns: minmax(0, 402fr) minmax(0, 750fr);
}

.case-page .case-media-grid--section2 > .case-media-grid__third {
  grid-column: 1 / -1;
}

.case-page .case-media-grid--section3 {
  grid-template-columns: minmax(0, 402fr) minmax(0, 750fr);
}

.case-page .case-media-grid--section3 > .case-media-grid__third {
  grid-column: 1 / -1;
}

.case-page .case-media-grid--section3 > .case-media-grid__fourth-right {
  grid-column: 1 / -1;
  width: 500px;
  max-width: 100%;
  justify-self: end;
}

.case-page .case-media-grid--section4,
.case-page .case-media-grid--full {
  grid-template-columns: 1fr;
}

.case-page .case-media-grid--outcome {
  grid-template-columns: minmax(0, 700fr) minmax(0, 452fr);
}

.case-page .case-media-grid .case-image-placeholder {
  width: 100%;
  min-width: 0;
  border-radius: 8px;
}

/* ---------------------------------------------------------
   Metadata
   --------------------------------------------------------- */

.case-page .case-meta-row--centered {
  text-align: center;
}

.case-page .case-meta-row--centered .case-meta__item {
  text-align: center;
  align-items: center;
}

.case-page .case-meta-row--centered .case-meta__item > * {
  width: 100%;
  text-align: center;
}

/* ---------------------------------------------------------
   Responsive
   --------------------------------------------------------- */

@media (max-width: 900px) {
  :root {
    --case-column-gap: 28px;
    --case-section-gap: 40px;
  }

  .case-page .case-editorial--sticker {
    grid-template-columns: 1fr;
    grid-template-areas:
      "sticker"
      "heading"
      "body"
      "media";
  }

  .case-page .case-editorial--sticker > .case-editorial__heading {
    margin-bottom: 28px !important;
  }

  .case-page .case-editorial--plain {
    grid-template-columns: 1fr;
    grid-template-areas:
      "lead"
      "body"
      "media";
    row-gap: 28px;
  }

  .case-page .case-media-grid--section1,
  .case-page .case-media-grid--section2,
  .case-page .case-media-grid--section3,
  .case-page .case-media-grid--outcome,
  .case-page .case-media-pair {
    grid-template-columns: 1fr;
  }

  .case-page .case-media-grid--section2 > .case-media-grid__third,
  .case-page .case-media-grid--section3 > .case-media-grid__third,
  .case-page .case-media-grid--section3 > .case-media-grid__fourth-right {
    grid-column: auto;
    width: 100%;
    justify-self: stretch;
  }

  .case-page .case-intro__annotated-media .case-keyword--1 {
    left: -10px;
  }

  .case-page .case-intro__annotated-media .case-keyword--2 {
    right: -10px;
  }

  .case-page .case-intro__annotated-media .case-postit--2 {
    left: -12px;
  }

  .case-page .case-intro__annotated-media .case-postit--3 {
    right: -12px;
  }
}


/* =========================================================
   DANFOSS — MEDIA
   Uses the same case component geometry as SwipBox.
   ========================================================= */

.case-page .case-intro__annotated-media > .case-intro__media-image {
  display: block;
  width: 100%;
  height: auto;
  border-radius: 8px;
}

.case-page .case-hero-band__image {
  display: block;
  width: 100%;
  height: auto;
  border-radius: 8px;
}

.case-page .case-media-grid--paired-stack {
  grid-template-columns: 1fr;
}

.case-page .case-media-pair--equal {
  grid-template-columns: repeat(2, minmax(0, 1fr));
}

.case-page .case-media-grid--outcome-single {
  grid-template-columns: 1fr;
}

@media (max-width: 900px) {
  .case-page .case-media-pair--equal {
    grid-template-columns: 1fr;
  }
}


/* =========================================================
   DANFOSS — EDITORIAL COLUMNS
   ========================================================= */
.case-page--danfoss .case-text-columns {
  display: grid;
  grid-template-columns: repeat(2, minmax(0, 1fr));
  gap: 32px;
  margin-top: 32px;
}

.case-page--danfoss .case-text-column h3 {
  margin: 0 0 12px;
}

.case-page--danfoss .case-text-column p {
  margin-top: 0;
}

.case-page--danfoss .case-text-column p + p {
  margin-top: 20px;
}

@media (max-width: 900px) {
  .case-page--danfoss .case-text-columns {
    grid-template-columns: 1fr;
  }
}



/* =========================================================
   DANFOSS — FULL-WIDTH COLUMNS
   ========================================================= */

/*
  These sections contain a two-column text component that itself should
  occupy the entire case width. They must not inherit the ordinary
  left-column/right-column editorial grid.
*/
.case-page--danfoss .case-editorial--columns-only {
  display: block;
}

.case-page--danfoss .case-editorial--columns-only > .case-editorial__body--full {
  width: 100%;
  max-width: none;
  margin: 0;
  padding: 0;
}

.case-page--danfoss .case-text-columns {
  display: grid;
  grid-template-columns: repeat(2, minmax(0, 1fr));
  gap: var(--case-column-gap);
  width: 100%;
  margin-top: 0;
}

.case-page--danfoss .case-editorial__full .case-text-columns {
  margin-top: 0;
}

.case-page--danfoss .case-editorial--columns-only > .case-media-grid {
  width: 100%;
  margin-top: var(--case-section-gap);
}

@media (max-width: 900px) {
  .case-page .case-editorial--sticker {
    grid-template-areas:
      "sticker"
      "heading"
      "body"
      "full"
      "media";
  }

  .case-page .case-editorial--sticker > .case-editorial__full {
    margin-top: 32px;
  }

  .case-page--danfoss .case-text-columns {
    grid-template-columns: 1fr;
    gap: 28px;
  }
}


/* =========================================================
   CUP STATION — MEDIA GEOMETRY
   Raw file proportions are the source of truth.
   ========================================================= */

.case-page--cup-station .case-intro__annotated-media {
  overflow: visible;
}

.case-page--cup-station .case-intro__media {
  display: block;
  width: 100%;
  height: 100%;
  object-fit: cover;
  border-radius: 8px !important;
}

.case-page--cup-station .case-hero-band__image {
  display: block;
  width: 100%;
  height: auto;
  object-fit: contain;
  border-radius: 8px;
}

/* True full-width two-column text blocks */
.case-page--cup-station .case-editorial__full {
  grid-area: full;
  width: 100%;
  max-width: none;
  margin-top: 48px;
}

.case-page--cup-station .case-editorial--columns-only {
  display: block;
}

.case-page--cup-station .case-editorial--columns-only > .case-editorial__body--full {
  width: 100%;
  max-width: none;
  margin: 0;
  padding: 0;
}

.case-page--cup-station .case-text-columns {
  display: grid;
  grid-template-columns: repeat(2, minmax(0, 1fr));
  gap: var(--case-column-gap);
  width: 100%;
  margin-top: 0;
}

.case-page--cup-station .case-editorial--columns-only > .case-media-grid {
  margin-top: var(--case-section-gap);
}

/* Images always preserve their raw aspect ratio */
.case-page--cup-station .cup-media-row img,
.case-page--cup-station .cup-media-stack > img,
.case-page--cup-station .cup-media-outcome-row img {
  display: block;
  width: 100%;
  height: auto !important;
  max-width: 100%;
  object-fit: contain !important;
  border-radius: 8px;
}

/* Paired rows use the exact source-width ratios; all source pairs are 550px tall */
.case-page--cup-station .cup-media-row {
  width: 100%;
  display: grid;
  gap: 32px;
  align-items: start;
}

.case-page--cup-station .cup-media-row--700-452 {
  grid-template-columns: minmax(0, 700fr) minmax(0, 452fr);
}

.case-page--cup-station .cup-media-row--402-750 {
  grid-template-columns: minmax(0, 402fr) minmax(0, 750fr);
}

.case-page--cup-station .cup-media-stack {
  display: grid;
  grid-template-columns: 1fr;
  gap: 32px;
  width: 100%;
}

/* Lone 700px raw images stay 700px wide on desktop */
.case-page--cup-station .cup-media-single-700 {
  width: 700px !important;
  max-width: 100%;
  justify-self: start;
}

/* Outcome: three raw 374x550 images stay on one row */
.case-page--cup-station .cup-media-outcome-row {
  width: 100%;
  display: grid;
  grid-template-columns: repeat(3, 374px);
  gap: 32px;
  justify-content: center;
  align-items: start;
}

.case-page--cup-station .cup-media-outcome-row img {
  width: 374px;
}

@media (max-width: 900px) {
  .case-page--cup-station .case-text-columns,
  .case-page--cup-station .cup-media-row,
  .case-page--cup-station .cup-media-outcome-row {
    grid-template-columns: 1fr;
  }

  .case-page--cup-station .case-editorial__full {
    margin-top: 32px;
  }

  .case-page--cup-station .cup-media-single-700,
  .case-page--cup-station .cup-media-outcome-row img {
    width: 100% !important;
  }
}

/*
  Outcome: three portrait images stay on one row, but are intentionally
  scaled down so the full row sits comfortably inside the grey outcome card.
*/
.case-page--cup-station .cup-media-outcome-row {
  width: 100%;
  display: grid;
  grid-template-columns: repeat(3, minmax(0, 1fr));
  gap: 24px;
  align-items: start;
}

.case-page--cup-station .cup-media-outcome-row img {
  display: block;
  width: 100%;
  height: auto !important;
  max-width: 100%;
  object-fit: contain !important;
  border-radius: 8px !important;
}


/* =========================================================
   CASE SECTION STICKER — VIEWPORT ENTRANCE
   ========================================================= */

.case-page .case-editorial__sticker {
  opacity: 0;
  visibility: hidden;
  transform: scale(.72) rotate(-4deg);
  transform-origin: center;
}

.case-page .case-editorial__sticker.is-in-view {
  visibility: visible;
  animation: case-section-sticker-pop .46s cubic-bezier(.18,.9,.28,1.28) forwards;
}

@keyframes case-section-sticker-pop {
  0% {
    opacity: 0;
    transform: scale(.72) rotate(-4deg);
  }
  72% {
    opacity: 1;
    transform: scale(1.08) rotate(-4deg);
  }
  100% {
    opacity: 1;
    transform: scale(1) rotate(-4deg);
  }
}
