/* =========================================================================
   Tirzing — public / marketing stylesheet
   =========================================================================
   Loaded by layouts/marketing.php on every logged-out page (home, pricing,
   news, legal, /tools, /meet-your-companion) AFTER app.css, so it can lean on
   the brand variables defined there and override the plainer app chrome.

   Marketing pages are ALWAYS light (layouts/marketing.php never sets
   <html data-theme>), so the deep colours here are deliberate art direction
   rather than a theme, and nothing needs a [data-theme="dark"] twin.

   Class prefix: mk- (the older lp- and fx- landing classes were folded in here
   when the public site was rebuilt, so page templates carry no style block).

   CARE WITH COMMENTS: a literal star-slash pair anywhere in the prose closes the
   comment early, and the parser then swallows the rule that follows. Writing a
   selector pair like "lp-star slash fx-star" here once cost the whole :root
   block below, which silently un-set every colour on the page.

   Motion: everything animated is gated behind .mk-anim on <html>, set by a tiny
   inline script in the layout head so content is never hidden without the JS
   that reveals it. assets/js/marketing.js does the revealing.
   ========================================================================= */

:root {
  /* Marketing-only palette. Deeper and more saturated than the app chrome,
     because a landing page is allowed to be loud where a dashboard is not. */
  --mk-night:      #150726;
  --mk-night-2:    #24103d;
  --mk-night-3:    #3a1a55;
  --mk-violet:     #8b4fb8;
  --mk-violet-lo:  #6d3f7a;
  --mk-teal:       #19b39a;
  --mk-teal-hi:    #58e8cd;
  --mk-gold:       #f5b544;
  --mk-rose:       #f2699b;
  --mk-sky:        #6b9bf5;
  --mk-tint:       #faf7fc;
  --mk-tint-2:     #f3f6fb;
  --mk-ink-dim:    #e5d8ef;
  --mk-ink-dimmer: #bfa8d1;

  --mk-r:      20px;   /* card radius */
  --mk-r-lg:   28px;   /* panel radius */
  --mk-shadow: 0 2px 4px rgba(21,7,38,.04), 0 12px 32px -8px rgba(21,7,38,.12);
  --mk-shadow-lg: 0 8px 20px -6px rgba(21,7,38,.14), 0 40px 80px -30px rgba(21,7,38,.35);
  --mk-ease:   cubic-bezier(.22,.75,.28,1);
}

/* =========================================================================
   1. MOTION SYSTEM
   -------------------------------------------------------------------------
   [data-reveal] elements start hidden and settle into place when they scroll
   into view. Direction is the attribute value; per-element delay comes from
   --rd (set inline, or assigned by the stagger walker in marketing.js).
   ========================================================================= */
.mk-anim [data-reveal] {
  opacity: 0;
  transition:
    opacity   .75s var(--mk-ease) var(--rd, 0ms),
    transform .75s var(--mk-ease) var(--rd, 0ms),
    filter    .75s var(--mk-ease) var(--rd, 0ms);
}
.mk-anim [data-reveal="up"]    { transform: translate3d(0, 34px, 0); }
.mk-anim [data-reveal="down"]  { transform: translate3d(0, -26px, 0); }
.mk-anim [data-reveal="left"]  { transform: translate3d(-40px, 0, 0); }
.mk-anim [data-reveal="right"] { transform: translate3d(40px, 0, 0); }
.mk-anim [data-reveal="zoom"]  { transform: scale(.9); }
.mk-anim [data-reveal="rise"]  { transform: translate3d(0, 60px, 0) scale(.97); }
.mk-anim [data-reveal="soft"]  { transform: translate3d(0, 20px, 0); filter: blur(12px); }
.mk-anim [data-reveal].is-in   { opacity: 1; transform: none; filter: none; }

/* Elements that animate themselves once on screen (SVG draw-ins, counters).
   marketing.js adds .is-live; the art stylesheets below key off it. */
.mk-art-live { --mk-play: paused; }
.mk-art-live.is-live { --mk-play: running; }

@media (prefers-reduced-motion: reduce) {
  .mk-anim [data-reveal] { opacity: 1 !important; transform: none !important; filter: none !important; transition: none !important; }
}

/* =========================================================================
   2. PAGE FURNITURE
   ========================================================================= */
.mk-wrap    { max-width: 1140px; margin: 0 auto; padding: 0 1.5rem; }
.mk-wrap-sm { max-width: 780px; margin: 0 auto; padding: 0 1.5rem; }

.mk-section { position: relative; padding: clamp(3.5rem, 8vw, 6.5rem) 0; }
.mk-section--tight { padding: clamp(2.5rem, 5vw, 4rem) 0; }

/* Alternating background bands. Tint is a whisper of lilac so a white card still
   reads as a card; deep is the full night treatment. Tint is deliberately FLAT
   rather than a gradient, because the curved dividers fill themselves with a
   single colour and a gradient edge would leave a visible seam. */
