/* ============================================================
   Equipment detail page (single-equipment.php)
   The machine page follows DESIGN.md §12: a complete machine
   picture, a blue parameter table, and the conditions stated
   beside the figures they belong to. Sections alternate white and
   light grey, one band carries the brand blue, and the green stays
   a short rule or a left edge — never a background.
   Tokens come from assets/css/tokens.css; the section head, the
   cards and the fields come from site.css / framework.css.
   ============================================================ */

.nz-eq {
  /* Nothing on this page may widen the viewport (§13 of DESIGN.md). */
  overflow-x: clip;
  background: var(--white);
}

/* ---- Section rhythm (§5: 96px desktop, 52–68px phone) ---- */
.nz-eq-section {
  padding: 96px 0;
}

.nz-eq-section--soft {
  background: var(--gray-bg);
}

.nz-eq-section--blue {
  background: var(--blue);
  color: var(--blue-soft);
}

.nz-eq-section .nz-related {
  margin-top: 0;
  padding-top: 0;
  border-top: 0;
}

/* The section head: the shared .section-heading with the spacing on the
   wrapper, so every section on this page keeps one margin. */
.nz-eq-head {
  margin-bottom: 42px;
}

.nz-eq-head .section-heading {
  margin-bottom: 0;
}

.nz-eq-head .section-heading__copy h2 {
  max-width: 26ch;
  margin-bottom: 0;
}

@media (max-width: 940px) {
  .nz-eq-head {
    margin-bottom: 30px;
  }
}

@media (max-width: 900px) {
  .nz-eq-section {
    padding: 68px 0;
  }

  .nz-eq-section--features-more {
    padding-bottom: 28px;
  }

  .nz-eq-section--features-next {
    padding-top: 28px;
  }
}

@media (max-width: 650px) {
  .nz-eq-section {
    padding: 52px 0;
  }

  .nz-eq-section--features-more {
    padding-bottom: 22px;
  }

  .nz-eq-section--features-next {
    padding-top: 22px;
  }
}

/* ---- Page open: the machine beside its own facts ---- */
.nz-eq-hero {
  padding: 40px 0 76px;
  background: var(--white);
}

.nz-eq-hero .nz-breadcrumbs {
  margin-bottom: 28px;
}

/* A grid child that holds wrapping text and long model names. */
.nz-eq-hero__copy {
  min-width: 0;
}

/* The machine's copy and its picture share one band and are centred in it, so
   the text block sits against the middle of the picture instead of hanging from
   its top edge and leaving a slab of empty space between the buttons and the
   fact strip. The picture takes the larger half and the two are held together
   by a narrow gutter, because the copy seldom fills its own column and a wide
   gutter reads as an empty hole between the words and the machine. Nothing is
   stretched, so a picture is never cropped to fit. */
.nz-eq-hero__grid {
  display: grid;
  gap: 40px;
  grid-template-columns: minmax(0, 6fr) minmax(0, 6.5fr);
  align-items: center;
}

/* A machine with no picture has no picture column: the copy is the whole band,
   so the grid keeps one column at every width instead of leaving a track that
   nothing fills. The media column's edge, ground and gutter go with it. */
.nz-eq-hero__grid--text-only {
  grid-template-columns: minmax(0, 1fr);
}

.nz-eq-hero__title {
  max-width: 20ch;
  margin-bottom: 16px;
}

.nz-eq-hero__lead {
  max-width: 62ch;
  margin-bottom: 0;
  font-size: 1.06rem;
  line-height: 1.65;
}

.nz-eq-tags {
  display: flex;
  flex-wrap: wrap;
  gap: 8px;
  margin: 20px 0 0;
  padding: 0;
  list-style: none;
}

.nz-eq-hero__actions {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: 16px 26px;
  margin-top: 30px;
}

.nz-eq-hero__media {
  margin: 0;
  border: 1px solid var(--gray-line);
  border-radius: var(--radius);
  background: var(--gray-bg);
  overflow: hidden;
}

.nz-eq-hero__img {
  display: block;
  width: 100%;
  height: auto;
  aspect-ratio: 4 / 3;
  object-fit: contain;
  background: var(--white);
}

/* ---- The fact strip: what the models in this range cover (§8: a technical
   panel carries a 3px brand-blue top edge and no shadow). ---- */
.nz-eq-facts {
  display: grid;
  gap: 0;
  grid-template-columns: repeat(auto-fit, minmax(230px, 1fr));
  margin: 56px 0 0;
  border: 1px solid var(--gray-line);
  border-top: 3px solid var(--blue);
  border-radius: var(--radius);
  background: var(--white);
}

.nz-eq-facts__row {
  padding: 20px 24px;
  border-left: 1px solid var(--gray-line);
}

.nz-eq-facts__row:first-child {
  border-left: 0;
}

.nz-eq-facts dt {
  color: var(--gray-text);
  font-size: 11.5px;
  font-weight: 600;
  letter-spacing: 0.06em;
  text-transform: uppercase;
}

.nz-eq-facts dd {
  margin: 6px 0 0;
  color: var(--blue);
  font-size: 1.05rem;
  font-weight: 600;
  font-variant-numeric: tabular-nums;
}

/* A fact that is a list of cases (参考工况) prints one short line per case, a
   step smaller than a single figure so the strip stays a panel of figures and
   not a column of prose. */
.nz-eq-facts__line {
  display: block;
  font-size: 0.94rem;
  line-height: 1.5;
  font-weight: 600;
}

.nz-eq-facts__line + .nz-eq-facts__line {
  margin-top: 3px;
}

.nz-eq-facts__note {
  max-width: 80ch;
  margin: 12px 0 0;
  color: var(--gray-text);
  font-size: 13px;
  line-height: 1.55;
}

/* ---- The indicative price (报价区间): the figure and the sentence that says
   what moves it stand in one block, so the number cannot be read on its own as a
   quotation. Green edge: this is a statement about the offer, not a figure about
   the machine. ---- */
