/* ==========================================================================
   Major Mixing — Homepage v2 (per client spec, 2026-08-12)
   Built section-by-section: S1+S2 only in this pass. See memory/DECISIONS.md.
   ========================================================================== */

@font-face{
  font-family:'Archivo';
  src:url('../fonts/Archivo-Variable.woff2') format('woff2-variations'), url('../fonts/Archivo-Variable.woff2') format('woff2');
  font-weight:100 900;
  font-display:swap;
}
@font-face{
  font-family:'Roboto Mono';
  src:url('../fonts/RobotoMono-Medium.woff2') format('woff2');
  font-weight:500;
  font-display:swap;
}
@font-face{
  font-family:'Avenir Next';
  src:url('../fonts/AvenirNext-Regular.woff2') format('woff2');
  font-weight:400; font-display:swap;
}
@font-face{
  font-family:'Avenir Next';
  src:url('../fonts/AvenirNext-Medium.woff2') format('woff2');
  font-weight:500; font-display:swap;
}
@font-face{
  font-family:'Avenir Next';
  src:url('../fonts/AvenirNext-Bold.woff2') format('woff2');
  font-weight:700; font-display:swap;
}

/* ---------- 3.1 Color tokens ---------- */
#mm-home{
  --mm-paper:        #FFFFFF;
  --mm-paper-2:      #F5F4F1;
  --mm-paper-3:      #EBE9E4;

  --mm-ink:          #0E0E10;
  --mm-ink-2:        #17171A;
  --mm-ink-3:        #232328;

  --mm-t-primary:    #0E0E10;
  --mm-t-secondary:  #55555E;
  --mm-t-muted:      #7A7A85;
  --mm-t-inv:        #F7F6F3;
  --mm-t-inv-dim:    #A8A8B0;

  --mm-blue:         #0B5FFF;
  --mm-blue-deep:    #0A3FB0;
  --mm-blue-hover:   #0949CC;
  --mm-blue-soft:    #E8EFFF;

  --mm-amber:        #C8791A;
  --mm-amber-on-dark:#E8A33D;
  --mm-green:        #0F7A4A;

  /* ---------- 3.2 Type ---------- */
  --font-display:'Archivo',-apple-system,'Segoe UI',sans-serif;
  --font-body:'Avenir Next',-apple-system,'Segoe UI',sans-serif;
  --font-mono:'Roboto Mono',ui-monospace,'SF Mono',Menlo,Consolas,monospace;

  --fs-h2:      clamp(2.0rem, 3.8vw, 3.25rem);
  --fs-h3:      clamp(1.25rem, 1.6vw, 1.5rem);
  --fs-lede:    clamp(1.0625rem, 1.3vw, 1.375rem);
  --fs-body:    1rem;
  --fs-small:   0.875rem;
  --fs-caption: 0.8125rem;
  --fs-label:   0.75rem;
  --fs-price:   clamp(1.75rem, 2.4vw, 2.25rem);
  --fs-counter: clamp(2.75rem, 5vw, 4.5rem);

  /* line-height scale — review/04-design-system.md: 4 values covered every
     real use in the file, just never had names. */
  --lh-tight:   1.05;  /* h1/h2 display headings */
  --lh-snug:    1.2;   /* short titles / label stacks */
  --lh-body:    1.55;  /* base paragraph */
  --lh-relaxed: 1.65;  /* longer readable copy */

  /* ---------- 3.3 Grid & space ---------- */
  --mm-wrap:      1280px;
  --mm-wrap-text: 820px;
  --mm-edge-d:    40px;
  --mm-edge-t:    32px;
  --mm-edge-m:    20px;

  /* spacing scale — review/04-design-system.md: same numbers were already
     being hand-typed independently 3-7x each across the file; naming them
     doesn't change any current layout, just gives the next edit something
     to reference instead of retyping a literal. */
  --space-1:  4px;
  --space-2:  8px;
  --space-3:  12px;
  --space-4:  16px;
  --space-5:  20px;
  --space-6:  24px;
  --space-7:  28px;
  --space-8:  32px;
  --space-9:  40px;
  --space-10: 48px;
  --space-11: 56px;
  --space-12: 64px;
  --mm-space-section-y: clamp(72px, 9vw, 128px);

  /* ---------- 3.4 Radii & shadow ---------- */
  --r-sm:   4px;
  --r-md:   6px;
  --r-lg:   12px;
  --sh-card: 0 1px 2px rgba(14,14,16,.05), 0 8px 24px -12px rgba(14,14,16,.12);
  --sh-lift: 0 2px 4px rgba(14,14,16,.06), 0 16px 40px -16px rgba(14,14,16,.18);

  background:var(--mm-paper);
  color:var(--mm-t-primary);
  font-family:var(--font-body);
  -webkit-font-smoothing:antialiased;
}

#mm-home,
#mm-home *{box-sizing:border-box;}
#mm-home img{max-width:100%;display:block;}
#mm-home a{color:inherit;text-decoration:none;}
#mm-home .mm-wrap{max-width:var(--mm-wrap);margin:0 auto;padding-inline:var(--mm-edge-m);}
@media(min-width:768px){#mm-home .mm-wrap{padding-inline:var(--mm-edge-t);}}
@media(min-width:1280px){#mm-home .mm-wrap{padding-inline:var(--mm-edge-d);}}
#mm-home section{position:relative;}
#mm-home h1,#mm-home h2,#mm-home h3{font-family:var(--font-display);margin:0;}
#mm-home p{margin:0;}

/* full-bleed helper used by photo bands, guarded against horizontal scroll */
#mm-home{overflow-x:clip;}
#mm-home .mm-bleed{width:100%;margin-inline:calc(50% - 50vw);}

/* ---------- 7.1 Buttons (rectangular, no pill) ---------- */
#mm-home .mm-btn{
  display:inline-flex;align-items:center;justify-content:center;gap:8px;
  font-family:var(--font-body);font-weight:700;font-size:var(--fs-body);
  padding:14px 28px;min-height:48px;border-radius:var(--r-md);
  border:1px solid transparent;cursor:pointer;letter-spacing:0;
  transition:background 160ms, border-color 160ms;
}
#mm-home .mm-btn:active{transform:translateY(1px);}
#mm-home .mm-btn:focus-visible{outline:2px solid var(--mm-blue);outline-offset:3px;}
#mm-home .mm-btn--primary{background:var(--mm-blue);color:#fff;}
#mm-home .mm-btn--primary:hover{background:var(--mm-blue-hover);}
#mm-home .mm-btn--ghost{background:transparent;color:var(--mm-t-primary);border-color:var(--mm-t-primary);}
#mm-home .mm-btn--ghost:hover{background:var(--mm-paper-2);}
#mm-home .mm-btn--ghost-inv{background:transparent;color:var(--mm-t-inv);border-color:var(--mm-ink-3);}
#mm-home .mm-btn--ghost-inv:hover{background:var(--mm-ink-2);}

/* ---------- 7.3 Eyebrow ---------- */
#mm-home .mm-eyebrow{
  display:inline-block;font-family:var(--font-body);font-weight:700;
  font-size:var(--fs-label);letter-spacing:.14em;text-transform:uppercase;
  color:var(--mm-blue-deep);
}
#mm-home .mm-dark .mm-eyebrow{color:var(--mm-amber-on-dark);}

/* ---------- 8. Motion ---------- */
#mm-home .mm-r{opacity:0;transform:translateY(12px);transition:opacity 400ms cubic-bezier(.2,.7,.3,1), transform 400ms cubic-bezier(.2,.7,.3,1);}
#mm-home .mm-r.mm-in{opacity:1;transform:none;}
@media (prefers-reduced-motion: reduce){
  #mm-home *, #mm-home *::before, #mm-home *::after{
    animation-duration:.01ms !important; animation-iteration-count:1 !important;
    transition-duration:.01ms !important; scroll-behavior:auto !important;
  }
  #mm-home .mm-r{opacity:1 !important; transform:none !important;}
}