.mk-band-tint { background: var(--mk-tint); }
.mk-band-white { background: #ffffff; }
.mk-band-deep {
  background:
    radial-gradient(1000px 520px at 12% -10%, rgba(139,79,184,.42), transparent 62%),
    radial-gradient(820px 460px at 92% 8%, rgba(25,179,154,.28), transparent 60%),
    linear-gradient(165deg, var(--mk-night) 0%, var(--mk-night-2) 58%, #1a0b30 100%);
  color: #fff;
}
.mk-band-deep h2, .mk-band-deep h3, .mk-band-deep h4 { color: #fff; }
.mk-band-deep p  { color: var(--mk-ink-dim); }

.mk-eyebrow {
  display: inline-flex; align-items: center; gap: .45rem;
  font-size: .76rem; font-weight: 800; letter-spacing: .1em; text-transform: uppercase;
  color: var(--mk-violet-lo);
  background: rgba(139,79,184,.1);
  border: 1px solid rgba(139,79,184,.18);
  padding: .34rem .75rem; border-radius: 999px;
  margin-bottom: .9rem;
}
.mk-eyebrow svg { opacity: .85; }
.mk-eyebrow.teal { color: #0d7f6d; background: rgba(25,179,154,.12); border-color: rgba(25,179,154,.22); }
.mk-band-deep .mk-eyebrow,
.mk-hero .mk-eyebrow,
.mk-price-hero .mk-eyebrow,
.tools-hero .mk-eyebrow { color: var(--mk-teal-hi); background: rgba(88,232,205,.1); border-color: rgba(88,232,205,.22); }

.mk-h1 { font-size: clamp(2.15rem, 5.4vw, 3.6rem); line-height: 1.06; letter-spacing: -.025em; margin: 0 0 1.1rem; }
.mk-h2 { font-size: clamp(1.7rem, 3.4vw, 2.5rem); line-height: 1.12; letter-spacing: -.02em; margin: 0 0 .8rem; }
.mk-h3 { font-size: clamp(1.1rem, 1.6vw, 1.3rem); line-height: 1.25; margin: 0 0 .4rem; }
.mk-lead { font-size: clamp(1.02rem, 1.5vw, 1.18rem); line-height: 1.65; color: var(--muted); margin: 0 0 1.4rem; }
.mk-band-deep .mk-lead { color: var(--mk-ink-dim); }

.mk-center { text-align: center; }
.mk-center .mk-lead { max-width: 640px; margin-left: auto; margin-right: auto; }
.mk-head { max-width: 720px; margin: 0 auto clamp(2.2rem, 4vw, 3.2rem); text-align: center; }
.mk-head .mk-lead { margin-bottom: 0; }

/* Gradient text for the one word per headline that deserves it. */
.mk-grad {
  background: linear-gradient(100deg, var(--mk-teal-hi) 0%, #9ad9ff 45%, #d6b4ff 100%);
  -webkit-background-clip: text; background-clip: text; color: transparent;
}
.mk-grad-ink {
  background: linear-gradient(100deg, var(--mk-violet) 0%, #b062d6 40%, var(--mk-teal) 100%);
  -webkit-background-clip: text; background-clip: text; color: transparent;
}

/* Buttons: the app's .btn with a bit more presence on marketing pages. */
.mk-btn { font-size: 1.02rem; padding: .82rem 1.65rem; border-radius: 12px; font-weight: 700; }
.mk-btn.btn.teal { box-shadow: 0 6px 18px -4px rgba(25,179,154,.55); }
.mk-btn.btn.teal:hover { background: #15a189; box-shadow: 0 10px 26px -6px rgba(25,179,154,.7); transform: translateY(-1px); }
.mk-btn.btn { transition: transform .16s var(--mk-ease), box-shadow .16s var(--mk-ease), background .16s; }
.mk-btn.btn.ghost { color: #fff; border: 1px solid rgba(255,255,255,.35); background: rgba(255,255,255,.06); backdrop-filter: blur(6px); }
.mk-btn.btn.ghost:hover { background: rgba(255,255,255,.16); transform: translateY(-1px); }
.mk-btn-row { display: flex; gap: .75rem; flex-wrap: wrap; }
.mk-center .mk-btn-row { justify-content: center; }

/* Curved section divider (partials/marketing/divider.php). A bottom divider
   sits at the foot of a band and lets the next colour rise into it; a top one
   sits at the head and spills the previous colour down. Positioned so it always
   paints above a hero's blurred orbs, which would otherwise tint the wave. */
.mk-divider { display: block; width: 100%; height: clamp(38px, 5vw, 70px); position: relative; z-index: 4; }
.mk-divider svg { display: block; width: 100%; height: 100%; }
.mk-section > .mk-divider--bottom, .mk-band-tint > .mk-divider--bottom { margin-bottom: calc(clamp(3.5rem, 8vw, 6.5rem) * -1); }
.mk-section > .mk-divider--top { margin-top: calc(clamp(3.5rem, 8vw, 6.5rem) * -1); }

/* =========================================================================
   3. HEADER: scroll state + reading progress
   ========================================================================= */
.news-header { transition: background .3s var(--mk-ease), box-shadow .3s var(--mk-ease), padding .3s var(--mk-ease); }
.news-header.is-stuck { background: rgba(31,10,52,.92); box-shadow: 0 10px 30px -12px rgba(0,0,0,.6); }
.news-header.is-stuck .news-header-inner { padding-top: .5rem; padding-bottom: .5rem; }
.news-header .news-header-inner { transition: padding .3s var(--mk-ease); }
.news-logo img { transition: transform .3s var(--mk-ease); }
.news-header.is-stuck .news-logo img { transform: scale(.9); }
.news-nav a:not(.btn) { position: relative; }
.news-nav a:not(.btn)::after {
  content: ""; position: absolute; left: .8rem; right: .8rem; bottom: .18rem; height: 2px;
  background: var(--mk-teal-hi); border-radius: 2px; transform: scaleX(0); transform-origin: left;
  transition: transform .25s var(--mk-ease);
}
.news-nav a:not(.btn):hover { text-decoration: none; }
.news-nav a:not(.btn):hover::after { transform: scaleX(1); }

.mk-progress {
  position: fixed; top: 0; left: 0; height: 3px; width: 100%; z-index: 60;
  transform-origin: left; transform: scaleX(0);
  background: linear-gradient(90deg, var(--mk-teal) 0%, #7ee8d3 45%, var(--mk-violet) 100%);
  pointer-events: none;
}

/* =========================================================================
   4. HERO
   ========================================================================= */
.mk-hero {
  position: relative; overflow: hidden; isolation: isolate;
  background: linear-gradient(168deg, #1a0a2e 0%, var(--mk-night-2) 46%, #2b1247 100%);
  color: #fff;
}
/* Aurora orbs. Kept to three, long and slow, so a phone doesn't cook. */
.mk-orb { position: absolute; border-radius: 50%; filter: blur(70px); pointer-events: none; z-index: 0; }
.mk-orb-1 { width: 46vw; max-width: 620px; aspect-ratio: 1; background: rgba(25,179,154,.5);  top: -18%; right: -8%; }
.mk-orb-2 { width: 40vw; max-width: 540px; aspect-ratio: 1; background: rgba(139,79,184,.62); bottom: -26%; left: -10%; }
.mk-orb-3 { width: 28vw; max-width: 380px; aspect-ratio: 1; background: rgba(107,155,245,.34); top: 34%; left: 42%; }
.mk-anim .mk-orb-1 { animation: mk-drift-a 22s ease-in-out infinite alternate; }
.mk-anim .mk-orb-2 { animation: mk-drift-b 27s ease-in-out infinite alternate; }
.mk-anim .mk-orb-3 { animation: mk-drift-c 19s ease-in-out infinite alternate; }
@keyframes mk-drift-a { to { transform: translate3d(-6%, 8%, 0) scale(1.12); } }
@keyframes mk-drift-b { to { transform: translate3d(8%, -7%, 0) scale(1.08); } }
@keyframes mk-drift-c { to { transform: translate3d(-10%, 10%, 0) scale(.9); } }

/* Faint engineering grid + vignette, so the gradient has something to bite on. */
.mk-hero::before {
  content: ""; position: absolute; inset: 0; z-index: 0; pointer-events: none;
  background-image:
    linear-gradient(rgba(255,255,255,.05) 1px, transparent 1px),
    linear-gradient(90deg, rgba(255,255,255,.05) 1px, transparent 1px);
  background-size: 62px 62px;
  mask-image: radial-gradient(120% 90% at 50% 0%, #000 20%, transparent 78%);
  -webkit-mask-image: radial-gradient(120% 90% at 50% 0%, #000 20%, transparent 78%);
}
.mk-hero-inner {
  position: relative; z-index: 2;
  max-width: 1180px; margin: 0 auto;
  padding: clamp(3rem, 7vw, 5.5rem) 1.5rem clamp(3.5rem, 8vw, 6rem);
  display: grid; grid-template-columns: minmax(0, 1.02fr) minmax(0, 1fr);
  gap: clamp(2rem, 5vw, 4rem); align-items: center;
}
.mk-hero h1 { color: #fff; }
.mk-hero .mk-lead { color: var(--mk-ink-dim); max-width: 32em; }
.mk-hero-badge {
  display: inline-flex; align-items: center; gap: .5rem;
  background: rgba(255,255,255,.08); border: 1px solid rgba(255,255,255,.18);
  color: #fff; padding: .4rem .5rem .4rem .45rem; border-radius: 999px;
  font-size: .84rem; font-weight: 600; margin-bottom: 1.25rem;
  backdrop-filter: blur(8px);
}
.mk-hero-badge b { background: var(--mk-teal); color: #04241f; border-radius: 999px; padding: .15rem .55rem; font-size: .74rem; font-weight: 800; letter-spacing: .04em; text-transform: uppercase; }
.mk-hero-note { margin: 1.15rem 0 0; font-size: .9rem; color: var(--mk-ink-dimmer);
  display: flex; align-items: center; gap: .35rem 1.15rem; flex-wrap: wrap; }
.mk-hero-note span { display: inline-flex; align-items: center; gap: .4rem; }
.mk-hero-note svg { color: var(--mk-teal-hi); flex: 0 0 auto; }

/* Pills under the hero copy. */
.mk-pills { display: flex; gap: .5rem; flex-wrap: wrap; margin-top: 1.8rem; }
.mk-pill {
  display: inline-flex; align-items: center; gap: .42rem;
  background: rgba(255,255,255,.07); border: 1px solid rgba(255,255,255,.16);
  color: #fff; padding: .42rem .82rem; border-radius: 999px;
  font-size: .85rem; font-weight: 600; backdrop-filter: blur(6px);
  transition: background .2s, transform .2s var(--mk-ease), border-color .2s;
}
.mk-pill:hover { background: rgba(255,255,255,.15); border-color: rgba(88,232,205,.5); transform: translateY(-2px); }
.mk-pill svg { color: var(--mk-teal-hi); }

/* Hero art column. */
.mk-hero-art { position: relative; }
.mk-hero-art svg { display: block; width: 100%; height: auto; overflow: visible; }

/* =========================================================================
   5. STAT STRIP  (count-up numbers riding the hero's lower edge)
   ========================================================================= */
.mk-stats {
  position: relative; z-index: 2;
  display: grid; grid-template-columns: repeat(4, 1fr); gap: 1px;
  background: rgba(255,255,255,.12);
  border-top: 1px solid rgba(255,255,255,.12);
}
.mk-stat { background: rgba(21,7,38,.55); padding: 1.35rem 1rem; text-align: center; backdrop-filter: blur(10px); }
.mk-stat-n { font-size: clamp(1.5rem, 3vw, 2.1rem); font-weight: 800; letter-spacing: -.02em; color: #fff; line-height: 1.1; }
.mk-stat-n .mk-suffix { color: var(--mk-teal-hi); }
.mk-stat-l { font-size: .82rem; color: var(--mk-ink-dimmer); margin-top: .2rem; }

/* =========================================================================
   6. DEEP-DIVE ROWS  (the big alternating feature explainers)
   ========================================================================= */
.mk-deep { display: grid; grid-template-columns: minmax(0, 1fr) minmax(0, 1.08fr); gap: clamp(2rem, 5vw, 4.5rem); align-items: center; }
.mk-deep + .mk-deep { margin-top: clamp(3.5rem, 7vw, 6rem); }
.mk-deep--flip .mk-deep-copy { order: 2; }
.mk-deep--flip .mk-deep-art  { order: 1; }

.mk-deep-copy h2 { margin-bottom: .7rem; }
.mk-deep-copy .mk-lead { margin-bottom: 1.2rem; }

/* Check list under a deep-dive. */
.mk-checks { list-style: none; padding: 0; margin: 0 0 1.5rem; display: grid; gap: .7rem; }
.mk-checks li { display: flex; gap: .65rem; align-items: flex-start; font-size: .97rem; line-height: 1.55; }
.mk-checks li > span:first-child {
  flex: 0 0 auto; width: 1.35rem; height: 1.35rem; margin-top: .1rem; border-radius: 50%;
  display: inline-flex; align-items: center; justify-content: center;
  background: rgba(25,179,154,.15); color: #0d7f6d;
}
.mk-band-deep .mk-checks li { color: var(--mk-ink-dim); }
.mk-band-deep .mk-checks li > span:first-child { background: rgba(88,232,205,.16); color: var(--mk-teal-hi); }
.mk-checks b { color: var(--ink); font-weight: 700; }
.mk-band-deep .mk-checks b { color: #fff; }

/* A quiet aside under a deep dive: the caveat, the maths, the reassurance. */
.mk-aside {
  border-left: 3px solid var(--mk-teal);
  background: linear-gradient(90deg, rgba(25,179,154,.09), rgba(25,179,154,0));
  padding: .8rem 1rem; border-radius: 0 10px 10px 0;
  font-size: .9rem; color: var(--muted); line-height: 1.6; margin: 0 0 1.2rem;
}
.mk-aside strong { color: var(--ink); }
.mk-band-deep .mk-aside { color: var(--mk-ink-dim); background: linear-gradient(90deg, rgba(88,232,205,.12), transparent); }
.mk-band-deep .mk-aside strong { color: #fff; }

.mk-textlink { display: inline-flex; align-items: center; gap: .4rem; font-weight: 700; color: var(--plum); }
.mk-textlink svg, .mk-textlink span.arrow { transition: transform .2s var(--mk-ease); }
.mk-textlink:hover { text-decoration: none; }
.mk-textlink:hover span.arrow { transform: translateX(4px); }
.mk-band-deep .mk-textlink { color: var(--mk-teal-hi); }

/* ---- The art frame ------------------------------------------------------
   Every illustration sits in the same glass panel so six wildly different
   drawings still read as one family. */
.mk-art {
  position: relative; border-radius: var(--mk-r-lg);
  background: linear-gradient(150deg, #ffffff 0%, #fbf9fd 100%);
  border: 1px solid rgba(109,63,122,.1);
  box-shadow: var(--mk-shadow-lg);
  padding: clamp(.85rem, 1.6vw, 1.4rem);
  overflow: hidden;
}
.mk-art::after {
  /* Sheen along the top edge. */
  content: ""; position: absolute; inset: 0; border-radius: inherit; pointer-events: none;
  background: linear-gradient(160deg, rgba(255,255,255,.9) 0%, rgba(255,255,255,0) 34%);
  mix-blend-mode: overlay;
}
.mk-art > svg { display: block; width: 100%; height: auto; position: relative; z-index: 1; }
.mk-band-deep .mk-art {
  background: linear-gradient(150deg, rgba(255,255,255,.09) 0%, rgba(255,255,255,.03) 100%);
  border-color: rgba(255,255,255,.14);
  box-shadow: 0 30px 80px -30px rgba(0,0,0,.75);
  backdrop-filter: blur(14px);
}

/* Glow puddle behind an art panel, so it floats off the page. */
.mk-art-wrap { position: relative; }
.mk-art-wrap::before {
  content: ""; position: absolute; inset: 12% 6% -8%; z-index: 0; pointer-events: none;
  background: radial-gradient(60% 60% at 50% 50%, rgba(139,79,184,.3), transparent 70%);
  filter: blur(48px);
}
.mk-art-wrap > * { position: relative; z-index: 1; }

/* Floating caption chips pinned to an illustration. */
.mk-chip {
  position: absolute; display: inline-flex; align-items: center; gap: .45rem;
  background: #fff; border: 1px solid rgba(109,63,122,.12);
  box-shadow: 0 10px 26px -10px rgba(21,7,38,.45);
  border-radius: 999px; padding: .42rem .8rem;
  font-size: .82rem; font-weight: 700; color: var(--ink); white-space: nowrap; z-index: 3;
}
.mk-chip i { width: .55rem; height: .55rem; border-radius: 50%; background: var(--mk-teal); font-style: normal; flex: 0 0 auto; }
.mk-chip.warn i { background: var(--warn); }
.mk-chip.bad  i { background: var(--bad); }
.mk-anim .mk-chip { animation: mk-float 6s ease-in-out infinite; }
.mk-anim .mk-chip:nth-of-type(2) { animation-duration: 7.5s; animation-delay: -2s; }
.mk-anim .mk-chip:nth-of-type(3) { animation-duration: 8.5s; animation-delay: -4s; }
@keyframes mk-float { 0%, 100% { transform: translateY(0); } 50% { transform: translateY(-8px); } }

/* =========================================================================
   7. CARD GRIDS
   ========================================================================= */
.mk-grid { display: grid; gap: 1.25rem; }
.mk-grid-2 { grid-template-columns: repeat(2, minmax(0, 1fr)); }
.mk-grid-3 { grid-template-columns: repeat(3, minmax(0, 1fr)); }
.mk-grid-4 { grid-template-columns: repeat(4, minmax(0, 1fr)); }

.mk-card {
  position: relative; overflow: hidden;
  background: var(--card); border: 1px solid var(--line); border-radius: var(--mk-r);
  padding: 1.5rem 1.4rem; box-shadow: var(--mk-shadow);
  transition: transform .28s var(--mk-ease), box-shadow .28s var(--mk-ease), border-color .28s;
  display: flex; flex-direction: column;
}
.mk-card:hover { transform: translateY(-4px); box-shadow: var(--mk-shadow-lg); border-color: rgba(139,79,184,.25); }
/* A colour wash that blooms in on hover, keyed to the card's accent index. */
.mk-card::before {
  content: ""; position: absolute; inset: 0; opacity: 0; pointer-events: none;
  background: radial-gradient(120% 90% at 0% 0%, var(--mk-acc, rgba(139,79,184,.1)), transparent 62%);
  transition: opacity .3s var(--mk-ease);
}
.mk-card:hover::before { opacity: 1; }
.mk-card > * { position: relative; }
.mk-card h3 { font-size: 1.08rem; margin: 0 0 .35rem; }
.mk-card p  { color: var(--muted); font-size: .93rem; line-height: 1.55; margin: 0; }

.mk-ic {
  display: inline-flex; align-items: center; justify-content: center;
  width: 3rem; height: 3rem; border-radius: 15px; color: #fff; margin-bottom: .95rem;
  box-shadow: 0 10px 22px -8px var(--mk-glow, rgba(21,7,38,.5));
}
.mk-ic.c0 { background: linear-gradient(140deg,#7c3aad,#b062d6); --mk-glow: rgba(124,58,173,.6); }
.mk-ic.c1 { background: linear-gradient(140deg,#0f8a8a,#3fd6bd); --mk-glow: rgba(25,179,154,.6); }
.mk-ic.c2 { background: linear-gradient(140deg,#c2760a,#f0ad3f); --mk-glow: rgba(194,118,10,.55); }
.mk-ic.c3 { background: linear-gradient(140deg,#2563eb,#6b9bf5); --mk-glow: rgba(37,99,235,.5); }
.mk-ic.c4 { background: linear-gradient(140deg,#be185d,#f2699b); --mk-glow: rgba(190,24,93,.5); }
.mk-ic.c5 { background: linear-gradient(140deg,#4f7a1f,#8fc44f); --mk-glow: rgba(79,122,31,.5); }

/* =========================================================================
   8. FEATURE EXPLORER  (plan-filtered grid, driven by live plan data)
   ========================================================================= */
.mk-fx-filter { display: flex; gap: .5rem; justify-content: center; flex-wrap: wrap; margin: 0 auto 2.4rem; }
.mk-fx-chip {
  display: inline-flex; align-items: center; gap: .5rem;
  border: 1px solid var(--line); background: var(--card); color: var(--ink);
  padding: .52rem 1rem; border-radius: 999px; font-weight: 700; font-size: .92rem; cursor: pointer;
  transition: transform .18s var(--mk-ease), box-shadow .18s var(--mk-ease), background .2s, color .2s, border-color .2s;
}
.mk-fx-chip:hover { transform: translateY(-2px); box-shadow: var(--mk-shadow); }
.mk-fx-count { display: inline-flex; align-items: center; justify-content: center; min-width: 1.45rem; height: 1.45rem; padding: 0 .35rem; border-radius: 999px; background: rgba(21,7,38,.07); font-size: .77rem; font-weight: 800; }
.mk-fx-chip.is-active { color: #fff; border-color: transparent; box-shadow: 0 8px 20px -8px rgba(21,7,38,.5); }
.mk-fx-chip.is-active .mk-fx-count { background: rgba(255,255,255,.28); color: #fff; }
.mk-fx-chip[data-filter="all"].is-active { background: var(--ink); }
.mk-fx-chip.p0.is-active { background: #0f8a8a; }
.mk-fx-chip.p1.is-active { background: var(--plum); }
.mk-fx-chip.p2.is-active { background: #c2760a; }
.mk-fx-chip.p3.is-active { background: #1d4ed8; }

.mk-fx-grid { display: grid; gap: 1.15rem; grid-template-columns: repeat(3, minmax(0, 1fr)); }
.mk-fx-card { transition: transform .28s var(--mk-ease), box-shadow .28s var(--mk-ease), border-color .28s, opacity .25s; }
.mk-fx-card.is-hidden { display: none; }
.mk-fx-bullets { list-style: none; padding: 0; margin: .7rem 0 1rem; display: grid; gap: .38rem; }
.mk-fx-bullets li { position: relative; padding-left: 1.25rem; color: var(--ink); font-size: .875rem; line-height: 1.45; }
.mk-fx-bullets li::before { content: "✓"; position: absolute; left: 0; color: var(--good); font-weight: 800; }
.mk-fx-badges { margin-top: auto; display: flex; flex-wrap: wrap; gap: .4rem; padding-top: .3rem; }
.mk-fx-badge { font-size: .73rem; font-weight: 800; padding: .24rem .58rem; border-radius: 999px; }
.mk-fx-badge.p0 { background: rgba(15,138,138,.14); color: #0c6d6d; }
.mk-fx-badge.p1 { background: rgba(124,58,173,.14); color: var(--plum); }
.mk-fx-badge.p2 { background: rgba(194,118,10,.16); color: #a5620a; }
.mk-fx-badge.p3 { background: rgba(37,99,235,.14); color: #1d4ed8; }
.mk-fx-empty { text-align: center; color: var(--muted); padding: 2.5rem; display: none; }

/* =========================================================================
   9. BASICS BAND  ("plus, in every plan")
   ========================================================================= */
.mk-basic { display: flex; gap: .85rem; align-items: flex-start; }
.mk-basic .bi {
  flex: 0 0 auto; display: inline-flex; align-items: center; justify-content: center;
  width: 2.6rem; height: 2.6rem; border-radius: 12px;
  background: rgba(255,255,255,.08); border: 1px solid rgba(255,255,255,.16); color: var(--mk-teal-hi);
}
.mk-basic h4 { margin: .2rem 0 .2rem; font-size: 1rem; }
.mk-basic p { margin: 0; font-size: .88rem; line-height: 1.5; }

/* =========================================================================
   10. HOW IT WORKS  (numbered steps on a connecting rail)
   ========================================================================= */
.mk-steps { position: relative; display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 1.5rem; }
.mk-steps::before {
  content: ""; position: absolute; top: 2.1rem; left: 12%; right: 12%; height: 2px;
  background: linear-gradient(90deg, transparent, rgba(139,79,184,.35) 12%, rgba(25,179,154,.45) 88%, transparent);
}
.mk-step { position: relative; text-align: center; padding: 0 .5rem; }
.mk-step-n {
  position: relative; display: inline-flex; align-items: center; justify-content: center;
  width: 4.2rem; height: 4.2rem; border-radius: 50%; margin-bottom: 1rem;
  background: #fff; border: 2px solid rgba(139,79,184,.2);
  box-shadow: 0 10px 26px -12px rgba(21,7,38,.5);
  color: var(--plum);
}
.mk-step-n b {
  position: absolute; top: -.35rem; right: -.35rem;
  width: 1.6rem; height: 1.6rem; border-radius: 50%;
  background: var(--mk-teal); color: #fff; font-size: .82rem; font-weight: 800;
  display: inline-flex; align-items: center; justify-content: center;
  box-shadow: 0 4px 10px -2px rgba(25,179,154,.7);
}
.mk-step h3 { margin-bottom: .3rem; }
.mk-step p { color: var(--muted); font-size: .93rem; margin: 0; }

/* =========================================================================
   11. COMPANION TEASER
   -------------------------------------------------------------------------
   The landing page renders the real companion rig (creature() + habitat_scene()
   from helpers.php), styled by .companion-* / .mkc-stage-lg in app.css. All
   that is needed here is to stop a 1:1 stage filling half the viewport, and to
   give it the same floating shadow the illustration panels have.
   ========================================================================= */
.mk-companion-art { max-width: 400px; margin: 0 auto; }
.mk-companion-art .companion-stage { box-shadow: var(--mk-shadow-lg); }

/* =========================================================================
   12. FINAL CTA
   ========================================================================= */
.mk-final { position: relative; overflow: hidden; text-align: center; color: #fff; }
.mk-final .inner { position: relative; z-index: 2; max-width: 720px; margin: 0 auto; padding: clamp(3.5rem, 8vw, 6rem) 1.5rem; }
.mk-final h2 { color: #fff; font-size: clamp(1.9rem, 4vw, 2.8rem); }
.mk-final p { color: var(--mk-ink-dim); font-size: 1.06rem; }
.mk-final .linkish { color: #fff; text-decoration: underline; text-underline-offset: 3px; }
.mk-final-foot { margin-top: 1.6rem; font-size: .88rem; color: var(--mk-ink-dimmer); }
.mk-final-foot a { color: var(--mk-ink-dim); }

/* =========================================================================
   13. PRICING PAGE EXTRAS
   ========================================================================= */
.mk-price-hero { position: relative; overflow: hidden; isolation: isolate; text-align: center; color: #fff;
  background: linear-gradient(168deg, #1a0a2e 0%, var(--mk-night-2) 55%, #2b1247 100%); }
.mk-price-hero .inner { position: relative; z-index: 2; max-width: 760px; margin: 0 auto; padding: clamp(2.75rem, 6vw, 4.5rem) 1.5rem clamp(2.25rem, 5vw, 3.5rem); }
.mk-price-hero h1 { color: #fff; font-size: clamp(2rem, 4.5vw, 3rem); letter-spacing: -.02em; }
.mk-price-hero p { color: var(--mk-ink-dim); font-size: 1.1rem; max-width: 34em; margin: 0 auto; }
.mk-price-hero .mk-pills { justify-content: center; }

.pr-plan { transition: transform .28s var(--mk-ease), box-shadow .28s var(--mk-ease); }
.pr-plan:hover { transform: translateY(-4px); box-shadow: var(--mk-shadow-lg); }
.pr-plan.featured { position: relative; }
.pr-plan.featured::before {
  content: ""; position: absolute; inset: -2px; border-radius: inherit; z-index: -1;
  background: linear-gradient(150deg, var(--mk-teal), var(--mk-violet));
  opacity: .5; filter: blur(10px);
}

/* =========================================================================
   14. TOOLS HUB EXTRAS
   ========================================================================= */
/* Same night treatment as the landing hero, so the public site reads as one
   place. The old flat-plum gradient and its single blur blob are superseded by
   the shared .mk-orb aurora the markup now carries. */
.tools-hero { isolation: isolate;
  background: linear-gradient(168deg, #1a0a2e 0%, var(--mk-night-2) 46%, #2b1247 100%); }
.tools-hero::before { display: none; }
.tools-hero-art { position: relative; z-index: 2; max-width: 620px; margin: 1.75rem auto -.5rem; }
.tools-hero-art svg { display: block; width: 100%; height: auto; }
.tools-card { transition: transform .28s var(--mk-ease), box-shadow .28s var(--mk-ease); }
.tools-card:hover { transform: translateY(-5px); box-shadow: var(--mk-shadow-lg); }

/* =========================================================================
   15. SHARED ILLUSTRATION BEHAVIOUR
   -------------------------------------------------------------------------
   Every partial in Views/partials/marketing/ draws with these classes, so the
   animation policy lives in exactly one place. Each animation is play-state
   driven by --mk-play, which flips to "running" when marketing.js marks the
   art in view. Nothing loops forever except the gentlest of the ambient bits.
   ========================================================================= */
.mk-draw { stroke-dasharray: var(--len, 1200); stroke-dashoffset: var(--len, 1200);
  animation: mk-draw 1.9s var(--mk-ease) forwards; animation-play-state: var(--mk-play, running); animation-delay: var(--d, 0s); }
@keyframes mk-draw { to { stroke-dashoffset: 0; } }

.mk-fade { opacity: 0; animation: mk-fade .7s var(--mk-ease) forwards; animation-play-state: var(--mk-play, running); animation-delay: var(--d, .6s); }
@keyframes mk-fade { to { opacity: 1; } }

.mk-pop { opacity: 0; transform-box: fill-box; transform-origin: center; transform: scale(.4);
  animation: mk-pop .55s var(--mk-ease) forwards; animation-play-state: var(--mk-play, running); animation-delay: var(--d, .8s); }
@keyframes mk-pop { to { opacity: 1; transform: scale(1); } }

.mk-grow { transform-box: fill-box; transform-origin: bottom; transform: scaleY(0);
  animation: mk-grow .8s var(--mk-ease) forwards; animation-play-state: var(--mk-play, running); animation-delay: var(--d, .3s); }
@keyframes mk-grow { to { transform: scaleY(1); } }

.mk-wipe { transform-box: fill-box; transform-origin: left; transform: scaleX(0);
  animation: mk-wipe .9s var(--mk-ease) forwards; animation-play-state: var(--mk-play, running); animation-delay: var(--d, .3s); }
@keyframes mk-wipe { to { transform: scaleX(1); } }

/* Ambient loops (kept subtle and slow). */
.mk-pulse { animation: mk-pulse 2.8s ease-in-out infinite; animation-play-state: var(--mk-play, running); transform-box: fill-box; transform-origin: center; }
@keyframes mk-pulse { 0%, 100% { opacity: .25; transform: scale(1); } 50% { opacity: .6; transform: scale(1.35); } }

.mk-bob { animation: mk-bob 5s ease-in-out infinite; animation-play-state: var(--mk-play, running); }
@keyframes mk-bob { 0%, 100% { transform: translateY(0); } 50% { transform: translateY(-5px); } }

.mk-shimmer { animation: mk-shimmer 3.4s linear infinite; animation-play-state: var(--mk-play, running); }
@keyframes mk-shimmer { from { transform: translateX(-40%); } to { transform: translateX(140%); } }

/* Ring/arc gauges: sweep to --val (a percentage, with pathLength="100"). */
.mk-arc { stroke-dasharray: 0 100;
  animation: mk-arc 1s var(--mk-ease) forwards; animation-play-state: var(--mk-play, running); animation-delay: var(--d, .5s); }
@keyframes mk-arc { to { stroke-dasharray: var(--val, 75) 100; } }

/* Illustration type. SVG doesn't inherit the body stack, so set it once here.
   Sizes are tuned for a ~640-wide viewBox rendered around 520-580px, i.e. a
   slight downscale, which is why they run a shade larger than UI type. */
.mk-svg { font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif; }
.mk-svg text { font-family: inherit; }
.mk-t-lab  { font-size: 12px; font-weight: 800; fill: #8b7f96; letter-spacing: .06em; }
.mk-t-num  { font-size: 21px; font-weight: 800; fill: #23142f; }
.mk-t-big  { font-size: 30px; font-weight: 800; fill: #23142f; letter-spacing: -.015em; }
.mk-t-mid  { font-size: 15px; font-weight: 700; fill: #3b2b48; }
.mk-t-sm   { font-size: 11.5px; font-weight: 600; fill: #9b8fa6; }
.mk-t-tag  { font-size: 11.5px; font-weight: 800; fill: #fff; letter-spacing: .02em; }
.mk-band-deep .mk-t-lab { fill: #b9a6c9; }
.mk-band-deep .mk-t-num, .mk-band-deep .mk-t-big { fill: #fff; }
.mk-band-deep .mk-t-sm { fill: #a794b6; }

@media (prefers-reduced-motion: reduce) {
  .mk-draw, .mk-fade, .mk-pop, .mk-grow, .mk-wipe { animation: none !important; opacity: 1 !important; transform: none !important; stroke-dashoffset: 0 !important; }
  .mk-arc { animation: none !important; stroke-dasharray: var(--val, 75) 100 !important; }
  .mk-pulse, .mk-bob, .mk-shimmer, .mk-orb, .mk-chip { animation: none !important; }
}

/* =========================================================================
   16. RESPONSIVE
   ========================================================================= */
@media (max-width: 1000px) {
  .mk-hero-inner { grid-template-columns: 1fr; text-align: center; }
  .mk-hero .mk-lead { margin-left: auto; margin-right: auto; }
  .mk-pills, .mk-btn-row, .mk-hero-note { justify-content: center; }
  .mk-hero-art { max-width: 560px; margin: 0 auto; }
  .mk-deep { grid-template-columns: 1fr; }
  .mk-deep--flip .mk-deep-copy, .mk-deep--flip .mk-deep-art { order: 0; }
  .mk-grid-4 { grid-template-columns: repeat(2, minmax(0, 1fr)); }
  .mk-fx-grid { grid-template-columns: repeat(2, minmax(0, 1fr)); }
}
@media (max-width: 780px) {
  .mk-stats { grid-template-columns: repeat(2, 1fr); }
  .mk-grid-3, .mk-grid-2 { grid-template-columns: 1fr; }
  .mk-fx-grid { grid-template-columns: 1fr; }
  .mk-steps { grid-template-columns: 1fr; gap: 2rem; }
  .mk-steps::before { display: none; }
  .mk-chip { font-size: .74rem; padding: .34rem .62rem; }
  .mk-art { padding: .75rem; border-radius: 18px; }
}
