/* =========================================================================
   ideas-n12.css — the automation page, on the site's palette and rhythm.

   Loads last, after ideas-section.css, so it maps that file's components
   onto the tokens the other three pages share without editing 3,800 lines
   of layout that works. The same job software-n12.css does for the
   software page.

   WHAT WAS DIFFERENT, measured before any of this was written:

     band ground     #2C2523                 vs  #171413
     cream           #FBF6F0                 vs  #F6F1EA
     body copy       17px at .84             vs  15px at .68
     eyebrow         #E0D2C5                 vs  cream at .70
     h1              58px                    vs  56 / 64
     primary CTA     14px, its own class     vs  16px, shared
     masthead        42px logo + a button    vs  .n12-head, 8 links
     footer          .site-footer--overlay   vs  .site-footer
     reveals         none                    vs  on all three

   Every one of those came from site.css, which this page no longer loads.
   What is left here is the part site.css was not responsible for.
   ========================================================================= */

:root{
  --au-ground:#171413;
  --au-ground-dark:#0F0D0C;
  --au-accent:#B28479;
  --au-cream:#F6F1EA;

  /* THE PAGE GUTTER, which this page did not have.
     Measured at three widths, home starts its copy at x102 / 115 / 120
     for viewports 1280 / 1440 / 1920 -- a full-bleed wrapper on an 8vw
     gutter. This page centred a 1160px column instead, which starts at
     x60 / 140 / 380. It agrees with home at no width at all; it merely
     crosses it near 1400. Same declaration as software-n12.css:67 and
     planning-n12.css:56. */
  --hx-inset:clamp(44px,8vw,120px);
}
@media(max-width:760px){
  :root{--hx-inset:var(--n12-gutter,32px)}
}

/* ------------------------------ the hero ------------------------------

   WRITTEN FRESH, NOT OVERRIDDEN. ideas-section.css declared .auto-hero
   in eight separate rules and .cs-cta-block in fifteen, with twenty-odd
   !important between them -- each one written to beat the last rather
   than to replace it. 169 rules for these two components came out of
   that file; this is what replaces them.

   The grid, the cards and the modal stayed. They are not patched and
   they are the best thing on the page. */
.auto-hero{
  /* flex-start, NOT center. With align-items:center the copy was centred
     in what the padding left over, so its eyebrow landed at y182 where
     planning and software both put theirs at y128 -- the 128px padding
     was correct and then 54px of leftover space was added on top of it.
     Starting the copy at the padding edge is what the other two do. */
  position:relative;display:flex;align-items:flex-start;overflow:hidden;
  background:var(--au-ground-dark);
  /* 128 like the other two heroes: 104 of masthead plus 24 of air. It
     ran 116, which is close enough to look intentional and is not the
     number the rest of the site uses. */
  padding:128px var(--hx-inset) 78px;
  /* 540, WHICH IS PLANNING'S HERO EXACTLY.

     Setting min-height:0 and letting the copy decide gave 432px -- the
     shortest band on the site by a long way, against home's 1000,
     planning's 540 and software's 1153. That is most of why the page
     read as unfinished: the footage had no room to be a picture, it was
     a strip behind two lines of type.

     The other two tall heroes are tall because they hold something -- a
     plan window, an app. This one holds copy AND the stat bar now, so
     640: the copy ends at 352, the bar is about 170 tall sitting on the
     bottom edge, and the 118px between them is the band rhythm the rest
     of the site runs. At 540 the two touched. */
  min-height:640px;
}

/* THE STAT BAR, OVER THE FOOTAGE.

   Translucent rather than a solid strip, so the light trails carry
   through underneath it and the hero reads as one picture with a band
   across its foot instead of a picture and then a bar.

   .72 plus the blur is what the labels need: over moving footage a
   lighter ground let the trails pass behind the type. The blur matters
   as much as the alpha -- it removes the high-frequency detail that
   makes small text hard to hold onto, which a flat wash alone does not. */
.auto-hero .cs-intro{
  position:absolute;left:0;right:0;bottom:0;z-index:2;
  margin:0!important;padding:0!important;max-width:none!important;
}
.auto-hero .cs-budget-bar{
  /* .56, down from .72 -- more of the footage carries through. The blur
     goes up to 18 to pay for it: it is the blur rather than the alpha
     that keeps small text readable over moving footage, by removing the
     high-frequency detail the eye has to hold the type against. Labels
     measured after the change, not assumed. */
  /* NO WASH, A SMALL BLUR. The footage runs through at full brightness;
     the blur only takes the high-frequency detail out from under the
     type.

     14px. 5 first, then 10, then this -- softer each time she asked.
     Swept 0 / 3 / 5 / 7 / 10 / 18 with the type hidden, sampling the
     95th percentile of luminance under each label box across four
     frames of the moving footage and keeping the worst cell:

       0px  8.43:1     7px  9.61:1
       3px  9.42:1    10px  9.71:1
       5px  9.56:1    18px  9.99:1

     So contrast is not what is being bought here -- it flattens out past
     5px, and everything from 7 up is within half a point. This is a
     LOOK, and the measurement is only here to confirm it costs nothing:
     the worst cell is the fourth at every value, because it sits over
     the light trails, which are the brightest thing in the frame and the
     only part of it that moves much.

     14 rather than 18 because 18 is roughly where the strip stops
     reading as softened footage and starts reading as frosted glass over
     it -- the shapes behind the type go from out of focus to gone. If
     that is the look she is after, 18 and beyond is available; it costs
     nothing in contrast. */
  background:transparent;
  -webkit-backdrop-filter:blur(20px);
  backdrop-filter:blur(20px);
  border-bottom:0;
}
.auto-hero .cs-budget-item{padding:28px 30px}

/* LESS BLUR ON A PHONE. 20px is tuned for a 1440-wide strip sitting over
   a wide frame of moving footage, where there is plenty of picture
   behind each cell to soften. At 390 the strip is four stacked rows over
   a much smaller crop of the same video, so the same radius eats
   everything behind it and the panel reads as opaque frosted glass
   rather than as softened footage.

   8px keeps the material and gives the shapes behind it back. It also
   costs nothing: the contrast table above flattens out past 5px, so
   every value from 5 up is within half a point of the others. */