.nz-eq-price {
  display: grid;
  gap: 10px 32px;
  grid-template-columns: minmax(0, 240px) minmax(0, 1fr);
  align-items: start;
  margin: 40px 0 0;
  padding: 18px 24px;
  border: 1px solid var(--gray-line);
  border-left: 3px solid var(--green);
  border-radius: var(--radius);
  background: var(--white);
}

.nz-eq-price__label {
  margin: 0;
  color: var(--gray-text);
  font-size: 11.5px;
  font-weight: 600;
  letter-spacing: 0.06em;
  text-transform: uppercase;
}

.nz-eq-price__figure {
  margin: 6px 0 0;
  color: var(--blue);
  font-size: 1.35rem;
  font-weight: 700;
  line-height: 1.2;
  font-variant-numeric: tabular-nums;
}

.nz-eq-price__note {
  margin: 0;
  color: var(--gray-text);
  font-size: 13px;
  line-height: 1.55;
}

/* The strip follows the price: one gap, not two stacked margins. */
.nz-eq-price + .nz-eq-facts {
  margin-top: 20px;
}

@media (max-width: 900px) {
  .nz-eq-price {
    grid-template-columns: minmax(0, 1fr);
    gap: 8px;
    padding: 16px 18px;
  }
}

/* ---- Body copy of a section ---- */
.nz-eq-lead {
  max-width: 68ch;
  margin-bottom: 26px;
  color: var(--text);
  font-size: 1.1rem;
  line-height: 1.65;
}

.nz-eq-prose {
  max-width: 78ch;
}

.nz-eq-prose > *:last-child {
  margin-bottom: 0;
}

.nz-eq-prose h3 {
  margin-top: 32px;
}

.nz-eq-prose ul,
.nz-eq-prose ol {
  max-width: 72ch;
  padding-left: 22px;
  color: var(--gray-text);
}

.nz-eq-prose li {
  margin-bottom: 8px;
}

.nz-eq-prose table {
  width: 100%;
  margin: 0 0 28px;
  border-collapse: collapse;
  font-size: 15px;
}

.nz-eq-prose th,
.nz-eq-prose td {
  padding: 12px 14px;
  border: 1px solid var(--gray-line);
  text-align: left;
  vertical-align: top;
}

.nz-eq-prose th {
  background: var(--gray-bg);
  color: var(--blue);
  font-weight: 700;
}

.nz-eq-subhead {
  margin: 0 0 14px;
  color: var(--blue);
  font-size: 1.05rem;
  font-weight: 700;
}

/* A second block inside the same column keeps its own distance. */
.nz-eq-split__col > .nz-eq-subhead:not(:first-child) {
  margin-top: 30px;
}

/* ---- The column that ends with the call to action ----
   The call to action closes the column instead of sitting under the section, so
   the split ends level: the column takes the height of the row and the button is
   pushed to the bottom of it. The padding on the button row keeps the distance
   from what is above it when there is no free space to absorb, which is the
   stacked layout and any column that is already the taller of the two. */
.nz-eq-split__col--cta {
  display: flex;
  flex-direction: column;
}

.nz-eq-split__col--cta .nz-eq-bluecta {
  padding-top: 30px;
  margin-top: auto;
}

/* ---- Condition cards (§8: rectangular, 1px edge, blue top edge) ----
   auto-fill, never auto-fit: a card row that is not full keeps the empty tracks
   it would have had when full, so three cards stay the width of a four-card row
   instead of stretching across it. Every card row on the equipment pages follows
   this (§Upd: 卡片尺寸固定).

   The 320px floor is not decoration: with auto-fill the column count comes from
   the floor and the gap, and the floor is what has to be chosen for the count.
   At the desktop container (1440px, gap 22px) a 320px floor gives
   (1440+22) ÷ (320+22) = 4.2 — four columns, so four cards fill the row and
   three leave one empty. At the 260px floor this grid had, it gave 5.1: the four
   cards of the conditions section were squeezed a fifth of the row narrower than
   a full row and left the fifth column empty. The other card rows are checked
   against the same sum — 300px floors give four columns, the scope's 380px floor
   gives three. */
.nz-eq-cards {
  display: grid;
  gap: 22px;
  grid-template-columns: repeat(auto-fill, minmax(320px, 1fr));
  align-items: stretch;
}

.nz-eq-card {
  display: flex;
  flex-direction: column;
  padding: 24px 24px;
  border: 1px solid var(--gray-line);
  border-top: 3px solid var(--blue);
  border-radius: var(--radius);
  background: var(--white);
}

.nz-eq-card__title {
  margin: 0 0 12px;
  color: var(--blue);
  font-size: 1.05rem;
  line-height: 1.35;
}

.nz-eq-card__text {
  color: var(--gray-text);
  font-size: 14.5px;
  line-height: 1.6;
}

.nz-eq-card__text > *:last-child {
  margin-bottom: 0;
}

.nz-eq-card__text p {
  margin: 0 0 12px;
}

.nz-eq-card__text ul {
  margin: 0 0 12px;
  padding-left: 18px;
}

.nz-eq-card__text li {
  margin-bottom: 8px;
  line-height: 1.5;
}

.nz-eq-card__text li:last-child {
  margin-bottom: 0;
}

/* ---- Capacity: the figure stays beside the basis it is stated on, and a
   picture added under the figure (产能配图) becomes the left half of a second
   row, where it takes its height from the basis panel beside it ---- */
.nz-eq-capacity {
  display: grid;
  gap: 28px 48px;
  grid-template-columns: minmax(0, 4fr) minmax(0, 6fr);
  align-items: stretch;
}

.nz-eq-capacity__figure {
  grid-column: 1;
  align-self: start;
  margin: 0;
  color: var(--blue);
  font-size: clamp(1.9rem, 3.4vw, 2.6rem);
  font-weight: 600;
  line-height: 1.15;
  font-variant-numeric: tabular-nums;
}

/* The basis panel sits beside the figure by auto-placement, so a page that has
   no picture keeps the layout it had: the figure left, the basis right. */
.nz-eq-capacity__basis {
  padding: 24px 28px;
  border-left: 3px solid var(--green);
  border-radius: var(--radius);
  background: var(--gray-bg);
}