/* ==========================================================================
   S1 — STICKY HEADER (CSS override only — header.php is parent, untouched)
   ========================================================================== */
.home #masthead{
  background:rgba(255,255,255,.86) !important;
  -webkit-backdrop-filter:blur(14px) saturate(1.4);
  backdrop-filter:blur(14px) saturate(1.4);
  border-bottom:1px solid transparent;
  transition:border-color 160ms ease;
  height:72px;
}
.home #masthead.mm-scrolled{border-bottom-color:var(--mm-paper-3, #EBE9E4);}
.home #masthead,
.home #masthead a,
.home #masthead .head-wrap{color:#0E0E10 !important;}
.home #masthead nav a{
  font-family:'Avenir Next',-apple-system,sans-serif !important;
  font-size:.875rem !important;font-weight:500 !important;
  color:#55555E !important;
}
.home #masthead nav a:hover{color:#0E0E10 !important;}
/* the parent theme's logo asset is white, built for the old black header —
   invert it so it reads on the new light sticky header without touching
   header.php itself. */
.home #masthead .menu_logo__img{filter:invert(1) brightness(0.15);}
@media(max-width:767px){.home #masthead{height:60px;}}

/* Client ask (2026-08-21): "Samples"/"Testimonials"/"Services" nav links
   land on the homepage but don't settle on the right section — worse from
   another page, where it looked like nothing scrolled at all. #masthead
   above is `position:fixed`, so it floats OVER whatever the browser (or
   any JS) scrolls to — every #samples/#reviews/#pricing anchor jump was
   landing with the target's real top edge hidden right under the fixed
   72px/60px bar, which on a tall hero-adjacent section can look like the
   scroll never happened at all. scroll-padding-top is what browsers
   themselves consult when resolving a URL fragment (and what
   scrollIntoView() honors too) — it's the standards-based fix for exactly
   "fixed header covers the anchor target", so both the browser's own
   native jump AND the homepage.js re-scroll fallback below land past the
   header instead of underneath it. Scoped to this file only, which itself
   is enqueued solely for the homepage. */
html{scroll-padding-top:100px;}
@media(max-width:767px){html{scroll-padding-top:80px;}}

/* Mobile menu button + drawer — the S1 pass above lightened the header BAR
   but missed two things client caught 2026-08-20: (1) the hamburger icon's
   3 lines are hardcoded stroke="#fff" in header.php (parent, untouched) —
   invisible on this new light header, same white-on-white problem the logo
   already had; (2) the open drawer (#primary-menu) still carries the
   parent theme's original solid-black background, while its link color
   was already overridden dark by the ".home #masthead nav a" rule above —
   net result was low-contrast dark-grey text on a black box. Both fixed
   here, drawer restyled in the same paper/blue language as the rest of
   the redesign instead of the old cramped black slide-out. */
.home #masthead .menu-toggle line{stroke:#0E0E10;}
@media(max-width:991.1px){
  .home #primary-menu{
    background:var(--mm-paper, #fff) !important;
    width:min(320px, 84vw);
    padding:100px 28px 32px;
    box-shadow:-16px 0 48px rgba(14,14,16,.18);
    overflow-y:auto;
  }
  .home #primary-menu li{width:100%;}
  .home #primary-menu li a{
    display:block;width:100%;
    padding:16px 4px !important;
    border-bottom:1px solid var(--mm-paper-3, #EBE9E4);
    transition:color 150ms ease;
  }
  .home #primary-menu li:last-child a{border-bottom:none;}
  .home #primary-menu li a:hover,
  .home #primary-menu li a:focus-visible{color:var(--mm-blue, #0B5FFF) !important;}
}

/* ==========================================================================
   S2 — HERO
   Client override (2026-08-12, confirmed via AskUserQuestion after the
   split-layout version was shown): full-bleed photo, text on top with a
   moderate overlay — NOT the split "text never touches photo" layout the
   original ТЗ v2 spec S2 described. The one thing carried over from that
   spec's own reasoning: the overlay must stay light enough that the photo
   is still visible — the previous (pre-ТЗ-v2) round's mistake was a 97%
   black overlay that hid the photo entirely. This gradient tops out much
   lower and is concentrated behind the text, not the whole frame.
   ========================================================================== */
#mm-home .mm-hero{
  position:relative;isolation:isolate;
  min-height:min(66vh,600px);
  display:flex;align-items:center;
  padding-block:72px;
  /* #masthead is `position:fixed` (parent theme), so it's out of flow and
     doesn't push this section down on its own — clear its real rendered
     height explicitly instead of guessing via padding-block alone. */
  margin-top:88px;
  background:var(--mm-ink);
  overflow:hidden;
}
@media(max-width:767px){#mm-home .mm-hero{margin-top:76px;}}
#mm-home .mm-hero-bg{
  position:absolute;inset:0;z-index:0;
}
#mm-home .mm-hero-bg picture,
#mm-home .mm-hero-bg img{width:100%;height:100%;object-fit:cover;object-position:center 62%;display:block;}
#mm-home .mm-hero-bg::after{
  content:"";position:absolute;inset:0;
  /* darkest left (where text sits), fading out toward the right so most of
     the frame keeps showing real photo, not a black scrim */
  background:linear-gradient(90deg, rgba(8,8,10,.86) 0%, rgba(8,8,10,.68) 30%, rgba(8,8,10,.28) 56%, rgba(8,8,10,.06) 74%, transparent 88%);
}
#mm-home .mm-hero-grid{position:relative;z-index:1;width:100%;}
#mm-home .mm-hero-text{max-width:34rem;}
#mm-home .mm-hero h1{
  /* real ACF headline (custom_h1) is a full sentence, not a short tagline —
     sized down from the spec's --fs-display (built for 2-4 word headlines)
     so a 7-word sentence doesn't wrap into an oversized four-line block */
  font-size:clamp(1.75rem,3.2vw,2.75rem);font-weight:800;line-height:1.12;
  letter-spacing:-.015em;color:#fff;text-wrap:balance;
}
#mm-home .mm-hero-sub{
  font-size:var(--fs-body);line-height:1.55;color:rgba(247,246,243,.82);
  max-width:38ch;margin-top:16px;text-wrap:pretty;
}
#mm-home .mm-hero-sub a{color:#BFD1FF;}
#mm-home .mm-hero-sub-accent{color:#BFD1FF;font-weight:600;}
#mm-home .mm-hero-ctas{display:flex;flex-wrap:wrap;gap:12px;margin-top:28px;}
#mm-home .mm-hero-ctas .mm-btn svg{flex:none;}
#mm-home .mm-hero-ctas .mm-btn--ghost{color:#fff;border-color:rgba(255,255,255,.7);}
#mm-home .mm-hero-ctas .mm-btn--ghost:hover{background:rgba(255,255,255,.12);}

#mm-home .mm-trust-row{
  display:flex;flex-wrap:wrap;column-gap:22px;row-gap:10px;
  margin-top:32px;padding-top:20px;border-top:1px solid rgba(255,255,255,.22);
  max-width:38rem;
}
#mm-home .mm-trust-item{
  display:flex;align-items:center;gap:7px;font-size:var(--fs-caption);
  font-weight:500;color:rgba(247,246,243,.82);white-space:nowrap;
}
#mm-home .mm-trust-item svg{flex:none;color:#BFD1FF;width:14px;height:14px;}
/* real Apple Digital Masters / Dolby Atmos marks — cropped from the same
   badge artwork already used in the footer (see functions.php-adjacent
   img/ files), not the full logo+wordmark lockup, so they slot into the
   row exactly like the other icon+label items instead of sitting apart
   as a wide standalone graphic. */
#mm-home .mm-trust-mark{flex:none;width:auto;height:14px;display:block;opacity:.92;}

