/* =========================================================================
   cta-n12.css — one call to action, stated the same way every time.

   The home page asks four times (hero, where to start, close) and before
   this file each ask looked slightly different: three paddings, two labels
   for the same destination, and in the where-to-start band the roles were
   inverted -- the finder was the solid button and the call was the quiet
   link, which is backwards from everywhere else on the page.

   There are exactly THREE roles, and they never swap:

     PRIMARY    book a 15-minute call        solid cream, black text
                -> the calendar, or this page's own offer.

     SECONDARY  find your starting point ->  cream text, hairline under,
                                             arrow
                -> still this page's offer: book it, open it, jump to it.

     TERTIARY   see how the software works   the same thing in CLAY
                ->                           -> a DIFFERENT page.

   The split between the second and the third is about DESTINATION, not
   about emphasis. If the link keeps you here -- booking, requesting a
   login, jumping down the page -- it is cream. If it sends you somewhere
   else on the site, it is clay. So the colour tells you whether you are
   about to leave, before you read the label.

   CLAY, NOT PEACH. The two clay links this replaces on the planning page
   were peach #E4BCAC, and peach is not a site colour: counted across
   assets/css, clay #B28479 appears 48 times spread over all three pages,
   while peach appears 42 times of which 38 are the software page's own
   two files. It was a habit one page picked up. Clay is the accent the
   site actually owns, and it measures 5.65:1 on #171413 and 6.2 on
   #0F0D0C, so it clears 4.5 on both grounds this site uses.

   A reader who scrolls the whole page sees the same pair three times, so
   the second and third asks cost nothing to understand -- they are the
   first ask again, not a new decision. That is the entire point of
   standardising: repetition is only persuasive if it is recognisable.

   This file loads last so it wins over the per-section rules without
   editing them, which keeps hero-v1.css usable by the concept pages that
   still reference it.
   ========================================================================= */

/* ------------------------------- primary -------------------------------
   .pl-btn-primary is the planning page's. It is listed here rather than
   restyled there so the two pages cannot drift: one definition, one
   button, whatever page it is on. */
.n12-cta,
.st-btn,
.cl-btn,
.pl-btn-primary,
/* The software page's button was defined separately in software-n12.css
   and happened to match this to the byte -- same 16/700, same 15px 26px,
   same cream on black. Happening to match is not the same as being the
   same rule, and the two would have drifted the first time either moved.
   It joins the list. */
.sw-btn--primary,
/* and the automation page's two, which were 14px in their own file */
.auto-btn--primary,
.cs-cta-actions .btn,
.cs-modal-foot .btn,
/* and the pricing page's two. Same reasoning as the software page's:
   joining the list rather than restating the rule in pricing-n12.css,
   so the button cannot drift the first time this one moves. */
.pr12-hero-actions .btn,
.pr12-close-actions .btn, .ab12-close-actions .btn{
  display:inline-flex;align-items:center;gap:10px;
  /* 17.5/30, up from 16/26. Swapping Questrial for League Spartan bought
     a real bold but cost apparent size: League Spartan is the narrower
     face with the smaller x-height, so the same 16px read visibly smaller
     than it had, and the button shrank from 205px to 196 with it. This is
     the same optical size as before, in the heavier face. */
  padding:15px 26px;border:0;cursor:pointer;
  background:var(--n12-cream);color:var(--n12-black);
  /* Questrial here, League Spartan on a phone (mobile-n12.css).

     Questrial ships a single weight, so the 700 below is SYNTHESISED -- a
     smeared approximation the browser draws by thickening the roman. That
     is why the label has never looked as bold as it is specified, and
     swapping to League Spartan fixed the weight but changed the shape:
     narrower, more geometric, visibly not the face the rest of the site
     is set in. On a desktop, where the button is big enough for the
     letterforms to register, matching the site wins. At 14.5px on a phone
     it is the weight that registers, so that is where the real bold goes. */
  font-family:'Questrial',sans-serif;
  /* 16px and 15/26, which is exactly what this was before any of it
     changed: 205x46.

     It went to 17.5/16/30 to answer "the button looks like it shrunk" --
     and it had, from 205 to 196, because League Spartan is the narrower
     face. Now that Questrial is back the shrink is gone, so the
     compensation was counting the same problem twice and the button was
     227x50: 22px wider and 4 taller than it ever was. */
  font-size:16px;font-weight:700;letter-spacing:normal;
  line-height:1;white-space:nowrap;
  transition:background .16s ease,transform .16s ease;
}
/* shift-anim.css sets .lf-block .n12-cta to 16px, which a bare class here
   cannot outrank however late the file loads. It happens to be the same
   16px now, but the three are restated together so all of them move as
   one if this ever changes again -- the alternative is the hero's button
   silently differing from the other two, which is a bug this page has
   already had once. */