.nz-eq-capacity__ask {
  max-width: 60ch;
  margin: 0;
  color: var(--gray-text);
  font-size: 15px;
  line-height: 1.65;
}

/* With the number and the picture both filled in, the picture takes the left
   column and the reading it belongs to — the number, and the basis under it —
   stays in the right one, so the two columns share one row height and end level
   whatever the file's own proportions are. With only one of the two filled in,
   the grid places the panels side by side on its own. */
.nz-eq-capacity--with-photo .nz-eq-capacity__figure {
  grid-column: 2;
  grid-row: 1;
}

.nz-eq-capacity--with-photo .nz-eq-capacity__media {
  grid-column: 1;
  grid-row: 1 / span 2;
}

.nz-eq-capacity--with-photo .nz-eq-capacity__ask {
  grid-column: 2;
  grid-row: 2;
}

/* 产能配图: the figure and its basis share the right panel — the aside above
   already reads the figure together with the basis below it — and the picture
   fills the left column beside the pair. One row, so the pair and the picture
   are level, and no row is left two thirds empty as it was when the figure took
   a row of its own. */
.nz-eq-capacity--pair .nz-eq-capacity__media,
.nz-eq-capacity--pair .nz-eq-capacity__basis {
  grid-row: 1;
}

.nz-eq-capacity--pair .nz-eq-capacity__basis {
  grid-column: 2;
}

.nz-eq-capacity--pair .nz-eq-capacity__media {
  grid-column: 1;
}

/* The figure at the head of the panel, over the subhead it is stated on. */
.nz-eq-capacity--pair .nz-eq-capacity__basis .nz-eq-capacity__figure {
  margin: 0 0 16px;
}

/* The picture panel: the same bordered technical panel as the diagrams above,
   with the photo held whole inside it (§: contain, never crop). Its height comes
   from the row, never from the file — a portrait or very tall image must not
   push the left half of the section past the right one. */
.nz-eq-capacity__media {
  display: flex;
  flex-direction: column;
  gap: 10px;
  min-height: 280px;
  max-height: 420px;
  margin: 0;
  padding: 16px;
  border: 1px solid var(--gray-line);
  border-top: 3px solid var(--blue);
  border-radius: var(--radius);
  background: var(--white);
}

.nz-eq-capacity__img {
  display: block;
  flex: 1 1 auto;
  width: 100%;
  min-height: 0;
  object-fit: contain;
  border-radius: 2px;
  background: var(--white);
}

/* ---- The model table (§12: a blue parameter table — the field names sit on
   the brand blue in white, thin rows below; the table scrolls inside its own
   box and never widens the page) ---- */
.nz-eq-table-hint {
  margin: 0 0 10px;
  color: var(--gray-text);
  font-size: 13px;
}

.nz-eq-table-wrap {
  overflow-x: auto;
  border: 1px solid var(--gray-line);
  border-radius: var(--radius);
  background: var(--white);
}

.nz-eq-table-wrap:focus-visible {
  outline: 2px solid var(--blue);
  outline-offset: 2px;
}

.nz-eq-table {
  width: 100%;
  min-width: 620px;
  border-collapse: collapse;
  font-size: 14px;
  font-variant-numeric: tabular-nums;
}

.nz-eq-table th,
.nz-eq-table td {
  padding: 11px 13px;
  border-right: 1px solid var(--gray-line);
  border-bottom: 1px solid var(--gray-line);
  text-align: left;
  vertical-align: top;
}

.nz-eq-table th:last-child,
.nz-eq-table td:last-child {
  border-right: 0;
}

.nz-eq-table thead th {
  border-bottom: 0;
  border-right-color: rgba(255, 255, 255, 0.25);
  background: var(--blue);
  color: var(--white);
  font-size: 11.5px;
  font-weight: 700;
  letter-spacing: 0.02em;
  line-height: 1.35;
  text-transform: uppercase;
  white-space: normal;
}

.nz-eq-table tbody tr:nth-child(even) td {
  background: #FBFCFD;
}

.nz-eq-table tbody tr:last-child td {
  border-bottom: 0;
}

.nz-eq-table__model {
  color: var(--blue);
  font-weight: 700;
  white-space: nowrap;
}

.nz-eq-table__sub {
  display: block;
  margin-top: 3px;
  color: var(--gray-text);
  font-size: 12px;
  font-weight: 400;
  white-space: normal;
}

/* ---- Parameters the comparison table does not place, one panel per model ---- */
.nz-eq-notes {
  display: grid;
  gap: 18px;
  grid-template-columns: repeat(auto-fill, minmax(300px, 1fr));
  margin-top: 26px;
}

.nz-eq-note {
  padding: 22px 24px;
  border: 1px solid var(--gray-line);
  border-radius: var(--radius);
  background: var(--white);
}

.nz-eq-note__model {
  margin: 0 0 14px;
  color: var(--blue);
  font-size: 1rem;
}

.nz-eq-note__list {
  margin: 0;
}

.nz-eq-note__list dt {
  color: var(--gray-text);
  font-size: 11.5px;
  font-weight: 600;
  letter-spacing: 0.06em;
  text-transform: uppercase;
}

.nz-eq-note__list dd {
  margin: 4px 0 16px;
  color: var(--text);
  font-size: 14.5px;
  line-height: 1.6;
}

.nz-eq-note__list dd:last-child {
  margin-bottom: 0;
}

/* A note is typed as plain text, while a value kept from the rich text field
   still carries its own paragraphs; both read as one clean block here. */
.nz-eq-note__list dd > p:first-child {
  margin-top: 0;
}

.nz-eq-note__list dd > p:last-child {
  margin-bottom: 0;
}

/* ---- Scope of supply: included, optional and excluded side by side ---- */
/* One panel per group instead of columns inside one panel: an unknown number
   of groups then never draws a separator in the wrong place when it wraps.
   The 380px floor is what makes three panels the full row here: with the floor
   of the other card rows the grid would fit four, and a two-group row would
   print its panels a quarter of the width instead of the third they keep when
   all three groups are filled in. */
.nz-eq-scope {
  display: grid;
  gap: 22px;
  grid-template-columns: repeat(auto-fill, minmax(380px, 1fr));
}