/* Left-justified wrapping made the trust row's last (partial) line sit
   ragged-left under the fuller line(s) above it on wide viewports — client
   flagged it as "стоїть криво" 2026-08-20. Centering each wrapped line as
   a block reads balanced instead; mobile is already single-column (below)
   so it's untouched. */
@media(min-width:768px){
  #mm-home .mm-trust-row{justify-content:center;}
}

@media(max-width:767px){
  #mm-home .mm-hero{min-height:auto;padding-block:64px 40px;align-items:flex-end;}
  #mm-home .mm-hero h1{font-size:clamp(1.75rem,7vw,2.25rem);}
  #mm-home .mm-hero-text{max-width:none;}
  #mm-home .mm-trust-row{flex-direction:column;}
}

/* ---------- Shared section scaffold (S3+) ---------- */
#mm-home .mm-section{padding-block:clamp(72px,9vw,128px);}
#mm-home .mm-section.mm-tight{padding-block:clamp(48px,6vw,80px);}
#mm-home .mm-section.mm-dark{background:var(--mm-ink);color:var(--mm-t-inv);}
#mm-home .mm-section-head{margin-bottom:48px;}
#mm-home .mm-section-head h2{
  font-size:var(--fs-h2);font-weight:800;line-height:1.02;letter-spacing:-.025em;
  color:var(--mm-t-primary);text-wrap:balance;margin-top:10px;
}
#mm-home .mm-dark .mm-section-head h2{color:var(--mm-t-inv);}
#mm-home .mm-section-head .mm-lede{
  font-size:var(--fs-lede);line-height:1.5;color:var(--mm-t-secondary);
  max-width:60ch;margin-top:16px;
}
#mm-home .mm-dark .mm-section-head .mm-lede{color:var(--mm-t-inv-dim);}
#mm-home .mm-section-head.mm-center{text-align:center;}
#mm-home .mm-section-head.mm-center .mm-lede{margin-inline:auto;}

/* ==========================================================================
   S3 — CLIENT LOGO MARQUEE
   ========================================================================== */
#mm-home .mm-clients{background:var(--mm-paper-2);padding-block:48px;}
#mm-home .mm-clients-top{
  display:flex;justify-content:space-between;align-items:baseline;
  margin-bottom:28px;flex-wrap:wrap;gap:12px;
}
#mm-home .mm-clients-top span{font-size:var(--fs-label);font-weight:700;letter-spacing:.14em;text-transform:uppercase;color:var(--mm-t-muted);}
#mm-home .mm-clients-top a{font-size:var(--fs-small);font-weight:700;color:var(--mm-blue-deep);}
#mm-home .mm-clients-top a:hover{text-decoration:underline;}
#mm-home .mm-marquee-mask{
  overflow:hidden;
  -webkit-mask-image:linear-gradient(90deg,transparent,#000 8%,#000 92%,transparent);
  mask-image:linear-gradient(90deg,transparent,#000 8%,#000 92%,transparent);
}
#mm-home .mm-marquee{display:flex;width:max-content;animation:mm-scroll 34s linear infinite;}
#mm-home .mm-marquee:hover{animation-play-state:paused;}
#mm-home .mm-marquee-group{display:flex;align-items:center;gap:64px;padding-right:64px;}
#mm-home .mm-marquee img{
  height:36px;width:auto;max-width:170px;object-fit:contain;
  filter:grayscale(.4) opacity(.8);transition:filter 200ms ease;
}
#mm-home .mm-marquee img:hover{filter:grayscale(0) opacity(1);}
@keyframes mm-scroll{from{transform:translateX(0);}to{transform:translateX(-50%);}}
@media(prefers-reduced-motion:reduce){
  #mm-home .mm-marquee{animation:none;flex-wrap:nowrap;overflow-x:auto;}
}

/* ==========================================================================
   S4 — BEFORE / AFTER SAMPLES (main proof)
   One stage, genre tabs pick which real .player is visible. Real samples
   stay mounted (the engine binds once on load); JS only toggles
   .is-active to show/hide panels — see homepage.js. "Channel Strip" look:
   dark hardware fader card sitting on the real studio photo background
   (samples_background_image). Previous pass (numbered rail + pulsing
   button ring) had the ring's max expansion (inset:-16px) landing inside
   the 16px gap to the Before button, i.e. visibly overlapping it —
   replaced with effects that stay inside their own box (box-shadow, not
   inset pseudo-elements) so nothing can bleed into a neighbour regardless
   of spacing.
   ========================================================================== */

/* real studio photo background — same photo/overlay/parallax technique as
   the original site (background-attachment:fixed on desktop, degrading to
   scroll on tablet/mobile since fixed-attachment perf is poor on touch). */