.lf-block .n12-cta,
.lf-block .st-btn,
.lf-block .cl-btn{font-size:16px}

/* THE PRIMARY BREATHES INSTEAD OF LIFTING.

   It moved 1px up on hover, which she did not want: a solid block
   shifting under the cursor makes the layout look unstable, and it is
   the gesture every button made in 2010.

   Her pick from the bench at /cta-test, after two rounds -- a cream
   glow that swells and settles while the cursor is on it, at the
   quietest of the three amplitudes offered.

   3.4s, and only 22 -> 30px of blur across the cycle. The slow, shallow
   version exists because this runs for as long as someone is on the
   button, which makes it the one hover on the site a reader could get
   tired of. A big pulse gets annoying much faster than a small one, and
   a primary that sits on screen the whole time someone reads a band has
   to survive being looked at.

   Cream rather than clay: neutral light reads as the button being LIT,
   where a coloured one reads as something sitting behind it. */
.n12-cta,
.st-btn,
.cl-btn,
.pl-btn-primary,
.sw-btn--primary,
.auto-btn--primary,
.cs-cta-actions .btn,
.cs-modal-foot .btn,
.pr12-hero-actions .btn,
.pr12-close-actions .btn, .ab12-close-actions .btn{box-shadow:0 0 0 0 rgba(246,241,234,0);
  transition:background .2s ease,box-shadow .28s ease}
.n12-cta:hover,
.st-btn:hover,
.cl-btn:hover,
.pl-btn-primary:hover,
.sw-btn--primary:hover,
.auto-btn--primary:hover,
.cs-cta-actions .btn:hover,
.cs-modal-foot .btn:hover,
.pr12-hero-actions .btn:hover,
.pr12-close-actions .btn, .ab12-close-actions .btn:hover{background:#fff;transform:none;
  animation:n12-breathe 3.4s ease-in-out infinite}
@keyframes n12-breathe{
  0%,100%{box-shadow:0 0 22px 1px rgba(246,241,234,.34)}
  50%    {box-shadow:0 0 30px 2px rgba(246,241,234,.52)}
}

/* ------------------------------ secondary ------------------------------
   All three are <button>, so the browser's button defaults have to be
   cleared or they render as a pale filled box with cream text invisible
   on it. The arrow is a <span> so it can slide on hover; it is the only
   movement either role has, and it belongs to the quieter one. */
.n12-help,
.st-link,
.cl-link,
.pl-btn-text,
/* The automation hero's second way in. It jumps down the page, like
   planning's, so it takes the down arrow. */
.auto-btn--text,
/* The software page's standalone cream CTA. It keeps you here -- it
   opens the calendar -- so it is secondary.

   .swx-fit-foot--links a is DELIBERATELY NOT in this list, although it
   is a secondary too. Those two links sit at the feet of three columns
   aligned by margin-top:auto, and their underline has to be drawn by
   text-decoration rather than by the border-bottom below: a border plus
   its 2px of padding adds 3px to the line box, which put those two feet
   at 19px against the third's 16 and left their rules visibly
   misaligned. That was measured and fixed once already. They carry the
   same cream and the same .3 hairline by a different mechanism, which
   is the right trade here -- the rule that has to hold is the painted
   result, not the property used to paint it. */