.nz-eq-scope__col {
  padding: 24px 26px;
  border: 1px solid var(--gray-line);
  border-top: 3px solid var(--blue);
  border-radius: var(--radius);
  background: var(--white);
}

.nz-eq-scope__label {
  margin: 0 0 16px;
  color: var(--blue);
  font-size: 1.05rem;
}

.nz-eq-scope__list {
  margin: 0;
  padding: 0;
  list-style: none;
}

.nz-eq-scope__item {
  display: flex;
  gap: 12px;
  padding: 12px 0;
  border-top: 1px solid var(--gray-line);
}

.nz-eq-scope__item:first-child {
  border-top: 0;
}

.nz-eq-scope__mark {
  flex: none;
  width: 16px;
  color: var(--green-dark);
  font-weight: 700;
}

.nz-eq-scope__col--excluded .nz-eq-scope__mark {
  color: var(--gray-text);
}

/* The text column of a row takes the remaining width and may break a long
   model name instead of widening the panel. */
.nz-eq-scope__body,
.nz-eq-checklist__body {
  flex: 1 1 auto;
  min-width: 0;
}

.nz-eq-scope__name {
  display: block;
  color: var(--text);
  font-size: 15px;
  font-weight: 600;
}

.nz-eq-scope__note {
  display: block;
  margin-top: 3px;
  color: var(--gray-text);
  font-size: 13.5px;
  line-height: 1.55;
}

/* ---- Two columns that become one when the text needs the width ---- */
.nz-eq-split {
  display: grid;
  gap: 36px 56px;
  grid-template-columns: repeat(auto-fit, minmax(320px, 1fr));
}

/* One column only (the blue band with no guide copy): the list keeps the width
   it has beside a guide instead of stretching across the whole band. */
.nz-eq-split--solo {
  grid-template-columns: minmax(0, 1fr);
}

.nz-eq-split--solo .nz-eq-split__col--cta {
  max-width: 60ch;
}

/* ---- Label / value rows ---- */
.nz-eq-dl {
  margin: 0;
  border-top: 1px solid var(--gray-line);
}

.nz-eq-dl__row {
  display: grid;
  gap: 2px 20px;
  grid-template-columns: minmax(150px, 220px) minmax(0, 1fr);
  padding: 12px 0;
  border-bottom: 1px solid var(--gray-line);
}

.nz-eq-dl dt {
  color: var(--blue);
  font-size: 13px;
  font-weight: 600;
}

.nz-eq-dl dd {
  margin: 0;
  color: var(--text);
  font-size: 15px;
  line-height: 1.6;
}

/* ---- The blue band: what we need before a model is quoted ----
   White on #1B3770 is about 11.5:1 and #B9C7E4 about 6.8:1, so the copy
   passes AA; the numbered list is not a green badge, it is a sequence. */
.nz-eq-section--blue h2,
.nz-eq-section--blue .nz-eq-subhead,
.nz-eq-section--blue .nz-eq-checklist__name {
  color: var(--white);
}

.nz-eq-section--blue .eyebrow {
  color: var(--white);
}

.nz-eq-section--blue .section-heading__aside,
.nz-eq-section--blue .nz-eq-prose p,
.nz-eq-section--blue .nz-eq-prose li,
.nz-eq-section--blue .nz-eq-checklist__note,
.nz-eq-section--blue .nz-eq-bluecta__note {
  color: var(--blue-soft);
}

.nz-eq-section--blue .nz-eq-prose h3 {
  color: var(--white);
}

/* ---- A faint photograph under the blue band -------------------------------
   A band may carry one wide picture behind all of it: centred, covering the
   whole band edge to edge, and faint enough that the brand blue still sets the
   contrast — it reads as a texture, never as a figure. The picture sits in a
   pseudo-element behind the copy, so it enters no reading order, carries no alt
   text and takes no tab stop. Each record names its own picture in the
   selection-band ground field and this is the only rule that draws it, so the
   strength is changed here and nowhere else; a record without a picture never
   downloads one and keeps the plain blue. */
.nz-eq-section--grounded {
  position: relative;
  isolation: isolate;
  overflow: hidden;
}

.nz-eq-section--grounded::before {
  position: absolute;
  z-index: -1;
  inset: 0;
  content: "";
  background-image: var(--nz-eq-band-ground, none);
  background-repeat: no-repeat;
  background-position: center;
  background-size: cover;
  opacity: 0.14;
  pointer-events: none;
}

/* A reader who asks for more contrast gets the plain band: the photograph gives
   way first, because it carries no information. */
@media (prefers-contrast: more) {
  .nz-eq-section--grounded::before {
    opacity: 0.04;
  }
}

.nz-eq-checklist {
  display: grid;
  gap: 14px;
  margin: 0;
  padding: 0;
  list-style: none;
}

.nz-eq-checklist__item {
  display: flex;
  gap: 16px;
  padding: 16px 18px;
  border: 1px solid rgba(255, 255, 255, 0.24);
  border-radius: var(--radius);
  background: rgba(255, 255, 255, 0.06);
}

.nz-eq-checklist__num {
  flex: none;
  color: var(--yellow);
  font-weight: 600;
  font-variant-numeric: tabular-nums;
}

.nz-eq-checklist__name {
  display: block;
  font-size: 15px;
  font-weight: 600;
}

.nz-eq-checklist__note {
  display: block;
  margin-top: 3px;
  font-size: 13.5px;
  line-height: 1.55;
}

/* ---- The installation view in the blue band: the same framed panel as the
   numbered list beside it, so the picture and the list read as one band ---- */
.nz-eq-selection__media {
  margin: 26px 0 0;
  padding: 10px 10px 0;
  border: 1px solid rgba(255, 255, 255, 0.24);
  border-radius: var(--radius);
  background: rgba(255, 255, 255, 0.06);
  overflow: hidden;
}

.nz-eq-selection__img {
  display: block;
  width: 100%;
  height: auto;
  aspect-ratio: 3 / 2;
  object-fit: cover;
  border-radius: calc(var(--radius) - 2px);
}