#mm-home .mm-samples-photo{position:relative;overflow:hidden;padding-block:0;}
#mm-home .mm-samples-photo__bg{
  position:absolute;inset:0;background-position:center;background-size:cover;background-repeat:no-repeat;
  background-attachment:fixed;z-index:0;
}
#mm-home .mm-samples-photo__overlay{
  position:absolute;inset:0;z-index:1;
  background:linear-gradient(180deg, rgba(10,10,12,.94) 0%, rgba(10,10,12,.82) 40%, rgba(10,10,12,.88) 100%);
}
#mm-home .mm-samples-photo__content{position:relative;z-index:2;padding-block:clamp(72px,9vw,128px);}
#mm-home .mm-samples-photo .mm-eyebrow{color:var(--mm-blue-soft);}
#mm-home .mm-samples-photo #samples-h2{color:#fff;}
#mm-home .mm-samples-photo .mm-lede{color:var(--mm-t-inv-dim);}
@media(max-width:1366px){#mm-home .mm-samples-photo__bg{background-attachment:scroll;}}
@media(max-width:767px){#mm-home .mm-samples-photo__bg{background-attachment:scroll;background-position:center;}}

#mm-home .mm-sample-tabs-wrap{display:flex;align-items:center;gap:6px;margin-bottom:16px;}
#mm-home .mm-tabs-arrow{
  flex:none;display:flex;align-items:center;justify-content:center;
  width:30px;height:30px;border-radius:50%;border:1px solid rgba(255,255,255,.16);
  background:rgba(255,255,255,.06);color:#fff;cursor:pointer;padding:0;
  transition:background .15s ease,border-color .15s ease,opacity .15s ease;
}
#mm-home .mm-tabs-arrow:hover:not(:disabled){background:rgba(255,255,255,.16);border-color:rgba(255,255,255,.4);}
#mm-home .mm-tabs-arrow:disabled{opacity:0;pointer-events:none;}
#mm-home .mm-tabs-arrow svg{flex:none;}
#mm-home .mm-sample-tabs{
  display:flex;flex-wrap:nowrap;gap:8px;overflow-x:auto;flex:1;min-width:0;
  -webkit-overflow-scrolling:touch;scroll-behavior:smooth;
  scrollbar-width:none;-ms-overflow-style:none;
  cursor:grab;
  /* Fade-edge scroll affordance — the arrow buttons exist at every width,
     but on narrow screens they can read as decorative rather than
     functional; this makes "more tabs this way" legible without them. */
  -webkit-mask-image:linear-gradient(to right, transparent 0, #000 12px, #000 calc(100% - 20px), transparent 100%);
  mask-image:linear-gradient(to right, transparent 0, #000 12px, #000 calc(100% - 20px), transparent 100%);
}
#mm-home .mm-sample-tabs::-webkit-scrollbar{display:none;}
#mm-home .mm-sample-tabs-wrap.is-dragging .mm-sample-tabs{scroll-behavior:auto;cursor:grabbing;user-select:none;}
#mm-home .mm-sample-tabs-wrap.is-dragging .mm-sample-tab{pointer-events:none;}
#mm-home .mm-sample-tab{
  font-family:var(--font-body);font-size:var(--fs-small);font-weight:700;flex:none;white-space:nowrap;
  padding:10px 16px;border-radius:var(--r-sm);border:1px solid rgba(255,255,255,.16);
  background:rgba(255,255,255,.06);color:var(--mm-t-inv-dim);cursor:pointer;text-transform:uppercase;letter-spacing:.02em;
  transition:background .15s ease,border-color .15s ease,color .15s ease;
}
#mm-home .mm-sample-tab:hover{border-color:rgba(255,255,255,.4);color:#fff;}
#mm-home .mm-sample-tab.is-active{background:var(--mm-blue);border-color:var(--mm-blue);color:#fff;}
#mm-home .mm-sample-panel{display:none;}
#mm-home .mm-sample-panel.is-active{display:block;}

#mm-home .mm-sample-stage.module-player{background:transparent;border:0;padding:0;}
/* worn analog console skin — client ref: SSL 4000 / Neve 5088, aged
   decades, not fresh off the line: light-to-mid grey aluminum yellowed
   warm by UV/handling, uneven patina blotches, a couple of scuff
   scratches near the screws (the highest-touch spot on a real panel).
   Screws sit only at the TOP corners since the button row bleeds flush
   to the bottom edge with zero padding. */
/* Chassis, take 4. Round 2 (cool grey) read as "generic digital panel";
   round 3 (warm tan/khaki, heavy patina blobs) read as "wood" and,
   per client, "cheap" — too many competing gradient layers with no
   consistent light source, which reads as dirty rather than machined.
   This version: one light source (top-left), warm-neutral GREY (not
   tan) so it stays metal, not wood, a single confident directional
   gradient instead of five overlapping patina patches, a real bevel
   (bright top edge, dark bottom edge) so the whole card reads as a
   physical object with thickness, and a tighter drop shadow so it
   feels like it's sitting proud of the page rather than pasted flat. */
#mm-home .mm-sample-panels{
  position:relative;border-radius:var(--r-lg);padding:22px 22px 0;overflow:hidden;
  background-color:#84807a;
  background-image:
    radial-gradient(circle at 16px 16px, #45423d 0 1.4px, rgba(0,0,0,.3) 1.4px 2.2px, transparent 2.6px),
    radial-gradient(circle at calc(100% - 16px) 16px, #45423d 0 1.4px, rgba(0,0,0,.3) 1.4px 2.2px, transparent 2.6px),
    linear-gradient(115deg, transparent 30%, rgba(255,255,255,.16) 36%, rgba(255,255,255,.03) 42%, transparent 50%),
    repeating-linear-gradient(100deg, rgba(255,255,255,.05) 0 1px, transparent 1px 3px),
    linear-gradient(160deg, #9d988f 0%, #86817a 32%, #6c6862 68%, #524f4a 100%);
  box-shadow:
    inset 0 1.5px 0 rgba(255,255,255,.4),
    inset 0 -2px 0 rgba(0,0,0,.28),
    inset 1px 0 0 rgba(255,255,255,.08),
    inset -1px 0 0 rgba(0,0,0,.15),
    0 1px 2px rgba(0,0,0,.15),
    0 28px 48px -26px rgba(0,0,0,.6);
  border:1px solid rgba(0,0,0,.3);
}
#mm-home .mm-sample-panel{position:relative;}
/* small engraved brand plate — same restrained detail language as the
   corner screws; a real console module always names itself. */
#mm-home .mm-sample-panels::before{
  content:'MAJOR MIXING';
  position:absolute;top:9px;left:50%;translate:-50% 0;z-index:1;
  font-family:var(--font-mono);font-size:.5625rem;font-weight:500;letter-spacing:.22em;
  color:rgba(0,0,0,.32);text-shadow:0 1px 0 rgba(255,255,255,.35);
  pointer-events:none;
}

/* real per-track waveform — actual amplitude peaks extracted from each
   before/after mp3 (56 bars mirrored top/bottom into one SVG polygon —
   see functions.php mm_wave_polygon_points() and
   /scratchpad/extract_waveform.py — no live audio-analysis pipeline
   exists, so this is precomputed once and stored as postmeta
   _mm_wave_before/_mm_wave_after, not invented or randomized). Styled as
   a period-correct CRT oscilloscope trace — dark phosphor screen,
   graticule grid, scanlines, glowing green trace — the reference the
   client asked for (studio 'scopes of the SSL/Neve era). "Before" is a
   dim unlit trace, "after" the full bright phosphor glow. */
#mm-home .mm-scope{
  position:relative;height:128px;margin-bottom:16px;border-radius:6px;overflow:hidden;
  background:radial-gradient(ellipse at center, #0e1f16 0%, #081410 70%, #050b08 100%);
  box-shadow:
    inset 0 0 24px rgba(0,0,0,.85), inset 0 2px 6px rgba(0,0,0,.7),
    inset 0 1px 0 rgba(0,0,0,.6), inset 0 0 0 1px rgba(0,0,0,.6),
    0 1px 0 rgba(255,255,255,.25);
}
#mm-home .mm-scope::after{
  content:'';position:absolute;inset:0;pointer-events:none;z-index:1;
  background:radial-gradient(ellipse at center, transparent 55%, rgba(0,0,0,.55) 100%);
}
/* fixed "now" marker — the client's own mental model: "точка стоїть на
   місці, а хвиля рухається зліва" (the point stays still, the wave
   moves). Tracks a REAL position (2026-08-20): homepage.js reads the
   playing <audio> element's own .currentTime/.duration every frame and
   translates .mm-wave so whatever's actually sounding right now lands
   exactly under this mark — the JS's WAVE_PLAYHEAD_PCT constant must
   match this `left` value, and WAVE_ZOOM must match .mm-wave's width
   below (both 38% / 200% at the moment). */
#mm-home .mm-scope::before{
  content:'';position:absolute;top:8%;bottom:8%;left:38%;width:1px;z-index:2;pointer-events:none;
  background:rgba(200,255,225,.55);box-shadow:0 0 4px rgba(140,255,190,.6);
}
/* screen stays dark/empty (no trace) until a track is actually playing —
   client ask: a real scope shows nothing with no live signal feeding it,
   not an idle "preview" shape. Grid graticule removed per client request
   (2026-08-18) — plain dark screen only. Since the screen is blank until
   Play, the trace's first appearance is the first thing a visitor sees
   move — given a "power-on" beat (dim/soft-focus → full brightness)
   instead of snapping in at full brightness, like a CRT scope warming
   up. display:none→block is what makes the animation restart on every
   real press (a fresh mount each time, not a one-shot on page load);
   duration/opacity are still swept to .01ms by the reduced-motion rule
   above like every other transition in this file.

   Position sync (2026-08-20, replaces an earlier fixed 9s CSS loop that
   scrolled the real per-track comb at a rate unrelated to the track's
   actual length or playback position — client: "картинки не
   відповідають реальному треку... тупо крутить хвилю по кругу"):
   width:200% still renders the SVG wider than its viewport so there's
   real room either side of the playhead to scroll through, but the
   translateX is now set inline, per frame, by homepage.js from the
   audio element's real currentTime/duration — no CSS keyframe animates
   the transform anymore. The default translateX below is only the
   at-rest position (matches what the JS would compute at progress=0)
   for a panel that hasn't started playing yet. */
#mm-home .mm-wave{position:absolute;left:0;top:0;bottom:0;width:200%;height:100%;display:none;transform:translateX(19%);transition:transform .22s linear;}
#mm-home .mm-sample-panel:has(.player.is-before) .mm-wave--before{
  display:block;animation:mm-scope-on 480ms ease-out;
}
#mm-home .mm-sample-panel:has(.player.is-after) .mm-wave--after{
  display:block;animation:mm-scope-on 480ms ease-out;
}
@keyframes mm-scope-on{
  0%{opacity:0;filter:brightness(.35) blur(1.5px);}
  55%{opacity:1;filter:brightness(1.2) blur(0);}
  100%{opacity:1;filter:brightness(1) blur(0);}
}
/* dense comb of real min/max ticks (see functions.php mm_wave_path()) —
   fill:none because the path is ~200 disconnected 2-point "M x,top L
   x,bottom" segments, not a continuous outline; a fill would try to
   shade the gaps between ticks. stroke-linecap:round softens each tick
   into a small pill so quiet columns still read as a visible dot rather
   than vanishing. */