@media(max-width:700px){
  .auto-hero .cs-budget-bar{
    -webkit-backdrop-filter:blur(8px);
    backdrop-filter:blur(8px);
  }
}
.auto-hero-bg{
  position:absolute;inset:0;width:100%;height:100%;
  object-fit:cover;z-index:0;
  /* THE GRADE, AND WHY IT IS A COLOUR MATRIX RATHER THAN A FILTER.

     What she asked for: desaturate overall, lift the blues and reds,
     pull the yellows down, and fade the top to dark.

     saturate() cannot do that. It moves every hue by the same amount,
     so taking the yellows down takes the reds with them -- and on this
     footage the reds ARE the light trails. hue-rotate() cannot either;
     it spins the whole wheel rather than touching one part of it.

     A feColorMatrix can, because it works per channel. The matrix in
     ideas.html does three things at once:

       - an overall pull toward luminance, which is the desaturation;
       - a small boost to the red and blue channels' own contributions,
         which lifts those two back out of it;
       - a reduction in the GREEN channel's contribution to red and
         green, which is what takes yellow down: yellow is red plus
         green, so it is the only hue that loses on both counts while
         red keeps its own channel and blue is untouched.

     The fade to dark at the top is a separate layer -- a gradient over
     the footage rather than part of the grade, because a matrix has no
     idea where in the frame a pixel is. */
  opacity:1;
  /* Matrix for hue, then home's own pair for saturation and exposure.
     Measured: matrix alone gives hue 16 (home's exactly) but sat .384 and
     lum 43.2 against home's .163 and 28.0. Chaining saturate(.6)
     brightness(.74) -- the literal declaration on .cl's background --
     brings it to sat .220, lum 35.1, R/B 1.56. It stays a little lighter
     than home's band on purpose: that band has a flat .7 wash over the
     whole area, where this one is only faded at the top so the light
     trails still read across the lower half.

     .72 rather than home's .6: she asked for more red again after seeing
     it at .6. Measured on the right half, where no scrim reaches, that
     moves the frame from sat .315 / R-to-B 1.92 to sat .361 / 2.13. The
     next step up (.85 on a fully red-keeping matrix, R/B 2.53) took the
     headline below 3:1 even behind the scrim, so this is as far as the
     red goes while the type still passes. */
  filter:url(#autoGrade) saturate(.72) brightness(.74);
}
/* TWO LAYERS: a pool behind the copy, and the top fade under the masthead.

   The headline was failing on contrast -- measured against the brightest
   ground pixel under it, with the type hidden so the reading is of the
   footage and not of the type's own antialiased edge, it came in at
   2.21:1 where large text needs 3. The top fade cleared by 46% and the
   copy starts at about 40%, so most of the headline sat on ungraded dune.

   The pool is an ellipse rather than a left-to-right ramp because the
   copy is centred: a 90deg ramp measured fine (3.41:1) but would be
   darkest at the headline's left edge and lightest at its right.

   Of the three symmetric options tested, this one costs the light trails
   least -- they keep 124 of 153 of their brightness, against 117 for a
   full vertical veil -- and still takes the headline to 6.66:1. */
.auto-hero::after{
  content:"";position:absolute;inset:0;z-index:0;pointer-events:none;
  /* LIGHTER THAN IT WAS. The pool is symmetric, but the footage is not
     -- measured in six vertical bands the left half of the frame reads
     17 points darker than the right, because the dune and the light
     trails are all on the right. So the same pool that is unnoticeable
     over the bright side is heavy over the dark one.

     It was .80 / .52 / .16 and took the headline to 6.66:1 when 3 is
     what large text needs, which is a lot of room to give back. */
  /* Back up to .74 from .56. Taking it to .56 to lighten the left made
     the type itself weaker than it should be -- the copy is centred, so
     it sits over the part of the frame the dune lights, not the dark
     left. The ellipse is also tightened to 54% so what it darkens is the
     copy's own footprint rather than most of the band. */
  /* CENTRED ON THE COPY, AND IT STOPS BEFORE THE STAT BAR.

     This was ellipse 58% 62% at 50% 48% -- a 62% vertical radius from a
     48% centre spans the entire hero, so it was still laying about .5
     alpha over the stat bar at the bottom. That is three times what the
     bar's own wash contributes, which is why making the bar more
     transparent kept doing nothing visible: measured, taking the bar
     from .28 to .16 moved it 2.2 luminance points, and removing its
     wash altogether would only have found 4 more.

     36% centre with a 40% radius reaches y0 to y486 of a 640px hero.
     The copy ends at 352 and the bar starts at 460, so the scrim covers
     what it is for and has faded to nothing by the time it gets there. */
  background:
    radial-gradient(ellipse 58% 40% at 50% 36%,
      rgba(15,13,12,.88) 0%,
      rgba(15,13,12,.72) 44%,
      rgba(15,13,12,.42) 70%,
      rgba(15,13,12,.14) 88%,
      rgba(15,13,12,0) 100%),
    linear-gradient(180deg,
      rgba(15,13,12,.92) 0%,
      rgba(15,13,12,.72) 16%,
      rgba(15,13,12,.34) 32%,
      rgba(15,13,12,0) 46%);
}
/* THE COPY SITS ABOVE THE FOOTAGE.

   Same lesson as the software hero: a positioned element with z-index 0
   paints in the final layer, above block backgrounds AND inline text, so
   anything not itself lifted sits under it. The video is that element
   here. */
/* Full bleed on the hero's own --hx-inset padding, NOT a centred column.
   The copy cap moves onto the copy itself, which is how home does it --
   .cl-copy caps at 920 inside a padded .cl-wrap. 1160 is the width the
   column had at 1440, so nothing reflows there; it just stops walking
   right as the viewport grows. */
.auto-hero-wrap{position:relative;z-index:1;width:100%;max-width:none;margin:0}

/* CENTRED, because the other two service pages are. Measured rather than
   eyeballed: planning and software both declare text-align:center on the
   hero and sit symmetrically in it; home is left set, but home is not a
   service page. This was the only one of the three set left.

   The section headings BELOW the hero stay left on --hx-inset, which is
   what planning and software do too. */
.auto-hero-copy{max-width:880px;margin:0 auto;text-align:center}
.auto-hero-actions{justify-content:center}
/* !important because ideas-section.css sets this eyebrow to 14px with
   one -- it was painting 14px against planning's and software's 12px,
   which is why the two lines above the headline read heavier here. The
   2.04px tracking is what those two compute to at 12px. */
.auto-hero .eyebrow,
.auto-hero-copy .eyebrow{
  font-family:'Questrial',sans-serif;
  font-size:12px!important;font-weight:700;
  letter-spacing:2.04px!important;text-transform:uppercase;
  line-height:1!important;
  color:rgba(246,241,234,.7);
  margin:0 0 12px;display:block;
}
.auto-hero h1{
  font-family:'League Spartan',sans-serif;font-weight:700;
  /* 56, the software page's. The two are the same kind of page -- a
     service with a long headline -- where planning's 64 carries three
     words. */
  font-size:var(--n12-h1);
  /* 1.02 and -.035em are what planning and software both compute to:
     56/57.12 with -1.96px of tracking, 64/65.28 with -2.24px. This was
     -.03em, which read a touch looser than either of them. */
  line-height:1.02;letter-spacing:-.035em;text-transform:lowercase;
  color:var(--au-cream);
  margin:0 0 18px;max-width:none;
}
.auto-hero-copy p{
  font-family:'Questrial',sans-serif;
  /* 15.5/1.58, which is what the software hero's caption computes to.
     This was 15/24 -- the site's section-body token, which is the right
     size in a band and slightly small under a 56px headline. */
  font-size:15.5px;line-height:1.58;color:rgba(246,241,234,.68);
  /* auto, and it has to be in THIS rule. The paragraph carries its own
     max-width inside an 880px centred column, so with margin 0 the BOX
     sat hard left and text-align:center only centred the lines inside
     it -- it measured L280 / R649 where every other line in the hero
     measured L280 / R280. Setting the auto margins in an earlier rule
     did nothing: this shorthand comes later and resets them to 0. */
  margin:0 auto 30px;max-width:62ch;
}
.auto-hero-actions{
  display:flex;align-items:center;gap:26px;flex-wrap:wrap;
}

/* The primary joins the shared button. cta-n12.css lists it by class, so
   the only thing needed here is to clear what ideas-section.css set. */
.auto-btn--primary{
  border-radius:0;letter-spacing:normal;
}
.auto-download-icon{width:17px;height:17px;flex:none;stroke:currentColor;
  fill:none;stroke-width:1.6;stroke-linecap:round;stroke-linejoin:round}

/* THE CHECKLIST ARROW MOVES DOWN, NOT RIGHT. The shared hover nudges
   every arrow 4px along the x-axis, which is right for a link that takes
   you somewhere else -- but this one points down and downloads a file,
   so sideways movement contradicted the mark. */
.auto-hero-actions .auto-btn--text:hover .n12-arw{
  transform:translateY(3px)!important;
}

/* --------------------------- the stat band ----------------------------
   Kept, because it is a good device and it appears nowhere else on the
   site -- four claims a reader can check, before any of the case studies
   ask for attention.

   Restyled onto the page's grounds: it ran #1D1E1E, a cool near-black
   that belongs to no other band on this site, and the hairlines between
   its cells were the only vertical rules anywhere. */
/* THE RUNNING BORDER COMES BACK.

   It went out with the 215 stripped rules and she wants it -- rightly,
   it is the one piece of motion on the page besides the footage, and it
   is what makes the four claims read as a single instrument rather than
   four boxes.

   How it works, since it is not obvious from the declarations: a conic
   gradient is painted over the whole bar, then masked so only the 1.5px
   border ring survives -- two full-cover masks composited with xor, so
   the content box is subtracted and the padding ring is what is left.
   The gradient is transparent for 320 of its 360 degrees, so what you
   see is a short bright arc. Animating the angle runs that arc round
   the edge.

   --proof-glow-angle has to be a registered @property or it cannot be
   animated: a plain custom property is a string to the animation engine
   and would jump from 0 to 360 in one step rather than sweep.

   Two changes from the original. The arc was #E0D2C5 with an orange
   lead, which is site.css's cream and a colour this site does not use;
   it is clay leading into the real cream now. And the ground under it
   was rgba(35,31,32,.38) over #2C2523 -- this page's grounds do not
   exist any more, so it sits on #171413 like every other band. */
@property --proof-glow-angle{
  syntax:"<angle>";
  inherits:false;
  initial-value:0deg;
}
@keyframes proofStripGlow{to{--proof-glow-angle:360deg}}

.cs-budget-bar{
  position:relative;isolation:isolate;overflow:hidden;
  display:grid;grid-template-columns:repeat(4,1fr);
  /* the darker ground, #0F0D0C, which is what the hero above it and the
     wrap below it are already on. It was #171413 -- a shade lighter than
     both of its neighbours, which made the band read as a panel laid on
     the page rather than part of it. Its two hairlines still define it. */
  background:var(--au-ground-dark);
  width:100%;
  border-top:1px solid rgba(246,241,234,.09);
  border-bottom:1px solid rgba(246,241,234,.09);
}
.cs-budget-bar::before{
  content:"";position:absolute;inset:0;z-index:3;
  padding:1.5px;pointer-events:none;
  background:conic-gradient(
    from var(--proof-glow-angle,0deg),
    transparent 0deg,
    transparent 320deg,
    rgba(178,132,121,0) 330deg,
    rgba(178,132,121,.55) 339deg,
    #F6F1EA 348deg,
    rgba(246,241,234,.62) 355deg,
    transparent 360deg
  );
  -webkit-mask:linear-gradient(#000 0 0) content-box,linear-gradient(#000 0 0);
  -webkit-mask-composite:xor;
  mask:linear-gradient(#000 0 0) content-box,linear-gradient(#000 0 0);
  mask-composite:exclude;
  filter:drop-shadow(0 0 7px rgba(178,132,121,.5));
  animation:proofStripGlow 9s linear infinite;
}
/* Stopped, not removed: the ring stays lit at the angle it would rest
   at, so the band still reads as one object. */
@media(prefers-reduced-motion:reduce){
  .cs-budget-bar::before{animation:none;--proof-glow-angle:345deg}
}
.cs-budget-item{
  display:flex;flex-direction:column;align-items:center;text-align:center;
  gap:10px;
  border-left:1px solid rgba(246,241,234,.10);
  padding:34px 30px;
}
.cs-budget-item:first-child{border-left:0}
.cs-budget-icon{
  width:22px;height:22px;flex:none;
  color:var(--au-accent);opacity:1;
}
.cs-budget-label{
  font-family:'Questrial',sans-serif;
  font-size:14px;line-height:21px;color:rgba(246,241,234,.62);
  /* 235px, which is what the old band used. 24ch at 14px Questrial is
     about 168px -- narrow enough that every cell gained a line and the
     four stopped reading as one row. */
  max-width:235px;
}
.cs-budget-amt{
  display:block;
  font-family:'League Spartan',sans-serif;font-weight:700;
  /* 30px flat, the old band's figure size. The clamp resolved to 32 at
     1440 and kept growing the type against a fixed label, which is the
     other half of why the row lost its balance. */
  font-size:30px;line-height:1.05;letter-spacing:-.02em;
  color:var(--au-cream);
  margin:6px 0 4px;
}
/* THE FOURTH CELL. Its figure slot holds "ASK WHY", which is not a
   figure -- at 30px League Spartan it became the largest thing in the
   band and gave that cell a different shape from the other three. The
   old band caught this and set it as a tracked eyebrow instead, at the
   same 14px as the page's other eyebrows. Restored. */
/* CREAM, NOT CLAY. The other three cells in this row carry a figure in
   --au-cream; this one carries two words instead, and in the accent it
   read as the quietest thing in the row rather than the one that is
   making a point. Cream is the lightest colour the site uses. */
.cs-budget-amt.cs-budget-callout{
  font-family:'Questrial',sans-serif;
  font-size:14px;font-weight:700;line-height:1;
  letter-spacing:.22em;text-transform:uppercase;
  color:var(--au-cream);
  margin:8px 0 6px;
}
/* The fourth cell is the odd one: it has no figure, it has a two-word
   instruction and a sentence. Its "ASK WHY" takes the eyebrow treatment
   rather than the figure treatment, because it is not a number and
   setting it at 32px would have it read as one. */
.cs-budget-item strong{
  display:block;
  font-family:'Questrial',sans-serif;
  font-size:12px;font-weight:700;letter-spacing:.14em;text-transform:uppercase;
  color:var(--au-cream);
  margin:2px 0 4px;
}

/* -------------------------- the case studies --------------------------
   The grid, the cards and the modal are left alone. They are the best
   thing on this page and they work. Only their colours move. */
/* AND THE GRID COMES BACK.

   Two 1px hairline gradients tiled at 32px make the graph paper, and a
   radial wash in the top right gives the band a light source rather
   than a flat fill. She liked it and it was thrown out with everything
   else.

   Re-coloured: the lines were rgba(224,210,197,.025), site.css's cream,
   and the wash was rgba(193,109,70,.10), an orange this site does not
   use. Cream at the same weight and clay for the wash. The vertical
   gradient underneath ran #2C2523 to #332C2A, two grounds that no
   longer exist here -- it is #0F0D0C flat now, which is what the rest
   of the page sits on. */
/* THE SECTION TAKES ITS OWN COLOUR -- mockup option three.

   The 32px lattice is gone. At 2.4% over the dark ground, against nine
   panels that each carry their own lift, it read as texture competing
   with the content rather than as ground.

   What replaces it is a clay wash across the whole band, so the case
   studies separate from the page by colour rather than by pattern. Two
   washes rather than one: a broad one from the top-left that carries the
   band, and a smaller warmer one from the right so it is not flat. */
.cs-wrap{
  position:relative;
  /* FLAT. The lattice went first, then the clay washes that replaced it,
     and both were the same mistake: decorating the ground instead of
     letting the content sit on it.

     Tried it swapped -- lighter section, darker cards -- and it reads
     worse: the cards go flat into the page instead of sitting on it.
     Back to the darker ground with the cards lifted 4% above it. */
  background:var(--au-ground-dark);
}
.cs-head h2,.cs-intro h2{
  font-family:'League Spartan',sans-serif;font-weight:700;
  /* 38, which is every section heading on all three other pages.
     -.035em, not -.03: planning and software both run -.035 and this
     was a third of an em off them. */
  font-size:clamp(29px,3.2vw,38px);
  line-height:1.04;letter-spacing:-.035em;text-transform:lowercase;
  color:var(--au-cream);
}
.cs-card{
  background:rgba(246,241,234,.022);
  border:1px solid rgba(246,241,234,.09);
  border-radius:10px;
}
.cs-card:hover{
  border-color:rgba(246,241,234,.2);
  background:rgba(246,241,234,.04);
}
.cs-card-head h2{
  font-family:'League Spartan',sans-serif;font-weight:700;
  font-size:22px;line-height:1.08;letter-spacing:-.02em;text-transform:lowercase;
  color:var(--au-cream);
}
.cs-tag{
  font-family:'Questrial',sans-serif;
  font-size:10.5px;font-weight:700;letter-spacing:.12em;text-transform:uppercase;
  color:var(--au-accent);
  background:rgba(178,132,121,.1);
  border:1px solid rgba(178,132,121,.28);
}
.cs-meta,.cs-card-meta{
  font-family:'Questrial',sans-serif;
  font-size:13.5px;line-height:20px;color:rgba(246,241,234,.6);
}
.cs-meta b,.cs-card-meta b{color:rgba(246,241,234,.86);font-weight:400}

/* the filter chips take the site's quiet-control treatment */
.cs-filter-chip{
  font-family:'Questrial',sans-serif;
  font-size:12.5px;font-weight:400;letter-spacing:.02em;text-transform:lowercase;
  color:rgba(246,241,234,.62);
  background:none;
  border:1px solid rgba(246,241,234,.16);
  border-radius:999px;
  transition:color .16s ease,border-color .16s ease,background .16s ease;
}
.cs-filter-chip:hover{color:var(--au-cream);border-color:rgba(246,241,234,.34)}
.cs-filter-chip.active{
  color:#171413;background:var(--au-cream);border-color:var(--au-cream);
}

/* ---------------------------- the closing -----------------------------
   .cs-cta-block IS GONE. Its copy -- "your turn / what can you automate in
   your business?" -- is on .cs-start now, so the page was asking the
   same question twice in a row. Everything that styled it comes out
   with it: the desert picture and its wash, .cs-cta-content, and the
   .cs-cta-block overrides for the eyebrow, h2 and paragraph.

   automation-cta-desert.jpg is still in the repo and still unused. The
   page now ends on a flat band, which is what losing that block costs:
   it was the only picture here apart from the hero. If it should come
   back, it belongs on .cs-start as the closing band, and the wash has
   to clear the timeline rather than only the copy -- the steps run the
   full width where the old block's copy sat on the left third. */

/* The shared closing-CTA row. This is the only part of the block that
   survives it, because .cs-start uses the same row. */
.cs-cta-actions{
  display:flex;align-items:center;gap:26px;flex-wrap:wrap;
  justify-content:flex-start;
}

/* ------------------------------ the bands -----------------------------
   118 top and bottom, the rhythm every band on the other three pages
   runs.

   .cs-wrap gets NO top padding, because the first thing in it is the
   full-bleed stat bar. 118px above a band that runs edge to edge is not
   air around content, it is a gap between the hero and a stripe -- which
   is exactly what it looked like. The bar sits flush under the hero and
   the case-study heading carries the rhythm instead. */
/* NO BOTTOM PADDING ON .cs-wrap. The closing band is inside it, so 118px
   here sat BELOW the band and above the footer -- measured as a 118px gap
   where home, planning and software all meet their footer at 0. It also
   reads as the band "sitting too high": the band's own copy is centred
   correctly, but the box it is centred in stopped 118px short. The band's
   own padding:118px 0 is what carries this rhythm. */
.cs-wrap{padding-top:0;padding-bottom:0}
/* 118 was measured from the top of .cs-wrap, which used to start below a
   stat bar that had its own ground. The bar now sits INSIDE the hero,
   flush to its bottom edge, so the first thing under it is this -- and
   118 from a band's own edge reads tighter than 118 between two bands.
   160 puts the case studies clear of the stat bar.

   !important because ideas-section.css sets padding-top:0!important on
   .cs-listing-intro. Without it this computed to 0 and the case studies
   ran straight into the bar -- which is what she reported, and which the
   plain rule looked like it had fixed. */
.cs-listing-intro,
.cs-head{padding-top:84px!important}

/* THE "PROJECTS" HEADING JOINS THE STANDARD TOO.

   ideas-section.css:2957 sets it to 1.05/-0.03em with !important on
   every line, which is a third spec for the same job -- planning and
   software both run 1.04/-0.035em and every other heading on this page
   now does. !important here only because that rule has it. */
.cs-listing-intro .cs-transition-kicker{
  line-height:1.04!important;letter-spacing:-.035em!important;
}

/* The listing shares the page's left edge instead of centring itself.
   Capping the grid's outer box at 1160 + two gutters keeps the cards the
   size they are now rather than letting a 2-up grid run to 1680px. */
.cs-listing-intro,
.cs-filters,
.cs-grid,
.cs-head{
  max-width:none;
  margin-left:0;margin-right:0;
  padding-left:var(--hx-inset);padding-right:var(--hx-inset);
}
/* THREE UP, AND FULL WIDTH ON THE GUTTER.

   The cap I put here last pass is what made the section look off centre:
   1160 + two gutters is 1390, left aligned, so it ended 50px short of
   the right gutter at 1440 and 650px short at 1920. Running it on the
   gutter like every other row on the site is symmetric by construction
   and keeps the same left edge as the headings.

   Three fits: at 1440 each card is 390px and not one of the ten titles
   wraps to a second line (measured, all ten).

   THE LAST ROW IS SHORT. Ten cards over three columns is 3-3-3-1, and
   no CSS fixes that -- it is a content count. Stretching the tenth card
   across the row was worse than the gap: a 1210px box holding one short
   title and two lines, with its thumbnail ghosted across the empty half.
   It sits as a normal card. Nine or twelve case studies would divide. */
.cs-grid{
  grid-template-columns:repeat(3,minmax(0,1fr));
  /* EVERY CARD THE SAME HEIGHT. Row one is the featured card and sizes
     to its own content; every row after it is implicit, so grid-auto-rows
     catches exactly the nine and makes them equal. Without this a row
     with a two-line title was taller than the rows either side of it. */
  grid-template-rows:auto;
  grid-auto-rows:1fr;
  max-width:none;
  /* Air before the closing band. The band's own 118px top padding is
     INSIDE its photograph, so with nothing here the cards ran straight
     into the picture's top edge with no break between the two. */
  margin-bottom:118px;
}
/* =====================================================================
   THE FEATURED CASE STUDY -- style one, the split.

   One featured plus nine in three rows of three is exactly the ten that
   exist, which also settles the 3-3-3-1 orphan the plain grid had.

   It is the same .cs-card as every other one, so the filter chips and
   the modal work on it unchanged; only its placement and its internal
   layout differ. Row one, every column, and inside it the thumbnail
   becomes a half-width picture with the case beside it.
   ===================================================================== */
.cs-grid > .cs-card.is-featured{grid-column:1 / -1;grid-row:1}

/* COPY LEFT, SCREEN INSET RIGHT.

   The picture used to be a full-bleed left half running the card's whole
   420px height, which made it the loudest thing in the section rather
   than an illustration of the case beside it -- and it put the copy on
   the right, against the grain of every other block on this site.

   Inset on the right instead: a window sitting inside the card with air
   around it, the way the software hero holds its app mock, and the copy
   back on the left edge where the page's type column is. */
.cs-grid > .cs-card.is-featured .cs-card-head{
  display:grid!important;
  grid-template-columns:minmax(0,1.02fr) minmax(0,.98fr)!important;
  align-items:center!important;
  gap:0!important;padding:0!important;
  min-height:400px;
  text-align:left!important;
}
/* the running number has nowhere sensible to sit in a two-column card */
.cs-grid > .cs-card.is-featured .cs-card-num{display:none!important}

.cs-grid > .cs-card.is-featured .cs-card-mock-thumb{
  position:relative!important;
  grid-column:2!important;grid-row:1!important;
  /* inset, not full bleed -- the margin is the air that makes it read as
     a screen in a frame rather than as half the card */
  width:auto!important;height:288px!important;min-height:0!important;
  align-self:center!important;
  margin:0 40px 0 8px!important;
  inset:auto!important;
  border:1px solid rgba(246,241,234,.12)!important;
  overflow:hidden!important;
  background:var(--au-ground-dark)!important;
}
/* THE SAME TREATMENT AS THE NINE: greyscale, no tint. It carried the
   clay blend while they went black, so the one screen the section is
   built around was the only pink thing in it. A touch lighter than the
   small ones, because this one is meant to be read. */
.cs-grid > .cs-card.is-featured .cs-card-mock-thumb .cs-mock-host{
  position:absolute!important;inset:0!important;
  width:100%!important;height:100%!important;min-height:0!important;
  opacity:1!important;transform:none!important;
  filter:grayscale(1) brightness(.56) contrast(1.05)!important;
  /* the same transition as the nine, so the one hover reads the same
     wherever it happens */
  transition:filter .28s ease!important;
}
.cs-grid > .cs-card.is-featured .cs-card-mock-thumb::after{
  content:""!important;position:absolute!important;inset:0!important;
  z-index:3!important;pointer-events:none!important;
  /* even, not directional. The old ramp darkened toward the copy because
     the picture used to run into it; inset with air around it there is
     no edge to soften, so this just seats it. */
  background:linear-gradient(180deg,
    rgba(15,13,12,.08) 0%, rgba(15,13,12,.26) 100%)!important;
}

/* RIGHT: the case */
.cs-grid > .cs-card.is-featured .cs-card-meta{
  grid-column:1!important;grid-row:1!important;
  display:flex!important;flex-direction:column!important;
  justify-content:center!important;
  /* 26 on the right, down from 34: see the note on the gap below */
  padding:44px 26px 44px 40px!important;
}
.cs-grid > .cs-card.is-featured .cs-title{
  font-size:32px!important;line-height:1.08!important;
  letter-spacing:-.025em!important;margin:0 0 16px!important;
  max-width:22ch!important;
}

/* CLOSING THE GAP BETWEEN THE COPY AND THE SCREEN.

   It measured 72px, and almost none of it was margin. The lede was
   capped at a measure that ran out 62px BEFORE its own column did, so
   most of that gap was unused column rather than deliberate air: text
   stopped at 555, the column ended at 617, the screen began at 626.

   max-width:none lets the copy run to the column's edge and the
   padding sets the actual gutter, which is the right way round. */
.cs-grid > .cs-card.is-featured .cs-featured-lede{max-width:none!important}

/* THE BANNER. Sits on the picture's top-left corner rather than in the
   copy, so it labels the whole card.

   .cs-card-meta has position:relative of its own, which made it the
   containing block and put the banner at the copy column's left edge,
   635px in, instead of the card's. Taking it back to static hands the
   job to .cs-card, which is where top:0 left:0 means what it says. */
.cs-grid > .cs-card.is-featured .cs-card-meta{position:static!important}
/* THE FEATURED LABEL IS A HEADER, NOT A BADGE.

   A white rectangle in the corner is the most generic way to say this,
   and it sat ON the card like a sticker rather than belonging to it.
   Every other label on this site is a tracked uppercase eyebrow with a
   hairline, so this one is too -- set above the card and running a rule
   to the right edge, which reads as "this row is its own thing" rather
   than "someone stuck a flag on a card".

   The card itself already does most of the work by being a full row
   with a picture; the label only has to name it. */
/* IN THE CARD'S FLOW, at the top of the copy column.

   The first version sat above the card on position:absolute. It measured
   perfectly -- right place, right colour, z-index 4 -- and painted
   nothing, because it is nested inside a <button> that this file makes a
   grid container and ideas-section.css gives overflow:hidden, and that
   is not a fight worth having for a label. In the flow it cannot be
   clipped by anything.

   Still a header rather than a badge: a clay tick, the word, and a rule
   running to the edge of the copy column -- the same construction as
   every other label on the site. */
/* ONE HAIRLINE, RUNNING BEHIND THE WORDS.

   It was a 2px clay bar on the left and a fading 1px rule on the right --
   two different lines meeting at a word, which reads as an accident. A
   single 1px rule crossing the whole column with the label knocked out
   of it is the standard way to set a section label, and it is what the
   rest of the site does.

   The knockout needs a solid colour to paint, because a transparent
   background would let the rule show through the letters. The card is a
   4% cream lift over #0F0D0C, which composites to rgb(24,22,21), so
   that value is hard-coded here. It is an arithmetic result rather than
   a token, which means it has to be recomputed by hand any time either
   the card's lift or the section's ground changes. */
.cs-grid > .cs-card.is-featured .cs-featured-flag{
  position:relative!important;
  grid-column:1 / -1!important;
  order:-1;
  display:block!important;
  margin:0 0 20px!important;padding:0!important;
  background:none!important;
  color:var(--au-cream)!important;
  font-family:'Questrial',sans-serif!important;
  font-size:11px!important;font-weight:700!important;
  letter-spacing:.24em!important;text-transform:uppercase!important;
  line-height:1!important;
}
/* THE RULE RUNS THE WHOLE CARD, not just the copy column.

   grid-column:1 / -1 above is inert: the flag's parent is .cs-card-meta,
   which is a flex column, so a grid placement on it means nothing and
   the rule stopped at the text's right edge, 655px short of the card.

   -2000px rather than a computed width, because the number it would
   need is the card's width minus the meta column minus the padding, and
   none of that is available to CSS here. .cs-card-head is the first
   ancestor that clips -- measured, not assumed -- so the rule is cut at
   the card's own right edge and the overshoot never paints. */
.cs-grid > .cs-card.is-featured .cs-featured-flag::before{
  content:"";position:absolute;left:0;right:-2000px;top:50%;
  height:1px;background:rgba(246,241,234,.16);
}
.cs-grid > .cs-card.is-featured .cs-featured-flag > span{
  position:relative;
  background:rgb(24,22,21);
  padding-right:16px;
}

/* =====================================================================
   FILTERED: THE FEATURED CARD STANDS DOWN.

   Once you have picked a category you have asked for a set, and one of
   them wearing a banner and taking a whole row is an answer to a
   question you stopped asking. Under .is-filtered it becomes an ordinary
   card -- same column, same layout, same figures as its nine siblings.
   ===================================================================== */
.cs-grid.is-filtered > .cs-card.is-featured{grid-column:auto!important;grid-row:auto!important}
.cs-grid.is-filtered > .cs-card.is-featured .cs-featured-flag{display:none!important}
.cs-grid.is-filtered > .cs-card.is-featured .cs-featured-lede{display:none!important}
/* THE SAME LAYOUT AS ITS NINE SIBLINGS, not a smaller version of its own.
   This block described a 92px-thumb-on-the-right card, which is what the
   nine looked like two passes ago -- so filtering produced one card in an
   old layout beside eight in the current one. It now restates the
   current one exactly. */
.cs-grid.is-filtered > .cs-card.is-featured .cs-card-head{
  display:grid!important;
  /* three, matching the nine */
  grid-template-columns:1fr 1fr 1fr!important;
  column-gap:0!important;
  align-items:start!important;
  min-height:0!important;
  padding:20px 20px 20px 18px!important;
}
.cs-grid.is-filtered > .cs-card.is-featured .cs-card-meta{display:contents!important}
.cs-grid.is-filtered > .cs-card.is-featured .cs-industry{grid-row:1!important;grid-column:1 / -1!important}
.cs-grid.is-filtered > .cs-card.is-featured .cs-title{grid-row:2!important;grid-column:1 / -1!important}
.cs-grid.is-filtered > .cs-card.is-featured .cs-card-mock-thumb{
  grid-row:3!important;grid-column:1 / -1!important;
  position:relative!important;
  width:auto!important;height:132px!important;min-height:0!important;
  inset:auto!important;
  margin:4px -20px 18px -18px!important;
  border:0!important;
  border-top:1px solid rgba(246,241,234,.08)!important;
  border-bottom:1px solid rgba(246,241,234,.08)!important;
}
.cs-grid.is-filtered > .cs-card.is-featured .cs-stat{grid-row:4!important;grid-column:1!important}
.cs-grid.is-filtered > .cs-card.is-featured .cs-card-investment{grid-row:4!important;grid-column:2!important}
.cs-grid.is-filtered > .cs-card.is-featured .cs-card-capacity{grid-row:4!important;grid-column:3!important}
.cs-grid.is-filtered > .cs-card.is-featured .cs-card-meta::after{grid-row:5!important;grid-column:1 / -1!important}
.cs-grid.is-filtered > .cs-card.is-featured .cs-title{
  font-size:20px!important;line-height:1.15!important;
  margin:0 0 2px!important;max-width:none!important;
}
.cs-grid.is-filtered > .cs-card.is-featured .cs-industry{
  font-size:10.5px!important;letter-spacing:.18em!important;margin:0 0 11px!important;
}
/* THE SAME THREE-FIGURE CELL THE NINE USE, restated here because the
   filtered featured card is a sibling of theirs and has to be
   indistinguishable from them. The assertion that compares the two is
   what caught this. */
.cs-grid.is-filtered > .cs-card.is-featured .cs-stat,
.cs-grid.is-filtered > .cs-card.is-featured .cs-card-investment,
.cs-grid.is-filtered > .cs-card.is-featured .cs-card-capacity{
  margin:0!important;padding:0 10px 0 0!important;
  font-family:'League Spartan',sans-serif!important;font-weight:700!important;
  font-size:15px!important;line-height:1.15!important;
  color:var(--au-cream)!important;
  display:grid!important;
  grid-template-rows:36px 38px!important;
  align-content:start!important;
}
.cs-grid.is-filtered > .cs-card.is-featured .cs-card-capacity strong{
  font-family:'League Spartan',sans-serif!important;font-weight:700!important;
  font-size:15px!important;color:var(--au-cream)!important;grid-row:2!important;
}
.cs-grid.is-filtered > .cs-card.is-featured .cs-card-investment strong{grid-row:2!important}
.cs-grid.is-filtered > .cs-card.is-featured .cs-metric-label{grid-row:1!important}
/* the value goes back inline at body size -- the featured rules make it
   a 21px block under a tracked label, which is right for a full row and
   wrong beside eight cards that print "Est. cost: ~$500" on one line */
/* the same ONE-line reservation as the unfiltered card, at this card's
   12px line-height -- see the note there: every label fits one line
   since "value of time saved" became "money saved", so the second
   reserved line was only ever a gap */
.cs-grid.is-filtered > .cs-card.is-featured .cs-metric-label,
.cs-grid.is-filtered > .cs-card.is-featured .cs-card-investment::before{
  min-height:12px!important;
}
.cs-grid.is-filtered > .cs-card.is-featured .cs-metric-label{
  display:block!important;
  font-family:'Questrial',sans-serif!important;
  font-size:10px!important;font-weight:700!important;
  letter-spacing:.14em!important;text-transform:uppercase!important;
  color:rgba(246,241,234,.49)!important;
  margin:0 0 6px!important;line-height:12px!important;
}
.cs-grid.is-filtered > .cs-card.is-featured .cs-card-investment{
  font-size:0!important;margin:0!important;
}
.cs-grid.is-filtered > .cs-card.is-featured .cs-card-investment::before{
  content:"EST. COST:"!important;display:block!important;
  font-family:'Questrial',sans-serif!important;
  font-size:10px!important;font-weight:700!important;letter-spacing:.14em!important;
  line-height:12px!important;color:rgba(246,241,234,.49)!important;margin:0 0 6px!important;
}
.cs-grid.is-filtered > .cs-card.is-featured .cs-card-investment strong{
  display:block!important;
  font-family:'League Spartan',sans-serif!important;
  font-size:17px!important;font-weight:700!important;line-height:1.1!important;
  color:var(--au-cream)!important;
}
/* (two rules are gone from here: one that set .cs-metric-label back to
   inline 14px body copy, and one that removed the investment label's
   ::before entirely. Both were written for the filtered layout as it
   stood two passes ago, and both sat AFTER the current ones -- so in the
   filtered view the featured card alone printed "Time saved: 100 hours /
   week" as a sentence with no INVESTMENT label, beside two siblings
   showing the label-above-figure pair.) */
.cs-grid.is-filtered > .cs-card.is-featured .cs-card-meta::after{
  margin:16px 0 0!important;font-size:13px!important;
}
/* the industry reads as an eyebrow here, not a chip -- the mockup's
   "OPERATIONS · FEATURED" line, with the "featured" half now a banner */
.cs-grid > .cs-card.is-featured .cs-industry{
  background:transparent!important;border:0!important;
  padding:0!important;margin:0 0 13px!important;
  color:var(--au-accent)!important;
  font-size:12px!important;letter-spacing:.2em!important;
  text-transform:uppercase!important;
}
.cs-grid > .cs-card.is-featured .cs-featured-lede{
  font-family:'Questrial',sans-serif;
  font-size:15px;line-height:24px;color:rgba(246,241,234,.68);
  /* 62ch, not 46 -- at 46 it broke into six short lines in a column wide
     enough for four, which made the copy look like a caption */
  margin:0 0 26px;max-width:62ch;
}

/* THE FIGURES AS A ROW, labels above values -- the mockup's three-up
   rather than two stacked sentences. Same treatment as the modal head,
   including the trick for "Est. cost:", which is bare text rather than
   a .cs-metric-label and so cannot be restyled into a label: the
   paragraph goes to font-size 0 and the word comes back on a ::before. */
.cs-grid > .cs-card.is-featured .cs-card-meta{
  display:grid!important;
  /* 1fr TRACKS, NOT max-content.

     max-content tracks are sized by their widest item, and the title,
     the lede and the flag all span all three of them -- so the grid was
     either too narrow for the copy (the copy overflowed it silently) or,
     the moment the copy was uncapped, 2219px wide. A paragraph cannot
     be allowed to size the column it sits in.

     1fr tracks are sized by the COLUMN instead, so the spanning items
     get the column's width and the three figures share what is left.
     They come out wider than they were, not narrower: 153 each against
     an average 114 before. */
  grid-template-columns:repeat(3,minmax(0,1fr))!important;
  /* 24, down from 44. 1fr tracks take their width from the column, so
     every point of gap comes straight out of the figures: at 44 the
     tracks were 154 and "100 hours / week" broke after the slash. At 24
     they are 167 and it holds. The three figures want 248 / 143 / 242
     to sit on one line each, which is 633 against a 549 column -- they
     were never all going to fit, so this is about which of them breaks
     rather than whether any do. */
  column-gap:24px!important;
  align-content:center!important;
  /* THE 430 CAP COMES OFF too. ideas-section.css:2888 sets
     .cs-card:not(.expanded) .cs-card-meta{max-width:430px}, written for
     a one-column card. On the featured card the column is 615, so the
     copy stopped 62px before its own column ended and most of the "gap"
     she was looking at was unused column rather than margin. */
  max-width:none!important;
}
.cs-grid > .cs-card.is-featured .cs-industry,
.cs-grid > .cs-card.is-featured .cs-title,
.cs-grid > .cs-card.is-featured .cs-featured-lede{
  grid-column:1 / -1!important;
}
.cs-grid > .cs-card.is-featured .cs-stat,
.cs-grid > .cs-card.is-featured .cs-card-investment,
.cs-grid > .cs-card.is-featured .cs-card-capacity{
  margin:0!important;
  font-family:'League Spartan',sans-serif!important;font-weight:700!important;
  font-size:21px!important;line-height:1.2!important;
  color:var(--au-cream)!important;
}
/* ONE LINE, because they are all one line now.

   This reserved TWO (26px at a 13px leading) and the note here used to
   explain why: "VALUE OF TIME SAVED:" wrapped while "TIME SAVED:" and
   "EST. COST:" did not, so without a floor the figures under them sat
   13px apart and the row read as stepped.

   That label is "MONEY SAVED:" since, and it fits one line like the
   others -- so the reserved second line stopped holding anything up and
   became 13px of hole between every header and its figure.

   It also fixes the DEPT column, which was never in this rule at all.
   Its ::before carries no floor, so at 26 it was the one label of four
   sitting 13px short: "Operations" started a line above the three
   figures beside it. At 13 all four labels are the same height and the
   four values land together. */
.cs-grid > .cs-card.is-featured .cs-metric-label,
.cs-grid > .cs-card.is-featured .cs-card-investment::before{
  min-height:13px!important;
}
.cs-grid > .cs-card.is-featured .cs-metric-label{
  display:block!important;
  font-family:'Questrial',sans-serif!important;
  font-size:11px!important;font-weight:700!important;
  letter-spacing:.16em!important;text-transform:uppercase!important;
  color:rgba(246,241,234,.49)!important;
  margin:0 0 7px!important;line-height:13px!important;
}
.cs-grid > .cs-card.is-featured .cs-card-investment{font-size:0!important}
.cs-grid > .cs-card.is-featured .cs-card-investment strong{
  display:block!important;font-size:21px!important;
  font-family:'League Spartan',sans-serif!important;font-weight:700!important;
  color:var(--au-cream)!important;
}
.cs-grid > .cs-card.is-featured .cs-card-investment::before{
  content:"EST. COST:";display:block;
  font-family:'Questrial',sans-serif;
  font-size:11px;font-weight:700;letter-spacing:.16em;line-height:13px;
  color:rgba(246,241,234,.49);margin:0 0 7px;
}
/* The third figure. Cards hide .cs-card-capacity -- there is no room for
   it at a third of a row -- but the featured card is a full row and the
   mockup showed all three, so it comes back here. */
.cs-grid > .cs-card.is-featured .cs-card-capacity{display:block!important}
.cs-grid > .cs-card.is-featured .cs-card-capacity strong{
  font-family:'League Spartan',sans-serif!important;font-weight:700!important;
  font-size:21px!important;color:var(--au-cream)!important;
}

/* =====================================================================
   THREE HEADERS BECOME TWO, AND THE SCREEN COMES DOWN.

   The card opened with FEATURED AUTOMATION, then OPERATIONS, then the
   title -- three stacked lines of heading before a word of copy, and
   the middle one was the least load-bearing of them. It is a figure
   now: "DEPT: / Operations", sitting in the row with the numbers, which
   is where a fact about the case belongs.

   THE SCREEN IS SMALLER, 248 tall against 288 and 424 wide against 543.
   The flag's rule runs the full card, so the top of the picture was
   within 29px of it and the two read as one edge. A shorter picture
   centres in the same 400px row, so the air comes off the top and
   bottom evenly and the rule gets its clearance back.

   THE COLUMNS MOVE WITH IT: 1.22fr / .78fr against 1.02 / .98. That is
   what pays for the fourth figure. Four across at 21px needs about 660
   of content; the copy column had 549. The dept column is .72fr rather
   than a full one because "Operations" is 105 wide and the numbers want
   every point they can get.
   ===================================================================== */
.cs-grid > .cs-card.is-featured .cs-card-head{
  grid-template-columns:minmax(0,1.22fr) minmax(0,.78fr)!important;
}
/* SMALLER ALONE MADE IT WORSE, which is worth writing down. The picture
   is align-self:center in the card, so shrinking it from 288 to 248 also
   shortened the card -- and a shorter card centres the picture HIGHER.
   Clearance under the rule went from 29px to 22px by making the picture
   smaller. Measured, not assumed; I had expected the opposite.

   The top margin is what actually buys the gap. Under centre alignment
   the margin box is what gets centred, so a 54px top margin against a
   0 bottom pushes the picture down by half of it: top edge 71 -> 98,
   clearance 22 -> 48. It also holds if the card grows, because the
   offset is relative. */
.cs-grid > .cs-card.is-featured .cs-card-mock-thumb{
  height:248px!important;
  margin:54px 40px 0 8px!important;
}

.cs-grid > .cs-card.is-featured .cs-card-meta{
  grid-template-columns:minmax(0,.72fr) repeat(3,minmax(0,1fr))!important;
  column-gap:20px!important;
}

/* EXPLICIT ROWS, because .cs-industry comes BEFORE the title in the
   markup and now has to land in the figures row underneath it. Auto
   placement would put it back where it was, and `order` would only get
   it to the END of the row rather than the front of it. */
.cs-grid > .cs-card.is-featured .cs-featured-flag{grid-row:1!important;grid-column:1 / -1!important}
.cs-grid > .cs-card.is-featured .cs-title{grid-row:2!important;grid-column:1 / -1!important}
.cs-grid > .cs-card.is-featured .cs-featured-lede{grid-row:3!important;grid-column:1 / -1!important}
.cs-grid > .cs-card.is-featured .cs-industry{grid-row:4!important;grid-column:1!important}
.cs-grid > .cs-card.is-featured .cs-stat{grid-row:4!important;grid-column:2!important}
.cs-grid > .cs-card.is-featured .cs-card-investment{grid-row:4!important;grid-column:3!important}
.cs-grid > .cs-card.is-featured .cs-card-capacity{grid-row:4!important;grid-column:4!important}
.cs-grid > .cs-card.is-featured .cs-card-meta::after{grid-row:5!important;grid-column:1 / -1!important}

/* the industry stops being an eyebrow and becomes a figure, on the same
   label-over-value construction as the other three */
.cs-grid > .cs-card.is-featured .cs-industry{
  margin:0!important;padding:0!important;background:transparent!important;
  font-family:'League Spartan',sans-serif!important;font-weight:700!important;
  font-size:21px!important;line-height:1.2!important;
  /* lowercase, like every other heading on the site. The markup says
     "Operations" and stays that way, because it is also what the
     filtered card and the modal read, and those are uppercase eyebrows
     -- this is the display case for one place, not the content. */
  letter-spacing:-.01em!important;text-transform:lowercase!important;
  color:var(--au-cream)!important;
}
.cs-grid > .cs-card.is-featured .cs-industry::before{
  content:"DEPT:";display:block;
  /* text-transform inherits into a pseudo-element, so the lowercase on
     the value was turning this label into "dept:" too. The other three
     labels are uppercase, so this one says so explicitly. */
  text-transform:uppercase;
  font-family:'Questrial',sans-serif;
  font-size:11px;font-weight:700;letter-spacing:.16em;line-height:13px;
  color:rgba(246,241,234,.49);margin:0 0 7px;
}

@media(max-width:1024px){
  .cs-grid > .cs-card.is-featured .cs-card-head{
    grid-template-columns:1fr!important;min-height:0;
  }
  /* stacked: copy first, then the screen under it, still inset */
  .cs-grid > .cs-card.is-featured .cs-card-meta{
    grid-column:1!important;grid-row:1!important;padding:28px 24px 8px!important;
  }
  .cs-grid > .cs-card.is-featured .cs-card-mock-thumb{
    grid-column:1!important;grid-row:2!important;
    height:200px!important;margin:0 24px 28px!important;
    border:1px solid rgba(246,241,234,.12)!important;
  }
  .cs-grid > .cs-card.is-featured .cs-title{font-size:25px!important}
}

/* =====================================================================
   THE CARDS READ AS OPENABLE.

   They were a title and two figures on a panel, with a small + in the
   corner as the only sign anything happens -- so nothing on the face of
   the card said "there is a case study behind this". Three changes, in
   order of how much work each one does:

     a standing "see how it works" line, so the invitation is words
     a border that lifts to clay on hover, so the whole card answers
     a cursor, because the clickable thing is a button with no chrome
   ===================================================================== */
.cs-grid > .cs-card{
  position:relative;
  transition:border-color .18s ease, background-color .18s ease;
}
.cs-grid > .cs-card .cs-card-head{cursor:pointer}
/* AND THE FOCUS RING DRAWS INSIDE IT. The head fills its card exactly
   and .cs-card is overflow:hidden, so an outline at the default offset
   -- outside the border box -- was painted and then clipped away
   entirely. Measured by photographing the button focused and
   unfocused: not one pixel of a 384x351 box changed, on the primary
   control of the page, nine times over. A negative offset puts the
   same ring just inside the edge, where nothing can clip it. */
.cs-grid > .cs-card .cs-card-head:focus-visible{
  outline:2px solid var(--au-accent,#B28479);
  outline-offset:-3px;
}

/* SQUARE, like everything else on the rebuilt pages. The cards were the
   last rounded things on the site -- the chips, the buttons, the modal
   and the app windows are all square. */
.cs-grid > .cs-card,
.cs-grid > .cs-card .cs-card-head,
.cs-grid > .cs-card .cs-card-mock-thumb,
.cs-grid > .cs-card .cs-mock-host,
.cs-grid > .cs-card .cs-industry{
  border-radius:0!important;
}

/* =====================================================================
   THE CARDS, option three: clay-edged, with the screen on show.

   The thumbnail used to sit as a 148x178 panel beside the copy, ghosted
   back so far it read as a smudge behind the text rather than as a
   picture of anything. It is a band across the top of the card now, at a
   size where you can tell what it is.
   ===================================================================== */
/* THE GREY PANEL, KILLED AT SOURCE.

   The cards painted rgb(47,44,46) -- a neutral grey, and this site has
   no neutral greys. It was never .cs-card's own background, which is a
   4% cream lift over #0F0D0C and correct. It was TWO pseudo-elements in
   ideas-section.css, both with !important:

     .cs-card-head::before   rgba(48,45,47,.95) across the whole head
     .cs-card-head::after    a second wash of the same colour

   #302D2F is the old palette's panel grey. Removing those is the whole
   fix for "why would they be light grey" -- everything under them was
   already on the palette. */
.cs-grid > .cs-card .cs-card-head::before,
.cs-grid > .cs-card .cs-card-head::after{
  content:none!important;display:none!important;background:none!important;
}

.cs-grid > .cs-card:not(.is-featured){
  background:rgba(246,241,234,.04)!important;
  border:0!important;
  /* CREAM, NOT CLAY, ON THE NINE.

     Ten clay edges plus every eyebrow, every "see how it works" and the
     featured label meant clay had stopped being an accent and become the
     section's texture -- which is what "too much clay accent" is
     describing. A cream hairline at 12% separates the card from the
     ground just as well and says nothing, which is what a card edge
     should say.

     The clay goes back to marking one thing: the featured card keeps it,
     and now it means something again. */
  /* a dimmed clay at rest, not grey cream. 45% of --au-accent over the
     card's own ground reads as the accent turned down rather than as a
     different colour, and hover takes it to full clay. */
  border-left:2px solid rgba(178,132,121,.45)!important;
  overflow:hidden;
}
.cs-grid > .cs-card:not(.is-featured):hover{
  background:rgba(246,241,234,.075)!important;
  /* the cream edge goes clay on hover -- the accent appears when you
     reach for the card rather than sitting on all nine at rest */
  border-left-color:var(--au-accent)!important;
}
/* THE FEATURED CARD: its clay edge, and NOTHING on the other three
   sides. ideas-section.css gives every .cs-card a 1px border all round;
   the nine have it cleared by the border:0 above, but the featured one
   kept it, which is what appeared as a full rectangle on hover. */
.cs-grid > .cs-card.is-featured{
  border:0!important;
  /* dimmed like the nine, just thicker -- it was full clay at rest,
     which made it the brightest thing in the section */
  border-left:3px solid rgba(178,132,121,.55)!important;
  /* and the same ground as the nine */
  background:rgba(246,241,234,.04)!important;
}

/* THE INDUSTRY CHIP. It was an outlined box in the old palette's grey --
   the last piece of that palette on the page, and the only chip on a
   site that otherwise uses tracked eyebrows. Clay, no box. */
.cs-grid > .cs-card:not(.is-featured) .cs-industry{
  background:transparent!important;
  border:0!important;
  padding:0!important;
  margin:0 0 11px!important;
  color:var(--au-accent)!important;
  font-family:'Questrial',sans-serif!important;
  font-size:10.5px!important;font-weight:700!important;
  letter-spacing:.18em!important;text-transform:uppercase!important;
}
/* THE MOCKUP'S LAYOUT, with the picture small and on the right.

   The last version put the screen in a 152px band across the top of the
   card. Nine light interfaces at that size is nine pale rectangles, and
   the section read as grey -- which is not the page. Small and to the
   right of the copy, the picture is a detail that tells you there is a
   screen behind the case, and the card is text again. */
/* A BAND ACROSS THE TOP, DUOTONED INTO THE PALETTE.

   92px on the right was the wrong answer to the right complaint. The
   screens were never too big -- they were the wrong COLOUR, so shrinking
   them just made them small and useless, which is fair.

   These are light interface screenshots and the site is near-black and
   clay. Dimming a white screenshot gives grey, because grey is what a
   dimmed white is. The only way it joins the palette is to be tinted:
   grayscale first to throw away the interface's own blues and greens,
   then sepia and a hue rotation to land it on clay, then darkened. What
   comes back is a warm monochrome of the screen, which belongs here.

   The size is back to something you can read -- 130px, enough to tell a
   mail client from a dashboard. */
/* THE PICTURE SITS IN THE MIDDLE OF THE CARD, under the title and above
   the figures -- so the card reads as a name, then the thing, then what
   it cost, rather than as a picture with a caption.

   The thumbnail and the copy are SIBLINGS in the markup, so on their own
   the picture can only go before or after the whole copy block.
   display:contents on .cs-card-meta dissolves that wrapper and promotes
   its children to grid items of the head, which is what lets the picture
   be placed between two of them without touching ten cards of HTML. */
.cs-grid > .cs-card:not(.is-featured) .cs-card-head{
  display:grid!important;
  /* THREE columns now, not two. The cards carried time saved and cost;
     the value of the time saved was hidden on them and shown only on the
     featured card and in the modal, so the one figure that says why any
     of it is worth doing was the one a browsing reader never saw. */
  grid-template-columns:1fr 1fr 1fr!important;
  gap:0!important;
  padding:20px 20px 20px 18px!important;
  text-align:left!important;
}
.cs-grid > .cs-card:not(.is-featured) .cs-card-meta{display:contents!important}
.cs-grid > .cs-card:not(.is-featured) .cs-industry{grid-row:1!important;grid-column:1 / -1!important}
.cs-grid > .cs-card:not(.is-featured) .cs-title{grid-row:2!important;grid-column:1 / -1!important}
.cs-grid > .cs-card:not(.is-featured) .cs-card-mock-thumb{grid-row:3!important;grid-column:1 / -1!important}
.cs-grid > .cs-card:not(.is-featured) .cs-stat{grid-row:4!important;grid-column:1!important}
.cs-grid > .cs-card:not(.is-featured) .cs-card-investment{grid-row:4!important;grid-column:2!important}
.cs-grid > .cs-card:not(.is-featured) .cs-card-capacity{grid-row:4!important;grid-column:3!important}
.cs-grid > .cs-card:not(.is-featured) .cs-card-meta::after{grid-row:5!important;grid-column:1 / -1!important}
.cs-grid > .cs-card:not(.is-featured) .cs-card-num{display:none!important}

/* THE FIGURES AS THE MOCKUP HAD THEM: a tracked label above the number,
   two across. They had become "Time saved: 30 hours / week" sentences,
   which is the card explaining itself rather than showing a figure. */
.cs-grid > .cs-card:not(.is-featured) .cs-stat,
.cs-grid > .cs-card:not(.is-featured) .cs-card-investment,
.cs-grid > .cs-card:not(.is-featured) .cs-card-capacity{
  margin:0!important;padding:0 10px 0 0!important;
  font-family:'League Spartan',sans-serif!important;font-weight:700!important;
  /* 15, down from 17. Three figures share what two had -- about 115px a
     column at 1440 -- and "~$46,800 / year" does not fit 115 at 17. */
  font-size:15px!important;line-height:1.15!important;
  color:var(--au-cream)!important;

  /* LABEL IN ROW 1, FIGURE IN ROW 2, and the row height is fixed.

     A min-height on the labels was not enough: the three cells do not
     build their label boxes the same way. .cs-card-investment runs at
     font-size:0 so it can hide its own literal text, which means the
     whitespace around its <strong> contributes no line box, while the
     other two -- at 15px -- get one. The figures came out 8px apart,
     and only the middle one moved.

     Two explicit rows sidestep the whole question. Whatever each cell
     does with its label, the figure starts at 36px. */
  display:grid!important;
  /* BOTH ROWS FIXED, not just the label's.

     36 + auto kept the labels aligned and let the card heights drift:
     "30 hours / week" wraps to two lines at 115px and "~$500" does not,
     so the nine cards came out 347 / 359 / 342 and stopped being a grid
     of equal cards. 38 is two lines at 15px/1.15 with a point to spare,
     so a one-line figure and a two-line figure occupy the same box. */
  grid-template-rows:36px 38px!important;
  /* NO GAP. Measured on a phone: .cs-card-investment's cell came out
     92px tall against the other two at 80, and its figure sat 6px
     lower -- 42 + 6 + 38 + 6. It was picking up a 6px row-gap the
     other two did not have, so the tracks were right and the LINES
     between them were not. Stated here, all three are 42 + 38. */
  gap:0!important;
  align-content:start!important;
  /* AND THE THREE CELLS TOP-ALIGN TO EACH OTHER.
     align-content:start fixes the rows INSIDE each cell; this fixes
     where the cells themselves sit in the card's row 4. That row was
     aligning them by BASELINE, and .cs-card-investment runs at
     font-size:0 so its first baseline is not where the other two put
     theirs -- measured, the three boxes started at 227 / 221 / 228 on
     eight of the nine cards, which is the step in her screenshot.
     Aligning the boxes rather than the baselines is the only thing
     that holds when one of the three is built differently. */
  align-self:start!important;
}
/* AND THE ROWS ARE ASSIGNED, not left to auto-placement.

   .cs-card-investment has THREE grid items, not two: the ::before, its
   own bare "Est. cost: " text node, and the <strong>. The text node is
   invisible -- the paragraph runs at font-size:0 to hide it -- but it
   is not whitespace, so grid still makes an item of it and pushed the
   figure into row 3. That is where the 14px came from. */
.cs-grid > .cs-card:not(.is-featured) .cs-card-investment::before{grid-row:1!important}
.cs-grid > .cs-card:not(.is-featured) .cs-metric-label{grid-row:1!important}
.cs-grid > .cs-card:not(.is-featured) .cs-card-investment strong,
.cs-grid > .cs-card:not(.is-featured) .cs-card-capacity strong{grid-row:2!important}
.cs-grid > .cs-card:not(.is-featured) .cs-card-capacity strong{
  font-family:'League Spartan',sans-serif!important;font-weight:700!important;
  font-size:15px!important;color:var(--au-cream)!important;
}
.cs-grid > .cs-card:not(.is-featured) .cs-metric-label{
  display:block!important;
  font-family:'Questrial',sans-serif!important;
  font-size:10px!important;font-weight:700!important;
  letter-spacing:.14em!important;text-transform:uppercase!important;
  color:rgba(246,241,234,.49)!important;
  margin:0 0 6px!important;line-height:12px!important;
  /* TWO LINES OF LABEL, ALWAYS. "TIME SAVED:" is one line and "VALUE OF
     TIME SAVED:" is two at this width, so without a floor the three
     numbers underneath sat at two different heights -- the short labels
     pulling their figures up a line. A fixed box makes the figures share
     a baseline whatever the label does. */
  min-height:30px!important;
}
/* "Est. cost:" is bare text rather than a .cs-metric-label, so it
   cannot be restyled into one -- the paragraph goes to font-size 0 and
   the word comes back on a ::before, as it does on the featured card. */
.cs-grid > .cs-card:not(.is-featured) .cs-card-investment{font-size:0!important}
.cs-grid > .cs-card:not(.is-featured) .cs-card-investment::before{
  /* with the colon, because "Time saved:" beside it is page copy and
     carries one */
  content:"EST. COST:";display:block;
  font-family:'Questrial',sans-serif;
  font-size:10px;font-weight:700;letter-spacing:.14em;line-height:12px;
  color:rgba(246,241,234,.49);margin:0 0 6px;
  /* the same two-line floor as the real labels -- this one is a
     pseudo-element and does not inherit the rule above */
  min-height:30px;
}
/* SMALLER ON A PHONE, so three figures actually fit three columns.

   At 10px/.14em the longest label, "VALUE OF TIME SAVED:", took THREE
   lines in a 100px column while "TIME SAVED:" took one -- so every cell
   had to reserve 42px of label box and two of the three printed a
   two-line hole above their number. The value had the same problem from
   the other side: "~$15,600 / year" at 15px measures about 112px and
   wrapped, so that figure ran two lines while "~$500" ran one.

   Measured at 440: 9px with .08em tracking puts the long label on two
   lines (84px of a 100px column), and 13px puts the longest value,
   "~$46,800 / year", on one at 92px. Nothing wraps that did not have
   to, so the reserved boxes come down with it -- 22px of label instead
   of 42, and the whole row loses 20px of dead space. */
@media(max-width:760px){
  .cs-grid > .cs-card:not(.is-featured) .cs-metric-label,
  .cs-grid > .cs-card:not(.is-featured) .cs-card-investment::before{
    font-size:9px!important;letter-spacing:.08em!important;
    line-height:11px!important;margin:0 0 5px!important;
    /* ONE LINE NOW. This was 22 -- two lines -- because the third label
       read "VALUE OF TIME SAVED:" and needed them. It reads "MONEY
       SAVED:" since, which measures 64px in a 100px column, so all
       three labels are one line and the second reserved line was
       11px of hole above every figure on every card. */
    min-height:11px!important;
  }
  .cs-grid > .cs-card:not(.is-featured) .cs-card-capacity strong,
  .cs-grid > .cs-card:not(.is-featured) .cs-card-investment strong{
    font-size:13px!important;line-height:1.15!important;
  }
  /* .cs-stat's figure is bare text in the <p>, not a <strong>, so it
     takes the cell's own size -- and the cell is where it has to be set.
     NOT on .cs-card-investment, whose cell runs at font-size:0 on
     purpose: that is what hides its literal "Est. cost: " so the
     ::before can print the label. Sizing that cell would print both. */
  .cs-grid > .cs-card:not(.is-featured) .cs-stat{
    font-size:13px!important;line-height:1.15!important;
  }
  /* AND THE TRACK FOLLOWS THE FLOOR. A label taller than its fixed
     track overflows it and each of the three cells resolves that
     overflow differently -- that is what once put the figures at 258,
     263 and 270. Row 1 is the label's 11 plus its 5 of margin; row 2 is
     two lines at 13px/1.15 with a point spare, so a value that wraps
     and a value that does not occupy the same box. */
  .cs-grid > .cs-card:not(.is-featured) .cs-stat,
  .cs-grid > .cs-card:not(.is-featured) .cs-card-investment,
  .cs-grid > .cs-card:not(.is-featured) .cs-card-capacity{
    grid-template-rows:16px 32px!important;
  }
  /* AND THE FIGURES START AT THE ROW LINE RATHER THAN FILLING IT.
     Measured inside the 38px track: .cs-card-capacity's <strong> was
     stretching to the full 38 and sitting at its top, while
     .cs-card-investment's stayed 17 tall and centred -- so the two
     numbers printed 6px apart even with the tracks matched.
     align-self:start takes the guesswork out: every figure's box top
     IS the row line. */
  .cs-grid > .cs-card:not(.is-featured) .cs-card-investment strong,
  .cs-grid > .cs-card:not(.is-featured) .cs-card-capacity strong{
    align-self:start!important;height:auto!important;
  }
}
.cs-grid > .cs-card:not(.is-featured) .cs-card-investment strong{
  display:block!important;
  font-family:'League Spartan',sans-serif!important;font-weight:700!important;
  font-size:15px!important;line-height:1.15!important;
  color:var(--au-cream)!important;
}
/* .cs-card-capacity WAS display:none here. It is the third figure, and
   ideas-section.css:3205 hides it on every card head -- so this rule
   only needs to un-hide it, at a weight that beats that one.

   GRID, NOT BLOCK. This rule is later than the one 100 lines above that
   makes all three cells `display:grid`, and it carries !important, so
   it was quietly turning the third cell back into a block -- the label
   and the figure flowed instead of sitting in the fixed 36/38 tracks,
   and on a phone, where "VALUE OF TIME SAVED:" takes two lines, its
   figure landed 12px below the other two. It only ever needed to not
   be `none`. */
.cs-grid > .cs-card:not(.is-featured) .cs-card-capacity{display:grid!important}
.cs-grid > .cs-card:not(.is-featured) .cs-card-mock-thumb{
  position:relative!important;
  /* full bleed across the card while the type stays inset -- the
     negative margins undo the head's padding on three sides */
  width:auto!important;height:132px!important;min-height:0!important;
  inset:auto!important;
  margin:4px -20px 18px -18px!important;
  border:0!important;
  border-top:1px solid rgba(246,241,234,.08)!important;
  border-bottom:1px solid rgba(246,241,234,.08)!important;
  overflow:hidden!important;
  background:var(--au-ground-dark)!important;
}
/* !important AND four classes, because ideas-section.css:2871 sets
   opacity:.58 and filter:saturate(.62) contrast(.9) at exactly that
   weight -- the reason the earlier darkening did nothing at all. */
.cs-grid > .cs-card:not(.is-featured) .cs-card-mock-thumb .cs-mock-host{
  position:absolute!important;inset:0!important;
  width:100%!important;height:100%!important;min-height:0!important;
  opacity:1!important;
  transform:none!important;
  /* GREYSCALE AND BLACK, no tint. The clay duotone read as red over the
     screens; a neutral dark leaves them as what they are -- a picture of
     software -- and lets the clay on the page stay the accent rather
     than becoming the ground. */
  filter:grayscale(1) brightness(.46) contrast(1.05)!important;
  /* NO SCALE ON HOVER. ideas-section.css grows these to 1.045 on a
     five-class !important rule, which is where the clunky zoom came
     from -- the base rule below could not reach it. */
  transform:none!important;
  transition:filter .28s ease!important;
}
.cs-grid > .cs-card:not(.is-featured) .cs-card-mock-thumb::after{
  content:""!important;position:absolute!important;inset:0!important;
  z-index:3!important;pointer-events:none!important;
  background:linear-gradient(180deg,
    rgba(15,13,12,.08) 0%, rgba(15,13,12,.32) 62%, rgba(15,13,12,.70) 100%)!important;
}
/* =====================================================================
   ONE HOVER, ON ALL TEN: THE SCREEN COMES BACK INTO COLOUR.

   The featured card and the nine had different hovers -- the featured
   one changed brightness, the nine did nothing, and the underlying file
   still wanted to scale them. Greyscale going to colour is a better
   answer than either: the card is grey until you reach for it, and then
   it shows you the thing. It also gives the picture a reason to be
   desaturated at rest rather than looking like a limitation.

   Both selectors, because the hover can land on the card or on the
   button inside it depending on where the pointer enters.
   ===================================================================== */
.cs-grid > .cs-card:hover .cs-card-mock-thumb .cs-mock-host,
.cs-grid > .cs-card .cs-card-head:hover .cs-card-mock-thumb .cs-mock-host{
  filter:grayscale(0) brightness(.78) contrast(1.02) saturate(.88)!important;
  transform:none!important;
}
.cs-grid > .cs-card:not(.is-featured) .cs-card-meta{
  order:2!important;padding:20px 20px 20px 18px!important;
}

/* (the 14px sizing that used to be here is gone -- it sat AFTER the
   font-size:0 that hides .cs-card-investment's literal "Est. cost:"
   text, so it put the word back and the card printed the label twice,
   once from the ::before and once as body copy) */

/* LOWERCASE TITLES, here and on the featured card. The h1 on every hero
   is lowercase and so are the section headings; the cards were the only
   title case left on the page. */
.cs-grid > .cs-card .cs-title{text-transform:lowercase!important}

/* THE ARROW IN THE CORNER GOES. With "see how it works" on the face of
   every card it was a second button saying the same thing, in a place
   nothing else on the site puts one. */
.cs-grid > .cs-card .cs-card-toggle{display:none!important}

/* THE SHARED ARROW, NOT A GLYPH.

   These carried a literal → character. The rest of the site uses one SVG
   -- .n12-arw, path M4 12h14M13 6l6 6-6 6 at stroke-width 1.6 -- and the
   two are not interchangeable by eye: a glyph sits on the text baseline
   and takes the font's weight, the SVG is optically centred and drawn at
   a fixed stroke. cta-n12.css says exactly this about the fourteen it
   replaced; these three were still glyphs.

   It goes in as a background image rather than markup because the label
   is generated content -- ::after can carry a picture but not an element.
   The path and stroke are the shared one's, so it draws identically; the
   colour has to be written in because a data URI cannot see currentColor,
   which is why there is a second copy for the hover.

   The hover shifts it 4px right, which is what every other arrow on the
   site does. */
.cs-grid > .cs-card:not(.is-featured) .cs-card-meta::after{
  content:"see how it works";
  /* max-content, or the ::after fills the grid column and the arrow --
     positioned from the right edge -- ends up across the card from the
     words it belongs to */
  display:block;margin:16px 0 0;width:max-content;
  padding-right:26px;
  font-family:'Questrial',sans-serif;
  font-size:13px;font-weight:700;letter-spacing:.04em;
  color:var(--au-accent);
  background-image:url("data:image/svg+xml;utf8,\
<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23B28479' \
stroke-width='1.6' stroke-linecap='round' stroke-linejoin='round'>\
<path d='M4 12h14M13 6l6 6-6 6'/></svg>");
  background-repeat:no-repeat;
  background-position:right 4px center;
  background-size:18px 16px;
  transition:color .18s ease, background-position .18s ease;
}
.cs-grid > .cs-card:not(.is-featured):hover .cs-card-meta::after{
  background-position:right 0 center;
  background-image:url("data:image/svg+xml;utf8,\
<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23C99084' \
stroke-width='1.6' stroke-linecap='round' stroke-linejoin='round'>\
<path d='M4 12h14M13 6l6 6-6 6'/></svg>");
}
/* THE HOVER TOUCHES THE LEFT EDGE ONLY.

   This used to set border-color, which is all four sides -- and the
   featured card still carried ideas-section.css's 1px border on the
   other three, so hovering it lit a full rectangle while the nine only
   changed one line. That is the "full border comes up" difference.

   border-left-color, and the featured card loses its remaining sides
   below, so both now do exactly the same thing. */
.cs-grid > .cs-card:hover{
  background-color:rgba(246,241,234,.075)!important;
}
.cs-grid > .cs-card:hover{
  border-left-color:var(--au-accent)!important;
}
.cs-grid > .cs-card:hover .cs-card-meta::after{color:#C99084}
/* the + in the corner becomes a quieter partner to the line rather than
   the only signal */
.cs-grid > .cs-card .cs-card-toggle{opacity:.5;transition:opacity .18s ease}
.cs-grid > .cs-card:hover .cs-card-toggle{opacity:1}

/* the featured card says it in full, under the figures -- same arrow and
   the same 4px shift as the nine */
.cs-grid > .cs-card.is-featured .cs-card-meta::after{
  content:"see how it works";
  grid-column:1 / -1;
  display:block;margin:26px 0 0;
  width:max-content;padding-right:28px;
  font-family:'Questrial',sans-serif;
  font-size:14px;font-weight:700;letter-spacing:.04em;
  color:var(--au-accent);
  background-image:url("data:image/svg+xml;utf8,\
<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23B28479' \
stroke-width='1.6' stroke-linecap='round' stroke-linejoin='round'>\
<path d='M4 12h14M13 6l6 6-6 6'/></svg>");
  background-repeat:no-repeat;
  background-position:right 4px center;
  background-size:19px 17px;
  transition:color .18s ease, background-position .18s ease;
}
.cs-grid > .cs-card.is-featured:hover .cs-card-meta::after{
  color:#C99084;
  background-position:right 0 center;
  background-image:url("data:image/svg+xml;utf8,\
<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23C99084' \
stroke-width='1.6' stroke-linecap='round' stroke-linejoin='round'>\
<path d='M4 12h14M13 6l6 6-6 6'/></svg>");
}

/* ONE LINE PER TITLE. At the size they were, five of the nine wrapped,
   and a wrapped title is what made the rows uneven before the grid rows
   were equalised -- now it just leaves a short card with a tall title.
   16px fits the longest of them ("Live Tracking & Customer Updates") on
   one line in a 386px column. */
.cs-grid > .cs-card:not(.is-featured) .cs-title{
  /* 20, up from 16. At 16 the title was the same weight as the figures
     under it and the card had no clear first thing to read. The longest
     of the nine, "live tracking & customer updates", still holds one
     line at this size in a 349px column -- checked, not assumed. */
  font-size:20px!important;
  line-height:1.15!important;
  letter-spacing:-.015em!important;
  margin:0 0 2px!important;
}

/* Card titles wrap. They carried white-space:nowrap with an ellipsis,
   which is why my first check reported "0 of 10 titles wrap" -- they
   were not wrapping because they were forbidden to, and the longer ones
   were being cut instead ("live tracking & customer upda..."). At two
   columns that was invisible; at three it is the whole problem. */
.cs-card .cs-title{
  white-space:normal!important;
  overflow:visible!important;
  text-overflow:clip!important;
}

@media(max-width:1180px){
  .cs-grid{grid-template-columns:repeat(2,minmax(0,1fr))}
}
/* One column on a phone. ideas-section.css already says this, but it
   says it in an earlier file, and a media query carries no extra
   specificity -- so the 1180 rule above, being later, was winning at
   390px too and the phone was getting two columns. */
@media(max-width:760px){
  .cs-grid{grid-template-columns:1fr}
}

@media(max-width:760px){
  .auto-hero{padding:128px var(--hx-inset) 56px}
  .cs-wrap{padding:0}
  .cs-listing-intro,.cs-head{padding-top:76px}
  /* One column. Four 1fr tracks at 390 give each cell 97px, and the
     figures alone are wider than that -- the band pushed the page 114px
     wide before this. */
  .cs-budget-bar{grid-template-columns:1fr}
  .cs-budget-item{border-left:0;border-top:1px solid rgba(246,241,234,.10);padding:26px 20px}
  .cs-budget-item:first-child{border-top:0}
  /* One cell per row, so the label takes the cell rather than a measure. */
  .cs-budget-label{max-width:none}
  .cs-budget-amt{font-size:26px}
  .auto-hero-actions{gap:18px}
}

/* =====================================================================
   THE CASE-STUDY MODAL, on the new palette.

   It was built in ideas-section.css over a lot of passes -- 96 rules
   carry a colour, many of them restating the same selector to beat the
   last one, and the whole thing is on the old browns: #332C2A for the
   surface, #E0D2C5 and #FBF6F0 for type, rgba(224,210,197,...) for every
   line. None of those exist on the rebuilt pages.

   This restates the COLOURS only and leaves that file's layout alone,
   matching the !important of the rules it replaces -- the last word on a
   property rather than another patch on top of one.
   ===================================================================== */
.cs-modal-backdrop{background:rgba(15,13,12,.84)}
.cs-modal-dialog{
  background:var(--au-ground);
  border:1px solid rgba(246,241,234,.09);
  box-shadow:
    0 30px 90px rgba(0,0,0,.58),
    0 0 0 1px rgba(246,241,234,.03);
}
.cs-modal-close{
  border:1px solid rgba(246,241,234,.16);
  background:rgba(23,20,19,.90);
  color:var(--au-cream);
}
/* No hover state on the close button. It was changing both its border
   and its colour to clay, which on a plain square read as the button
   breaking rather than responding. The cursor already says it is a
   control. */
.cs-modal-close:hover{
  border-color:rgba(246,241,234,.16)!important;
  color:var(--au-cream)!important;
  background:rgba(23,20,19,.90)!important;
}
.cs-modal-project-head{border-bottom:1px solid rgba(246,241,234,.08)}

/* The industry tag is an eyebrow here, same clay as every other eyebrow
   on the page. It was a filled cream pill with dark text -- the only
   light-on-dark-inverted chip left anywhere on the site. */
.cs-modal-project-head .cs-industry{
  background:transparent!important;border:0!important;
  color:var(--au-accent)!important;
}
.cs-modal .cs-modal-dialog .cs-modal-project-head .cs-title{
  color:var(--au-cream)!important;
}
.cs-modal .cs-modal-dialog .cs-modal-project-head .cs-stat,
.cs-modal .cs-modal-dialog .cs-modal-project-head .cs-stat *,
.cs-modal .cs-modal-dialog .cs-modal-project-head .cs-card-investment,
.cs-modal .cs-modal-dialog .cs-modal-project-head .cs-card-investment *,
.cs-modal .cs-modal-dialog .cs-modal-project-head .cs-card-capacity,
.cs-modal .cs-modal-dialog .cs-modal-project-head .cs-card-capacity *{
  color:rgba(246,241,234,.68)!important;
}

/* before / after, the image, and the note under it */
.cs-modal-content .cs-card-text .cs-desc{
  border-top:1px solid rgba(246,241,234,.14)!important;
  color:rgba(246,241,234,.68)!important;
  background:transparent!important;
}
.cs-modal-content .cs-card-text .cs-desc .tag,
.cs-modal-content .cs-card-text .cs-desc strong.tag{color:var(--au-cream)!important}
.cs-modal-content .cs-card-text .cs-desc:nth-of-type(2) .tag,
.cs-modal-content .cs-card-text .cs-desc:nth-of-type(2) strong.tag{
  color:var(--au-accent)!important;
}
.cs-modal-content .cs-card-text .cs-desc .cs-scan-list li{
  color:rgba(246,241,234,.72)!important;
}
/* the little connective marks between the two columns */
.cs-modal-content .cs-card-text .cs-desc:first-of-type::after{color:var(--au-accent)!important}
.cs-modal-content .cs-card-text .cs-desc:nth-of-type(2)::before{
  border-top-color:var(--au-accent)!important;
  border-right-color:var(--au-accent)!important;
}
.cs-modal-content .cs-story-payoff{color:var(--au-accent)!important}
.cs-modal-content .cs-cost,
.cs-modal-content .cs-card-text .cs-cost{color:rgba(246,241,234,.52)!important}
.cs-modal .cs-modal-dialog .cs-modal-content .cs-card-mock-big .cs-mock-host{
  background:var(--au-ground-dark)!important;
}

/* THE TWO PANELS THAT SURVIVED THE FIRST PASS.

   Measured inside the open modal rather than read off the file, because
   the file says one thing and paints another: the before/after columns
   and the whole how-it-works block were still painting #2C2523, and the
   "how it works" strip above them was #6D6668 -- a mid grey that exists
   nowhere else on the site and read as a placeholder bar.

   These are all five-class !important rules, so these match that weight.
   Same selectors, so this is the last word on the property rather than
   another layer on it. */
.cs-modal .cs-modal-dialog .cs-modal-content .cs-card-text .cs-desc{
  background:rgba(246,241,234,.035)!important;
  border-top:1px solid rgba(246,241,234,.14)!important;
  color:rgba(246,241,234,.72)!important;
}
.cs-modal .cs-modal-dialog .cs-modal-content .cs-card-text .cs-workflow{
  background:rgba(246,241,234,.05)!important;
  border:0!important;
}
.cs-modal .cs-modal-dialog .cs-modal-content .cs-card-text .cs-workflow-grid{
  background:var(--au-ground-dark)!important;
  border-top:1px solid rgba(246,241,234,.09)!important;
  border-left:1px solid rgba(246,241,234,.09)!important;
}
.cs-modal .cs-modal-dialog .cs-modal-content .cs-card-text .cs-workflow-step{
  background:var(--au-ground-dark)!important;
  border-right:1px solid rgba(246,241,234,.09)!important;
  border-bottom:1px solid rgba(246,241,234,.09)!important;
}
.cs-modal .cs-modal-content .cs-workflow-step .cs-step-num{color:var(--au-accent)!important}
.cs-modal .cs-modal-content .cs-workflow-step strong{color:var(--au-cream)!important}
.cs-modal .cs-modal-content .cs-workflow-step p{color:rgba(246,241,234,.62)!important}

/* Only the after-column ticks. The before-column marks are a glyph, not
   a dot -- setting a background on them painted a block behind the
   character instead of recolouring it. They were already right. */
.cs-modal .cs-modal-content .cs-after .cs-scan-list li::before{color:var(--au-accent)!important}


/* =====================================================================
   MODAL LAYOUT, rebuilt.

   The body was a grid with explicit grid-row on four of its six children
   and nothing on .cs-workflow, so the how-it-works block auto-placed
   into whatever cell was free -- which is why its heading sat in odd
   places and the whole thing read as misassembled. .cs-card-text is
   display:contents, so the real children of .cs-card-body-inner are:

     .cs-card-mock-big  .cs-desc.cs-before  .cs-story-payoff
     .cs-desc.cs-after  .cs-workflow        .cs-cost

   All six are placed here explicitly. Order is the story order: what it
   was, what it is now, the payoff, how it runs, what it looks like, and
   the note about the numbers.
   ===================================================================== */
.cs-modal .cs-modal-dialog .cs-modal-content .cs-card-body-inner{
  display:grid!important;
  grid-template-columns:1fr 1fr!important;
  column-gap:28px!important;
  row-gap:0!important;
  padding:8px 40px 44px!important;
}
.cs-modal .cs-modal-content .cs-desc.cs-before  {grid-column:1;grid-row:1!important;margin:0!important}
.cs-modal .cs-modal-content .cs-desc.cs-after   {grid-column:2;grid-row:1!important;margin:0!important}
.cs-modal .cs-modal-content .cs-story-payoff    {grid-column:1 / -1;grid-row:2!important;margin:34px 0 0!important}
.cs-modal .cs-modal-content .cs-workflow        {grid-column:1 / -1;grid-row:3!important;margin:38px 0 0!important}
.cs-modal .cs-modal-content .cs-card-mock-big   {grid-column:1 / -1;grid-row:4!important;margin:38px 0 0!important}
.cs-modal .cs-modal-content .cs-cost            {grid-column:1 / -1;grid-row:5!important;margin:22px 0 0!important}

/* THE HEADER. The three figures were inline sentences separated by pipes
   and running into each other. As a three-up with the label above the
   value they read as the numbers they are, and the eyebrow / heading /
   figures rhythm is the one every band on the site uses. */
/* The head is a grid so the three figures line up by construction. As
   inline-blocks they did not: each label is a different element with its
   own spacing, so the three sat on three different baselines, and the
   dividers between them were part-height because they were borders on
   text boxes rather than on columns. The eyebrow and the title span. */
.cs-modal .cs-modal-dialog .cs-modal-project-head{
  padding:34px 72px 30px 40px!important;
  display:grid!important;
  grid-template-columns:repeat(3,max-content)!important;
  column-gap:56px!important;
  align-items:start!important;
}
.cs-modal .cs-modal-dialog .cs-modal-project-head .cs-industry,
.cs-modal .cs-modal-dialog .cs-modal-project-head .cs-title{
  grid-column:1 / -1!important;
}
/* those dividers were borders on the text; the columns carry them now */
.cs-modal .cs-modal-dialog .cs-modal-project-head .cs-card-investment,
.cs-modal .cs-modal-dialog .cs-modal-project-head .cs-card-capacity{
  border-left:0!important;
}
.cs-modal .cs-modal-dialog .cs-modal-project-head .cs-industry{
  font-size:12px!important;letter-spacing:.2em!important;
  margin:0 0 14px!important;padding:0!important;
}
.cs-modal .cs-modal-dialog .cs-modal-project-head .cs-title{
  font-size:36px!important;line-height:1.08!important;
  letter-spacing:-.02em!important;margin:0 0 26px!important;
  max-width:24ch!important;
}
.cs-modal .cs-modal-dialog .cs-modal-project-head .cs-stat,
.cs-modal .cs-modal-dialog .cs-modal-project-head .cs-card-investment,
.cs-modal .cs-modal-dialog .cs-modal-project-head .cs-card-capacity{
  display:inline-block!important;
  width:auto!important;margin:0 56px 0 0!important;
  font-size:19px!important;line-height:1.2!important;
  font-family:'League Spartan',sans-serif!important;font-weight:700!important;
  color:var(--au-cream)!important;vertical-align:top!important;
}
.cs-modal .cs-modal-dialog .cs-modal-project-head .cs-metric-label,
.cs-modal .cs-modal-dialog .cs-modal-project-head .cs-card-investment strong,
.cs-modal .cs-modal-dialog .cs-modal-project-head .cs-card-capacity strong{
  font-family:'League Spartan',sans-serif!important;
  font-weight:700!important;color:var(--au-cream)!important;
}
/* the label goes above its figure, small and dim */
.cs-modal .cs-modal-dialog .cs-modal-project-head .cs-metric-label{
  display:block!important;
  font-family:'Questrial',sans-serif!important;
  font-size:11px!important;font-weight:700!important;
  letter-spacing:.16em!important;text-transform:uppercase!important;
  color:rgba(246,241,234,.49)!important;
  margin:0 0 7px!important;
  /* explicit, because the three parents have different font sizes --
     .cs-card-investment is set to 0 so its literal "Est. cost:" text
     does not print -- and an inherited line-height gave each label a
     different line box. The boxes all started at the same y; the text
     inside them did not. */
  line-height:13px!important;
}
/* "Est. cost:" is bare text, not a .cs-metric-label, so it cannot be
   restyled into a label the way the other two are. Hidden, and the word
   put back as a real one on the ::before. */
.cs-modal .cs-modal-dialog .cs-modal-project-head .cs-card-investment{
  font-size:0!important;
}
.cs-modal .cs-modal-dialog .cs-modal-project-head .cs-card-investment strong{
  display:block!important;font-size:19px!important;
}
.cs-modal .cs-modal-dialog .cs-modal-project-head .cs-card-investment::before{
  /* with the colon, because the other two labels are page copy and carry
     one -- "Time saved:" and "Value of time saved:" */
  content:"EST. COST:";display:block;
  font-family:'Questrial',sans-serif;
  font-size:11px;font-weight:700;letter-spacing:.16em;
  color:rgba(246,241,234,.49);margin:0 0 7px;
  line-height:13px;
}

/* BEFORE / AFTER. The labels sat on the panels' own top border, which is
   what read as "headers sitting weird". They are eyebrows above the list
   now, on a faint panel, with the after column carrying the clay. */
.cs-modal .cs-modal-dialog .cs-modal-content .cs-card-text .cs-desc{
  padding:24px 26px 26px!important;
  border:0!important;border-top:0!important;
}
.cs-modal .cs-modal-content .cs-desc .tag,
.cs-modal .cs-modal-content .cs-desc strong.tag{
  display:block!important;
  font-family:'Questrial',sans-serif!important;
  font-size:11px!important;font-weight:700!important;
  letter-spacing:.2em!important;text-transform:uppercase!important;
  margin:0 0 16px!important;
}
.cs-modal .cs-modal-content .cs-desc .cs-scan-list{
  margin:0!important;padding:0!important;list-style:none!important;
}
.cs-modal .cs-modal-content .cs-desc .cs-scan-list li{
  font-size:14.5px!important;line-height:1.5!important;
  margin:0 0 10px!important;
}
.cs-modal .cs-modal-content .cs-desc .cs-scan-list li:last-child{margin-bottom:0!important}
/* the connective marks belonged to a stacked layout; these two sit side
   by side, so there is nothing for an arrow to point along */
.cs-modal .cs-modal-content .cs-desc:first-of-type::after,
.cs-modal .cs-modal-content .cs-desc:nth-of-type(2)::before{display:none!important}

/* THE LINE THROUGH "BEFORE" AND "AFTER".

   ideas-section.css:3545 draws it: a 1px bar pinned at top:30px across
   the full panel, from a layout where the label sat somewhere else. The
   label runs 24px to 54px, so it crosses at the glyphs and reads as a
   strikethrough.

   THIS TOOK THREE ATTEMPTS AND THE FIRST TWO FAILED FOR THE SAME REASON.
   That rule's selector carries FIVE classes:

     .cs-modal .cs-modal-dialog .cs-modal-content .cs-card-text .cs-before

   and mine carried four. !important does not beat higher specificity --
   it only breaks ties between declarations of equal weight. So the
   override never applied, and reading the stylesheet made it look as
   though it had. The selector below is that one exactly; this file
   loads later, so an equal-specificity rule wins.

   Found by scanning the panel's pixels for a bright full-width row
   rather than by reading CSS, which is what should have happened first. */
.cs-modal .cs-modal-dialog .cs-modal-content .cs-card-text .cs-before::before,
.cs-modal .cs-modal-dialog .cs-modal-content .cs-card-text .cs-after::before,
/* and ::after on both, which is the rule down the AFTER panel's left
   edge that the BEFORE panel has no counterpart for. The two sit side by
   side as a matched pair, so anything that lands on one and not the
   other reads as a mistake -- which is how she found it. Both are
   leftovers from the stacked layout these panels used to have. */
.cs-modal .cs-modal-dialog .cs-modal-content .cs-card-text .cs-before::after,
.cs-modal .cs-modal-dialog .cs-modal-content .cs-card-text .cs-after::after{
  content:none!important;
  display:none!important;
}

/* CORNERS. The mock host was 0px 0px 13px 13px -- square at the top and
   rounded at the bottom, which is the "top is square bottom is rounded"
   she saw. It also explains the outline sitting outside the corner: the
   frame around it is a square 1px border, so at each bottom corner the
   border turned where the content had already curved away, leaving the
   line hanging past it. Square everywhere; the site has no rounded
   corners anywhere else. */
.cs-modal .cs-modal-dialog .cs-modal-content .cs-card-mock-big,
.cs-modal .cs-modal-dialog .cs-modal-content .cs-card-mock-big .cs-mock-host,
.cs-modal .cs-modal-dialog .cs-modal-content .cs-card-mock-big .cs-mock-host *{
  border-radius:0!important;
}

/* HOW IT WORKS. The label was a filled bar across the full width; it is
   an eyebrow like every other section label on the page now. */
.cs-modal .cs-modal-dialog .cs-modal-content .cs-card-text .cs-workflow{
  background:transparent!important;border:0!important;padding:0!important;
}
.cs-modal .cs-modal-content .cs-workflow .cs-detail-kicker{
  display:block!important;
  font-family:'Questrial',sans-serif!important;
  font-size:11px!important;font-weight:700!important;
  letter-spacing:.2em!important;text-transform:uppercase!important;
  color:var(--au-accent)!important;
  margin:0 0 16px!important;
}
.cs-modal .cs-modal-dialog .cs-modal-content .cs-card-text .cs-workflow-grid{
  display:grid!important;grid-template-columns:repeat(4,minmax(0,1fr))!important;
  background:transparent!important;border:0!important;
}
.cs-modal .cs-modal-dialog .cs-modal-content .cs-card-text .cs-workflow-step{
  background:transparent!important;
  border:0!important;
  border-left:1px solid rgba(246,241,234,.12)!important;
  padding:2px 20px 0!important;
}
.cs-modal .cs-modal-content .cs-workflow-step:first-child{
  border-left:0!important;padding-left:0!important;
}
.cs-modal .cs-modal-content .cs-workflow-step .cs-step-num{
  display:block!important;margin:0 0 9px!important;
  font-size:11px!important;letter-spacing:.16em!important;
}
.cs-modal .cs-modal-content .cs-workflow-step strong{
  display:block!important;margin:0 0 7px!important;
  font-size:17px!important;line-height:1.1!important;
}
.cs-modal .cs-modal-content .cs-workflow-step p{
  margin:0!important;font-size:13.5px!important;line-height:1.45!important;
}

.cs-modal .cs-modal-dialog .cs-modal-content .cs-card-mock-big{
  border:1px solid rgba(246,241,234,.10)!important;
  border-radius:0!important;
}
.cs-modal .cs-modal-content .cs-cost{
  font-size:12.5px!important;line-height:1.55!important;
}

@media(max-width:860px){
  .cs-modal .cs-modal-dialog .cs-modal-content .cs-card-body-inner{
    grid-template-columns:1fr!important;padding:4px 20px 30px!important;
  }
  .cs-modal .cs-modal-content .cs-desc.cs-before{grid-column:1;grid-row:1!important}
  .cs-modal .cs-modal-content .cs-desc.cs-after {grid-column:1;grid-row:2!important;margin-top:12px!important}
  .cs-modal .cs-modal-content .cs-story-payoff  {grid-column:1;grid-row:3!important}
  .cs-modal .cs-modal-content .cs-workflow      {grid-column:1;grid-row:4!important}
  .cs-modal .cs-modal-content .cs-card-mock-big {grid-column:1;grid-row:5!important}
  .cs-modal .cs-modal-content .cs-cost          {grid-column:1;grid-row:6!important}
  /* One column. Three max-content tracks are sized by their contents,
     not by the dialog, so at 390 the row was wider than the dialog and
     the title -- spanning 1/-1 -- ran out under the close button. */
  .cs-modal .cs-modal-dialog .cs-modal-project-head{
    padding:26px 58px 22px 20px!important;
    grid-template-columns:1fr!important;
    column-gap:0!important;
  }
  .cs-modal .cs-modal-dialog .cs-modal-project-head .cs-title{font-size:26px!important}
  .cs-modal .cs-modal-dialog .cs-modal-project-head .cs-stat,
  .cs-modal .cs-modal-dialog .cs-modal-project-head .cs-card-capacity{
    margin:0 0 14px!important;font-size:17px!important;
  }
  /* NOT font-size on .cs-card-investment itself: the 0 is what stops its
     literal "Est. cost:" text printing next to the label built on the
     ::before. Setting 17px here put the word back on the phone. */
  .cs-modal .cs-modal-dialog .cs-modal-project-head .cs-card-investment{
    margin:0 0 14px!important;
  }
  .cs-modal .cs-modal-dialog .cs-modal-project-head .cs-card-investment strong{
    font-size:17px!important;
  }
  .cs-modal .cs-modal-dialog .cs-modal-content .cs-card-text .cs-workflow-grid{
    grid-template-columns:1fr 1fr!important;row-gap:20px!important;
  }
  .cs-modal .cs-modal-content .cs-workflow-step:nth-child(odd){
    border-left:0!important;padding-left:0!important;
  }
}

/* =====================================================================
   HOW IT STARTS -- the band between the case studies and the ask.

   Measured against its siblings this page was the thinnest of the three
   service pages: 3 bands and 347 words against planning's 6 and 625.
   What was missing is the step planning and software both have -- what
   actually happens if you say yes.

   Built from parts the page already uses: the section rhythm, the
   tracked eyebrow, a numbered row like the modal's how-it-works, and
   the shared tertiary CTA.
   ===================================================================== */
.cs-start{
  position:relative;
  padding:118px 0;
  background:var(--au-ground);
  border-top:1px solid rgba(246,241,234,.07);
}
.cs-start-wrap{width:100%;padding:0 var(--hx-inset)}
/* MATCHED TO PLANNING AND SOFTWARE.

   Those two agree byte for byte on a band eyebrow and heading --
   12px/.17em cream at 70%, and 38px/1.04/-0.035em lowercase -- and
   that agreement is what makes them the standard rather than a third
   opinion. This band had a clay eyebrow at .167em and a heading at
   1.1/-0.02em, so the automation page was the odd one of the three.

   Measured across every band on every page, not sampled: a first pass
   that took whichever element matched first caught a 24px sub-heading
   on planning and would have had me aligning to the wrong thing. */
.cs-start .cs-eyebrow{
  display:block;
  font-family:'Questrial',sans-serif;
  font-size:12px;font-weight:700;letter-spacing:.17em;text-transform:uppercase;
  color:rgba(246,241,234,.7);margin:0;
}
.cs-start h2{
  font-family:'League Spartan',sans-serif;font-weight:700;
  font-size:38px;line-height:1.04;letter-spacing:-.035em;
  color:var(--au-cream);
  margin:14px 0 20px;max-width:18ch;text-transform:lowercase;
}
.cs-start-lede{
  font-family:'Questrial',sans-serif;
  font-size:15px;line-height:24px;color:rgba(246,241,234,.68);
  margin:0;max-width:62ch;
}

/* The three-across step grid, the .cs-start-foot strip and the
   .cs-start-build block that used to live here are GONE, along with
   .cs-start-num and .cs-start-terms. They were two earlier versions of
   this band -- first a 3-column grid, then a numbered-label row with a
   build block under it -- and neither has been in the markup since the
   timeline replaced them. Rules for elements that no longer exist are
   how a stale layout comes back the next time a class name gets reused,
   so they come out with the markup rather than after it. */

/* =====================================================================
   THE MODAL'S CLOSING LINE. It lives in the shell rather than in the
   cloned card body, so it is written once and every case study gets it.
   ===================================================================== */
.cs-modal-foot{
  display:flex;align-items:center;justify-content:space-between;
  gap:26px;flex-wrap:wrap;
  margin:0;padding:26px 40px 34px;
  border-top:1px solid rgba(246,241,234,.09);
}
/* LOWERCASE, like every other League Spartan heading on the site. This
   one was set from the markup's own capitalisation and read as the only
   sentence-case headline in the page. */
.cs-modal-foot p{
  font-family:'League Spartan',sans-serif;font-weight:700;
  font-size:19px;line-height:1.2;letter-spacing:-.01em;
  text-transform:lowercase;
  color:var(--au-cream);margin:0;
}
.cs-modal-foot-actions{display:flex;align-items:center;gap:26px;flex-wrap:wrap}

/* =====================================================================
   THE FILTER CHIPS GO SQUARE. At 999px they were the last rounded
   things on the page -- the cards, the buttons, the modal and the mocks
   are all square now.
   ===================================================================== */
.cs-filters .cs-filter-chip{
  border-radius:0!important;
  border:1px solid rgba(246,241,234,.16)!important;
  background:transparent!important;
  color:rgba(246,241,234,.62)!important;
  font-family:'Questrial',sans-serif!important;
  font-size:12.5px!important;letter-spacing:.02em!important;
  padding:9px 16px!important;
  transition:border-color .18s ease,color .18s ease,background-color .18s ease!important;
}
.cs-filters .cs-filter-chip:hover{
  border-color:rgba(246,241,234,.34)!important;
  color:var(--au-cream)!important;
}
.cs-filters .cs-filter-chip.active{
  background:var(--au-cream)!important;
  border-color:var(--au-cream)!important;
  color:#0F0D0C!important;
  font-weight:700!important;
}

@media(max-width:760px){
  .cs-start{padding:76px 0}
  .cs-start h2{font-size:30px;max-width:none}
  .cs-modal-foot{padding:22px 20px 26px;gap:18px}
  .cs-modal-foot p{font-size:17px}
}

/* ---------------------------------------------------------------------
   THE CLOSING BAND, her copy.

   This band is the end of the page now: eyebrow, the question, the two
   ways in, the four steps, what it costs, and the button. The separate
   .cs-cta-block that used to follow it asked the same question in the
   same words, so it is gone and this carries the ask.
   --------------------------------------------------------------------- */

/* ONE LINE EACH, heading and lede.

   Both were capped at a measure -- 26ch and 62ch -- written for copy
   that was meant to wrap. These two are short enough to sit on one line
   inside the band's 1210, so the cap is what was breaking them, not the
   width. max-width:none lets each take the line it needs and still wrap
   normally once the viewport is narrower than the sentence. */
.cs-start h2{max-width:none}
.cs-start-lede--wide{max-width:none}

/* ---------------------------------------------------------------------
   NO PICTURE. A BLOOM.

   The dune was a picture, and it read as one: you could see a dune, a
   ridge, a lit face, and it competed with the timeline drawn across it.
   Three crops and a brightness sweep later it was still a photograph
   behind body copy.

   This is the blog article treatment instead -- .post::before in
   blog.css -- which is the same idea done properly: take the picture,
   blow it up, blur it past recognition, desaturate it, and bury it
   under a veil that is nearly opaque by the middle of the box. What
   survives is the COLOUR and the falloff, a soft bloom at the top that
   dissolves into flat ground. Not a scene. Light.

   THE BLOOM IS ON THE TRACK, not on the band.

   It used to be a band-wide wash entering from the lower right, which
   is where the dune's lit face happened to fall -- light arriving at an
   angle that had nothing to do with anything on the page. Now it sits
   on the timeline: brightest along the rule, falling away above and
   below it, so the glow reads as coming off the line.

   IT IS DRAWN ON .cs-beats RATHER THAN ON THE BAND, and that is the
   whole trick. The track's height in the band is content-dependent --
   it moves whenever her copy changes the row heights, and it did three
   times today. A bloom positioned at "54% of the band" would be right
   until the next edit. Anchored to .cs-beats at top:50% it is centred
   on the rule by construction, because the rule is at .cs-beats' own
   50% too.

   It still has to reach the band's edges, so it pulls itself back out
   through the wrap's gutter with negative insets.

   The mask does the shaping, and there is only ONE ramp: an ellipse,
   wide and short, centred on the rule. The earlier version had a veil
   gradient AND a mask, which is two compounding ramps and never the
   curve you wrote.

   Sized past cover on purpose -- see the note below on why cover makes
   background-position's Y inert here -- and blurred hard enough that
   the upscale costs nothing. What survives is warm colour and falloff.

   EASY TO PULL: this block and the isolation line above it. */
.cs-start{position:relative; overflow:hidden}
.cs-beats{isolation:isolate}
.cs-beats::after{
  content:"";
  position:absolute;z-index:-1;pointer-events:none;
  /* back out through the wrap's gutter to the band's edges */
  left:calc(-1 * var(--hx-inset));
  right:calc(-1 * var(--hx-inset));
  top:50%;height:560px;transform:translateY(-50%);

  /* THE SOURCE IS SIZED PAST cover DELIBERATELY. cover fills a box of
     this aspect exactly by height, which makes background-position's Y
     inert -- "center top" and "center 66%" render byte for byte
     identical, and "center top" on this picture blooms its NIGHT SKY.
     210% gives vertical overflow to position into. The upscale is free:
     at 30px of blur there is no detail left to lose. */
  background:url('/assets/images/automation-start-dune.jpg') 58% 96%/210% auto no-repeat;
  filter:blur(30px) saturate(.6) brightness(.95);
  opacity:.5;

  /* one ramp, not two: brightest on the rule, gone by the edges */
  -webkit-mask-image:radial-gradient(ellipse 62% 46% at 50% 50%,
    #000 0%, rgba(0,0,0,.72) 44%, rgba(0,0,0,.24) 74%, transparent 100%);
  mask-image:radial-gradient(ellipse 62% 46% at 50% 50%,
    #000 0%, rgba(0,0,0,.72) 44%, rgba(0,0,0,.24) 74%, transparent 100%);
}

/* the two ways in are named in the lede, so they are links in it */
.cs-start-lede a{
  color:var(--au-accent);
  text-decoration:none;
  border-bottom:1px solid rgba(178,132,121,.34);
  padding-bottom:1px;
  transition:color .18s ease,border-color .18s ease;
}
.cs-start-lede a:hover{color:#C99084;border-bottom-color:#C99084}

/* .cs-start-close IS GONE, and its rules with it. The paragraph said
   what step 03 now says word for word, so it was a repetition two
   elements later rather than a summary. */

/* NO RULE AT ALL between the timeline and the ask. The band has none:
   the timeline's own track is the only horizontal line in it, and the
   space does the separating. */
.cs-start .cs-cta-actions{margin:46px 0 0;padding:0;border-top:0}

@media(max-width:760px){
  .cs-start .cs-cta-actions{margin-top:36px;gap:18px}
}

/* =====================================================================
   THE PHONE, WHERE TWO THINGS WERE BADLY BROKEN.

   Neither showed up in the checks I had, and both are the same kind of
   miss: I measured horizontal overflow, found none, and called it fine.
   Overflow is a horizontal test. Both of these are vertical.

   1. THE STAT BAR WAS SITTING ON THE HERO. .cs-intro is positioned
      absolute at the hero's bottom, which is right for a desktop bar of
      one 4-column row about 100px tall. On a phone the bar stacks into
      four rows -- measured 643px -- so it grew UPWARDS out of a 640px
      hero and covered the headline, the subtext and both buttons. The
      whole hero was the stat bar. An absolutely positioned element
      pinned to a bottom edge has no way to push anything down; it can
      only grow over what is already there.

      So on a phone the bar goes back into the flow, the hero becomes a
      column, and the hero's height comes from its content instead of a
      640px floor that the bar had already outgrown. The negative side
      margins take it back out through the hero's gutter so it still
      runs edge to edge, and the negative bottom margin sits it flush on
      the hero's bottom edge.

   2. THE FEATURED CARD KEPT ITS FOUR FIGURE COLUMNS. The desktop rules
      place every child of .cs-card-meta on an explicit grid-row and
      grid-column, which is what gets "DEPT:" into the figures row. Those
      placements do not stop applying just because the card is now 347px
      wide: the four figures were in 46px and 64px columns.

      Reset to auto placement in two columns, with `order` doing the job
      the explicit rows did on desktop -- the department has to follow
      the lede rather than lead the card, and it comes before the title
      in the markup.
   ===================================================================== */
@media(max-width:860px){
  .auto-hero{
    flex-direction:column!important;
    align-items:stretch!important;
    min-height:0!important;height:auto!important;
  }
  .auto-hero .cs-intro{
    position:static!important;
    width:auto!important;
    margin:44px calc(-1 * var(--hx-inset)) -56px!important;
  }
}

@media(max-width:1024px){
  .cs-grid > .cs-card.is-featured .cs-card-meta{
    grid-template-columns:repeat(2,minmax(0,1fr))!important;
    column-gap:20px!important;row-gap:24px!important;
  }
  /* full width, in markup order */
  .cs-grid > .cs-card.is-featured .cs-featured-flag,
  .cs-grid > .cs-card.is-featured .cs-title,
  .cs-grid > .cs-card.is-featured .cs-featured-lede{
    grid-row:auto!important;grid-column:1 / -1!important;order:0!important;
  }
  /* then the four figures, two up. order rather than explicit rows,
     because the department sits before the title in the markup and
     auto placement would put it back up there. */
  .cs-grid > .cs-card.is-featured .cs-industry,
  .cs-grid > .cs-card.is-featured .cs-stat,
  .cs-grid > .cs-card.is-featured .cs-card-investment,
  .cs-grid > .cs-card.is-featured .cs-card-capacity{
    grid-row:auto!important;grid-column:auto!important;order:1!important;
  }
  .cs-grid > .cs-card.is-featured .cs-card-meta::after{
    grid-row:auto!important;grid-column:1 / -1!important;order:2!important;
    margin-top:22px!important;
  }
}

/* A DOWN ARROW MOVES DOWN ON HOVER. The shared rule nudges every arrow
   4px along x, which is right for a link that takes you somewhere and
   wrong for one that hands you a file -- the same correction the hero's
   checklist link needed. */
.cs-modal-foot .n12-cta-3:hover .n12-arw--down{
  transform:translateY(3px)!important;
}

/* ---------------------------------------------------------------------
   THE TIMELINE, ported from planning's .pl-beats.

   Same construction, because it is the same idea: one continuous rule
   drawn left to right, steps zigzagging above and below it, a node on
   each. Rebuilt under .cs-* names rather than reused, because this page
   does not load planning-n12.css.

   The one structural change is the column count. Planning runs six
   steps on seven columns, each spanning two -- the grid is a column
   finer than the step count so the nodes keep a tight rhythm while the
   copy gets roughly twice the width it would otherwise have. Five steps
   here, so six columns on the same rule. The last column is 40px rather
   than a sixth: equal sixths would put the five nodes across only five
   sixths of the track, leaving the last step short of the end of its own
   line while the first sat hard against the left edge.
   --------------------------------------------------------------------- */
.cs-beats{
  list-style:none;margin:56px 0 0;padding:0;
  position:relative;
  display:grid;
  /* The tail is 104px, up from 40. It is not decoration -- it is what
     step 05 gets to be wide with. Every other step spans two 1fr
     columns plus a gap; 05 spans the last column plus the tail, so the
     tail IS its right-hand half. At 40 it was 274 wide against the
     others' 388, and the odd one out on the row.

     It also pulls the last node from 77% of the track to 73%, which is
     the trade: a slightly shorter run of rule past the last step in
     exchange for the last step reading like the rest. */
  grid-template-columns:repeat(5,1fr) 104px;
  grid-template-rows:1fr 1fr;
  gap:0 30px;
}
/* the track, and the clay line that draws along it */
.cs-beats::before{
  content:"";position:absolute;left:0;right:0;top:50%;height:1px;
  background:rgba(246,241,234,.14);
  -webkit-mask-image:linear-gradient(90deg,#000 84%,transparent 100%);
  mask-image:linear-gradient(90deg,#000 84%,transparent 100%);
}
.cs-beat-line{
  position:absolute;left:0;right:0;top:50%;height:1px;
  background:var(--au-accent);
  transform:scaleX(0);transform-origin:left;
  transition:transform 1.5s cubic-bezier(.16,1,.3,1) .1s;
  -webkit-mask-image:linear-gradient(90deg,#000 84%,transparent 100%);
  mask-image:linear-gradient(90deg,#000 84%,transparent 100%);
}
.cs-beats.is-drawn .cs-beat-line{transform:scaleX(1)}

.cs-beats li{
  display:block;padding:0;border:0;position:relative;
  /* 388, up from 330, because her steps run long and were folding to
     four, five and six lines. The ceiling is not the grid, it is the
     NEIGHBOUR: items in a row sit two nodes apart, so there is 468px
     between their left edges at 1440 and 388 leaves 54 of air. Measured
     rather than guessed -- 412 still fits but closes that to 30, which
     is the grid's own gap and too tight between two blocks of text.

     Line counts went 4/5/6/4/4 to 3/4/5/4/3. */
  max-width:clamp(260px,27vw,388px);
  /* a grid item's default floor is its min-content, and a spanning item
     pushes that into every column it covers -- without this the fr
     ratios never get a say */
  min-width:0;
}
.cs-beats li:nth-of-type(1){grid-column:1 / span 2}
.cs-beats li:nth-of-type(2){grid-column:2 / span 2}
.cs-beats li:nth-of-type(3){grid-column:3 / span 2}
.cs-beats li:nth-of-type(4){grid-column:4 / span 2}
.cs-beats li:nth-of-type(5){grid-column:5 / span 2}
.cs-beats li:nth-of-type(odd){grid-row:1;align-self:end;padding-bottom:62px}
.cs-beats li:nth-of-type(even){grid-row:2;align-self:start;padding-top:62px}

.cs-beats h3{
  margin:0 0 10px;
  font-family:'League Spartan',sans-serif;font-weight:700;
  font-size:clamp(20px,1.65vw,24px);line-height:1.06;letter-spacing:-.03em;
  text-transform:lowercase;color:var(--au-cream);
}
.cs-beats p{
  margin:0;
  font-family:'Questrial',sans-serif;
  font-size:14.5px;line-height:1.55;color:rgba(246,241,234,.62);
}
.cs-beat-n{
  display:block;margin-bottom:10px;
  font-family:'League Spartan',sans-serif;font-weight:700;
  font-size:13px;letter-spacing:.14em;color:var(--au-accent);
}
/* The bookend styling is gone: .cs-cap-when, and the dimmed heading,
   paragraph and node on .cs-beat-cap. The build is 04 now, so all four
   steps carry a clay numeral and the track has no grey end. */

/* the nodes on the track, and the hairline joining each to its copy */
.cs-beat-node{
  position:absolute;left:0;
  width:11px;height:11px;border-radius:50%;
  /* FILLED, like the home page's tree nodes -- clay through, not a clay
     ring on the ground colour. The halo stays ground: that is the part
     that punches the node out of the track running behind it, and it
     has to be the band's colour rather than the node's. */
  background:var(--au-accent);
  border:2px solid var(--au-accent);
  /* the halo has to be the BAND's colour, because its job is to punch
     the node out of the track running behind it -- so it tracks
     .cs-start's ground and has to move whenever that does */
  box-shadow:0 0 0 6px var(--au-ground);
}
.cs-beats li:nth-of-type(odd) .cs-beat-node{top:auto;bottom:-5.5px}
.cs-beats li:nth-of-type(even) .cs-beat-node{top:-5.5px;bottom:auto}
.cs-beat-node::after{
  content:"";position:absolute;left:50%;
  width:1px;height:22px;transform:translateX(-.5px);
}
.cs-beats li:nth-of-type(odd) .cs-beat-node::after{
  bottom:100%;margin-bottom:5px;
  background:linear-gradient(0deg,var(--au-accent),rgba(178,132,121,0));
}
.cs-beats li:nth-of-type(even) .cs-beat-node::after{
  top:100%;margin-top:5px;
  background:linear-gradient(180deg,var(--au-accent),rgba(178,132,121,0));
}

/* the nodes arrive one after another as the line reaches them */
.rv .cs-beat-node{
  opacity:.35;transform:scale(.7);
  transition:opacity .45s ease,transform .45s cubic-bezier(.16,1,.3,1);
}
.rv .cs-beats.is-drawn .cs-beat-node{opacity:1;transform:scale(1)}
.rv .cs-beats.is-drawn li:nth-of-type(1) .cs-beat-node{transition-delay:.12s}
.rv .cs-beats.is-drawn li:nth-of-type(2) .cs-beat-node{transition-delay:.40s}
.rv .cs-beats.is-drawn li:nth-of-type(3) .cs-beat-node{transition-delay:.68s}
.rv .cs-beats.is-drawn li:nth-of-type(4) .cs-beat-node{transition-delay:.96s}
.rv .cs-beats.is-drawn li:nth-of-type(5) .cs-beat-node{transition-delay:1.24s}


@media(max-width:1100px){
  /* the zigzag needs width; below this it becomes a list with the track
     running down the left instead of across */
  .cs-beats{
    display:block;margin-top:40px;
  }
  .cs-beats::before,.cs-beat-line{
    left:5px;right:auto;top:0;bottom:0;width:1px;height:auto;
    transform:none;
    -webkit-mask-image:linear-gradient(180deg,#000 88%,transparent 100%);
    mask-image:linear-gradient(180deg,#000 88%,transparent 100%);
  }
  .cs-beats li,
  .cs-beats li:nth-of-type(odd),
  .cs-beats li:nth-of-type(even){
    max-width:none;padding:0 0 30px 34px;align-self:auto;
  }
  .cs-beats li:last-child{padding-bottom:0}
  .cs-beats li:nth-of-type(odd) .cs-beat-node,
  .cs-beats li:nth-of-type(even) .cs-beat-node{top:4px;bottom:auto}
  .cs-beat-node::after{display:none}
}