.nz-eq-selection__cap {
  padding: 10px 4px;
  color: var(--blue-soft);
  font-size: 13px;
  line-height: 1.5;
}

.nz-eq-bluecta {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: 16px 22px;
  margin: 40px 0 0;
}

.nz-eq-bluecta__note {
  margin: 0;
  font-size: 14px;
}

/* ---- Reading the band's own copy -----------------------------------------
   The guide is authored as a step list, so the band sets it as one: the bold
   lead-in of a step and of a sub-item stands on its own line instead of running
   into the sentence after it, and the sub-items hang on a rail under the step
   they belong to. The measure stops at 64ch, because a full column of 17px copy
   carries about 78 characters, which is longer than a paragraph can hold. */
.nz-eq-section--blue .nz-eq-prose {
  max-width: 64ch;
}

/* The opening line is the lead: white, one size up from the steps below it. */
.nz-eq-section--blue .nz-eq-prose > p:first-child {
  margin-bottom: 26px;
  color: var(--white);
  font-size: 1.05rem;
  line-height: 1.6;
}

/* A step: its lead-in holds its own line, and the steps stand apart, so each
   one reads as a separate decision. */
.nz-eq-section--blue .nz-eq-prose ul > li {
  margin-bottom: 26px;
}

.nz-eq-section--blue .nz-eq-prose ul > li:last-child {
  margin-bottom: 0;
}

.nz-eq-section--blue .nz-eq-prose ul > li > strong:first-child,
.nz-eq-section--blue .nz-eq-prose ul > li > em:first-child {
  display: block;
  margin-bottom: 9px;
  color: var(--white);
  font-size: 1.05rem;
  font-style: normal;
  font-weight: 600;
  line-height: 1.4;
}

/* The sub-items: one rail under the step they belong to, a short dash in the
   rail, the label in white and the detail in the band's soft colour, so a
   choice and the reason for it stay apart. */
.nz-eq-section--blue .nz-eq-prose ul ul {
  margin: 0;
  padding-left: 20px;
  border-left: 1px solid rgba(255, 255, 255, 0.22);
  list-style: none;
}

.nz-eq-section--blue .nz-eq-prose ul ul > li {
  position: relative;
  margin-bottom: 15px;
  font-size: 15px;
  line-height: 1.65;
}

.nz-eq-section--blue .nz-eq-prose ul ul > li:last-child {
  margin-bottom: 0;
}

.nz-eq-section--blue .nz-eq-prose ul ul > li::before {
  position: absolute;
  top: 0.8em;
  left: -13px;
  width: 7px;
  height: 1px;
  content: "";
  background: currentColor;
  opacity: 0.6;
}

.nz-eq-section--blue .nz-eq-prose ul ul > li > strong:first-child,
.nz-eq-section--blue .nz-eq-prose ul ul > li > em:first-child {
  display: block;
  margin-bottom: 3px;
  color: var(--white);
  font-size: 15.5px;
  font-style: normal;
  font-weight: 600;
}

/* ---- The numbered list beside the copy ----
   The figure keeps a column of its own, so every card's title starts on the
   same line whatever the count reaches, and the note under the title stays a
   step smaller than it. */
.nz-eq-section--blue .nz-eq-subhead {
  margin-bottom: 16px;
}

.nz-eq-section--blue .nz-eq-checklist__item {
  padding: 17px 20px;
}

.nz-eq-section--blue .nz-eq-checklist__num {
  width: 2.1em;
  padding-top: 1px;
  font-size: 14px;
  letter-spacing: 0.04em;
}

.nz-eq-section--blue .nz-eq-checklist__name {
  font-size: 15.5px;
  line-height: 1.4;
}

.nz-eq-section--blue .nz-eq-checklist__note {
  max-width: 68ch;
  margin-top: 4px;
  font-size: 14px;
  line-height: 1.6;
}

/* ---- Photos and videos ----
   Every frame in the grid is the same size, so the row reads as one grid of
   pictures instead of a ragged stack of different heights. The file keeps its
   own proportions inside that frame and is cropped to fill it (object-fit:
   cover), which is why the frame is square: the records' photographs are both
   wide workshop shots (4:3 and 16:9) and tall ones of a vertical machine
   (768 × 1024 and 768 × 1228), and a square trims the least from either. The
   whole picture is shown at its own size once it is opened, in the lightbox
   (framework.css: .nz-lightbox__img keeps width and height auto), so nothing
   is lost — only the thumbnail is cropped. */
.nz-eq-media {
  display: grid;
  gap: 16px;
  grid-template-columns: repeat(auto-fill, minmax(220px, 1fr));
  margin: 0;
  padding: 0;
  list-style: none;
}

.nz-eq-media__item {
  aspect-ratio: 1 / 1;
  border: 1px solid var(--gray-line);
  border-radius: var(--radius);
  background: var(--gray-bg);
  overflow: hidden;
}

.nz-eq-media__link {
  display: block;
  height: 100%;
}

/* The thumbnail fills its frame: the frame decides the size, the file fills it
   from the centre, and the border, radius and ground stay the item's own. */
.nz-eq-media__img {
  display: block;
  width: 100%;
  height: 100%;
  object-fit: cover;
  object-position: center;
}

.nz-eq-videos {
  margin-top: 34px;
}

.nz-eq-videos__list {
  display: grid;
  gap: 12px;
  margin: 0;
  padding: 0;
  list-style: none;
}

/* A row whose address was not usable keeps its title as plain text. */
.nz-eq-videos__plain {
  color: var(--gray-text);
  font-size: 15px;
}

/* ---- A record whose specification is not written yet ---- */
.nz-eq-empty {
  max-width: 72ch;
  padding: 30px 32px;
  border: 1px dashed var(--ph-border);
  border-left: 3px solid var(--green);
  border-radius: var(--radius);
  background: var(--gray-bg);
}

.nz-eq-empty__title {
  margin: 0 0 10px;
  color: var(--blue);
  font-size: 1.3rem;
}

.nz-eq-empty__text {
  margin-bottom: 0;
  font-size: 15px;
  line-height: 1.65;
}

.nz-eq-empty__cta {
  margin: 24px 0 0;
}