#mm-home .mm-wave path{fill:none;stroke-width:1.6;stroke-linecap:round;vector-effect:non-scaling-stroke;}
#mm-home .mm-wave--before path{stroke:rgba(130,205,165,.6);}
#mm-home .mm-wave--after path{
  stroke:#7dffb0;
  filter:drop-shadow(0 0 3px rgba(110,255,170,.7));
}
@media(max-width:767px){#mm-home .mm-scope{height:104px;}}
@media(max-width:479px){#mm-home .mm-scope{height:92px;margin-bottom:16px;}}

/* restyle the parent theme's .player markup — never edit template-player.php/init-player.js.
   style.css (parent, ~line 1105) ships this markup with its OWN mini-card
   look — background #252a2d, border-radius 20px, padding 13px 18px,
   box-shadow — a leftover from the original circular-button design. Since
   #mm-home .player never redeclared those four properties, they were
   still winning the cascade: a second, subtly-offset dark rounded box
   with its own shadow was rendering *inside* .mm-sample-panels, and the
   flush button row's negative margin was calibrated against the outer
   card's padding, not this inner one — the visible "card overlapping
   itself" bug. All four are explicitly zeroed below alongside the
   button's own hardcoded margin-right:24px (same leak, different
   property) and the row's inherited margin-top. */
#mm-home .player{
  display:flex;flex-direction:column;gap:18px;
  background:none;border-radius:0;padding:0;box-shadow:none;color:inherit;
}
/* vendor's base .player-row is flex-row (title beside progress, its
   original compact voice-message-style layout) — overridden here so the
   title sits on its own line above the wide fader groove. */
#mm-home .player-row:not(.player-row__bottom){flex-direction:column;align-items:stretch;gap:12px;}
#mm-home .player-row__bottom{margin-top:0;}
#mm-home .player__title{
  font-family:var(--font-display);font-weight:800;font-size:clamp(1.1875rem,2vw,1.625rem);
  letter-spacing:.01em;color:#3a372f;text-transform:uppercase;
  min-width:0;line-height:1.2;
  text-shadow:0 1px 0 rgba(255,255,255,.45);
}

/* the fader — a real, honest visualization of real playback progress:
   recessed groove (still dark — a fader slot is dark on every real
   console regardless of chassis colour) with tick marks, filled bar, and
   a black plastic fader cap with a white grip line — the actual
   silhouette of an SSL/Neve fader cap, not a shiny chrome slider thumb. */
#mm-home .player__progress{
  width:100%;height:10px;border-radius:2px;cursor:pointer;padding:0;
  background:#161618;
  background-image:repeating-linear-gradient(90deg, rgba(255,255,255,.08) 0 1px, transparent 1px 12px);
  box-shadow:inset 0 2px 5px rgba(0,0,0,.7);
  overflow:visible;
}
#mm-home .player__progress-line{
  background:linear-gradient(180deg, #d0483a 0%, #e0a83a 50%, #4cbf68 100%);
  height:100%;border-radius:2px;position:relative;
  /* eased, not linear — a motorised fader nudges toward its target and
     settles rather than tracking at a constant robotic rate; also reads
     less like a digital progress-bar tween. */
  transition:width 220ms cubic-bezier(.22,.61,.36,1);
}
#mm-home .player__progress-line::after{
  content:'';position:absolute;right:-7px;top:50%;translate:0 -50%;
  width:14px;height:28px;border-radius:2px;
  background-image:
    linear-gradient(90deg, transparent 46%, rgba(255,255,255,.85) 49%, rgba(255,255,255,.85) 51%, transparent 54%),
    linear-gradient(180deg, #38383b 0%, #1e1e20 100%);
  box-shadow:0 3px 6px rgba(0,0,0,.5), inset 0 1px 0 rgba(255,255,255,.15);
}

#mm-home .player-row__space-between{
  display:flex;align-items:stretch;justify-content:flex-start;gap:0;flex-wrap:wrap;
  border-top:1px solid rgba(0,0,0,.2);margin:0 -22px;
}
#mm-home .player__btn{
  width:76px;height:62px;border-radius:0;border:0;border-right:1px solid rgba(0,0,0,.35);
  background:linear-gradient(180deg, #3c3b3d 0%, #232224 12%, #1c1b1d 60%, #141314 100%);
  box-shadow:inset 0 1px 0 rgba(255,255,255,.14), inset 0 -1px 0 rgba(0,0,0,.5);
  margin:0;flex:none;color:#e8e8ea;box-sizing:border-box;
  display:flex;align-items:center;justify-content:center;cursor:pointer;
  transition:background .15s ease,box-shadow .15s ease,transform 80ms ease-out;
}
#mm-home .player__btn:focus{box-shadow:inset 0 1px 0 rgba(255,255,255,.14), inset 0 -1px 0 rgba(0,0,0,.5);}
#mm-home .player__btn:hover{background:linear-gradient(180deg, #464547 0%, #2b2a2c 12%, #221f21 60%, #181718 100%);}
/* physical button-press feedback (client ask) — a tiny travel + a
   deepened inset shadow so the top pushbutton reads as actually moving
   under the click, not just recolouring. */
#mm-home .player__btn:active{
  transform:translateY(1px);
  box-shadow:inset 0 2px 4px rgba(0,0,0,.75), inset 0 -1px 0 rgba(0,0,0,.4);
}
#mm-home .player__btn svg{width:16px;height:auto;margin:0;}
#mm-home .player.is-active .player__btn{box-shadow:inset 0 0 0 2px #e0a83a, inset 0 1px 0 rgba(255,255,255,.14);}

#mm-home .player__before,#mm-home .player__after,#mm-home .player__before_single{
  font-family:var(--font-mono);font-size:var(--fs-caption);font-weight:500;letter-spacing:.08em;text-transform:uppercase;
  flex:1 1 120px;height:62px;border-radius:0 !important;border:0;border-right:1px solid rgba(0,0,0,.35);
  background:linear-gradient(180deg, #333234 0%, #201f21 14%, #19181a 100%);
  box-shadow:inset 0 1px 0 rgba(255,255,255,.1);
  color:#a9a9ac;cursor:pointer;transition:background .15s ease,color .15s ease,transform 80ms ease-out;
}
#mm-home .player__after{border-right:0;}
/* physical press feedback, same language as .player__btn above — a
   slight dip + a darker face while held. */
#mm-home .player__before:active,#mm-home .player__after:active{
  transform:translateY(1px);
  background:linear-gradient(180deg, #262527 0%, #171617 14%, #121112 100%);
}
/* the engine adds is-before/is-after to .player itself while that side is
   playing — it never touches the button elements directly (see Player.js
   _handlePlayPauseBefore/_handlePlayPauseAfter), so state must key off
   that. Lit like a real console pushbutton: small lamp + backlit label,
   warm amber — SSL's own EQ-section accent colour — instead of a neon
   green LED. */
#mm-home .player__before,#mm-home .player__after{position:relative;}
#mm-home .player__before::before,#mm-home .player__after::before{
  content:'';position:absolute;left:12px;top:50%;translate:0 -50%;
  width:6px;height:6px;border-radius:50%;background:#100f10;box-shadow:inset 0 1px 1px rgba(0,0,0,.8);
  transition:background 80ms ease-out,box-shadow 80ms ease-out;
}
#mm-home .player.is-before .player__before,
#mm-home .player.is-after .player__after{background:linear-gradient(180deg, #3a3226 0%, #221e18 100%);color:#fff;}
#mm-home .player.is-before .player__before::before,
#mm-home .player.is-after .player__after::before{background:#e0a83a;box-shadow:0 0 6px 1px rgba(224,168,58,.85);}
/* lamp brightens the instant the button is physically pressed, ahead of
   the engine's own state class landing a beat later — makes the switch
   feel like it's actually completing a circuit rather than waiting on a
   JS callback to tell it to light up. */