.sw-btn--text,.auto-btn--text{
  display:inline-flex;align-items:center;gap:9px;
  background:none;border:0;border-bottom:1px solid rgba(246,241,234,.3);
  padding:0 0 2px;margin:0;cursor:pointer;
  font-family:'Questrial',sans-serif;font-size:16px;font-weight:400;
  color:rgba(246,241,234,.78);white-space:nowrap;
  transition:color .16s ease,border-color .16s ease;
}
.n12-help:hover,
.st-link:hover,
.cl-link:hover,
.pl-btn-text:hover,
.sw-btn--text,.auto-btn--text:hover{color:var(--n12-cream);border-color:var(--n12-cream)}
.n12-help span,
.st-link span,
.cl-link span,
.pl-btn-text span,
.sw-btn--text,.auto-btn--text span,
/* the foot links keep their own underline mechanism, but the arrow can
   still slide -- that costs no height */
.swx-fit-foot--links a span{transition:transform .18s ease}
.n12-help:hover span,
.st-link:hover span,
.cl-link:hover span,
.sw-btn--text,.auto-btn--text:hover span,
.swx-fit-foot--links a:hover span{transform:translateX(4px)}
/* The planning page's secondary points DOWN -- it is an in-page jump to
   the plan, not a link off to somewhere. */
.pl-btn-text:hover span{transform:translateY(3px)}

/* ------------------------------ tertiary -------------------------------
   The secondary again, in clay, for links that leave this page.

   Same geometry as the secondary on purpose -- same 16px Questrial, same
   1px hairline, same 2px of padding under it, same arrow sliding 4px on
   hover. Only the colour changes, because only the destination changes.
   If the shape changed too it would read as a third kind of thing rather
   than the same thing pointing elsewhere.

   The hairline is clay at .32, matching the cream secondary's .3 in
   weight rather than in value -- clay is darker than cream, so an
   identical alpha would have drawn a fainter line. */
.n12-cta-3,
.tr-link,
.pl-fail-link a,
.pl-why-link a,
.swx-build-link,
/* Home's three column links. Each one goes to a different page --
   /planning, /software, /ideas -- so by the rule above they are
   tertiary, and they were the last cream links on the site that leave
   the page they are on. */