/* ---- A short ask at the foot of a section ----
   One line of copy and the button on the section's own hairline, closing the
   model table and the scope of supply. It has to be findable without reading as
   a second closing band: no ground of its own, no heading, and the scope's ask
   carries the accent green instead of repeating the blue of the ask above it.
   White on the brand green #4EAD5B is only 2.82:1, so the fill is the darker
   green the tokens pair with white text: #337D3E at rest (5.07:1), #2F7639 on
   hover (5.57:1). */
.nz-eq-ask {
  display: flex;
  flex-wrap: wrap;
  gap: 14px 28px;
  align-items: center;
  justify-content: space-between;
  margin-top: 42px;
  padding-top: 26px;
  border-top: 1px solid var(--gray-line);
}

.nz-eq-ask .button--secondary {
  color: var(--white);
  background: var(--green-dark);
  border-color: var(--green-dark);
}

.nz-eq-ask .button--secondary:hover,
.nz-eq-ask .button--secondary:focus-visible {
  color: var(--white);
  background: var(--hover-green);
  border-color: var(--hover-green);
}

.nz-eq-ask__text {
  max-width: 54ch;
  margin: 0;
  color: var(--text);
  font-size: 1.05rem;
  line-height: 1.5;
}

/* On a phone the copy and the button stack, and the button takes the whole
   width instead of a sliver beside the line. */
@media (max-width: 700px) {
  .nz-eq-ask {
    margin-top: 30px;
    padding-top: 22px;
  }

  .nz-eq-ask .button {
    width: 100%;
    justify-content: center;
  }
}

/* ---- Responsive (§13: the copy wraps, the table scrolls, the page never
   widens sideways) ---- */
@media (max-width: 1100px) {
  .nz-eq-hero__grid {
    gap: 32px;
  }
}

@media (max-width: 1000px) {
  .nz-eq-hero {
    padding-bottom: 60px;
  }

  .nz-eq-hero__grid {
    grid-template-columns: minmax(0, 1fr);
    gap: 34px;
  }

  .nz-eq-hero__title {
    max-width: 28ch;
  }

  .nz-eq-facts {
    margin-top: 40px;
  }

  .nz-eq-capacity {
    grid-template-columns: minmax(0, 1fr);
    gap: 28px;
  }

  /* One column: the number, the picture and the basis stack in that order, so
     the row placements above are given up here. */
  .nz-eq-capacity__figure,
  .nz-eq-capacity__basis,
  .nz-eq-capacity__ask,
  .nz-eq-capacity--with-photo .nz-eq-capacity__figure,
  .nz-eq-capacity--with-photo .nz-eq-capacity__media,
  .nz-eq-capacity--with-photo .nz-eq-capacity__basis,
  .nz-eq-capacity--with-photo .nz-eq-capacity__ask,
  .nz-eq-capacity--pair .nz-eq-capacity__figure,
  .nz-eq-capacity--pair .nz-eq-capacity__media,
  .nz-eq-capacity--pair .nz-eq-capacity__basis {
    grid-column: 1;
    grid-row: auto;
  }
}

@media (max-width: 700px) {
  .nz-eq-card,
  .nz-eq-scope__col,
  .nz-eq-note {
    padding: 22px 20px;
  }

  .nz-eq-capacity__basis,
  .nz-eq-empty {
    padding: 24px 20px;
  }

  .nz-eq-dl__row {
    grid-template-columns: minmax(0, 1fr);
  }

  .nz-eq-prose table {
    display: block;
    overflow-x: auto;
  }
}

/* ============================================================
   Text-and-picture blocks (structure diagram, key features,
   model cards). The picture stays a bordered technical panel:
   contain, never crop, so no machine contour is cut off.
   ============================================================ */

/* ---- Overview: the function read beside the machine's own diagrams.
   Equal desktop columns give the drawing enough room to balance the long copy;
   top alignment avoids leaving a large blank above a shorter technical image.
   The panel takes one or two drawings: the first keeps the contained 4:3 frame,
   the second is drawn at its own proportions under it, and the pair fills the
   column down to the copy so a long text does not leave the right side empty.
   Either drawing stays contained and is never cropped. ---- */
.nz-eq-overview--split {
  display: grid;
  gap: 32px 40px;
  grid-template-columns: minmax(0, 1fr) minmax(0, 1fr);
  align-items: start;
}

.nz-eq-overview__media {
  margin: 0;
  padding: 16px;
  border: 1px solid var(--gray-line);
  border-top: 3px solid var(--blue);
  border-radius: var(--radius);
  background: var(--white);
}

.nz-eq-overview__figure {
  margin: 0;
}

.nz-eq-overview__figure + .nz-eq-overview__figure {
  margin-top: 16px;
  padding-top: 16px;
  border-top: 1px solid var(--gray-line);
}

.nz-eq-overview__img {
  display: block;
  width: 100%;
  height: auto;
  border-radius: 2px;
  background: var(--white);
}

/* The first drawing holds the panel's 4:3 frame; the second is left at its own
   proportions, so it reads whole instead of inside another framed box. */
.nz-eq-overview__figure:first-child .nz-eq-overview__img {
  aspect-ratio: 4 / 3;
  object-fit: contain;
}

.nz-eq-media-cap {
  margin: 10px 4px 0;
  color: var(--gray-text);
  font-size: 13px;
  line-height: 1.5;
}

/* ---- Key features: one picture, one short text, one part ----
   auto-fill, so a layout that is described by two features prints two cards the
   width of a four-card row and closes the row early (§Upd). */
.nz-eq-features {
  display: grid;
  gap: 22px;
  grid-template-columns: repeat(auto-fill, minmax(300px, 1fr));
}

/* ---- A machine that comes in two layouts ----
   The shredder prints one features part per layout, each under the label of its
   own field. The two parts are one subject, so the seam between them keeps a
   tighter rhythm than a boundary between two sections does: 40px on each side of
   it on the desktop rhythm, and less where the sections themselves tighten. */
.nz-eq-section--features-more {
  padding-bottom: 40px;
}

.nz-eq-section--features-next {
  padding-top: 40px;
}