#mm-home .player__before:active::before,#mm-home .player__after:active::before{
  background:#e0a83a;box-shadow:0 0 6px 1px rgba(224,168,58,.85);
}

@media(max-width:479px){
  #mm-home .player__btn,#mm-home .player__before,#mm-home .player__after{flex:1 1 100%;height:46px;border-right:0;border-bottom:1px solid rgba(0,0,0,.2);}
  #mm-home .player__after{border-bottom:0;}
}

/* real Spotify playlist (same one already live on the site — see the
   home-page.php comment for the exact reused embed) — lazy-loaded via
   homepage.js, not the iframe's own loading="lazy" alone, since that
   attribute doesn't defer network fetch the way JS-gated src does. */
#mm-home .mm-releases{margin-top:40px;}
#mm-home .mm-releases__title{
  font-family:var(--font-display);font-weight:800;font-size:var(--fs-h3);
  color:#fff;margin-bottom:16px;
}
#mm-home .mm-releases__frame{border-radius:var(--r-lg);display:block;border:1px solid rgba(255,255,255,.1);}

/* ==========================================================================
   S11 — TEXT REVIEWS
   Deliberately LIGHT section (client ask 2026-08-20 — spec originally
   called this dark; placed right after Samples it would've made a 3rd
   dark section in a row).

   Background photo dropped for good after several rounds the same day —
   client: "натягнуто, наче на стіну фонариком посвітили... в стилі Apple,
   а не Le Master" (forced, like shining a flashlight on a wall — wanted
   Apple-clean, not a generic photo-wash look). No photography at all now:
   flat white section, DARK cards for contrast — client's own proposed
   direction, and a cleaner fit for the rest of the page's look than any
   version of the photo treatment got to.
   ========================================================================== */
/* Real 5.0/76 rating, pulled from the same ACF options fields footer.php
   already uses for the invisible JSON-LD schema — client ask 2026-08-21:
   that number existed only for Google, never for a visitor. */
#mm-home .mm-reviews-rating{display:flex;align-items:center;gap:8px;margin-top:14px;}
#mm-home .mm-reviews-rating-stars{display:flex;gap:2px;color:var(--mm-amber);}
#mm-home .mm-reviews-rating-text{font-size:var(--fs-small);font-weight:700;color:var(--mm-t-primary);}
#mm-home .mm-reviews-carousel{position:relative;margin-top:8px;padding-inline:48px;}
#mm-home .mm-reviews-swiper{overflow:hidden;position:relative;}
#mm-home .mm-reviews-swiper .swiper-wrapper{display:flex;box-sizing:content-box;}
#mm-home .mm-reviews-swiper .swiper-slide{flex-shrink:0;width:100%;height:auto;box-sizing:border-box;padding:4px;}
/* 2026-08-26 (client-reported "one stretched review card"): Swiper.js only
   overrides this width inline once it finishes initializing — until then
   (a real, visible window right after page paint, worse on a slow or
   busy load) every slide sits at this CSS default. That default matches
   the real slidesPerView:1 mobile state, but on desktop/tablet
   (slidesPerView 2 at 600px+, 3 at 900px+ — see homepage.js) it means the
   FIRST real review testimonial briefly renders one full-width card
   before snapping to its correct 50%/33% size — a flash, not a persistent
   bug, but a real one. Mirroring the same breakpoints here in plain CSS
   means the slide already has close to its right width before JS ever
   runs, so there's nothing to visibly snap. */
@media(min-width:600px){#mm-home .mm-reviews-swiper .swiper-slide{width:50%;}}
@media(min-width:900px){#mm-home .mm-reviews-swiper .swiper-slide{width:33.3334%;}}

#mm-home .mm-review-card{
  height:100%;background:var(--mm-ink-2);border:1px solid var(--mm-ink-3);
  border-radius:var(--r-lg);padding:24px;box-shadow:var(--sh-lift);
  display:flex;flex-direction:column;
}
#mm-home .mm-review-stars{display:flex;gap:2px;color:var(--mm-amber-on-dark);margin-bottom:12px;}
/* The parent theme's preload_css.php sets a global "p{color:#383838de}"
   rule. That's a low-specificity selector, but it targets <p> directly —
   wpautop() wraps every review into <p> tags — and a direct match on an
   element always wins over an inherited color no matter the specificity
   gap, which is why setting color only on the wrapper div (inherited by
   the <p> inside it) never actually reached the visible text — client
   ask 2026-08-21: "тест в карточках не читається взагалі". Selecting the
   <p> directly here fixes it at the actual point of conflict. */
#mm-home .mm-review-text{font-size:var(--fs-body);line-height:1.6;color:var(--mm-t-inv);}
#mm-home .mm-review-text p{color:var(--mm-t-inv);}
#mm-home .mm-review-text p + p{margin-top:10px;}
#mm-home .mm-review-text b{color:var(--mm-t-inv);}
/* margin-top:auto pushes this to the card's bottom edge regardless of how
   long the review text above it runs — client ask 2026-08-21: with cards
   in the same carousel row at equal height (flex-stretch, see
   .swiper-wrapper), this lines every avatar+name up on one flush row
   instead of trailing wherever each card's own text happened to end. */
#mm-home .mm-review-byline{display:flex;align-items:center;gap:10px;margin-top:auto;padding-top:16px;}
#mm-home .mm-review-avatar{width:32px;height:32px;border-radius:var(--r-sm);object-fit:cover;flex:none;}
#mm-home .mm-review-who{display:flex;flex-direction:column;line-height:1.3;}
#mm-home .mm-review-name{font-size:var(--fs-small);font-weight:700;color:var(--mm-t-inv);}
#mm-home .mm-review-verified{font-size:var(--fs-label);color:var(--mm-t-inv-dim);}

#mm-home .mm-reviews-arrow{
  position:absolute;top:50%;transform:translateY(-50%);z-index:3;
  display:flex;align-items:center;justify-content:center;
  width:36px;height:36px;border-radius:50%;border:1px solid var(--mm-paper-3);
  background:var(--mm-paper);color:var(--mm-t-primary);cursor:pointer;
  box-shadow:var(--sh-card);transition:background 150ms ease,opacity 150ms ease;
}
#mm-home .mm-reviews-arrow:hover{background:var(--mm-paper-2);}
#mm-home .mm-reviews-arrow.swiper-button-disabled{opacity:.35;pointer-events:none;}
/* Client ask 2026-08-21: "кнопка свайпу зліва, а не справа" — the video
   carousel's own arrow classes (mm-reviews-video-arrow--*) never matched
   these left/right rules at all (only the text-carousel's plain
   mm-reviews-arrow--* did), so both video arrows fell back to the same
   default position instead of sitting on opposite edges. */
#mm-home .mm-reviews-arrow--prev,
#mm-home .mm-reviews-video-arrow--prev{left:0;}
#mm-home .mm-reviews-arrow--next,
#mm-home .mm-reviews-video-arrow--next{right:0;}

#mm-home .mm-reviews-pagination{
  position:relative;display:flex;justify-content:center;gap:8px;margin-top:24px;
}
#mm-home .mm-reviews-pagination .swiper-pagination-bullet{
  width:8px;height:8px;border-radius:50%;background:var(--mm-t-muted);opacity:.35;
  cursor:pointer;transition:opacity 150ms ease,background 150ms ease;
}
#mm-home .mm-reviews-pagination .swiper-pagination-bullet-active{background:var(--mm-blue);opacity:1;}

/* S12 — video reviews, same #reviews section as the text carousel above
   (client ask: one continuous block, no visible seam) — same dark-card
   language, portrait cards since the real source videos are all ~9:16
   phone-recorded testimonials, not the 16:9 shape used elsewhere. */