.st-more{
  display:inline-flex;align-items:center;gap:9px;
  background:none;border:0;border-bottom:1px solid rgba(178,132,121,.32);
  padding:0 0 2px;margin:0;cursor:pointer;
  font-family:'Questrial',sans-serif;font-size:16px;font-weight:400;
  color:#B28479;white-space:nowrap;text-decoration:none;
  transition:color .16s ease,border-color .16s ease;
}
.n12-cta-3:hover,
.tr-link:hover,
.pl-fail-link a:hover,
.pl-why-link a:hover,
.swx-build-link:hover,
.st-col:hover .st-more{color:#C99084;border-color:#C99084}
.n12-cta-3 span,.n12-cta-3 svg,
.tr-link span,.tr-link svg,
.pl-fail-link a span,
.pl-why-link a span,
.swx-build-link span{transition:transform .18s ease}
.n12-cta-3:hover span,.n12-cta-3:hover svg,
.tr-link:hover span,.tr-link:hover svg,
.pl-fail-link a:hover span,
.pl-why-link a:hover span,
.swx-build-link:hover span{transform:translateX(4px)}
/* THE ARROW SIZES ITSELF, WHEREVER IT IS.

   .n12-arw is on every svg carrying the shared arrow path. Before this,
   the arrows were sized by listing their PARENTS -- which worked for
   every parent on the list and failed silently for the two that were
   not on it: the finder's .sf-talk rendered at 144x144, because an svg
   with no size falls back to its viewBox at the font size, and the app
   mockup's .swa-planlink collapsed to 0x0. One enormous, one invisible,
   from the same omission.

   A rule that has to name every possible parent breaks the next time
   the markup is reused. A class on the thing being sized does not. */
.n12-arw{width:18px;height:16px;flex:none;transition:transform .18s ease}
/* the planning page's is rotated, so it is square at the same height --
   18x16 would squash a glyph that is taller than it is wide */
.pl-btn-text .n12-arw{width:16px;height:16px}
/* home's column links had 17x17 before any of this and are aligned to
   it; they keep their own size so that section does not shift */
.st-more .n12-arw{width:17px;height:17px}

/* EVERY ARROW ON THE SITE IS NOW THIS SVG.

   There were two marks doing one job: home's SVG, and a → character on
   the software and planning CTAs. They are not interchangeable by eye --
   the glyph sits on the text baseline and takes the font's weight, the
   SVG is optically centred and drawn at a fixed 1.6 stroke -- so in one
   page they read as two different things. Fourteen characters replaced.

   An SVG box is taller than the line it sits on, which is what pushed a
   rule out of alignment on the software page twice. So every one is
   sized to 16px high, the line box these CTAs run at, and flex:none so
   it cannot be squeezed instead. The down arrow on planning's in-page
   jump is untouched: it points down because it means something
   different, not because it is styled differently. */
.tr-link svg,
.n12-cta-3 svg,
.pl-fail-link a svg,
.pl-why-link a svg,
.swx-build-link svg,
/* `.sw-btn--text svg`, not `.sw-btn--text`. The ` svg` was missing here,
   so this list's width:18px;height:16px landed on the ANCHOR instead of
   on its arrow: the link collapsed to 18px wide and its text spilled
   sideways across "book a walkthrough" next to it. Exactly the failure
   the note above this block describes -- a rule that has to name every
   possible parent breaks the next time someone edits the list. */
.sw-btn--text svg,.auto-btn--text svg,
.swx-fit-foot--links a svg,
.swa-planlink svg,
.n12-help svg,
.st-link svg,
.cl-link svg{width:18px;height:16px;flex:none}
/* Home's column arrow was already 17x17 and already aligned; it keeps its
   own size so that section does not shift. */
.st-more svg{width:17px;height:17px;flex:none}

/* ---------------------- three fixes to all of them --------------------

   1. THE ARROW SITS ON THE TEXT'S MIDDLE. Measured, four of the seven
      CTAs had it dead centre and three had it 3px high -- the three
      whose own page sets display:inline-block, where align-items has
      nothing to act on and the SVG lands on the text baseline instead.
      inline-flex is restated here so it cannot be lost downstream.

   2. THE UNDERLINE RUNS UNDER THE ARROW. border-bottom spans the whole
      box, so it already did everywhere except the one CTA drawn with
      text-decoration -- and text-decoration underlines text only, which
      left its arrow hanging off the end of the line.

   3. .st-more DOES NOT SPAN ITS COLUMN. .st-col is a flex column at the
      default align-items:stretch, so an inline-flex child still gets
      stretched to the full width -- which is why home's three rules ran
      350px under a 146px label. align-self is the only thing that
      overrides a parent's stretch. */
.n12-help,.st-link,.cl-link,.pl-btn-text,.sw-btn--text,.auto-btn--text,
.n12-cta-3,.tr-link,.pl-fail-link a,.pl-why-link a,
.swx-build-link,.st-more,.swx-fit-foot--links a{
  display:inline-flex;align-items:center;
  /* NO gap. She does not want a space before the arrow, and the SVG
     already carries its own: the path starts at x=4 of a 24 viewBox, so
     at 17px there is about 2.8px of built-in air on its left edge. A
     9px gap on top of that read as a deliberate space. */
  gap:0;
}

/* align-self:flex-start ONLY where the parent is a flex COLUMN.

   It was on the whole list above for one round and that broke every CTA
   row on the site: .n12-actions, .st-foot, .cl-actions and .swx-ctas are
   all flex ROWS at align-items:center, and align-self on the child beats
   the parent's align-items -- so every secondary jumped to the top of
   its row and sat 13.5px above the primary's middle. Measured, all four.

   The two that need it are children of flex columns, where the default
   align-items:stretch would otherwise run their underline the full width
   of the column. */
.st-more,
.swx-panel .swx-build-link{align-self:flex-start}

/* AIR BETWEEN THE COPY AND THE LINK UNDER IT.

   .st-more was 16px, from when it sat directly under the body copy;
   there is a fact line between them now, so 16 was the gap to a small
   uppercase label rather than to a paragraph. 30 fixed that and went too
   far -- the link floated off the card it belongs to.

   20, which is also what .tr-link already uses under the in-practice
   subtext, so the two match rather than being two judgements. Declared
   on both here so they stay matched. */
.st-more,
.tr-link{margin-top:20px}

/* Every arrow slides, on every CTA. Some moved and some did not, which
   read as a bug rather than as restraint -- and one selector was
   reaching for `s` where the element is an `svg`. */
.n12-help:hover svg,.st-link:hover svg,.cl-link:hover svg,
.sw-btn--text,.auto-btn--text:hover svg,.swx-fit-foot--links a:hover svg,
.n12-cta-3:hover svg,.tr-link:hover svg,
.pl-fail-link a:hover svg,.pl-why-link a:hover svg,
.swx-build-link:hover svg,.st-col:hover .st-more svg,
.n12-help:hover span,.st-link:hover span,.cl-link:hover span,
.sw-btn--text,.auto-btn--text:hover span,.swx-fit-foot--links a:hover span,
.n12-cta-3:hover span,.tr-link:hover span,
.pl-fail-link a:hover span,.pl-why-link a:hover span,
.swx-build-link:hover span{transform:translateX(4px)}
/* The down arrow drops instead of sliding. */
.pl-btn-text svg{transition:transform .18s ease}
.pl-btn-text:hover span,.pl-btn-text:hover svg{transform:translateY(3px)}
/* It is the same 24 viewBox as the others, so it takes the same box --
   but rotated the glyph is TALLER than it is wide, and 18x16 would
   squash it. Square, at the height the others use. */
.pl-btn-text svg{width:16px;height:16px;flex:none}

@media(prefers-reduced-motion:reduce){
  /* No pulse. The glow still arrives -- it just arrives once and stays,
     which is the point of the setting: the state is still legible, the
     repetition is what goes. */
  .n12-cta,.st-btn,.cl-btn,.pl-btn-primary,.sw-btn--primary{
    transition:background .16s ease,box-shadow .16s ease}
  .n12-cta:hover,.st-btn:hover,.cl-btn:hover,.pl-btn-primary:hover,
  .sw-btn--primary:hover{transform:none;animation:none;
    box-shadow:0 0 26px 2px rgba(246,241,234,.42)}
  .n12-help span,.st-link span,.cl-link span,.pl-btn-text span,
  .sw-btn--text,.auto-btn--text span,.swx-fit-foot--links a span,
  .n12-cta-3 span,.tr-link span,.tr-link svg,
  .pl-fail-link a span,.pl-why-link a span,.swx-build-link span{transition:none}
  .n12-help:hover span,.st-link:hover span,.cl-link:hover span,.pl-btn-text span,
  .sw-btn--text,.auto-btn--text:hover span,.swx-fit-foot--links a:hover span,
  .n12-cta-3:hover span,.tr-link:hover span,.tr-link:hover svg,
  .pl-fail-link a:hover span,.pl-why-link a:hover span,
  .swx-build-link:hover span{transform:none}
}