.nz-eq-feature {
  display: flex;
  flex-direction: column;
  border: 1px solid var(--gray-line);
  border-top: 3px solid var(--blue);
  border-radius: var(--radius);
  background: var(--white);
  overflow: hidden;
}

.nz-eq-feature__media {
  aspect-ratio: 4 / 3;
  margin: 0;
  background: var(--white);
  overflow: hidden;
}

.nz-eq-feature__img {
  display: block;
  width: 100%;
  height: 100%;
  object-fit: contain;
}

.nz-eq-feature__body {
  padding: 20px 24px 24px;
  border-top: 1px solid var(--gray-line);
}

/* A card filled with text only: the 4:3 picture frame is not printed, so the
   rule that closed it off from the text goes too, and the text block takes the
   height the card row gives the card instead of ending above it. The same
   modifier serves the wear-part cards, which are this same card. */
.nz-eq-feature--text-only .nz-eq-feature__body {
  flex: 1 1 auto;
  border-top: 0;
}

.nz-eq-feature__name {
  margin: 0 0 8px;
  color: var(--blue);
  font-size: 1.05rem;
}

.nz-eq-feature__text {
  margin: 0;
  color: var(--gray-text);
  font-size: 15px;
  line-height: 1.65;
}

.nz-eq-feature__text:last-child {
  margin-bottom: 0;
}

/* ---- Wear parts and recommended spares --------------------------------- */
/* The cards are the same picture cards as the key features above; only the
   group heading, the replacement basis line and the closing note are new. */
.nz-eq-parts__group + .nz-eq-parts__group {
  margin-top: 44px;
}

.nz-eq-parts__label {
  margin: 0 0 18px;
  padding-bottom: 10px;
  border-bottom: 1px solid var(--gray-line);
  color: var(--blue);
  font-size: 1.05rem;
}

.nz-eq-parts__basis {
  margin: 0 0 10px;
  color: var(--green-dark);
  font-size: 13.5px;
  font-weight: 600;
  line-height: 1.5;
}

.nz-eq-parts__note {
  max-width: 68ch;
  margin: 36px 0 0;
  color: var(--gray-text);
  font-size: 15px;
  line-height: 1.65;
}

/* ---- Model cards: a model's headline figures and the notes that belong to it ---- */
.nz-eq-model-cards {
  display: grid;
  gap: 22px;
  grid-template-columns: repeat(auto-fill, minmax(300px, 1fr));
}

.nz-eq-model-cards + .nz-eq-table-hint {
  margin-top: 34px;
}

.nz-eq-model-card {
  display: flex;
  flex-direction: column;
  border: 1px solid var(--gray-line);
  border-radius: var(--radius);
  background: var(--white);
  overflow: hidden;
}

/* ---- Delivered equipment: up to three machines already at work ----------
   Three to a row, the same card the home page prints: a 4:3 picture on white,
   a bordered shell that only changes its edge on hover, and the title and note
   inside the same 20/22 padding. */
.nz-eq-delivered {
  display: grid;
  gap: 26px;
  grid-template-columns: repeat(3, minmax(0, 1fr));
}

.nz-eq-delivered + .nz-eq-table-hint {
  margin-top: 34px;
}

.nz-eq-delivered__card {
  display: flex;
  flex-direction: column;
  overflow: hidden;
  border: 1px solid var(--gray-line);
  border-radius: var(--radius);
  background: var(--white);
  transition: border-color 180ms ease;
}

.nz-eq-delivered__card:hover,
.nz-eq-delivered__card:focus-within {
  border-color: var(--blue);
}

.nz-eq-delivered__media {
  display: block;
  aspect-ratio: 4 / 3;
  overflow: hidden;
  border-bottom: 1px solid var(--gray-line);
  background: var(--gray-bg);
}

.nz-eq-delivered__img {
  display: block;
  width: 100%;
  height: 100%;
  object-fit: cover;
}

.nz-eq-delivered__body {
  padding: 20px 22px 22px;
}

/* A card with no photo prints the body alone: the 4:3 frame and the rule under
   it are not printed, so the text block takes the height the grid gives the
   card instead of ending above it. */
.nz-eq-delivered__card--text-only .nz-eq-delivered__body {
  flex: 1 1 auto;
}

.nz-eq-delivered__title {
  margin: 0 0 10px;
  color: var(--text);
  font-size: 20px;
  line-height: 1.3;
}

.nz-eq-delivered__text {
  margin: 0;
  color: var(--text);
  font-size: 15px;
  line-height: 1.6;
}

/* ---- Delivery cases: the machine's projects, up to six cards ------------
   The same card as the delivered equipment above and as the project rows on
   the home page: category line, picture, title, the editor's summary, the
   year and place behind a rule, and the link the whole card carries. Three to
   a row, so six records read as two even rows. */
.nz-eq-delivery-cases {
  display: grid;
  gap: 26px;
  margin: 0;
  padding: 0;
  list-style: none;
  grid-template-columns: repeat(3, minmax(0, 1fr));
}

.nz-eq-delivery-case {
  margin: 0;
}

.nz-eq-delivery-case__link {
  display: flex;
  flex-direction: column;
  height: 100%;
  overflow: hidden;
  border: 1px solid var(--gray-line);
  border-radius: var(--radius);
  background: var(--white);
  color: inherit;
  text-decoration: none;
  transition: border-color 180ms ease;
}

.nz-eq-delivery-case__link:hover,
.nz-eq-delivery-case__link:focus-visible {
  border-color: var(--blue);
}

.nz-eq-delivery-case__media {
  display: block;
  aspect-ratio: 4 / 3;
  overflow: hidden;
  border-bottom: 1px solid var(--gray-line);
  background: var(--gray-bg);
}

.nz-eq-delivery-case__img {
  display: block;
  width: 100%;
  height: 100%;
  object-fit: cover;
}

.nz-eq-delivery-case__body {
  display: flex;
  flex: 1 1 auto;
  flex-direction: column;
  padding: 20px 22px 22px;
}