#mm-home .mm-reviews-video{margin-top:56px;}
#mm-home .mm-reviews-video-heading{
  font-family:var(--font-display);font-weight:800;font-size:var(--fs-h3);
  color:var(--mm-t-primary);margin-bottom:20px;
}
#mm-home .mm-reviews-video-carousel{position:relative;padding-inline:48px;}
#mm-home .mm-reviews-video-swiper{overflow:hidden;position:relative;}
#mm-home .mm-reviews-video-swiper .swiper-wrapper{display:flex;box-sizing:content-box;}
#mm-home .mm-reviews-video-swiper .swiper-slide{flex-shrink:0;box-sizing:border-box;padding:4px;}
#mm-home .mm-review-video-card{
  position:relative;aspect-ratio:9/16;border-radius:var(--r-lg);overflow:hidden;
  background:var(--mm-ink-2);box-shadow:var(--sh-lift);
}
#mm-home .mm-review-video-el{width:100%;height:100%;object-fit:cover;display:block;background:var(--mm-ink-2);}
#mm-home .mm-review-video-card .mm-play-circle{width:48px;height:48px;}
#mm-home .mm-review-video-card .mm-play-circle svg{width:16px;height:16px;}
#mm-home .mm-review-video-card.is-playing .mm-play{display:none;}

#mm-home .mm-reviews-platforms{
  display:flex;flex-wrap:wrap;justify-content:center;align-items:center;gap:32px;
  margin-top:48px;
}
#mm-home .mm-reviews-platforms img{height:24px;width:auto;display:block;opacity:.85;transition:opacity 150ms ease;}
#mm-home .mm-reviews-platforms a:hover img{opacity:1;}

@media(max-width:599px){
  #mm-home .mm-reviews-carousel{padding-inline:8px;}
  #mm-home .mm-reviews-arrow{display:none;}
}

/* ==========================================================================
   S5 — PRICING (dark section #1)
   ========================================================================== */
#mm-home .mm-pricing-trust{margin-top:8px;font-size:var(--fs-small);}
#mm-home .mm-price-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:16px;}
@media(max-width:1199px){#mm-home .mm-price-grid{grid-template-columns:repeat(3,1fr);}}
@media(max-width:899px){#mm-home .mm-price-grid{grid-template-columns:repeat(2,1fr);}}
@media(max-width:599px){#mm-home .mm-price-grid{grid-template-columns:1fr;}}
#mm-home .mm-pricing-guarantee{
  margin-top:16px;font-size:var(--fs-small);color:var(--mm-t-inv-dim);
}
#mm-home .mm-pricing-guarantee a{color:var(--mm-t-inv);text-decoration:underline;text-underline-offset:2px;}
#mm-home .mm-pricing-guarantee a:hover{color:var(--mm-blue-soft);}
#mm-home .mm-price-card{
  background:var(--mm-ink-2);border:1px solid var(--mm-ink-3);border-radius:var(--r-lg);
  display:flex;flex-direction:column;position:relative;overflow:hidden;
}
#mm-home .mm-price-card:hover{border-color:rgba(255,255,255,.28);}
#mm-home .mm-price-card img{width:100%;aspect-ratio:16/10;object-fit:cover;display:block;}
#mm-home .mm-price-card .mm-price-body{padding:20px 20px 24px;display:flex;flex-direction:column;flex:1;gap:10px;}
#mm-home .mm-price-card h3{font-size:var(--fs-h3);font-weight:700;color:var(--mm-t-inv);margin:0;}
#mm-home .mm-price-card .mm-price{
  font-family:var(--font-mono);font-size:var(--fs-price);font-weight:500;
  color:var(--mm-t-inv);font-variant-numeric:tabular-nums;
}
#mm-home .mm-price-card .mm-price-unit{font-size:var(--fs-small);color:var(--mm-t-inv-dim);margin-top:-8px;}
#mm-home .mm-price-card p{
  font-size:var(--fs-small);color:var(--mm-t-inv-dim);line-height:1.55;flex:1;
}
#mm-home .mm-price-card .mm-badge{
  position:absolute;top:12px;left:12px;z-index:1;
  font-family:var(--font-body);font-size:var(--fs-label);font-weight:700;letter-spacing:.06em;text-transform:uppercase;
  padding:5px 10px;border-radius:var(--r-sm);color:#fff;background:var(--mm-blue);
}
#mm-home .mm-price-card.mm-sale .mm-badge{background:var(--mm-amber-on-dark);color:#1A1200;}

/* ==========================================================================
   S7 — WHY MAJOR MIXING
   Real studio photo background (home-slide-3.jpg, attachment 3417) —
   same __bg/__overlay/__content technique as S4 samples-photo (client
   ask 2026-08-20: was plain white-on-white, needed a real visual; kept
   the full 9-item copy, only the background changed).
   ========================================================================== */
#mm-home .mm-why-photo{position:relative;overflow:hidden;padding-block:0;}
#mm-home .mm-why-photo__bg{
  position:absolute;inset:0;background-position:center;background-size:cover;background-repeat:no-repeat;
  background-attachment:fixed;z-index:0;
}
#mm-home .mm-why-photo__overlay{
  position:absolute;inset:0;z-index:1;
  background:linear-gradient(180deg, rgba(10,10,12,.94) 0%, rgba(10,10,12,.86) 45%, rgba(10,10,12,.94) 100%);
}
#mm-home .mm-why-photo__content{position:relative;z-index:2;padding-block:clamp(72px,9vw,128px);}
@media(max-width:1366px){#mm-home .mm-why-photo__bg{background-attachment:scroll;}}
@media(max-width:767px){#mm-home .mm-why-photo__bg{background-attachment:scroll;background-position:center;}}

#mm-home .mm-why .mm-section-head{text-align:left;}
#mm-home .mm-why .mm-section-head h2{max-width:44ch;}
#mm-home .mm-why-photo .mm-eyebrow{color:var(--mm-blue-soft);}
#mm-home .mm-why-photo #why-h2{color:#fff;}
#mm-home .mm-why-photo .mm-lede{color:var(--mm-t-inv-dim);}
#mm-home .mm-why-grid{
  display:grid;grid-template-columns:1fr 1fr;column-gap:64px;row-gap:48px;
}
#mm-home .mm-why-item{
  border-left:2px solid rgba(255,255,255,.28);padding-left:20px;
}
#mm-home .mm-why-item:nth-child(-n+2){border-left-color:var(--mm-blue-soft);}
#mm-home .mm-why-item h3{
  font-size:var(--fs-h3);font-weight:700;color:#fff;margin-bottom:8px;
}
#mm-home .mm-why-item p{
  font-size:var(--fs-body);line-height:1.65;color:var(--mm-t-inv-dim);max-width:62ch;
}
@media(max-width:899px){
  #mm-home .mm-why-grid{grid-template-columns:1fr;row-gap:32px;}
  #mm-home .mm-why-item:nth-child(-n+2){border-left-color:rgba(255,255,255,.28);}
  #mm-home .mm-why-item:first-child{border-left-color:var(--mm-blue-soft);}
}
#mm-home .mm-why-cta{display:flex;justify-content:center;margin-top:48px;}

/* ==========================================================================
   S8+S9 — STUDIO + TEAM, merged into one alternating video/text/photo
   narrative (client ask 2026-08-20 — was a photo grid followed by a
   separate text block, replaced with two zigzag rows)
   ========================================================================== */
/* --mm-paper (white), not paper-2 — sits directly after S3 (also paper-2)
   now that it moved up (client ask 2026-08-20), so it needs to read as a
   distinct section rather than blending into the marquee above it. */
