/* Generated by pricing/build_pricing.py from base.css: do not edit. */
:where(#mega-nav,#sbar) :where(*,*::before,*::after){box-sizing:border-box;margin:0;padding:0}
:where(#mega-nav,#sbar) :where(button){font:inherit;color:inherit;background:none;border:0;cursor:pointer}
:where(#mega-nav,#sbar) :where(a){color:inherit;text-decoration:none}
:where(#mega-nav,#sbar) :where(img){display:block;max-width:none}
/* ── CTA glow (Figma 592:2646: 608:537/538 "Run it", 608:547/548 "The longer story") ─────────────────────────────
   Sep 26 (owner): the hover "has this nice background shadow ... sort of yellowish, has this nice glow ... implemented
   nicely", and dynamic, not a static swap. Every button of the two variants (s01/m01 .run, s03/m03 .btn, s14 .s14-btn,
   m14 .btn-sm/.btn-lg, the sticky bar's and the phone menu's "Book a call") is driven by two registered numbers that
   transition: --cta-h (0 rest, 1 hover: the warm outer glow + drop, the lighter border and fill, the inner light) and
   --cta-s (the Figma sheen band, 0 = its default place near the left edge, 1 = its hover place at the right). Each
   button's own rule (its section sheet) builds its layers from the pieces below: --cta-glow (outer box-shadow),
   --cta-sheen (soft-light band) and --cta-light (a warm radial light at --mx/--my); js/btn-glow.js lights it under a
   fine pointer and leans the glow toward it (--cta-gx/--cta-gy, eased by their transitions). Paint-only: box-shadow and
   background layers of one small element, no layout. Hover (fine pointers), keyboard focus (there are no focus rings on
   the site: this is the focus indication) and press (touch: the glow on :active) all set the same state.
   Where @property is missing the values simply switch; every var has a rest value set here, so nothing is ever invalid.
   Sep 27 (owner): "the CTA hover effect ... looks kind of wonky ... there is a stroke which shows up and then it goes away ...
   smooth it out absolutely". Measured on 60fps screencasts of every CTA: glow and border settled in ~270ms on a snappy curve
   while the band, a narrow white streak with a crease at its peak and its own slower clock, was still crossing the label for
   ~600ms more; on the way out the glow was gone by ~350ms and only then the streak slid back over the plain button
   (280-680ms): a lone stroke that shows up and runs off. Now it is one gesture: both numbers start together on one curve
   family (--cta-bloom for the light, --cta-glide for the band, the same long tail) and land close together, in and out; the
   band leaves its place as soft light (in flight it widens to 2.2x, dims to half and rounds its crease into a bell, so its
   total light holds and it never reads as a line) and condenses back into Figma's band where it lands; the glow grows out
   from under the face (its blur and spread open with --cta-h) instead of fading in at full size; the border warms on h², so
   the light edge never runs ahead of the glow. Rest and full hover are Figma's exactly: every in-flight term is 0 at s = 0
   and s = 1, and the glow terms are Figma's at h = 1. */
@property --cta-h{syntax:"<number>";inherits:false;initial-value:0}
@property --cta-s{syntax:"<number>";inherits:false;initial-value:0}
@property --cta-gx{syntax:"<length>";inherits:false;initial-value:0px}
@property --cta-gy{syntax:"<length>";inherits:false;initial-value:0px}
@property --cta-mx{syntax:"<percentage>";inherits:false;initial-value:50%}
@property --cta-my{syntax:"<percentage>";inherits:false;initial-value:50%}
:where(.s01 .run,.m01 .run,.s01 .pill,.m01 .pill,.s03 .btn,.m03 .btn,.s14 .s14-btn,.m14 .btn-sm,.m14 .btn-lg,.sbar__btn,.mnav__cta){
  --cta-h:0;--cta-s:0;--cta-gx:0px;--cta-gy:0px;
  /* glow: Figma's 0 6px 14px rgba(0,0,0,.35) + 0 0 22px rgba(201,168,106,.55); drop (--cta-dc/-da/-dy/-db) and halo (--cta-gc/
     -ga/-gb/-gs) are knobs so the light surfaces (below) carry the same warmth the dark ones get for free. Both open with
     --cta-h: the drop lifts from 40% of its offset and 60% of its blur; the halo starts tucked under the face (spread less
     30% of its blur, at 70% of its blur), so it swells out from behind the button rather than fading in as a ring. */
  --cta-dc:0,0,0;--cta-da:.35;--cta-dy:6px;--cta-db:14px;--cta-gc:201,168,106;--cta-ga:.55;--cta-gb:22px;--cta-gs:0px;
  --cta-glow:0 calc(var(--cta-dy) * (.4 + .6 * var(--cta-h))) calc(var(--cta-db) * (.6 + .4 * var(--cta-h))) 0 rgba(var(--cta-dc),calc(var(--cta-da) * var(--cta-h))),
    var(--cta-gx) var(--cta-gy) calc(var(--cta-gb) * (.7 + .3 * var(--cta-h))) calc(var(--cta-gs) - .3 * var(--cta-gb) * (1 - var(--cta-h))) rgba(var(--cta-gc),calc(var(--cta-ga) * var(--cta-h)));
  /* the border's share of the hover (each button's border-color ramp): h², behind the glow in, ahead of it out */
  --cta-b:calc(var(--cta-h) * var(--cta-h));
  /* sheen: Figma's band (soft-light, layer opacity .9 folded into the alpha), stops interpolated from 1.28/11.54/24.36%
     at .32 to 57.69/70.51/83.33% at .5; --cta-sa = the variant's band angle. In flight (--cta-f: 0 at either end, 1 half
     way) its half-widths (--cta-sl/-sr) grow by --cta-sw, its peak (--cta-sp) drops by --cta-sq and the stops at a third and
     two thirds of each side move from the triangle (1/3, 2/3) to a raised cosine (1/4, 3/4): soft light, no edge, no crease. */
  --cta-sa:113.595deg;--cta-sw:1.2;--cta-sq:.5;
  --cta-f:calc(4 * var(--cta-s) * (1 - var(--cta-s)));
  --cta-sc:calc(11.538% + 58.975% * var(--cta-s));
  --cta-sl:calc((10.256% + 2.565% * var(--cta-s)) * (1 + var(--cta-sw) * var(--cta-f)));
  --cta-sr:calc(12.821% * (1 + var(--cta-sw) * var(--cta-f)));
  --cta-sp:calc((.288 + .162 * var(--cta-s)) * (1 - var(--cta-sq) * var(--cta-f)));
  --cta-sheen:linear-gradient(var(--cta-sa),rgba(255,255,255,0) calc(var(--cta-sc) - var(--cta-sl)),
    rgba(255,255,255,calc(var(--cta-sp) * (.3333 - .0833 * var(--cta-f)))) calc(var(--cta-sc) - .6667 * var(--cta-sl)),
    rgba(255,255,255,calc(var(--cta-sp) * (.6667 + .0833 * var(--cta-f)))) calc(var(--cta-sc) - .3333 * var(--cta-sl)),
    rgba(255,255,255,var(--cta-sp)) var(--cta-sc),
    rgba(255,255,255,calc(var(--cta-sp) * (.6667 + .0833 * var(--cta-f)))) calc(var(--cta-sc) + .3333 * var(--cta-sr)),
    rgba(255,255,255,calc(var(--cta-sp) * (.3333 - .0833 * var(--cta-f)))) calc(var(--cta-sc) + .6667 * var(--cta-sr)),
    rgba(255,255,255,0) calc(var(--cta-sc) + var(--cta-sr)));
  /* inner light: warm, soft, under the pointer. It is the pointer's alone: btn-glow.js switches it on (--cta-lt) and moves it
     (--cta-mx/--cta-my) for a fine pointer; focus and touch have none (centred, it sat right under the label and cost it
     contrast). An overlay layer, so it warms the lacquer under it instead of fogging it. Sep 27: registered and eased
     (--cta-md), so it trails the pointer by a hair and, on a quick way back in from the other side while the glow is still
     fading, glides across instead of jumping there. */
  --cta-lr:44px;--cta-lc:255,196,120;--cta-la:.34;
  --cta-light:radial-gradient(circle var(--cta-lr) at var(--cta-mx) var(--cta-my),rgba(var(--cta-lc),calc(var(--cta-la) * var(--cta-h) * var(--cta-lt,0))),rgba(var(--cta-lc),0));
  /* a press-and-hold (the touch glow) must not select the label */
  -webkit-user-select:none;user-select:none;
  /* timing: one list (--cta-tr), each state below only sets its durations, so the scroll reveal (end of this block) can
     append the whole of it. One family with one long tail: --cta-bloom carries the light (glow, border, fill, inner light,
     lean): a soft start, no snap, 90% at ~55% of its time; --cta-glide carries the band: it eases out of its place, glides and
     settles, 90% at ~64%. Rest = out: the glow settles back while the band glides home, together. Sep 27 (review): on .7s
     the band still covered its last third (s .35 -> 0) until ~600ms, when the glow was 90% gone at ~300ms; on .55s it is
     90% home at ~350ms, with the glow. */
  --cta-bloom:cubic-bezier(.35,.55,.25,1);--cta-glide:cubic-bezier(.45,.15,.25,1);
  --cta-t:.2s;--cta-dl:0s;--cta-hd:.55s;--cta-sd:.55s;--cta-gd:.6s;--cta-md:.24s;
  --cta-tr:transform var(--cta-t) var(--ease-out) var(--cta-dl),--cta-h var(--cta-hd) var(--cta-bloom) var(--cta-dl),--cta-s var(--cta-sd) var(--cta-glide),--cta-gx var(--cta-gd) var(--cta-bloom),--cta-gy var(--cta-gd) var(--cta-bloom),--cta-mx var(--cta-md) var(--ease-out),--cta-my var(--cta-md) var(--ease-out);
  transition:var(--cta-tr)}
/* Sep 27: on the dark lacquer (the "Run it" variant) that amber, overlaid on the taupe end of the ramp, read as a rust patch;
   a paler, yellower light lifts it the way a lamp would. The cream variant keeps the amber.
   Sep 27 (review): at .36 it lifted the face under the label ~10 levels on top of Figma's own hover ramp (hero "Run it":
   79 -> 105, label ~3.8:1). At .14 it adds ~4 (-> 99, ~4.6:1; the Figma ramp alone gives 95, 5.1:1) and still reads as a
   soft light moving with the pointer. */
:where(.s01 .run,.m01 .run,.s01 .pill,.m01 .pill,.s14 .s14-btn,.m14 .btn-sm,.sbar__btn,.mnav__cta){--cta-lc:255,228,178;--cta-la:.14}
/* Sep 26 (owner): the glow has to read on the parchment and the white fields too. Figma draws it on grey, where
   rgba(201,168,106,.55) is lighter than the ground and glows; on cream the same colour is darker than the ground and reads as
   a beige smudge. There: a deeper, saturated gold, a touch wider, and a warm drop instead of the grey one. (s03/m03 sit on
   #241e17 and keep Figma's numbers.) */
:where(.s01 .run,.m01 .run,.s01 .pill,.m01 .pill,.s14 .s14-btn,.m14 .btn-sm,.m14 .btn-lg,.sbar__btn,.mnav__cta){--cta-dc:61,42,20;--cta-da:.3;--cta-gc:236,176,74;--cta-ga:.8;--cta-gb:26px;--cta-gs:1px}
/* in: the glow blooms while the band glides across */
@media (hover:hover) and (pointer:fine){
  :where(.s01 .run,.m01 .run,.s01 .pill,.m01 .pill,.s03 .btn,.m03 .btn,.s14 .s14-btn,.m14 .btn-sm,.m14 .btn-lg,.mnav__cta):hover,:where(.sbar__cta:hover .sbar__btn){--cta-h:1;--cta-s:1;
    --cta-hd:.6s;--cta-sd:.8s;--cta-gd:.5s}
}
:where(.s01 .run,.m01 .run,.s01 .pill,.m01 .pill,.s03 .btn,.m03 .btn,.s14 .s14-btn,.m14 .btn-sm,.m14 .btn-lg,.mnav__cta):focus-visible,:where(.sbar__cta:focus-visible .sbar__btn){--cta-h:1;--cta-s:1;
  --cta-hd:.6s;--cta-sd:.8s;--cta-gd:.5s}
/* press: scale(.97) answers at once; on touch (no hover) the glow blooms with it, on the same curve (Sep 27: .14s ease-out
   put it all on in two frames, a flash), and eases out on release */
:where(.s01 .run,.m01 .run,.s01 .pill,.m01 .pill,.s03 .btn,.m03 .btn,.s14 .s14-btn,.m14 .btn-sm,.m14 .btn-lg,.mnav__cta):active,:where(.sbar__cta:active .sbar__btn){--cta-h:1;transform:scale(.97);
  --cta-t:100ms;--cta-hd:.32s;--cta-sd:.8s;--cta-gd:.5s}
/* Sep 27 (review): on touch a finger that lands on a full-width button and then scrolls is :active for a moment (iOS as soon
   as btn-glow.js's touchstart listener is there): press and glow wait 60ms, so a scroll (cancelled well inside that) never
   flashes them, while a tap still blooms (release eases out from wherever it got). */
@media (hover:none){
  :where(.s01 .run,.m01 .run,.s01 .pill,.m01 .pill,.s03 .btn,.m03 .btn,.s14 .s14-btn,.m14 .btn-sm,.m14 .btn-lg,.mnav__cta):active,:where(.sbar__cta:active .sbar__btn){--cta-dl:60ms}
}
/* Reduced motion: the state changes (a short fade of the glow), the band is simply at its place, nothing tracks (btn-glow.js).
   Sep 27 (review): the band has no transition here, so hover and focus threw it to its hover place in one frame, a bright
   streak popping in at ~70% before the glow had begun and out again on leave (the "stroke that shows up and goes away",
   patch step 20-27 levels): it now stays at its rest place in every state, and only the glow fades. That fade is a gentle
   in-out now (was .2s ease-out: its first frame on the way out took the light border 41% of the way back at once). */
@media (prefers-reduced-motion:reduce){
  :where(.s01 .run,.m01 .run,.s01 .pill,.m01 .pill,.s03 .btn,.m03 .btn,.s14 .s14-btn,.m14 .btn-sm,.m14 .btn-lg,.sbar__btn,.mnav__cta){--cta-tr:transform 100ms var(--ease-out),--cta-h .24s cubic-bezier(.37,0,.63,1)}
  :where(.s01 .run,.m01 .run,.s01 .pill,.m01 .pill,.s03 .btn,.m03 .btn,.s14 .s14-btn,.m14 .btn-sm,.m14 .btn-lg,.mnav__cta):is(:hover,:focus-visible),:where(.sbar__cta:is(:hover,:focus-visible) .sbar__btn){--cta-s:0}
}
/* Sep 27 (review): "The longer story" (#s03 .btn) and the phone footer's "Book a call" (#m14 .tagline>.btn-lg) are scroll-reveal
   targets themselves. While a reveal plays, build.py's html.rv-on :is(...).rv-in:not(.rv-done) (specificity 1-6-1, inlined
   after this sheet) owns their whole transition, so for that second hover, focus and press snapped on. The same rise list
   (js/reveal-plan.json timing.rise: 600ms fade, 1000ms travel) with ours appended; the doubled id outranks it (2-5-1). */
html.rv-on :is(#s03#s03 .btn,#m14#m14 .tagline>.btn-lg).rv-in:not(.rv-done){
  transition:opacity var(--rv-fd,600ms) var(--ease-fade) var(--rv-d,0ms),translate var(--rv-td,1000ms) var(--ease-out) var(--rv-d,0ms),var(--cta-tr)}
/* Sep 27 (review): the hero tag the same way under reduced motion: the hero's fade (html.rv-reduce :is(...){transition:
   opacity .4s}, 0-4-1, the reveal rules at the top of this sheet) owns .s01 .hero .pill / .m01 .pill's transition for good,
   so its glow, border and fill switched in one frame (patch step 41.6), in and out and on the phone's press. That fade with
   ours appended; the doubled class outranks it (0-5-1). */
html.rv-reduce :is(.s01 .hero .pill.pill,.m01 .pill.pill){transition:opacity .4s var(--ease-fade),var(--cta-tr)}

/* Sep 27 (owner: "the CTAs ... that stupid stroke jankiness on hover ... the tenth time I'm asking"): every CTA, one
   rule. The border ramp (a ring lighting up) and the sheen band (a line sweeping the face) are what read as a stroke on
   these small buttons; both are off. The hover is the warm glow blooming and the face lifting, nothing else. */
:where(.s01 .run,.m01 .run,.s01 .pill,.m01 .pill,.s03 .btn,.m03 .btn,.s14 .s14-btn,.m14 .btn-sm,.m14 .btn-lg,.sbar__btn,.mnav__cta){--cta-b:0;--cta-sheen:linear-gradient(transparent,transparent)}

/* Sep 27 (owner): the custom cursor (js/cursor.js, "an ink point and a thin gilt ring") is retired: "looks very 2010-ish ...
   this ain't it". The native cursor is used everywhere; the paintings answer with shaders/pentimento.js instead. */

.sbar__brand:focus-visible{opacity:.75}
.sbar__menu:focus-visible{color:rgba(38,27,27,.6)}
:root{--flip-in:.44s;--flip-out:.3s;--ease-flip:cubic-bezier(.3,1.15,.5,1);--ease-flip-out:cubic-bezier(.33,1,.68,1)}
a.is-flip .flip{position:relative;display:block;height:1lh;overflow:hidden}
a.is-flip .flip__l{position:absolute;top:0;display:flex;flex-direction:column;transition:translate var(--flip-out) var(--ease-flip-out)}
a.is-flip .flip__l>span{display:block;height:1lh}
a.is-flip .flip__l>span+span{color:var(--flip-ink,currentColor)}
a.is-flip:is(:hover,:focus-visible) .flip__l{translate:0 -50%;transition:translate var(--flip-in) var(--ease-flip) var(--d,0ms)}
a.is-flip.flip--now .flip__l{transition-delay:0ms}
a.is-flip .flip__sr{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap;margin:0}