.nz-eq-delivery-case__cat {
  display: block;
  margin: 0 0 8px;
  color: var(--gray-text);
  font-size: 12px;
  font-weight: 600;
  letter-spacing: 0.07em;
  text-transform: uppercase;
}

.nz-eq-delivery-case__title {
  display: block;
  margin-bottom: 10px;
  color: var(--text);
  font-size: 20px;
  font-weight: 600;
  line-height: 1.3;
}

.nz-eq-delivery-case__text {
  display: block;
  margin-bottom: 16px;
  color: var(--text);
  font-size: 15px;
  line-height: 1.6;
}

.nz-eq-delivery-case__spec {
  display: block;
  margin-top: auto;
  padding-top: 14px;
  border-top: 1px solid var(--gray-line);
  color: var(--gray-text);
  font-size: 13.5px;
  line-height: 1.5;
}

.nz-eq-delivery-case__more {
  margin-top: 14px;
  align-self: flex-start;
  font-size: 14.5px;
}

.nz-eq-delivery-case__link:hover .nz-eq-delivery-case__title,
.nz-eq-delivery-case__link:focus-visible .nz-eq-delivery-case__title {
  text-decoration: underline;
}

/* Both card rows drop to two columns and then to one, like every other card
   row on the site. */
@media (max-width: 1024px) {
  .nz-eq-delivered,
  .nz-eq-delivery-cases {
    grid-template-columns: repeat(2, minmax(0, 1fr));
  }
}

@media (max-width: 640px) {
  .nz-eq-delivered,
  .nz-eq-delivery-cases {
    grid-template-columns: minmax(0, 1fr);
    gap: 20px;
  }
}

.nz-eq-model-card__body {
  display: flex;
  flex: 1;
  flex-direction: column;
  gap: 14px;
  padding: 20px 24px 24px;
}

.nz-eq-model-card__name {
  margin: 0;
  color: var(--blue);
  font-size: 1.15rem;
}

.nz-eq-model-card__specs {
  display: grid;
  gap: 0;
  margin: 0;
}

.nz-eq-model-card__spec {
  display: grid;
  grid-template-columns: minmax(0, 5fr) minmax(0, 7fr);
  gap: 14px;
  padding: 8px 0;
  border-bottom: 1px solid var(--gray-line);
}

.nz-eq-model-card__spec:last-child {
  border-bottom: 0;
}

.nz-eq-model-card__spec dt {
  color: var(--gray-text);
  font-size: 13px;
  font-weight: 400;
}

.nz-eq-model-card__spec dd {
  margin: 0;
  color: var(--text);
  font-size: 14.5px;
  font-weight: 600;
  font-variant-numeric: tabular-nums;
}

.nz-eq-model-card__notes {
  display: grid;
  gap: 8px;
  margin-top: auto;
  padding-top: 14px;
  border-top: 1px solid var(--gray-line);
}

.nz-eq-model-card__note-label {
  margin: 0;
  color: var(--gray-text);
  font-size: 11.5px;
  font-weight: 700;
  letter-spacing: 0.04em;
  text-transform: uppercase;
}

.nz-eq-model-card__note-text {
  color: var(--gray-text);
  font-size: 14px;
  line-height: 1.6;
}

.nz-eq-model-card__note-text > *:last-child {
  margin-bottom: 0;
}

@media (max-width: 900px) {
  .nz-eq-overview--split {
    grid-template-columns: minmax(0, 1fr);
    gap: 28px;
  }
}

/* ---- 型号表自定义代码 (§12): the record may carry the table as markup instead
   of letting the layout build it. That markup is a block of its own — its table
   box, its per-model notes, whatever the record needs — so the layer around it
   only scrolls and aligns. The metrics below are repeated under it rather than
   added to the .nz-eq-table selectors, so a hand-written table that carries no
   class still reads like the generated one, and the generated table cannot be
   affected by a change made for this. ---- */

.nz-eq-model-code {
  overflow-x: auto;
}

.nz-eq-model-code > *:first-child {
  margin-top: 0;
}

.nz-eq-model-code > *:last-child {
  margin-bottom: 0;
}

.nz-eq-model-code table {
  width: 100%;
  min-width: 620px;
  border-collapse: collapse;
  font-size: 14px;
  font-variant-numeric: tabular-nums;
}

.nz-eq-model-code th,
.nz-eq-model-code td {
  padding: 11px 13px;
  border-right: 1px solid var(--gray-line);
  border-bottom: 1px solid var(--gray-line);
  text-align: left;
  vertical-align: top;
}

.nz-eq-model-code th:last-child,
.nz-eq-model-code td:last-child {
  border-right: 0;
}

.nz-eq-model-code thead th {
  border-bottom: 0;
  border-right-color: rgba(255, 255, 255, 0.25);
  background: var(--blue);
  color: var(--white);
  font-size: 11.5px;
  font-weight: 700;
  letter-spacing: 0.02em;
  line-height: 1.35;
  text-transform: uppercase;
  white-space: normal;
}

.nz-eq-model-code tbody tr:nth-child(even) td {
  background: #FBFCFD;
}

.nz-eq-model-code tbody tr:last-child td {
  border-bottom: 0;
}

.nz-eq-model-code p {
  margin: 14px 0;
  color: var(--gray-text);
  font-size: 14px;
  line-height: 1.65;
}

/* ---- Questions: the shared FAQ rows under this page's own section head ---- */

/* The component supplies the accordion; the section head above supplies the
   heading, so the component's built-in title and its default top margin are not
   wanted here (the FAQ page switches them off the same way). */
.nz-eq-faq .nz-faq {
  margin-top: 0;
}

/* The answers are sentences, not labels: the list keeps a measure even though
   the section is full width, so a line does not run the whole 1200px. */
.nz-eq-faq .nz-faq__list {
  max-width: 860px;
}

/* Where the reader goes for the terms this machine page deliberately does not
   repeat. One line, the same type as the note under the spare-parts list. */
.nz-eq-faq__note {
  max-width: 68ch;
  margin: 36px 0 0;
  color: var(--gray-text);
  font-size: 15px;
  line-height: 1.65;
}

.nz-eq-faq__note a {
  color: var(--blue);
  font-weight: 600;
}