#mm-home .mm-studio-team{background:var(--mm-paper);}
#mm-home .mm-st-row{
  display:grid;grid-template-columns:1fr 1fr;gap:48px;align-items:center;
}
#mm-home .mm-st-row + .mm-st-row{margin-top:56px;}
#mm-home .mm-st-row--reverse .mm-st-media{order:2;}
#mm-home .mm-st-media{
  position:relative;aspect-ratio:16/9;border-radius:var(--r-lg);overflow:hidden;
  background:var(--mm-paper-3);
}
#mm-home .mm-st-media img{
  width:100%;height:100%;object-fit:cover;display:block;
  transition:transform 400ms cubic-bezier(.2,.7,.3,1);
}
@media(hover:hover){
  #mm-home .mm-st-media:hover img{transform:scale(1.03);}
}
#mm-home .mm-st-copy p{font-size:var(--fs-body);line-height:var(--lh-relaxed);color:var(--mm-t-secondary);max-width:62ch;}
#mm-home .mm-st-copy p + p{margin-top:16px;}
#mm-home .mm-st-copy a{color:var(--mm-blue-deep);text-decoration:underline;text-underline-offset:3px;}
#mm-home .mm-studio-video-el{width:100%;height:100%;object-fit:cover;display:block;background:var(--mm-ink);}
#mm-home .mm-st-media:has(.mm-studio-video-el){background:var(--mm-ink);}
#mm-home .mm-play{
  position:absolute;inset:0;width:100%;height:100%;border:0;padding:0;cursor:pointer;
  display:flex;flex-direction:column;align-items:center;justify-content:center;gap:12px;
  background:linear-gradient(180deg, transparent 40%, rgba(14,14,16,.45) 100%);
}
#mm-home .mm-play-circle{
  width:72px;height:72px;border-radius:50%;background:rgba(255,255,255,.92);
  display:flex;align-items:center;justify-content:center;color:var(--mm-ink);
  transition:transform 200ms ease;
}
#mm-home .mm-play:hover .mm-play-circle{transform:scale(1.06);}
#mm-home .mm-play-circle svg{margin-left:2px;}
#mm-home .mm-play-label{
  font-size:var(--fs-label);letter-spacing:.04em;text-transform:uppercase;color:#fff;
  text-shadow:0 1px 12px rgba(0,0,0,.6);
}
#mm-home .mm-st-media.is-playing .mm-play{display:none;}
@media(max-width:767px){
  #mm-home .mm-st-row{grid-template-columns:1fr;gap:20px;}
  #mm-home .mm-st-row + .mm-st-row{margin-top:40px;}
  /* Client ask (2026-08-20): media always leads its own text on mobile,
     regardless of desktop left/right placement — was Photo-Text-Text-
     Video-Photo-Text (row 2's video fell after both texts since its DOM
     order is copy-then-media for the desktop text-left/video-right
     layout); now Photo-Text-Video-Text-Photo-Text. order:-1 pulls the
     video ahead of its own row's text without touching row 1/3, whose
     DOM order already puts the photo first. */
  #mm-home .mm-st-row--reverse .mm-st-media{order:-1;}
}

/* ==========================================================================
   S10 — COUNTERS
   ========================================================================== */
#mm-home .mm-counters-grid{
  display:grid;grid-template-columns:repeat(3,1fr);
}
#mm-home .mm-counter-item{
  text-align:center;padding:0 24px;border-left:1px solid var(--mm-paper-3);
}
#mm-home .mm-counter-item:first-child{border-left:0;}
/* 2026-08-23 (item 11 consilium finding): "+" moved into a sibling span
   the counter script never touches — see home-page.php's own comment on
   why baking it into .purecounter itself would get silently wiped by the
   library's innerHTML overwrite on every animation frame. */
#mm-home .mm-counter-num-wrap{display:block;line-height:1;}
#mm-home .mm-counter-num{
  display:inline;font-family:var(--font-mono);font-weight:500;font-size:var(--fs-counter);
  color:var(--mm-t-primary);font-variant-numeric:tabular-nums;line-height:1;
}
#mm-home .mm-counter-suffix{
  font-family:var(--font-mono);font-weight:500;font-size:var(--fs-counter);
  color:var(--mm-t-primary);
}
#mm-home .mm-counter-label{
  display:block;margin-top:8px;font-size:var(--fs-label);letter-spacing:.04em;
  text-transform:uppercase;color:var(--mm-t-muted);
}
@media(max-width:767px){
  #mm-home .mm-counters-grid{grid-template-columns:1fr;row-gap:32px;}
  #mm-home .mm-counter-item{border-left:0;padding:0;}
}

/* ==========================================================================
   SOCIAL MEDIA LINKS
   Real platform icons, same visual language as trust-row/platform-logo
   rows elsewhere (circular button, subtle border, hover lift).
   ========================================================================== */
#mm-home .mm-social-links{display:flex;justify-content:center;gap:16px;margin-top:8px;}
#mm-home .mm-social-link{
  display:flex;align-items:center;justify-content:center;
  width:56px;height:56px;border-radius:50%;border:1px solid var(--mm-paper-3);
  background:var(--mm-paper);transition:background 150ms ease,transform 150ms ease;
}
#mm-home .mm-social-link:hover{background:var(--mm-paper-2);transform:translateY(-2px);}
#mm-home .mm-social-link img{width:24px;height:24px;}

/* ==========================================================================
   S15 — SEO BLOCK
   Real WYSIWYG (seo_block) with its own <h2>/<h3>/<p>/<ul>/<a> and 2 real
   YouTube embeds — styled per spec §S15 rather than left at whatever the
   legacy Bootstrap-ish "mui-col-*" wrapper classes in the stored HTML
   would otherwise do (those have zero meaning here, no framework loaded).

   No collapse/clamp — client ask 2026-08-21 ("давай не згортати його"),
   overriding the spec's original 320px-clamp-with-"Read more" request.
   Full content always shown, no toggle needed.
   ========================================================================== */
#mm-home .mm-seo-details{max-width:var(--mm-wrap-text);margin-inline:auto;}

#mm-home .mm-seo-content p{
  font-size:var(--fs-body);line-height:1.75;color:var(--mm-t-secondary);margin-bottom:20px;
}
#mm-home .mm-seo-content h2,
#mm-home .mm-seo-content h3{
  font-size:var(--fs-h3);font-weight:800;color:var(--mm-t-primary);
  margin:40px 0 16px;text-transform:none;
}
#mm-home .mm-seo-content h2:first-child,
#mm-home .mm-seo-content h3:first-child{margin-top:0;}
#mm-home .mm-seo-content a{color:var(--mm-blue-deep);text-decoration:underline;text-underline-offset:3px;}
#mm-home .mm-seo-content ul,
#mm-home .mm-seo-content ol{margin:0 0 20px;padding-left:1.25em;color:var(--mm-t-secondary);}
#mm-home .mm-seo-content li{font-size:var(--fs-body);line-height:1.75;margin-bottom:8px;}
#mm-home .mm-seo-content li:last-child{margin-bottom:0;}
/* the real content's own .youtube-iframe wrapper, reused as-is rather
   than fighting the stored markup. The parent theme's MUI grid CSS IS
   loaded sitewide, so the stored .mui-col-md-6 divs inside this wrapper
   carry a real width:50% — reset that here or it compounds with our own
   1fr 1fr grid track and halves the videos again (~193px instead of ~400px). */
#mm-home .mm-seo-content .youtube-iframe{
  display:grid;grid-template-columns:1fr 1fr;gap:16px;margin:24px 0;
}
#mm-home .mm-seo-content .youtube-iframe > div{
  width:100%;float:none;padding:0;min-height:0;
}
#mm-home .mm-seo-content .youtube-iframe iframe{
  width:100%;aspect-ratio:16/9;height:auto;border-radius:var(--r-md);display:block;
}
@media(max-width:599px){
  #mm-home .mm-seo-content .youtube-iframe{grid-template-columns:1fr;}
}

/* ==========================================================================
   S16 — FINAL CTA
   Client ask 2026-08-21: the page had no closing call to action after Why
   Choose Us. Same .mm-dark/.mm-tight pattern as Pricing, no new pattern
   invented.
   ========================================================================== */
#mm-home .mm-final-cta-actions{display:flex;justify-content:center;margin-top:8px;}
