@import url('https://fonts.googleapis.com/css2?family=Montserrat:wght@300;400;500;600;700;800&family=Plus+Jakarta+Sans:wght@400;500;600&display=swap');

/* ═══════════════════════════════════════════
   1 · DMC DESIGN TOKENS
═══════════════════════════════════════════ */
.dmc-page, .dmc-hd, .dmc-ft{
  --n-950:#000A33;      /* deepest royal · footer depth, overlays */
  --n-900:#000F47;      /* dark section backgrounds */
  --n-800:#00155D;      /* THE brand navy */
  --n-700:#082068;      /* elevated surfaces on navy */
  --n-600:#102A78;      /* card gradient tops */
  --sky-300:#D6E9FF;
  --sky-400:#A8D0FF;    /* accents ON DARK backgrounds */
  --sky-500:#71B6FF;    /* THE brand light blue · buttons */
  --sky-600:#2273CE;    /* accents/links ON LIGHT backgrounds */
  --sky-700:#155693;
  --ink:#071233;        /* headings on light */
  --ink-soft:#45557E;   /* body on light */
  --soft:#C2CEEC;       /* body on navy */
  --soft-2:#8FA0CB;
  --line:rgba(113,182,255,.16);
  --line-strong:rgba(113,182,255,.36);
  --line-light:#E1E9F7;
  --bg-light:#F3F7FD;
  --grad-rise:linear-gradient(120deg,#2273CE 0%,#71B6FF 50%,#B9DBFF 100%);
  --rad-lg:36px; --rad:28px; --rad-sm:16px;
  --wrap:1400px;
  --font-d:'Montserrat',sans-serif;
  --font-b:'Plus Jakarta Sans',sans-serif;
}

/* ═══════════════════════════════════════════
   2 · PAGE BASE
═══════════════════════════════════════════ */
.dmc-page{
  font-family:var(--font-b); font-size:17px; line-height:1.75;
  background:var(--n-900); color:var(--soft);
  -webkit-font-smoothing:antialiased; -moz-osx-font-smoothing:grayscale;
  overflow-x:hidden;
}

.dmc-page *, .dmc-page *::before, .dmc-page *::after{ box-sizing:border-box; margin:0; padding:0; }

.dmc-page img{ display:block; max-width:100%; height:auto; }

.dmc-page a{ text-decoration:none; color:inherit; }

.dmc-page ul{ list-style:none; }

.dmc-page button{ background:none; border:none; font:inherit; color:inherit; cursor:pointer; }

.dmc-page ::selection{ background:#71B6FF; color:#000A33; }

.dmc-page a:focus-visible, .dmc-page button:focus-visible{ outline:2px solid var(--sky-500); outline-offset:3px; border-radius:6px; }

.dmc-container{ max-width:var(--wrap); margin:0 auto; padding:0 48px; }

/* ═══════════════════════════════════════════
   3 · TYPOGRAPHY
═══════════════════════════════════════════ */
.dmc-h1{ font-family:var(--font-d); font-weight:300; line-height:1.16; color:#fff;
  font-size:clamp(2.15rem,3.6vw,3.8rem); text-transform:uppercase; letter-spacing:.05em; }

.dmc-h1__strong{ font-weight:700; color:var(--sky-400); }

.dmc-h2{ font-family:var(--font-d); font-weight:300; line-height:1.18; color:#fff;
  font-size:clamp(2rem,3.3vw,3.15rem); }

.dmc-h3{ font-family:var(--font-d); font-weight:600; line-height:1.3; letter-spacing:.01em; color:#fff;
  font-size:clamp(1.25rem,1.6vw,1.55rem); }

.dmc-em{ font-weight:500; color:var(--sky-400); }

/* heading accent. NEVER italic. */
.dmc-lead{ font-size:clamp(1.05rem,1.35vw,1.22rem); line-height:1.8; color:var(--soft); }

.dmc-lead strong, .dmc-page .dmc-dark p strong{ color:#EAF2FE; font-weight:600; }

.dmc-eyebrow{
  display:inline-flex; align-items:flex-start; gap:11px;
  font-family:var(--font-b); font-size:16px; font-weight:500; font-style:italic;
  letter-spacing:.01em; color:var(--sky-400);
  margin-bottom:22px; line-height:1.55;
}

.dmc-page img.dmc-eyebrow__ico{ height:26px; width:auto; flex:none; margin-top:-1px; }

/* LIGHT sections */
.dmc-page .dmc-light{ background:var(--bg-light); color:var(--ink-soft); }

.dmc-page .dmc-white{ background:#fff; color:var(--ink-soft); }

.dmc-page .dmc-light .dmc-h2, .dmc-page .dmc-white .dmc-h2,
.dmc-page .dmc-light .dmc-h3, .dmc-page .dmc-white .dmc-h3{ color:var(--ink); }

.dmc-page .dmc-light .dmc-em, .dmc-page .dmc-white .dmc-em{ color:var(--sky-600); }

.dmc-page .dmc-light .dmc-lead, .dmc-page .dmc-white .dmc-lead{ color:var(--ink-soft); }

.dmc-page .dmc-light p strong, .dmc-page .dmc-white p strong{ color:var(--ink); font-weight:600; }

.dmc-page .dmc-light .dmc-eyebrow, .dmc-page .dmc-white .dmc-eyebrow{ color:var(--sky-600); }

/* ═══════════════════════════════════════════
   4 · BUTTONS + LINKS
   HARD RULE: sky buttons ALWAYS carry deep navy text.
═══════════════════════════════════════════ */
.dmc-btn{
  display:inline-flex; align-items:center; justify-content:center; gap:12px;
  font-family:var(--font-d); font-size:15px; font-weight:600;
  letter-spacing:.02em; text-align:center;
  padding:17px 34px; border-radius:999px; border:1.5px solid transparent;
  cursor:pointer; white-space:nowrap; max-width:100%;
  transition:transform .35s cubic-bezier(.2,.7,.3,1),background .35s,border-color .35s,color .35s,box-shadow .35s;
}

.dmc-btn svg{ flex:none; transition:transform .35s cubic-bezier(.2,.7,.3,1); }

.dmc-btn:hover svg{ transform:translateX(5px); }

.dmc-page .dmc-btn--primary, .dmc-hd .dmc-btn--primary{ background:var(--sky-500); color:var(--n-950); }

.dmc-page .dmc-btn--primary:hover, .dmc-hd .dmc-btn--primary:hover{ background:var(--sky-400); color:var(--n-950); transform:translateY(-2px); box-shadow:0 18px 40px -12px rgba(113,182,255,.45); }

.dmc-page .dmc-btn--ghost{ border-color:rgba(255,255,255,.35); color:#fff; background:transparent; }

.dmc-page .dmc-btn--ghost:hover{ border-color:var(--sky-400); color:var(--sky-300); transform:translateY(-2px); }

.dmc-page .dmc-btn--ink{ background:var(--n-800); color:#fff; }

.dmc-page .dmc-btn--ink:hover{ background:var(--n-700); transform:translateY(-2px); box-shadow:0 18px 40px -14px rgba(0,21,93,.4); }

.dmc-page .dmc-arrow-link{
  display:inline-flex; align-items:center; gap:10px;
  font-family:var(--font-b); font-size:15.5px; font-weight:600;
  letter-spacing:.01em; color:var(--sky-500); transition:color .3s; text-align:left;
}

.dmc-page .dmc-arrow-link svg{ flex:none; transition:transform .35s cubic-bezier(.2,.7,.3,1); }

.dmc-page .dmc-arrow-link:hover{ color:var(--sky-300); }

.dmc-page .dmc-arrow-link:hover svg{ transform:translateX(5px); }

.dmc-page .dmc-light .dmc-arrow-link, .dmc-page .dmc-white .dmc-arrow-link{ color:var(--sky-600); }

.dmc-page .dmc-light .dmc-arrow-link:hover, .dmc-page .dmc-white .dmc-arrow-link:hover{ color:var(--sky-700); }

/* ═══════════════════════════════════════════
   5 · SCROLL REVEAL  (class "dmc-reveal", stagger with style="--rd:.1s")
═══════════════════════════════════════════ */
.dmc-reveal{
  opacity:0; transform:translateY(34px);
  transition:opacity .9s cubic-bezier(.2,.65,.3,1),transform .9s cubic-bezier(.2,.65,.3,1);
  transition-delay:var(--rd,0s);
}

.dmc-reveal.is-in{ opacity:1; transform:none; }

/* ═══════════════════════════════════════════
   6 · SHARED SMALL COMPONENTS
═══════════════════════════════════════════ */
.dmc-checks li{
  display:flex; gap:16px; align-items:flex-start; padding:15px 0;
  border-top:1px solid var(--line-light);
  font-size:15px; line-height:1.6; color:var(--ink-soft);
}

.dmc-checks li:last-child{ border-bottom:1px solid var(--line-light); }

.dmc-checks svg{ flex:none; margin-top:3px; }

.dmc-page .dmc-dark .dmc-checks li{ border-top-color:var(--line); color:var(--soft); }

.dmc-page .dmc-dark .dmc-checks li:last-child{ border-bottom-color:var(--line); }

.dmc-trust-item{
  display:inline-flex; align-items:center; gap:10px;
  font-family:var(--font-b); font-size:14px; font-weight:500;
  letter-spacing:.01em; color:rgba(255,255,255,.92);
}

.dmc-trust-item svg{ flex:none; }

/* Overflow guards: stop long content blowing out grid columns */
.dmc-hero__inner > *, .dmc-intro__grid > *, .dmc-serv-row > *,
.dmc-consult__grid > *, .dmc-serve__grid > *, .dmc-ft__inner > *{ min-width:0; }

.dmc-page .dmc-consult__contact a, .dmc-ft__contact-item span{ overflow-wrap:anywhere; }

/* ═══════════════════════════════════════════════════════════════════════════
   GLOBAL HEADER  (.dmc-hd)
   V1: lives inside this file. Later: its own Theme Builder header template.
   ═══════════════════════════════════════════════════════════════════════════ */
.dmc-hd{ position:relative; z-index:2000; font-family:var(--font-b); color:var(--soft); -webkit-font-smoothing:antialiased; }

.dmc-hd *,.dmc-hd *::before,.dmc-hd *::after{ box-sizing:border-box; margin:0; padding:0; }

.dmc-hd a{ text-decoration:none; color:inherit; }

.dmc-hd ul{ list-style:none; }

.dmc-hd button{ background:none; border:none; font:inherit; color:inherit; cursor:pointer; }

.dmc-hd a:focus-visible,.dmc-hd button:focus-visible{ outline:2px solid var(--sky-400); outline-offset:3px; border-radius:6px; }

.dmc-lock{ overflow:hidden !important; }

/* ── Utility top bar ── */
.dmc-hd__top{ background:var(--n-950); border-bottom:1px solid rgba(113,182,255,.1); }

.dmc-hd__top-inner{ display:flex; align-items:center; justify-content:space-between; gap:24px; padding:0 clamp(20px,3vw,48px); height:42px; }

.dmc-hd__top-note{ font-family:var(--font-d); font-size:10.5px; font-weight:600; letter-spacing:.18em; text-transform:uppercase; color:var(--soft-2); white-space:nowrap; overflow:hidden; text-overflow:ellipsis; }

.dmc-hd__top-links{ display:flex; align-items:center; gap:28px; flex:none; }

.dmc-hd__top-links a{ display:inline-flex; align-items:center; gap:9px; font-family:var(--font-d); font-size:11.5px; font-weight:600; letter-spacing:.1em; color:var(--sky-300); transition:color .3s; white-space:nowrap; }

.dmc-hd__top-links a:hover{ color:#fff; }

.dmc-hd__top-links svg{ flex:none; }

/* ── Main bar ── */
.dmc-hd__bar{ position:relative; background:var(--n-800); border-bottom:1px solid var(--line); transition:background .35s,box-shadow .35s; }

.dmc-hd__bar-inner{ display:flex; align-items:center; gap:clamp(20px,2.5vw,44px); padding:0 clamp(20px,3vw,48px); height:86px; transition:height .35s; }

.dmc-hd.is-stuck .dmc-hd__bar{ position:fixed; top:0; left:0; right:0; z-index:2000; background:rgba(0,14,62,.94); -webkit-backdrop-filter:blur(14px); backdrop-filter:blur(14px); box-shadow:0 18px 50px -20px rgba(0,5,24,.75); }

.dmc-hd.is-stuck .dmc-hd__bar-inner{ height:74px; }

.dmc-hd__spacer{ height:0; }

.dmc-hd__logo{ display:inline-flex; align-items:center; flex:none; }

.dmc-hd__logo img{ display:block; height:46px; width:auto; transition:height .35s; }

.dmc-hd.is-stuck .dmc-hd__logo img{ height:40px; }

/* ── Desktop nav ── */
.dmc-hd__nav{ flex:1; display:flex; justify-content:center; }

.dmc-hd__nav > ul{ display:flex; align-items:center; gap:clamp(4px,1vw,14px); }

.dmc-hd__item{ position:relative; }

.dmc-hd .dmc-hd__link{
  display:inline-flex; align-items:center; gap:8px;
  font-family:var(--font-d); font-size:12.5px; font-weight:600;
  letter-spacing:.15em; text-transform:uppercase; color:#D3E1F5;
  padding:14px 16px; position:relative; transition:color .3s; white-space:nowrap;
}

.dmc-hd__link::after{ content:''; position:absolute; left:16px; right:16px; bottom:6px; height:2px; background:var(--sky-500); border-radius:2px; transform:scaleX(0); transform-origin:left; transition:transform .35s cubic-bezier(.2,.7,.3,1); }

.dmc-hd__link:hover,.dmc-hd__link.is-current{ color:var(--sky-400); }

.dmc-hd__link:hover::after,.dmc-hd__link.is-current::after{ transform:scaleX(1); }

.dmc-hd__chev{ transition:transform .3s; flex:none; }

.dmc-hd__item.is-open .dmc-hd__chev{ transform:rotate(180deg); }

.dmc-hd__item.is-open > .dmc-hd__link{ color:var(--sky-400); }

.dmc-hd__item.is-open > .dmc-hd__link::after{ transform:scaleX(1); }

/* ── Dropdown (Our Specialties) ── */
.dmc-hd__drop{
  position:absolute; top:100%; left:50%; transform:translate(-50%,14px);
  width:380px; background:linear-gradient(180deg,#0A2270 0%,#041653 100%);
  border:1px solid var(--line); border-radius:16px; padding:10px;
  box-shadow:0 40px 80px -25px rgba(0,5,24,.85);
  opacity:0; visibility:hidden; pointer-events:none;
  transition:opacity .3s cubic-bezier(.2,.7,.3,1),transform .3s cubic-bezier(.2,.7,.3,1),visibility 0s .3s;
}

.dmc-hd__item.is-open .dmc-hd__drop{ opacity:1; visibility:visible; transform:translate(-50%,0); pointer-events:auto; transition:opacity .3s cubic-bezier(.2,.7,.3,1),transform .3s cubic-bezier(.2,.7,.3,1),visibility 0s 0s; }

.dmc-hd__drop a{ display:flex; align-items:center; justify-content:space-between; gap:14px; padding:13px 16px; border-radius:12px; font-size:14.5px; font-weight:500; color:#C9D8F2; transition:background .25s,color .25s; }

.dmc-hd__drop a svg{ flex:none; color:var(--sky-500); opacity:0; transform:translateX(-6px); transition:opacity .3s,transform .3s; }

.dmc-hd__drop a:hover{ background:rgba(113,182,255,.08); color:var(--sky-300); }

.dmc-hd__drop a:hover svg{ opacity:1; transform:none; }

.dmc-hd .dmc-hd__drop-all{ margin-top:4px; border-top:1px solid var(--line); border-radius:0 0 12px 12px; font-family:var(--font-d); font-size:13.5px; font-weight:600; letter-spacing:.02em; color:var(--sky-500); }

.dmc-hd .dmc-hd__drop-all:hover{ color:var(--sky-300); background:rgba(113,182,255,.06); }

/* ── Actions ── */
.dmc-hd__actions{ display:flex; align-items:center; gap:16px; flex:none; margin-left:auto; }

.dmc-hd .dmc-hd__btn{
  display:inline-flex; align-items:center; gap:11px;
  font-family:var(--font-d); font-size:14px; font-weight:600;
  letter-spacing:.02em;
  background:var(--sky-500); color:var(--n-950);
  padding:15px 28px; border-radius:999px; white-space:nowrap;
  transition:background .3s,transform .3s,box-shadow .3s;
}

.dmc-hd__btn svg{ flex:none; transition:transform .3s; }

.dmc-hd__btn:hover{ background:var(--sky-400); transform:translateY(-1px); box-shadow:0 14px 30px -12px rgba(113,182,255,.5); }

.dmc-hd__btn:hover svg{ transform:translateX(4px); }

/* ── Burger ── */
.dmc-hd__burger{ display:none; width:46px; height:46px; border-radius:12px; border:1px solid var(--line); position:relative; flex:none; transition:border-color .3s,background .3s; }

.dmc-hd__burger:hover{ border-color:var(--line-strong); background:rgba(113,182,255,.06); }

.dmc-hd__burger span{ position:absolute; left:13px; right:13px; height:1.8px; border-radius:2px; background:var(--sky-300); transition:transform .35s,opacity .3s,top .35s; }

.dmc-hd__burger span:nth-child(1){ top:16px; }

.dmc-hd__burger span:nth-child(2){ top:22px; }

.dmc-hd__burger span:nth-child(3){ top:28px; }

.dmc-hd__burger.is-open span:nth-child(1){ top:22px; transform:rotate(45deg); }

.dmc-hd__burger.is-open span:nth-child(2){ opacity:0; }

.dmc-hd__burger.is-open span:nth-child(3){ top:22px; transform:rotate(-45deg); }

/* ── Off-canvas mobile menu ── */
.dmc-hd__scrim{ position:fixed; inset:0; z-index:2900; background:rgba(0,6,26,.62); -webkit-backdrop-filter:blur(3px); backdrop-filter:blur(3px); opacity:0; pointer-events:none; transition:opacity .4s; }

.dmc-hd__scrim.is-open{ opacity:1; pointer-events:auto; }

.dmc-hd__mnav{ position:fixed; top:0; right:0; bottom:0; z-index:3000; width:min(400px,90vw); background:linear-gradient(180deg,#071E63 0%,#000C38 100%); border-left:1px solid var(--line); transform:translateX(105%); transition:transform .45s cubic-bezier(.2,.7,.25,1); display:flex; flex-direction:column; padding:22px 26px 30px; overflow-y:auto; }

.dmc-hd__mnav.is-open{ transform:none; }

.dmc-hd__mnav-top{ display:flex; align-items:center; justify-content:space-between; margin-bottom:28px; }

.dmc-hd__mnav-top img{ height:38px; width:auto; display:block; }

.dmc-hd__close{ width:44px; height:44px; border-radius:12px; border:1px solid var(--line); position:relative; transition:border-color .3s,background .3s; flex:none; }

.dmc-hd__close:hover{ border-color:var(--line-strong); background:rgba(113,182,255,.06); }

.dmc-hd__close::before,.dmc-hd__close::after{ content:''; position:absolute; left:13px; right:13px; top:21px; height:1.8px; border-radius:2px; background:var(--sky-300); }

.dmc-hd__close::before{ transform:rotate(45deg); }

.dmc-hd__close::after{ transform:rotate(-45deg); }

.dmc-hd .dmc-hd__mlink,.dmc-hd .dmc-hd__macc{
  display:flex; align-items:center; justify-content:space-between; gap:14px; width:100%;
  font-family:var(--font-d); font-size:14px; font-weight:600;
  letter-spacing:.12em; text-transform:uppercase; color:#E0EBFA;
  padding:19px 2px; border-bottom:1px solid rgba(113,182,255,.12);
  transition:color .3s; text-align:left;
}

.dmc-hd__mlink:hover,.dmc-hd__macc:hover{ color:var(--sky-400); }

.dmc-hd__macc svg{ transition:transform .35s; flex:none; color:var(--sky-500); }

.dmc-hd__macc.is-open svg{ transform:rotate(180deg); }

.dmc-hd__mnav > *{ flex:0 0 auto; }

.dmc-hd__mpanel{ max-height:0; overflow:hidden; transition:max-height .5s cubic-bezier(.2,.7,.3,1); }

.dmc-hd__mpanel-in{ padding:14px 2px 20px; border-bottom:1px solid rgba(113,182,255,.12); }

.dmc-hd__mpanel-in a{ display:block; font-size:15px; font-weight:500; color:#BCCDEA; padding:9px 0; transition:color .3s,padding-left .3s; }

.dmc-hd__mpanel-in a:hover{ color:var(--sky-300); padding-left:8px; }

.dmc-hd .dmc-hd__mbtn{ display:flex; align-items:center; justify-content:center; gap:11px; font-family:var(--font-d); font-size:14px; font-weight:600; letter-spacing:.02em; background:var(--sky-500); color:var(--n-950); padding:18px 28px; border-radius:999px; margin-top:28px; transition:background .3s,transform .3s; }

.dmc-hd__mbtn:hover{ background:var(--sky-400); transform:translateY(-1px); }

.dmc-hd__mcontact{ margin-top:26px; display:flex; flex-direction:column; gap:14px; }

.dmc-hd__mcontact a{ display:inline-flex; align-items:center; gap:11px; font-family:var(--font-d); font-size:12.5px; font-weight:600; letter-spacing:.08em; color:var(--sky-300); transition:color .3s; }

.dmc-hd__mcontact a:hover{ color:#fff; }

@media (max-width:1180px){
  .dmc-hd__nav{ display:none; }
  .dmc-hd__burger{ display:block; }
  .dmc-hd__bar-inner{ height:76px; justify-content:space-between; }
  .dmc-hd.is-stuck .dmc-hd__bar-inner{ height:68px; }
  .dmc-hd__logo img{ height:40px; }
  .dmc-hd.is-stuck .dmc-hd__logo img{ height:38px; }
}

@media (max-width:760px){
  .dmc-hd__top-note{ display:none; }
  .dmc-hd__top-inner{ justify-content:center; }
}

@media (max-width:640px){
  .dmc-hd__actions .dmc-hd__btn{ display:none; }
  .dmc-hd__bar-inner{ height:70px; }
  .dmc-hd.is-stuck .dmc-hd__bar-inner{ height:64px; }
  .dmc-hd__logo img{ height:36px; }
  .dmc-hd.is-stuck .dmc-hd__logo img{ height:34px; }
}

@media (max-width:420px){
  .dmc-hd__top-links{ gap:18px; }
  .dmc-hd__top-links a span{ display:none; }
}

/* ═══════════════════════════════════════════════════════════════════════════
   HOMEPAGE COMPONENTS
   ═══════════════════════════════════════════════════════════════════════════ */

/* ── Hero (framed gradient card + transparent hero image) ── */
.dmc-hero{ padding:0; background:var(--n-900); }

.dmc-hero__media{
  position:relative; overflow:hidden;
  min-height:min(86vh,880px); display:flex; align-items:center;
  background:
    radial-gradient(1100px 640px at 80% 12%, rgba(34,115,206,.32) 0%, rgba(34,115,206,0) 58%),
    radial-gradient(760px 560px at 10% 32%, rgba(16,42,120,.5) 0%, rgba(16,42,120,0) 62%),
    linear-gradient(to bottom,#041A66 0%,#00155D 52%,#000A33 100%);
}

.dmc-hero__lines{ position:absolute; inset:0; width:100%; height:100%; pointer-events:none; }

.dmc-hero__inner{
  position:relative; z-index:2; width:100%;
  max-width:calc(var(--wrap) + 96px); margin:0 auto;
  padding:clamp(72px,8vw,116px) 48px clamp(100px,10vw,150px);
  display:grid; grid-template-columns:minmax(0,1fr) 520px;
  gap:clamp(44px,5vw,88px); align-items:center;
}

.dmc-hero .dmc-eyebrow{ margin-bottom:26px; }

.dmc-hero .dmc-h1{ margin:0 0 28px; }

.dmc-hero__lead{ max-width:760px; font-size:clamp(1.05rem,1.3vw,1.22rem); line-height:1.8; color:var(--sky-300); }

.dmc-hero__lead strong{ color:#fff; font-weight:600; }

.dmc-hero__cta{ display:flex; flex-wrap:wrap; gap:18px; margin-top:42px; }

.dmc-hero__trust{ display:flex; flex-wrap:wrap; gap:14px 38px; margin-top:48px; padding-top:32px; border-top:1px solid rgba(255,255,255,.14); }

.dmc-hero__content > *{ opacity:0; transform:translateY(26px); animation:dmcRise 1s cubic-bezier(.2,.65,.3,1) forwards; }

.dmc-hero__content > *:nth-child(1){ animation-delay:.15s; }

.dmc-hero__content > *:nth-child(2){ animation-delay:.28s; }

.dmc-hero__content > *:nth-child(3){ animation-delay:.41s; }

.dmc-hero__content > *:nth-child(4){ animation-delay:.54s; }

.dmc-hero__content > *:nth-child(5){ animation-delay:.67s; }

@keyframes dmcRise{ to{ opacity:1; transform:none; } }

.dmc-hero__form{
  opacity:0; transform:translateY(26px);
  animation:dmcRise 1s cubic-bezier(.2,.65,.3,1) .5s forwards;
}

.dmc-form-card--compact .dmc-form__sub{ margin-bottom:18px; }

/* ── Stats band (overlaps hero) ── */
.dmc-stats{ padding:0 28px; position:relative; z-index:5; }

.dmc-stats__card{
  max-width:var(--wrap); margin:-78px auto 0;
  background:linear-gradient(180deg,var(--n-600) 0%,#0A2064 100%);
  border:1px solid var(--line); border-radius:var(--rad);
  padding:56px 64px 50px; display:grid; grid-template-columns:repeat(4,1fr);
  box-shadow:0 40px 80px -30px rgba(0,4,18,.7);
}

.dmc-stat{ padding:0 36px; border-left:1px solid var(--line); }

.dmc-stat:first-child{ border-left:none; padding-left:0; }

.dmc-stat__num{ font-family:var(--font-d); font-weight:300; font-size:clamp(2.7rem,3.9vw,4rem); line-height:1; color:#fff; display:flex; align-items:baseline; gap:6px; white-space:nowrap; }

.dmc-stat__pre{ font-size:.5em; font-weight:400; color:var(--sky-500); }

.dmc-stat__suffix{ font-size:.38em; font-weight:600; letter-spacing:.12em; color:var(--sky-500); text-transform:uppercase; }

.dmc-stat__label{ margin-top:14px; font-size:13.5px; line-height:1.6; color:var(--soft-2); }

.dmc-stat__src{ margin-top:20px; display:flex; align-items:center; min-height:38px; }

.dmc-stat__src img{ height:34px; max-width:200px; width:auto; object-fit:contain; opacity:.88; }

.dmc-stats__note{ max-width:var(--wrap); margin:18px auto 0; padding:0 8px; font-size:11.5px; color:rgba(143,160,203,.55); line-height:1.6; }

/* ── Intro (dark editorial, follows the stats band) ── */
.dmc-intro{ position:relative; padding:clamp(110px,12vw,175px) 0; background:var(--n-900); overflow:hidden; }

.dmc-intro__wm{
  position:absolute; top:50%; right:-7%; transform:translateY(-50%);
  width:clamp(320px,34vw,600px); opacity:.05;
  user-select:none; pointer-events:none;
}

.dmc-intro__lines{ position:absolute; inset:0; width:100%; height:100%; pointer-events:none; }

.dmc-intro__grid{ position:relative; display:grid; grid-template-columns:minmax(0,5.5fr) minmax(0,6.5fr); gap:clamp(48px,6vw,96px); align-items:start; }

.dmc-intro__head .dmc-h2{ margin:0 0 34px; }

.dmc-intro__copy .dmc-lead{ margin-bottom:22px; }

.dmc-intro__copy .dmc-lead:last-child{ margin-bottom:0; }

/* ── Core services (white, alternating rows) ── */
.dmc-serv{ padding:clamp(100px,11vw,170px) 0; }

.dmc-serv__head{ text-align:center; max-width:860px; margin:0 auto clamp(64px,7vw,96px); }

.dmc-serv__head .dmc-h2{ margin:0; }

.dmc-serv-row{ display:grid; grid-template-columns:repeat(2,minmax(0,1fr)); gap:clamp(48px,6vw,100px); align-items:center; }

.dmc-serv-row + .dmc-serv-row{ margin-top:clamp(88px,9vw,140px); }

.dmc-serv-row__media{ display:flex; align-items:center; justify-content:center; }

.dmc-serv-row__media img{ max-height:520px; width:auto; max-width:100%; object-fit:contain; }

.dmc-serv-row__body{ max-width:600px; }

.dmc-serv-row--flip .dmc-serv-row__media{ order:2; }

.dmc-serv-row--flip .dmc-serv-row__body{ order:1; }

.dmc-serv-row__body .dmc-h3{ font-size:clamp(1.5rem,2vw,1.9rem); margin-bottom:18px; }

.dmc-serv-row__body > p{ font-size:16px; line-height:1.8; color:var(--ink-soft); margin-bottom:26px; }

.dmc-serv-row__body > p strong{ color:var(--ink); }

.dmc-serv-row .dmc-checks{ margin-bottom:28px; }

.dmc-serv-note{
  font-size:14.5px; line-height:1.75; color:var(--ink);
  background:#fff; border:1px solid #DCE8F8; border-radius:16px;
  padding:20px 26px; margin-bottom:28px;
}

.dmc-serv-note a{ color:var(--sky-600); text-decoration:underline; text-underline-offset:3px; }

.dmc-serv-note a:hover{ color:var(--sky-700); }

/* ── Who we serve (dark, 9 specialty cards) ── */
.dmc-serve{ padding:clamp(100px,11vw,165px) 0; background:var(--n-900); }

.dmc-serve__top{ display:flex; flex-wrap:wrap; align-items:flex-start; justify-content:space-between; gap:clamp(36px,5vw,72px); }

.dmc-serve__intro{ flex:1 1 460px; max-width:880px; min-width:0; }

.dmc-serve__intro .dmc-h2{ margin:0; }

.dmc-serve__art{ width:clamp(200px,23vw,350px); max-width:100%; height:auto; flex:0 0 auto; margin-top:4px; }

.dmc-serve__lead{ max-width:1080px; margin:26px 0 34px; }

.dmc-serve__cta{ display:flex; flex-wrap:wrap; align-items:center; gap:16px 22px; margin-bottom:clamp(56px,6vw,80px); }

.dmc-serve__grid{ display:grid; grid-template-columns:repeat(3,1fr); gap:26px; }

.dmc-spec-card{
  position:relative; display:flex; flex-direction:column;
  background:linear-gradient(180deg,rgba(16,42,120,.5) 0%,rgba(8,32,104,.22) 100%);
  border:1px solid var(--line); border-radius:var(--rad); overflow:hidden;
  transition:transform .45s cubic-bezier(.2,.7,.3,1),border-color .45s,background .45s;
}

.dmc-spec-card::after{
  content:''; position:absolute; left:0; right:0; top:0; height:3px;
  background:var(--grad-rise); opacity:0; transform:scaleX(.3); transform-origin:left;
  transition:opacity .45s,transform .55s cubic-bezier(.2,.7,.3,1);
}

.dmc-spec-card:hover{ transform:translateY(-6px); border-color:var(--line-strong); background:linear-gradient(180deg,rgba(16,42,120,.72) 0%,rgba(8,32,104,.36) 100%); }

.dmc-spec-card:hover::after{ opacity:1; transform:scaleX(1); }

.dmc-spec-card__media{ position:relative; aspect-ratio:16/10; overflow:hidden; }

.dmc-spec-card__media img{ width:100%; height:100%; object-fit:cover; transition:transform .8s cubic-bezier(.2,.7,.3,1); }

.dmc-spec-card:hover .dmc-spec-card__media img{ transform:scale(1.05); }

.dmc-spec-card__media::after{ content:''; position:absolute; inset:0; background:linear-gradient(to top,rgba(0,10,51,.42) 0%,rgba(0,10,51,0) 45%); }

.dmc-spec-card__body{ display:flex; flex-direction:column; flex:1; padding:30px 32px 32px; }

.dmc-spec-card__body .dmc-h3{ font-size:1.16rem; margin-bottom:13px; }

.dmc-spec-card__body p{ font-size:14.5px; line-height:1.75; color:var(--soft-2); margin-bottom:22px; }

.dmc-spec-card__body .dmc-arrow-link{ margin-top:auto; font-size:14.5px; }

/* ── Final CTA panel + lead form ── */
.dmc-consult{ padding:clamp(90px,9vw,130px) 28px; background:var(--n-900); }

.dmc-consult__panel{
  position:relative; max-width:var(--wrap); margin:0 auto;
  border-radius:var(--rad-lg); overflow:hidden;
  padding:clamp(48px,5.5vw,84px) clamp(28px,5vw,84px);
  border:1px solid rgba(113,182,255,.16);
  box-shadow:0 60px 120px -50px rgba(0,0,0,.85);
}

.dmc-consult__bg{ position:absolute; inset:0; }

.dmc-consult__bg img{ width:100%; height:100%; object-fit:cover; }

.dmc-consult__overlay{ position:absolute; inset:0; background:linear-gradient(120deg,rgba(0,10,51,.97) 0%,rgba(0,21,93,.93) 55%,rgba(13,54,128,.88) 100%); }

.dmc-consult__lines{ position:absolute; inset:0; pointer-events:none; }

.dmc-consult__grid{ position:relative; display:grid; grid-template-columns:minmax(0,1fr) minmax(0,1fr); gap:clamp(40px,5vw,72px); align-items:center; }

.dmc-consult__info .dmc-eyebrow{ font-size:15px; margin-bottom:18px; }

.dmc-consult__info .dmc-h2{ margin:0 0 20px; font-size:clamp(1.6rem,2.3vw,2.3rem); line-height:1.28; }

.dmc-consult__info .dmc-lead{ margin-bottom:28px; color:var(--sky-300); font-size:.99rem; line-height:1.75; }

.dmc-consult__info .dmc-lead a{ color:#fff; text-decoration:underline; text-underline-offset:3px; }

.dmc-consult__contact{ display:flex; flex-wrap:wrap; align-items:center; gap:14px 32px; margin-bottom:26px; }

.dmc-page .dmc-consult__contact a{ display:inline-flex; align-items:center; gap:11px; font-family:var(--font-d); font-size:13.5px; font-weight:600; letter-spacing:.08em; color:var(--sky-300); transition:color .3s; }

.dmc-page .dmc-consult__contact a:hover{ color:#fff; }

.dmc-consult__assure{ display:flex; flex-wrap:wrap; gap:12px 30px; }

/* ── Shared form styles (both lead forms) ── */
.dmc-vh{ position:absolute; width:1px; height:1px; margin:-1px; padding:0; overflow:hidden; clip:rect(0 0 0 0); white-space:nowrap; border:0; }

.dmc-hp{ position:absolute; left:-5000px; width:1px; height:1px; opacity:0; overflow:hidden; }

.dmc-form-card{ position:relative; background:#fff; border-radius:26px; padding:clamp(28px,3.2vw,44px); box-shadow:0 50px 100px -40px rgba(0,4,20,.85); }

.dmc-light .dmc-form-card, .dmc-white .dmc-form-card{ border:1px solid #E3ECF8; box-shadow:0 44px 90px -44px rgba(7,18,51,.28); }

.dmc-form__title{ font-family:var(--font-d); font-weight:600; font-size:clamp(1.35rem,1.8vw,1.65rem); color:var(--ink); margin-bottom:10px; }

.dmc-form__sub{ font-size:14.5px; line-height:1.7; color:var(--ink-soft); margin-bottom:24px; }

.dmc-form__sub strong{ color:var(--ink); }

.dmc-form__row{ display:grid; grid-template-columns:1fr 1fr; gap:14px; }

.dmc-field{ margin-bottom:14px; }

.dmc-flabel{ display:block; font-family:var(--font-b); font-size:13px; font-weight:600; letter-spacing:.01em; color:var(--ink); margin:0 0 7px 2px; }

.dmc-input,.dmc-select,.dmc-textarea{
  width:100%; font-family:var(--font-b); font-size:15.5px; color:var(--ink);
  background:#F7FAFE; border:1.5px solid #DFE9F6; border-radius:14px;
  padding:15px 17px; appearance:none; -webkit-appearance:none;
  transition:border-color .25s,box-shadow .25s,background .25s;
}

.dmc-input::placeholder,.dmc-textarea::placeholder{ color:#93A2C2; }

.dmc-input:focus,.dmc-select:focus,.dmc-textarea:focus{ outline:none; border-color:var(--sky-600); background:#fff; box-shadow:0 0 0 4px rgba(34,115,206,.12); }

.dmc-select{
  background-image:url("data:image/svg+xml;charset=UTF-8,%3Csvg width='12' height='8' viewBox='0 0 12 8' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M1 1.5l5 5 5-5' stroke='%232273CE' stroke-width='1.8' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E");
  background-repeat:no-repeat; background-position:right 18px center; padding-right:46px; cursor:pointer;
}

.dmc-select:invalid{ color:#93A2C2; }

.dmc-select option{ color:var(--ink); }

.dmc-textarea{ min-height:104px; resize:vertical; }

.dmc-form__kicker{ font-family:var(--font-b); font-size:13px; font-weight:600; letter-spacing:.01em; color:var(--ink); margin:6px 0 10px; }

.dmc-pills{ display:grid; grid-template-columns:1fr 1fr; gap:10px; margin-bottom:16px; }

.dmc-pill{
  font-family:var(--font-b); font-size:13.5px; font-weight:500; color:var(--ink-soft);
  background:#fff; border:1.5px solid #DFE9F6; border-radius:12px;
  padding:13px 6px; text-align:center; cursor:pointer;
  transition:border-color .25s,background .25s,color .25s;
}

.dmc-pill:hover{ border-color:var(--sky-500); color:var(--sky-700); }

.dmc-pill.is-on{ border-color:var(--sky-600); background:rgba(113,182,255,.14); color:var(--sky-700); font-weight:600; }

.dmc-form__submit{ width:100%; justify-content:center; margin-top:4px; font-size:14.5px; padding:16px 24px; }

.dmc-form__submit:disabled{ opacity:.55; cursor:not-allowed; transform:none !important; box-shadow:none !important; }

.dmc-field.has-error .dmc-input,.dmc-field.has-error .dmc-select,.dmc-field.has-error .dmc-textarea{ border-color:#D9646C; box-shadow:none; background:#FEF7F7; }

.dmc-error-msg{ display:none; font-size:12.5px; line-height:1.4; color:#C0505A; margin:7px 2px 0; }

.dmc-field.has-error .dmc-error-msg{ display:block; }

.dmc-form__status{ display:none; margin-top:14px; font-size:14px; line-height:1.55; border-radius:12px; padding:13px 16px; }

.dmc-form__status.is-error{ display:block; background:#FCEEEF; color:#9E3E47; }

.dmc-form__fineprint{ margin-top:16px; text-align:center; font-size:12.5px; line-height:1.5; color:#8494B5; }

.dmc-form-success{ display:none; text-align:center; padding:44px 12px; }

.dmc-form-success h3{ font-family:var(--font-d); font-weight:600; font-size:1.4rem; color:var(--ink); margin:22px 0 12px; }

.dmc-form-success p{ font-size:15px; line-height:1.7; color:var(--ink-soft); max-width:400px; margin:0 auto; }

.dmc-page .dmc-form-success a{ color:var(--sky-700); font-weight:600; }

.dmc-form-card.is-done form{ display:none; }

.dmc-form-card.is-done .dmc-form-success{ display:block; }

/* Compact variant · final CTA form */
.dmc-form-card--compact{ padding:clamp(24px,2.6vw,36px); }

.dmc-form-card--compact .dmc-field{ margin-bottom:12px; }

.dmc-form-card--compact .dmc-flabel{ font-size:12.5px; margin-bottom:6px; }

.dmc-form-card--compact .dmc-input,.dmc-form-card--compact .dmc-select{ padding:13px 15px; font-size:15px; }

.dmc-form-card--compact .dmc-textarea{ min-height:80px; padding:13px 15px; font-size:15px; }

.dmc-form-card--compact .dmc-pills{ margin-bottom:14px; }

.dmc-form-card--compact .dmc-pill{ padding:11px 6px; }

.dmc-form-card--compact .dmc-form__kicker{ margin:4px 0 8px; }

.dmc-consult .dmc-trust-item{ font-size:13px; }

/* ═══════════════════════════════════════════════════════════════════════════
   GLOBAL FOOTER  (.dmc-ft)
   V1: lives inside this file. Later: its own Theme Builder footer template.
   ═══════════════════════════════════════════════════════════════════════════ */
.dmc-ft{
  position:relative; overflow:hidden; font-family:var(--font-b);
  background:
    radial-gradient(900px 500px at 85% 0%, rgba(16,42,120,.5) 0%, rgba(0,10,51,0) 60%),
    var(--n-950);
  border-top:1px solid var(--line); color:var(--soft);
  -webkit-font-smoothing:antialiased;
}

.dmc-ft *,.dmc-ft *::before,.dmc-ft *::after{ box-sizing:border-box; margin:0; padding:0; }

.dmc-ft a{ text-decoration:none; color:inherit; }

.dmc-ft ul{ list-style:none; }

.dmc-ft img{ max-width:100%; }

.dmc-ft a:focus-visible{ outline:2px solid var(--sky-400); outline-offset:3px; border-radius:6px; }

.dmc-ft__lines{ position:absolute; inset:0; pointer-events:none; }

.dmc-ft__main{ position:relative; }

.dmc-ft__inner{
  max-width:1400px; margin:0 auto;
  padding:clamp(72px,8vw,110px) 48px clamp(48px,5vw,64px);
  display:grid; grid-template-columns:4.4fr 2.4fr 2.8fr 3.2fr;
  gap:clamp(36px,4vw,72px);
}

.dmc-ft__brand img{ display:block; height:46px; width:auto; margin-bottom:26px; }

.dmc-ft__brand p{ font-size:14.5px; line-height:1.8; color:var(--soft-2); max-width:380px; margin-bottom:18px; }

.dmc-ft__brand p strong{ color:#B9C8EC; font-weight:600; }

.dmc-ft__brand p a{ color:var(--sky-300); }

.dmc-ft__head{ font-family:var(--font-d); font-size:15px; font-weight:600; letter-spacing:.02em; color:var(--sky-400); margin-bottom:22px; }

.dmc-ft__col ul li a{ display:inline-block; font-size:15px; color:#A2B2DA; padding:8px 0; transition:color .3s,padding-left .3s; }

.dmc-ft__col ul li a:hover{ color:var(--sky-300); padding-left:8px; }

.dmc-ft__contact-item{ display:flex; align-items:flex-start; gap:14px; padding:10px 0; font-size:15px; color:#A2B2DA; line-height:1.6; }

.dmc-ft__contact-item svg{ flex:none; margin-top:4px; color:var(--sky-500); }

.dmc-ft__contact-item a{ color:var(--sky-300); transition:color .3s; }

.dmc-ft__contact-item a:hover{ color:#fff; }

.dmc-ft .dmc-ft__btn{
  display:inline-flex; align-items:center; gap:11px; margin-top:20px;
  font-family:var(--font-d); font-size:14px; font-weight:600;
  letter-spacing:.02em;
  background:var(--sky-500); color:var(--n-950);
  padding:15px 28px; border-radius:999px;
  transition:background .3s,transform .3s,box-shadow .3s;
}

.dmc-ft__btn svg{ flex:none; transition:transform .3s; }

.dmc-ft__btn:hover{ background:var(--sky-400); transform:translateY(-1px); box-shadow:0 14px 30px -12px rgba(113,182,255,.5); }

.dmc-ft__btn:hover svg{ transform:translateX(4px); }

/* Specialties strip (becomes the pillar-page link hub later) */
.dmc-ft__specs{ position:relative; border-top:1px solid var(--line); }

.dmc-ft__specs-inner{ max-width:1400px; margin:0 auto; padding:34px 48px 38px; }

.dmc-ft__specs-inner .dmc-ft__head{ margin-bottom:18px; }

.dmc-ft__specs-list{ display:flex; flex-wrap:wrap; gap:10px; }

.dmc-ft__specs-list li span, .dmc-ft__specs-list li a{
  display:inline-block; font-size:12.5px; font-weight:500; letter-spacing:.03em;
  color:#9FB0DA; border:1px solid var(--line); border-radius:999px; padding:9px 18px;
  transition:color .3s,border-color .3s;
}

.dmc-ft__specs-list li a:hover{ color:var(--sky-300); border-color:var(--line-strong); }

/* Geo SEO block · verbatim from the current footer */
.dmc-ft__geo{ position:relative; border-top:1px solid var(--line); }

.dmc-ft__geo-inner{ max-width:1400px; margin:0 auto; padding:30px 48px 34px; font-size:12.5px; line-height:1.9; color:rgba(143,160,203,.75); }

.dmc-ft__geo-inner strong{ color:#AEBEE6; font-weight:600; }

/* Giant watermark */
.dmc-ft__wm{ position:relative; overflow:hidden; height:clamp(70px,9vw,130px); pointer-events:none; user-select:none; }

.dmc-ft__wm span{
  position:absolute; left:50%; top:0; transform:translateX(-50%);
  font-family:var(--font-d); font-weight:800; letter-spacing:.08em;
  font-size:clamp(110px,15vw,230px); line-height:1; white-space:nowrap;
  color:transparent; -webkit-text-stroke:1px rgba(113,182,255,.07);
}

/* Bottom bar */
.dmc-ft__bottom{ position:relative; border-top:1px solid var(--line); }

.dmc-ft__bottom-inner{
  max-width:1400px; margin:0 auto; padding:24px 48px 28px;
  display:flex; align-items:center; justify-content:space-between; gap:16px 36px; flex-wrap:wrap;
}

.dmc-ft__copy{ font-size:13px; color:var(--soft-2); }

.dmc-ft__badge img{ height:44px; width:auto; opacity:.92; }

/* ── Footer responsive ── */
@media (max-width:1080px){
  .dmc-ft__inner{ grid-template-columns:1fr 1fr; gap:52px 44px; }
}

@media (max-width:680px){
  .dmc-ft__inner{ grid-template-columns:1fr; gap:44px; padding:64px 24px 44px; text-align:center; }
  .dmc-ft__brand img{ margin-left:auto; margin-right:auto; }
  .dmc-ft__brand p{ margin-left:auto; margin-right:auto; }
  .dmc-ft__contact-item{ justify-content:center; text-align:left; }
  .dmc-ft__specs-inner{ padding:30px 24px 34px; text-align:center; }
  .dmc-ft__specs-list{ justify-content:center; }
  .dmc-ft__geo-inner{ padding:26px 24px 30px; text-align:center; }
  .dmc-ft__bottom-inner{ flex-direction:column; text-align:center; padding:22px 24px 26px; }
}

/* ═══════════════════════════════════════════════════════════════════════════
   RESPONSIVE · everything centres at <=768px
   ═══════════════════════════════════════════════════════════════════════════ */
@media (max-width:1240px){
  .dmc-stats__card{ padding:48px 44px 42px; }
  .dmc-stat{ padding:0 26px; }
  .dmc-hero__inner{ grid-template-columns:minmax(0,1fr) 470px; }
}

@media (max-width:1080px){
  .dmc-hero__inner{ grid-template-columns:1fr; gap:56px; padding-top:clamp(56px,7vw,88px); padding-bottom:clamp(104px,12vw,150px); }
  .dmc-hero__form{ width:100%; max-width:560px; margin:0 auto; }
  .dmc-stats__card{ grid-template-columns:repeat(2,1fr); row-gap:44px; }
  .dmc-stat:nth-child(3){ border-left:none; padding-left:0; }
  .dmc-intro__grid{ grid-template-columns:1fr; gap:44px; }
  .dmc-serv-row{ grid-template-columns:1fr; gap:44px; }
  .dmc-serv-row--flip .dmc-serv-row__media{ order:0; }
  .dmc-serv-row--flip .dmc-serv-row__body{ order:1; }
  .dmc-serv-row__media{ max-width:680px; margin:0 auto; }
  .dmc-serve__art{ width:clamp(190px,24vw,280px); }
  .dmc-serve__grid{ grid-template-columns:repeat(2,1fr); }
  .dmc-consult__grid{ grid-template-columns:1fr; gap:44px; }
}

@media (max-width:900px){
  .dmc-serve__grid{ gap:20px; }
  .dmc-serve__art{ display:none; }
}

@media (max-width:768px){
  .dmc-container{ padding:0 24px; }
  .dmc-btn{ white-space:normal; line-height:1.45; }
  .dmc-hero{ padding:0; }
  .dmc-hero__inner{ padding:56px 26px 64px; }
  .dmc-hero__content{ text-align:center; }
  .dmc-hero .dmc-eyebrow{ justify-content:center; }
  .dmc-hero__lead{ margin-left:auto; margin-right:auto; }
  .dmc-hero__cta{ justify-content:center; }
  .dmc-hero__cta .dmc-btn{ width:100%; justify-content:center; }
  .dmc-hero__trust{ justify-content:center; }
  .dmc-hero .dmc-form-card{ padding:24px 18px; }
  .dmc-stats{ padding:0 20px; }
  .dmc-stats__card{ grid-template-columns:1fr; margin-top:-54px; padding:14px 30px; row-gap:0; }
  .dmc-stat{ border-left:none; padding:26px 0; border-top:1px solid var(--line); text-align:center; }
  .dmc-stat:first-child{ border-top:none; }
  .dmc-stat__num{ justify-content:center; }
  .dmc-stat__src{ justify-content:center; }
  .dmc-stats__note{ text-align:center; }
  .dmc-intro__head, .dmc-intro__copy{ text-align:center; }
  .dmc-intro__head .dmc-eyebrow{ justify-content:center; }
  .dmc-intro__wm{ right:-32%; opacity:.04; }
  .dmc-serv__head{ text-align:center; }
  .dmc-serv-row__body{ text-align:center; }
  .dmc-serv-row__body .dmc-checks{ max-width:460px; margin-left:auto; margin-right:auto; text-align:left; }
  .dmc-serv-note{ text-align:left; }
  .dmc-serve__top{ justify-content:center; }
  .dmc-serve__intro{ text-align:center; max-width:none; }
  .dmc-serve__intro .dmc-eyebrow{ justify-content:center; }
  .dmc-serve__lead{ margin-left:auto; margin-right:auto; text-align:center; }
  .dmc-serve__cta{ justify-content:center; }
  .dmc-serve__grid{ grid-template-columns:1fr; }
  .dmc-spec-card__body{ text-align:center; }
  .dmc-spec-card__body .dmc-arrow-link{ justify-content:center; }
  .dmc-consult{ padding:64px 14px 72px; }
  .dmc-consult__panel{ padding:44px 20px 40px; }
  .dmc-consult__info{ text-align:center; }
  .dmc-consult__info .dmc-eyebrow{ justify-content:center; }
  .dmc-consult__contact{ align-items:center; }
  .dmc-consult__assure{ justify-content:center; }
  .dmc-form__row{ grid-template-columns:1fr; }
}

@media (max-width:520px){
  .dmc-container{ padding:0 20px; }
  .dmc-hero .dmc-h1{ letter-spacing:.03em; }
  .dmc-form-card{ padding:26px 18px; }
  .dmc-stats__card{ padding:10px 24px; }
}

/* ═══════════════════════════════════════════
   REDUCED MOTION
═══════════════════════════════════════════ */
@media (prefers-reduced-motion:reduce){
  .dmc-page *, .dmc-page *::before, .dmc-page *::after,
  .dmc-hd *, .dmc-hd *::before, .dmc-hd *::after,
  .dmc-ft *, .dmc-ft *::before, .dmc-ft *::after{
    animation-duration:.01ms !important;
    animation-iteration-count:1 !important;
    transition-duration:.01ms !important;
  }
  .dmc-reveal{ opacity:1; transform:none; }
  .dmc-hero__content > *, .dmc-hero__form{ opacity:1; transform:none; animation:none; }
}

/* ── Pillar link strip, additive. Gives every service pillar a homepage link
   without another image grid. New classes, so nothing existing is touched. ── */
.dmc-pillars{ margin-top:clamp(44px,5vw,72px); }

.dmc-pillars__head{ font-family:var(--font-d); font-weight:600; font-size:15px;
  color:#fff; margin:0 0 18px; }

.dmc-pillars__list{ display:flex; flex-wrap:wrap; gap:10px 12px; list-style:none;
  padding:0; margin:0; }

.dmc-pillars__list a{ display:inline-flex; align-items:center; gap:8px;
  padding:10px 16px; border-radius:999px; text-decoration:none;
  border:1px solid var(--line); background:rgba(16,42,120,.42);
  font-family:var(--font-b); font-size:13.5px; font-weight:600; color:var(--soft);
  transition:border-color .2s ease, color .2s ease, transform .2s ease; }

.dmc-pillars__list a:hover{ border-color:var(--line-strong); color:#fff;
  transform:translateY(-2px); }

@media (max-width:600px){ .dmc-pillars__list a{ font-size:12.5px; padding:9px 13px; } }

/* ═══ PILLAR PAGE · ORAL & MAXILLOFACIAL SURGERY ═══ */
.dmc-page--pillar .dmc-h1{ font-size:clamp(1.85rem,2.9vw,3.05rem); }

.dmc-crumbs{ display:flex; flex-wrap:wrap; align-items:center; gap:10px; font-size:13.5px; color:var(--soft-2); margin-bottom:22px; }

.dmc-crumbs a{ color:var(--sky-400); transition:color .3s; }

.dmc-crumbs a:hover{ color:#fff; }

.dmc-crumbs svg{ opacity:.55; flex:none; }

.dmc-hero--pillar .dmc-hero__inner{
  grid-template-columns:minmax(0,1.05fr) minmax(0,.95fr);
  padding-bottom:clamp(76px,8vw,120px);   /* no stats band straddling on pillar pages */
}

.dmc-phero-art{ width:100%; max-width:560px; justify-self:center; opacity:0; transform:translateY(26px); animation:dmcRise 1s cubic-bezier(.2,.65,.3,1) .45s forwards; }

.dmc-phero-art > img{ width:100%; height:auto; }

.dmc-sec-head{ max-width:900px; margin:0 auto clamp(52px,6vw,80px); text-align:center; }

.dmc-sec-head .dmc-h2{ margin:0 0 18px; }

.dmc-sec-head p{ font-size:16px; line-height:1.8; }

.dmc-proc-sec{ padding:clamp(96px,10vw,150px) 0; }

.dmc-proc-grid{ display:grid; grid-template-columns:repeat(3,1fr); gap:24px; }

.dmc-proc-grid > *, .dmc-sys-grid > *, .dmc-ref__grid > *{ min-width:0; }

.dmc-proc{ background:#fff; border:1px solid #E1EAF7; border-radius:var(--rad); padding:34px 32px 32px; transition:transform .4s cubic-bezier(.2,.7,.3,1),border-color .4s,box-shadow .4s; }

.dmc-proc:hover{ transform:translateY(-5px); border-color:rgba(34,115,206,.35); box-shadow:0 30px 60px -30px rgba(7,18,51,.25); }

.dmc-proc__ico{ width:56px; height:56px; border-radius:16px; background:rgba(113,182,255,.15); color:var(--sky-600); display:flex; align-items:center; justify-content:center; margin-bottom:20px; flex:none; }

.dmc-proc__ico svg{ display:block; }

.dmc-proc h3{ font-family:var(--font-d); font-weight:600; font-size:1.1rem; line-height:1.35; color:var(--ink); margin-bottom:12px; }

.dmc-proc p{ font-size:14.5px; line-height:1.75; color:var(--ink-soft); }

.dmc-sys-sec{ padding:clamp(96px,10vw,150px) 0; background:var(--n-900); }

.dmc-sys-grid{ display:grid; grid-template-columns:repeat(4,1fr); gap:22px; }

.dmc-sys{ position:relative; display:flex; flex-direction:column; background:linear-gradient(180deg,rgba(16,42,120,.5) 0%,rgba(8,32,104,.22) 100%); border:1px solid var(--line); border-radius:var(--rad); padding:30px 28px; overflow:hidden; transition:transform .45s cubic-bezier(.2,.7,.3,1),border-color .45s; }

.dmc-sys::after{ content:''; position:absolute; left:0; right:0; top:0; height:3px; background:var(--grad-rise); opacity:0; transform:scaleX(.3); transform-origin:left; transition:opacity .45s,transform .55s cubic-bezier(.2,.7,.3,1); }

.dmc-sys:hover{ transform:translateY(-6px); border-color:var(--line-strong); }

.dmc-sys:hover::after{ opacity:1; transform:scaleX(1); }

.dmc-sys__num{ font-family:var(--font-d); font-weight:300; font-size:3.2rem; line-height:1; color:transparent; -webkit-text-stroke:1px rgba(168,208,255,.34); margin-bottom:20px; }

.dmc-sys h3{ font-family:var(--font-d); font-weight:600; font-size:1.06rem; line-height:1.4; color:#fff; margin-bottom:12px; }

.dmc-sys p{ font-size:14px; line-height:1.75; color:var(--soft-2); margin-bottom:20px; }

.dmc-sys .dmc-arrow-link{ margin-top:auto; font-size:14px; }

.dmc-ref{ padding:clamp(96px,10vw,150px) 0; }

.dmc-ref__grid{ display:grid; grid-template-columns:minmax(0,6fr) minmax(0,5fr); gap:clamp(48px,6vw,96px); align-items:start; }

.dmc-ref__copy .dmc-h2{ margin:0 0 24px; }

.dmc-ref__copy p{ font-size:16px; line-height:1.85; color:var(--ink-soft); margin-bottom:20px; }

.dmc-ref__copy p strong{ color:var(--ink); }

.dmc-ref__side .dmc-checks{ margin-bottom:28px; }

.dmc-faq-sec{ padding:clamp(96px,10vw,150px) 0; }

.dmc-faq{ max-width:920px; margin:0 auto; }

.dmc-faq__item{ border-top:1px solid var(--line-light); padding:30px 6px; }

.dmc-faq__item:last-child{ border-bottom:1px solid var(--line-light); }

.dmc-faq__item h3{ font-family:var(--font-d); font-weight:600; font-size:1.08rem; color:var(--ink); margin-bottom:12px; line-height:1.4; }

.dmc-faq__item p{ font-size:15px; line-height:1.8; color:var(--ink-soft); }

.dmc-faq__item p a{ color:var(--sky-600); text-decoration:underline; text-underline-offset:3px; }

@media (max-width:1080px){
  .dmc-proc-grid{ grid-template-columns:repeat(2,1fr); }
  .dmc-sys-grid{ grid-template-columns:repeat(2,1fr); }
  .dmc-ref__grid{ grid-template-columns:1fr; gap:44px; }
  .dmc-phero-art{ max-width:480px; margin:0 auto; }
}

@media (max-width:768px){
  .dmc-proc-grid{ grid-template-columns:1fr; }
  .dmc-sys-grid{ grid-template-columns:1fr; }
  .dmc-proc, .dmc-sys{ text-align:center; }
  .dmc-proc__ico{ margin-left:auto; margin-right:auto; }
  .dmc-sys .dmc-arrow-link{ justify-content:center; }
  .dmc-crumbs{ justify-content:center; }
  .dmc-ref__copy{ text-align:center; }
  .dmc-ref__copy .dmc-eyebrow{ justify-content:center; }
  .dmc-ref__side .dmc-checks{ text-align:left; }
}

/* ═══ GROWTH PLATFORM · live dashboard ═══ */
.dmc-plat{ padding:clamp(96px,10vw,150px) 0; }

.dmc-plat__grid{ display:grid; grid-template-columns:minmax(0,5fr) minmax(0,6fr); gap:clamp(48px,6vw,90px); align-items:center; }

.dmc-plat__grid > *{ min-width:0; }

.dmc-plat__copy .dmc-h2{ margin:0 0 22px; }

.dmc-plat__copy p{ font-size:16px; line-height:1.85; color:var(--ink-soft); margin-bottom:24px; }

.dmc-plat__copy p strong{ color:var(--ink); }

.dmc-plat__copy .dmc-checks{ margin-bottom:26px; }

.dmc-dash-wrap{ perspective:1600px; }

.dmc-dash{ background:#fff; border:1px solid #E1EAF7; border-radius:22px; box-shadow:0 60px 110px -48px rgba(7,18,51,.4); transform:rotateY(-9deg) rotateX(4deg); transition:transform .9s cubic-bezier(.2,.7,.3,1); overflow:hidden; }

.dmc-dash-wrap:hover .dmc-dash{ transform:rotateY(-3deg) rotateX(1deg); }

.dmc-dash__bar{ display:flex; align-items:center; gap:12px; padding:13px 18px; background:#F4F8FE; border-bottom:1px solid #E4EDF9; }

.dmc-dash__dots{ display:flex; gap:6px; }

.dmc-dash__dots i{ width:9px; height:9px; border-radius:50%; background:#D6E2F3; }

.dmc-dash__url{ font-size:11.5px; font-weight:600; color:#7C8CB0; background:#fff; border:1px solid #E4EDF9; border-radius:999px; padding:5px 15px; }

.dmc-dash__body{ padding:22px 22px 18px; }

.dmc-dash__head{ display:flex; justify-content:space-between; align-items:baseline; gap:10px; font-size:12px; color:#7C8CB0; margin-bottom:16px; }

.dmc-dash__head strong{ color:var(--ink); font-weight:600; font-size:13px; }

.dmc-kpis{ display:grid; grid-template-columns:repeat(3,1fr); gap:12px; margin-bottom:12px; }

.dmc-kpi{ background:#F7FAFE; border:1px solid #E4EDF9; border-radius:14px; padding:14px 14px 12px; min-width:0; }

.dmc-kpi b{ display:block; font-family:var(--font-d); font-weight:600; font-size:1.45rem; color:var(--ink); line-height:1.1; }

.dmc-kpi span{ display:block; margin-top:5px; font-size:11px; color:#7C8CB0; line-height:1.4; }

.dmc-dash__row{ display:grid; grid-template-columns:1fr 1fr; gap:12px; }

.dmc-dash__row > *{ min-width:0; }

.dmc-ring-card{ display:flex; align-items:center; gap:13px; background:#F7FAFE; border:1px solid #E4EDF9; border-radius:14px; padding:13px; }

.dmc-ring{ position:relative; width:72px; height:72px; flex:none; }

.dmc-ring svg{ display:block; transform:rotate(-90deg); }

.dmc-ring circle{ fill:none; stroke-width:7; }

.dmc-ring .bg{ stroke:#E4EDF9; }

.dmc-ring .fg{ stroke:#2273CE; stroke-linecap:round; stroke-dasharray:204; stroke-dashoffset:204; transition:stroke-dashoffset 1.7s cubic-bezier(.2,.65,.3,1) .35s; }

.dmc-ring .fg--b{ stroke:#71B6FF; }

.dmc-reveal.is-in .dmc-ring .fg--a{ stroke-dashoffset:37; }

.dmc-reveal.is-in .dmc-ring .fg--b{ stroke-dashoffset:11; }

.dmc-ring b{ position:absolute; inset:0; display:flex; align-items:center; justify-content:center; font-family:var(--font-d); font-weight:600; font-size:.92rem; color:var(--ink); }

.dmc-ring-card > span{ font-size:11.5px; line-height:1.5; color:#7C8CB0; }

.dmc-bar-card{ background:#F7FAFE; border:1px solid #E4EDF9; border-radius:14px; padding:13px; display:flex; flex-direction:column; }

.dmc-bar-card > span{ font-size:11.5px; line-height:1.4; color:#7C8CB0; margin-bottom:10px; }

.dmc-bars{ display:flex; align-items:flex-end; gap:5px; height:64px; flex:1; }

.dmc-bars i{ flex:1; border-radius:4px 4px 2px 2px; background:linear-gradient(180deg,#71B6FF,#2273CE); transform:scaleY(.08); transform-origin:bottom; transition:transform .9s cubic-bezier(.2,.65,.3,1); }

.dmc-reveal.is-in .dmc-bars i:nth-child(1){ transition-delay:.15s; }

.dmc-reveal.is-in .dmc-bars i:nth-child(2){ transition-delay:.21s; }

.dmc-reveal.is-in .dmc-bars i:nth-child(3){ transition-delay:.27s; }

.dmc-reveal.is-in .dmc-bars i:nth-child(4){ transition-delay:.33s; }

.dmc-reveal.is-in .dmc-bars i:nth-child(5){ transition-delay:.39s; }

.dmc-reveal.is-in .dmc-bars i:nth-child(6){ transition-delay:.45s; }

.dmc-reveal.is-in .dmc-bars i:nth-child(7){ transition-delay:.51s; }

.dmc-reveal.is-in .dmc-bars i:nth-child(8){ transition-delay:.57s; }

.dmc-reveal.is-in .dmc-bars i:nth-child(9){ transition-delay:.63s; }

.dmc-reveal.is-in .dmc-bars i:nth-child(10){ transition-delay:.69s; }

.dmc-reveal.is-in .dmc-bars i:nth-child(11){ transition-delay:.75s; }

.dmc-reveal.is-in .dmc-bars i:nth-child(12){ transition-delay:.81s; }

.dmc-reveal.is-in .dmc-bars i{ transform:none; }

.dmc-plat__note{ margin-top:14px; font-size:11px; line-height:1.6; color:#9AA8C6; }

/* ═══ WHY DMC · leader statement + ecosystem wheel ═══ */
.dmc-lead-sec{ position:relative; padding:clamp(100px,11vw,165px) 0; background:var(--n-900); overflow:hidden; }

.dmc-lead-sec__lines{ position:absolute; inset:0; width:100%; height:100%; pointer-events:none; }

.dmc-lead-sec .dmc-statement{ position:relative; font-family:var(--font-d); font-weight:300; line-height:1.2; color:#fff; font-size:clamp(1.8rem,3.4vw,3.3rem); text-align:center; max-width:1020px; margin:0 auto clamp(70px,8vw,110px); padding:0 24px; }

.dmc-lead-sec .dmc-statement .dmc-em{ font-weight:500; }

.dmc-lead__grid{ position:relative; display:grid; grid-template-columns:minmax(0,1fr) minmax(0,1fr); gap:clamp(48px,6vw,96px); align-items:center; }

.dmc-lead__grid > *{ min-width:0; }

.dmc-lead__copy .dmc-h2{ margin:0 0 22px; }

.dmc-lead__copy .dmc-lead{ margin-bottom:20px; }

.dmc-lead__copy .dmc-arrow-link{ margin-top:6px; }

.dmc-wheel{ position:relative; width:min(520px,100%); aspect-ratio:1/1; margin:20px auto 44px; }

.dmc-wheel__rings{ position:absolute; inset:0; width:100%; height:100%; overflow:visible; }

.dmc-wheel__spin{ transform-box:fill-box; transform-origin:center; animation:dmcSpin 110s linear infinite; }

@keyframes dmcSpin{ to{ transform:rotate(360deg); } }

.dmc-wheel__core{ position:absolute; left:50%; top:50%; transform:translate(-50%,-50%); width:31%; height:31%; border-radius:50%; display:flex; align-items:center; justify-content:center; background:radial-gradient(circle at 34% 30%, #12307E 0%, #071C5E 58%, #041447 100%); border:1px solid var(--line-strong); box-shadow:0 0 0 12px rgba(113,182,255,.05), 0 0 70px rgba(113,182,255,.2); }

.dmc-page .dmc-wheel__core img{ width:44%; height:auto; }

/* Node = dot + label, centred on its orbit point. Class-only selectors so
   nothing in the base reset can out-specify the flex centring. */
.dmc-node{ position:absolute; width:112px; transform:translate(-50%,-50%); text-align:center; }

.dmc-node__dot{ display:flex; align-items:center; justify-content:center; width:54px; height:54px; margin:0 auto 10px; border-radius:17px; background:linear-gradient(180deg,rgba(18,46,128,.95),rgba(6,24,84,.96)); border:1px solid var(--line-strong); color:var(--sky-400); box-shadow:0 16px 34px -14px rgba(0,4,20,.85); }

.dmc-node__dot svg{ display:block; }

.dmc-node__label{ display:block; font-size:11.5px; font-weight:600; line-height:1.35; color:var(--soft-2); }

.dmc-node--1{ left:50%;   top:10%; }

.dmc-node--2{ left:78.3%; top:21.7%; }

.dmc-node--3{ left:90%;   top:50%; }

.dmc-node--4{ left:78.3%; top:78.3%; }

.dmc-node--5{ left:50%;   top:90%; }

.dmc-node--6{ left:21.7%; top:78.3%; }

.dmc-node--7{ left:10%;   top:50%; }

.dmc-node--8{ left:21.7%; top:21.7%; }

.dmc-wheel__cap{ text-align:center; font-size:13px; line-height:1.6; color:var(--soft-2); margin-top:-14px; }

.dmc-wgrid{ display:none; grid-template-columns:1fr 1fr; gap:12px; list-style:none; padding:0; margin:0 0 22px; }

.dmc-wgrid li{ display:flex; align-items:center; gap:12px; background:linear-gradient(180deg,rgba(16,42,120,.5),rgba(8,32,104,.22)); border:1px solid var(--line); border-radius:16px; padding:14px 16px; font-size:12.5px; font-weight:600; line-height:1.35; color:var(--soft); min-width:0; }

.dmc-wgrid svg{ flex:none; color:var(--sky-400); }

@media (max-width:1080px){
  /* Pillar hero stacking lives HERE, in the last block of the stylesheet.
     .dmc-hero--pillar .dmc-hero__inner is two classes, same as its base rule
     below the homepage breakpoints, and media queries add no specificity,
     so an override placed earlier in the file would silently lose. */
  .dmc-hero--pillar .dmc-hero__inner{ grid-template-columns:1fr; gap:52px; padding-bottom:clamp(72px,9vw,110px); }
  .dmc-phero-art{ max-width:460px; margin:0 auto; }
  .dmc-plat__grid{ grid-template-columns:1fr; gap:48px; }
  .dmc-dash-wrap{ max-width:640px; margin:0 auto; width:100%; }
  .dmc-lead__grid{ grid-template-columns:1fr; gap:52px; }
}

@media (max-width:768px){
  .dmc-hero--pillar .dmc-hero__inner{ grid-template-columns:1fr; padding:48px 24px 60px; gap:40px; }
  .dmc-phero-art{ max-width:340px; }
  .dmc-crumbs{ font-size:12.5px; }
  .dmc-lead-sec .dmc-statement{ margin-bottom:56px; }
  .dmc-plat__copy{ text-align:center; }
  .dmc-plat__copy .dmc-eyebrow{ justify-content:center; }
  .dmc-plat__copy .dmc-checks{ text-align:left; }
  .dmc-dash{ transform:none; }
  .dmc-lead__copy{ text-align:center; }
  .dmc-lead__copy .dmc-eyebrow{ justify-content:center; }
}

/* Below 900px the orbit gets too tight for legible labels: swap to chips. */
@media (max-width:900px){
  .dmc-wheel, .dmc-wheel__cap{ display:none; }
  .dmc-wgrid{ display:grid; }
}

@media (max-width:640px){
  .dmc-kpis{ gap:9px; }
  .dmc-kpi{ padding:12px 10px 10px; }
  .dmc-kpi b{ font-size:1.15rem; }
  .dmc-kpi span{ font-size:10.5px; }
  .dmc-dash__row{ grid-template-columns:1fr; }
  .dmc-dash__bar{ padding:11px 13px; }
  .dmc-dash__url{ font-size:10.5px; padding:5px 11px; overflow:hidden; text-overflow:ellipsis; white-space:nowrap; }
  .dmc-dash__body{ padding:16px 14px 14px; }
  .dmc-dash__head{ flex-direction:column; gap:4px; }
  .dmc-ring-card{ padding:12px; gap:11px; }
  .dmc-wgrid{ grid-template-columns:1fr; }
  .dmc-lead-sec .dmc-statement{ padding:0 4px; }
}

/* ── Consultation modal ───────────────────────────────────────────────────────
   THE BUTTON RENDERED RED IN PRODUCTION. `.dmc-btn--primary` is defined as
   `.dmc-page .dmc-btn--primary`, and this modal is injected at body level,
   OUTSIDE `.dmc-page`, so none of those rules applied and the theme's own link
   colour won. Every rule here that styles a control is therefore scoped to
   `.dmc-modal` and stated in full rather than inherited. */
.dmc-modal{position:fixed;inset:0;z-index:99999;display:flex;align-items:center;
  justify-content:center;padding:20px;
  font-family:'Plus Jakarta Sans',system-ui,sans-serif;}
.dmc-modal[hidden]{display:none;}
.dmc-modal__scrim{position:absolute;inset:0;background:rgba(0,10,51,.78);
  backdrop-filter:blur(4px);}

/* The panel echoes the lead form card on the homepage: white, navy type, a sky
   blue action. A dark panel was considered and rejected, the site already
   establishes white as the colour of "a form you fill in". */
.dmc-modal__panel{position:relative;z-index:1;background:#fff;border-radius:22px;
  width:100%;max-width:540px;max-height:calc(100vh - 40px);overflow-y:auto;
  padding:40px 38px 32px;
  box-shadow:0 40px 90px rgba(0,10,51,.5);
  border-top:4px solid #71B6FF;}
.dmc-modal__x{position:absolute;top:14px;right:16px;width:38px;height:38px;
  border:0;background:transparent;font-size:26px;line-height:1;cursor:pointer;
  color:#8494AD;border-radius:50%;transition:background .2s ease,color .2s ease;}
.dmc-modal__x:hover{background:#EEF4FD;color:#00155D;}
.dmc-modal__eyebrow{display:flex;align-items:center;gap:9px;margin:0 0 12px;
  font-size:14px;font-style:italic;color:#2273CE;}
.dmc-modal__icon{flex:0 0 auto;}
.dmc-modal__title{margin:0 0 10px;font-family:Montserrat,system-ui,sans-serif;
  font-weight:700;font-size:clamp(1.55rem,3vw,2rem);line-height:1.14;color:#00155D;}
.dmc-modal__lead{margin:0 0 24px;font-size:15px;line-height:1.65;color:#45557E;}

/* controls, fully stated because nothing cascades in here */
.dmc-modal .dmc-field{margin-bottom:14px;}
.dmc-modal .dmc-flabel{display:block;margin:0 0 6px;font-size:13px;font-weight:600;
  color:#071233;}
.dmc-modal .dmc-input{width:100%;box-sizing:border-box;padding:13px 15px;
  font-family:inherit;font-size:15px;color:#071233;background:#F7FAFF;
  border:1px solid #D8E3F5;border-radius:12px;outline:none;
  transition:border-color .2s ease,box-shadow .2s ease,background .2s ease;}
.dmc-modal .dmc-input:focus{border-color:#71B6FF;background:#fff;
  box-shadow:0 0 0 4px rgba(113,182,255,.22);}
.dmc-modal .dmc-field.has-error .dmc-input{border-color:#D9646C;background:#FEF7F7;}
.dmc-modal .dmc-error-msg{display:none;margin:6px 0 0;font-size:12.5px;color:#C2545C;}
.dmc-modal .dmc-field.has-error .dmc-error-msg{display:block;}

.dmc-modal .dmc-form__submit{width:100%;margin-top:6px;
  display:inline-flex;align-items:center;justify-content:center;gap:10px;
  padding:16px 24px;border:0;border-radius:999px;cursor:pointer;
  font-family:Montserrat,system-ui,sans-serif;font-weight:600;font-size:15px;
  color:#00155D;background:#71B6FF;
  box-shadow:0 16px 34px -14px rgba(113,182,255,.75);
  transition:background .2s ease,transform .2s ease,box-shadow .2s ease;}
.dmc-modal .dmc-form__submit:hover{background:#A8D0FF;transform:translateY(-2px);}
.dmc-modal .dmc-form__submit:disabled{opacity:.6;cursor:default;transform:none;}
.dmc-modal .dmc-submit-label{color:inherit;}

.dmc-modal .dmc-form__status{margin-top:12px;font-size:13.5px;line-height:1.55;
  color:#45557E;}
.dmc-modal .dmc-form__status.is-error{color:#C2545C;}
.dmc-modal .dmc-form__fineprint{margin:14px 0 0;font-size:12.5px;line-height:1.55;
  color:#8494AD;text-align:center;}

@media (max-width:520px){
  .dmc-modal{padding:12px;}
  .dmc-modal__panel{padding:32px 22px 24px;border-radius:16px;}
}
body.dmc-modal-open{overflow:hidden;}

/* ── Referral network graphic ──────────────────────────────────────────────
   Used in the dmc-ref__side column. Pure SVG + CSS, no JS, no dependencies.
   Scales on its viewBox so it is responsive by construction. Motion is
   decorative only and is disabled under prefers-reduced-motion. */
.dmc-refnet{position:relative;width:min(560px,100%);margin:0 auto 26px;}
.dmc-refnet__svg{display:block;width:100%;height:auto;overflow:visible;}

/* faint base spokes */
.dmc-refnet__spoke{stroke:rgba(113,182,255,.22);stroke-width:1.2;}
/* the flowing pulse that travels inward along each spoke */
.dmc-refnet__flow{
  stroke:#71B6FF;stroke-width:1.8;stroke-linecap:round;
  stroke-dasharray:14 132;stroke-dashoffset:146;
  animation:dmcFlow 3.4s linear infinite;
}
.dmc-refnet__ring{fill:none;stroke:rgba(113,182,255,.14);stroke-width:1;}
.dmc-refnet__ring--slow{
  stroke-dasharray:3 9;transform-origin:160px 160px;
  animation:dmcRingSpin 90s linear infinite;
}

/* outer office nodes */
.dmc-refnet__node{fill:#0A2160;stroke:#71B6FF;stroke-width:1.6;}
.dmc-refnet__node--quiet{stroke:rgba(113,182,255,.34);}
.dmc-refnet__node--won{
  fill:#71B6FF;stroke:#BFE0FF;stroke-width:2;
  animation:dmcWon 3.4s ease-in-out infinite;
}
.dmc-refnet__dot{fill:#71B6FF;}
.dmc-refnet__dot--quiet{fill:rgba(113,182,255,.38);}
.dmc-refnet__dot--won{fill:#00155D;}

/* centre: the practice */
.dmc-refnet__core{fill:url(#dmcRefCore);stroke:rgba(113,182,255,.5);stroke-width:1.4;}
.dmc-refnet__halo{fill:none;stroke:#71B6FF;stroke-width:1.4;opacity:0;
  transform-origin:160px 160px;animation:dmcHalo 3.4s ease-out infinite;}
.dmc-refnet__corelabel{fill:#fff;font:600 12px/1 Montserrat,system-ui,sans-serif;
  text-anchor:middle;letter-spacing:.02em;}

@keyframes dmcFlow{to{stroke-dashoffset:0;}}
@keyframes dmcWon{0%,100%{opacity:1;}50%{opacity:.72;}}
@keyframes dmcHalo{0%{transform:scale(.72);opacity:.55;}70%{opacity:0;}100%{transform:scale(1.25);opacity:0;}}
@keyframes dmcRingSpin{to{transform:rotate(360deg);}}

/* legend */
.dmc-refnet__key{
  display:flex;flex-wrap:wrap;gap:10px 20px;justify-content:center;
  margin-top:4px;font-size:12.5px;color:var(--soft-2,#8FA3C8);
}
.dmc-refnet__key span{display:inline-flex;align-items:center;gap:7px;}
.dmc-refnet__key i{width:9px;height:9px;border-radius:50%;flex:0 0 auto;}
.dmc-refnet__key i.is-active{background:#71B6FF;}
.dmc-refnet__key i.is-quiet{background:transparent;border:1.5px solid rgba(113,182,255,.4);}
.dmc-refnet__key i.is-won{background:#71B6FF;box-shadow:0 0 0 3px rgba(113,182,255,.25);}

@media (max-width:600px){
  .dmc-refnet{width:min(340px,100%);}
  .dmc-refnet__key{font-size:11.5px;gap:8px 14px;}
}
@media (prefers-reduced-motion:reduce){
  .dmc-refnet__flow,.dmc-refnet__won,.dmc-refnet__halo,
  .dmc-refnet__ring--slow,.dmc-refnet__node--won{animation:none;}
  .dmc-refnet__flow{stroke-dashoffset:0;stroke-dasharray:none;opacity:.5;}
}

/* ── Anatomy of a converting dental page ───────────────────────────────────
   Used in the dmc-ref__side column of the dental-website-design page. Pure
   SVG + CSS, no JS. A scan travels down a wireframe and each converting
   element lights as it is reached. Labels states, never quantities. Motion is
   decorative and is disabled under prefers-reduced-motion. */
.dmc-anat{position:relative;width:min(560px,100%);margin:0 auto 26px;}
.dmc-anat__svg{display:block;width:100%;height:auto;overflow:visible;}

.dmc-anat__frame{fill:url(#dmcAnatBg);stroke:rgba(113,182,255,.45);stroke-width:1.4;}
.dmc-anat__chrome{fill:rgba(113,182,255,.10);}
.dmc-anat__dot{fill:rgba(113,182,255,.45);}

/* inert page furniture */
.dmc-anat__line{fill:rgba(113,182,255,.20);}
.dmc-anat__block{fill:rgba(113,182,255,.07);stroke:rgba(113,182,255,.16);stroke-width:1;}

/* the elements that actually convert */
/* The rest state must already read as "this one converts", because the page is
   screenshotted, printed and viewed under prefers-reduced-motion. The animation
   sharpens an existing contrast, it does not create it. */
.dmc-anat__hot{
  fill:rgba(113,182,255,.17);stroke:#71B6FF;stroke-width:1.5;stroke-opacity:.62;
  animation:dmcAnatHot 5s ease-in-out infinite;animation-delay:var(--ad,0s);
}
.dmc-anat__pill{fill:rgba(113,182,255,.34);}
.dmc-anat__star{fill:#71B6FF;opacity:.65;}

/* the travelling scan */
.dmc-anat__scan{fill:url(#dmcAnatScan);animation:dmcAnatScan 5s ease-in-out infinite;}

/* right-hand annotations */
.dmc-anat__lead{stroke:rgba(0,21,93,.22);stroke-width:1;stroke-dasharray:2 3;}
.dmc-anat__badge{fill:#00155D;}
.dmc-anat__num{fill:#fff;font:600 9px/1 Montserrat,system-ui,sans-serif;text-anchor:middle;}
.dmc-anat__label{fill:#00155D;font:600 11.5px/1 'Plus Jakarta Sans',system-ui,sans-serif;}

@keyframes dmcAnatHot{
  0%,100%{fill:rgba(113,182,255,.17);stroke-opacity:.62;}
  4%{fill:rgba(113,182,255,.38);stroke-opacity:1;}
  16%{fill:rgba(113,182,255,.17);stroke-opacity:.62;}
}
@keyframes dmcAnatScan{
  0%{transform:translateY(0);opacity:0;}
  4%{opacity:.9;}
  10%{transform:translateY(25px);}
  30%{transform:translateY(88px);}
  50%{transform:translateY(123px);}
  70%{transform:translateY(159px);}
  92%{transform:translateY(233px);opacity:.9;}
  100%{transform:translateY(268px);opacity:0;}
}

.dmc-anat__key{
  display:flex;flex-wrap:wrap;gap:10px 20px;justify-content:center;
  margin-top:4px;font-size:12.5px;color:var(--soft-2,#8FA3C8);
}
.dmc-anat__key span{display:inline-flex;align-items:center;gap:7px;}
.dmc-anat__key i{width:9px;height:9px;border-radius:2px;flex:0 0 auto;
  background:#71B6FF;}
.dmc-anat__key i.is-plain{background:transparent;border:1.5px solid rgba(113,182,255,.4);}

@media (max-width:600px){
  .dmc-anat{width:min(360px,100%);}
  .dmc-anat__key{font-size:11.5px;gap:8px 14px;}
  .dmc-anat__label{font-size:12.5px;}
}
@media (prefers-reduced-motion:reduce){
  .dmc-anat__hot,.dmc-anat__scan{animation:none;}
  .dmc-anat__scan{opacity:0;}
  .dmc-anat__hot{fill:rgba(113,182,255,.28);stroke-opacity:1;}
}

/* ── Hero subheading ───────────────────────────────────────────────────────
   The live dental-website-design page carries a sky italic subheading between
   the H1 and the lead. It was missing from the first rebuild. Sentence case is
   not forced here because the live text is title case and is a ranking asset.
   Never letterspaced, never all caps: that reads as AI generated. */
.dmc-hero__sub{
  margin:-4px 0 16px;font-family:'Plus Jakarta Sans',system-ui,sans-serif;
  font-style:italic;font-weight:700;color:#71B6FF;
  font-size:clamp(1.02rem,1.55vw,1.28rem);line-height:1.34;
}
@media (max-width:768px){
  .dmc-hero__sub{font-size:1.05rem;margin-bottom:14px;}
}

/* A serv-row placed inside a dark section: the component was authored for the
   light homepage band, so the body copy needs the dark palette restated.
   Uses --soft, the same token as .dmc-lead, not the dimmer --soft-2. At 16px
   on navy the dimmer token read as unreadable next to a large mockup. */
.dmc-dark .dmc-serv-row__body p{color:var(--soft,#C2CEEC);}
.dmc-dark .dmc-serv-row__body .dmc-checks li{color:#E6EDFA;}

/* Serv-row body copy carrying a live page's own paragraphs is lead copy, not a
   caption, and must match .dmc-lead exactly (19.44px at 1440, the size used in
   the endodontist "Why DMC" section).

   CASCADE NOTE, this is the trap in this component: the base rule is
   `.dmc-serv-row__body > p` at specificity (0,1,1), which OUTRANKS a bare
   `.dmc-lead` at (0,1,0). Adding class="dmc-lead" to the markup alone does
   nothing. The override has to carry both classes and the element to win at
   (0,2,1). Verified by measuring computed styles, not by eye. */
.dmc-serv-row__body > p.dmc-lead{
  font-size:clamp(1.05rem,1.35vw,1.22rem);line-height:1.8;
}

/* The live pages carry an H3 subheading under the H2 and a paragraph under
   that. Without this the subheading sits flush on the paragraph and stops
   reading as a subheading. Class-only selectors, per the cascade rules. */
.dmc-sec-head .dmc-h3,
.dmc-serv__head .dmc-h3,
.dmc-ref__copy .dmc-h3,
.dmc-lead__copy .dmc-h3{margin-top:14px;margin-bottom:12px;}
.dmc-sec-head p + .dmc-h3{margin-top:18px;}

/* ── Dashboard components, figures removed ────────────────────────────────
   DASH and DASH_SEO displayed invented statistics: 41 keywords in the top
   three, 63% organic share, 4.2x traffic growth, 11.6x return on SEO
   investment, and on the client dashboard 164 inquiries, 96 booked consults,
   81% show rate, 28.8x and 179.9x return on ad spend attributed to an "Oral
   Surgery Client".

   None appears anywhere on the live site, so the caption claiming the figures
   "mirror the client dashboards already published across dentalmarketing.ca"
   was false. The claims policy forbids invented statistics outright, caption or
   no caption. Operator approved removal on 2026-08-07.

   Both panels now show WHICH metrics the report carries. Values are replaced by
   a neutral placeholder, and the rings and bars are levelled so that no shape
   asserts a quantity either. The approved figures on the homepage stats band
   (50%+, 71%, +$60K, one clinic per city) are untouched: those are evidenced. */
.dmc-kpi__blank{
  display:block;width:46px;height:11px;border-radius:6px;
  background:linear-gradient(90deg,rgba(113,182,255,.42),rgba(113,182,255,.16));
  margin-bottom:2px;
}
.dmc-dash .dmc-ring .fg,
.dmc-dash .dmc-ring .fg--a,
.dmc-dash .dmc-ring .fg--b{stroke:rgba(113,182,255,.34);stroke-dasharray:150 54;}
.dmc-dash .dmc-bars{align-items:flex-end;min-height:44px;}
.dmc-dash .dmc-bars i{
  height:38% !important;
  background:linear-gradient(180deg,rgba(113,182,255,.38),rgba(113,182,255,.14));
  border-radius:3px 3px 0 0;
}
@media (prefers-reduced-motion:reduce){
  .dmc-dash .dmc-ring .fg{animation:none;}
}

/* ══ per-page graphic: _hero-hub ══ */
/* ── Hero hub ──────────────────────────────────────────────────────────────
   The per-page hero graphic, second direction. Dean's brief: put the DMC mark
   in the centre like the ecosystem wheel, branch out from it, but structure
   the branches differently and make every branch specific to the avatar of
   that landing page. Less "our services", more "what we will do for you".

   HOW THIS DIFFERS FROM THE ECOSYSTEM WHEEL, deliberately, because both sit
   on the same page and must not read as the same graphic twice:

     ecosystem wheel (section 8)        hero hub (this file)
     ------------------------------     ------------------------------
     what DMC is                        what DMC does for this reader
     square, 1:1                        landscape, matches the hero slot
     8 nodes, rigid 45 degree spokes    6 branches, curved, elliptical orbit
     one service name per node          a claim plus a qualifier per branch
     constant slow rotation             a signal travelling out each branch
     identical on all 26 pages          different words on every page

   NO NUMBERS. ANYWHERE. Same rule as the hero stage. A graphic with invented
   figures is a claim a prospect can challenge. One with none says "this is
   what we do" and asserts nothing that is not already on the page.

   NO ALL-CAPS LETTERSPACED LABELS. House rule.

   EVERY BRANCH MUST BE TRACEABLE TO COPY ALREADY ON THAT PAGE. The graphic is
   not a place to introduce a new promise.

   THE PREFIX IS dmc-hhub. Checked against the generated stylesheet before
   use. `.dmc-hp` is the lead form honeypot (left:-5000px) and a panel using
   that prefix once rendered perfectly alone and was invisible in the page.

   FOUR THINGS THAT ARE REQUIRED, NOT DECORATIVE:
     1. aspect-ratio on the svg. The hero slot is a grid child with
        indeterminate height; an <img> self sizes, an inline <svg> collapses
        to 1px tall.
     2. transform-box:fill-box on anything scaled or rotated, or
        transform-origin resolves against the SVG viewport instead of the
        element and the shape flies off to the top left.
     3. fill:none on every stroke-only class. An SVG path defaults to
        fill:black and an open path is implicitly closed and filled.
     4. The graphic must be complete and legible with every animation frozen.
        Nothing fades in from zero opacity. Motion only adds a travelling
        signal, so a screenshot at t=0 is still the finished graphic. */

.dmc-hhub{width:100%;max-width:566px;margin:0 auto;}
.dmc-hhub__svg{display:block;width:100%;height:auto;aspect-ratio:566/478;overflow:visible;}
.dmc-phero-art > .dmc-hhub{width:100%;}

/* ── ambient depth ── */
.dmc-hhub__amb{fill:url(#hhAmb);}
.dmc-hhub__cast{fill:url(#hhCast);}

/* ── orbit rings. The dashed one rotates, so it must be a circle: rotating
   an ellipse visibly wobbles. The ellipse is only used to place branches. ── */
.dmc-hhub__ring{fill:none;stroke:rgba(113,182,255,.13);stroke-width:1;}
.dmc-hhub__ring--dash{fill:none;stroke:rgba(113,182,255,.24);stroke-width:1.1;
  stroke-dasharray:3 11;transform-box:fill-box;transform-origin:center;
  animation:hhSpin 96s linear infinite;}

/* ── branches. These are the whole point of the graphic, so they are drawn to
   be seen. An earlier pass had them at .26 alpha and 1.3px and they all but
   vanished at the 520px column width the pillar hero actually gives us. ── */
.dmc-hhub__branch{fill:none;stroke:rgba(126,190,255,.58);stroke-width:2;
  stroke-linecap:round;}
.dmc-hhub__flow{fill:none;stroke:#D6E9FF;stroke-width:2.6;stroke-linecap:round;
  stroke-dasharray:20 230;stroke-dashoffset:250;
  animation:hhFlow 4.2s cubic-bezier(.42,0,.35,1) infinite;}

/* ── the centre: the DMC mark ── */
.dmc-hhub__core{fill:url(#hhCore);stroke:rgba(113,182,255,.5);stroke-width:1.4;}
.dmc-hhub__corering{fill:none;stroke:rgba(113,182,255,.22);stroke-width:1;}
.dmc-hhub__halo{fill:none;stroke:#71B6FF;stroke-width:1.4;opacity:0;
  transform-box:fill-box;transform-origin:center;
  animation:hhHalo 4.2s ease-out infinite;}

/* ── branch nodes: tile on the orbit, label stacked under it ── */
.dmc-hhub__tile{fill:url(#hhTile);stroke:rgba(150,205,255,.34);stroke-width:1;}
.dmc-hhub__tile--key{fill:url(#hhTileKey);stroke:#A8D0FF;stroke-width:1.4;}
.dmc-hhub__tilekeyhalo{fill:#71B6FF;opacity:.16;}
.dmc-hhub__glyph{fill:none;stroke:#A8D0FF;stroke-width:1.7;stroke-linecap:round;stroke-linejoin:round;}
.dmc-hhub__glyph--key{fill:none;stroke:#E4F1FF;stroke-width:1.8;stroke-linecap:round;stroke-linejoin:round;}

/* ── type: sentence case, centred under its tile, never a number ── */
.dmc-hhub__ttl{fill:#EAF3FF;text-anchor:middle;
  font:600 13px/1 'Plus Jakarta Sans',system-ui,sans-serif;}
.dmc-hhub__ttl--key{fill:#FFFFFF;text-anchor:middle;
  font:600 13px/1 'Plus Jakarta Sans',system-ui,sans-serif;}
.dmc-hhub__sub{fill:#8FA9CE;text-anchor:middle;
  font:500 11.5px/1 'Plus Jakarta Sans',system-ui,sans-serif;}

@keyframes hhFlow{to{stroke-dashoffset:0;}}
@keyframes hhHalo{0%{transform:scale(.82);opacity:.5;}70%{opacity:0;}100%{transform:scale(1.3);opacity:0;}}
@keyframes hhSpin{to{transform:rotate(360deg);}}

@media (max-width:900px){.dmc-hhub{max-width:478px;}}
@media (max-width:768px){.dmc-hhub{max-width:430px;}}

@media (prefers-reduced-motion:reduce){
  .dmc-hhub__flow,.dmc-hhub__halo,.dmc-hhub__ring--dash{animation:none;}
  .dmc-hhub__flow{stroke-dasharray:none;stroke-dashoffset:0;opacity:.45;}
}

/* ══ per-page graphic: _hero-stage ══ */
/* ── Hero stage ────────────────────────────────────────────────────────────
   The per-page hero artifact. Loaded early because the filename sorts before
   every per-page graphic.

   THE IDEA. The dmc-ref graphic on each page is THE ARGUMENT: a mechanism,
   explained, which rewards reading. The hero is THE ARTIFACT: a glimpse of the
   feed, tracker or board the client would actually be watching. Nobody reads a
   dashboard in a hero. They recognise the shape of one in half a second and
   think "that is what I would be looking at". Different job, different visual
   family, so the two never compete.

   THE CONSTANT IS THE SURFACE, not a symbol. Every page gets the same glass
   stage: same radius, same rim light, same header rhythm, same type scale,
   same motion vocabulary, same brand mark. Only the instrument changes. That
   is what makes 26 pages read as one product.

   NO NUMBERS. ANYWHERE. No axis values, no counts, no currency, no
   percentages, no durations. A chart with fabricated numbers is a claim a
   prospect can challenge. A chart with none says "this is the report you get"
   and asserts nothing. Labels are event types, not results.

   NO ALL-CAPS LETTERSPACED LABELS. House rule: that reads as AI generated.
   Caps are allowed only on the hero H1, nav, the utility bar and stat units.
   Panel labels are sentence case.

   THE PREFIX IS dmc-hstage. `.dmc-hp` already exists as the lead form's
   honeypot (position:absolute;left:-5000px), and a panel using that prefix
   rendered perfectly alone and was invisible in the page. Check any new prefix
   against the generated stylesheet first.

   THREE THINGS THAT ARE REQUIRED, NOT DECORATIVE:
     1. aspect-ratio on the svg. The hero slot is a grid child with
        indeterminate height; an <img> self sizes, an inline <svg> collapses to
        1px tall.
     2. transform-box:fill-box on anything scaled or translated. Otherwise
        transform-origin resolves against the SVG viewport and bars collapse
        toward x=0, leaving slivers at the far left.
     3. fill:none on every stroke-only class. An SVG path defaults to
        fill:black and an open path is implicitly closed and filled. */

.dmc-hstage{width:100%;max-width:566px;margin:0 auto;}
.dmc-hstage__svg{display:block;width:100%;height:auto;aspect-ratio:566/478;overflow:visible;}
.dmc-phero-art > .dmc-hstage{width:100%;}

/* ── the stage: layered planes, not one flat card ── */
.dmc-hstage__amb{fill:url(#hsAmb);}
.dmc-hstage__cast{fill:url(#hsCast);}
.dmc-hstage__back{fill:url(#hsBack);stroke:rgba(126,190,255,.14);stroke-width:1;}
.dmc-hstage__glass{fill:url(#hsGlass);}
.dmc-hstage__edge{fill:none;stroke:url(#hsEdge);stroke-width:1.5;}
.dmc-hstage__lip{fill:none;stroke:rgba(198,228,255,.55);stroke-width:1.2;stroke-linecap:round;}
.dmc-hstage__grid{fill:none;stroke:rgba(126,190,255,.05);stroke-width:1;}
.dmc-hstage__sheenband{fill:url(#hsSheen);}

/* ── header ── */
.dmc-hstage__hdr{fill:url(#hsHdr);}
.dmc-hstage__hairline{fill:none;stroke:rgba(126,190,255,.20);stroke-width:1;}
.dmc-hstage__mark{fill:#8FC8FF;}
.dmc-hstage__live{fill:#7BE3B0;}
.dmc-hstage__halo{fill:#7BE3B0;opacity:.22;}

/* ── rows and tiles ── */
.dmc-hstage__row{fill:url(#hsRow);stroke:rgba(126,190,255,.13);stroke-width:1;}
.dmc-hstage__row--on{fill:url(#hsRowOn);stroke:rgba(140,200,255,.50);stroke-width:1.2;}
.dmc-hstage__row--done{fill:url(#hsRowDone);stroke:rgba(123,227,176,.40);stroke-width:1.2;}
.dmc-hstage__rowlip{fill:none;stroke:rgba(214,236,255,.26);stroke-width:1;stroke-linecap:round;}
.dmc-hstage__tile{fill:rgba(126,190,255,.15);stroke:rgba(150,205,255,.28);stroke-width:1;}
.dmc-hstage__tile--done{fill:rgba(123,227,176,.16);stroke:rgba(123,227,176,.40);}
.dmc-hstage__glyph{fill:none;stroke:#CFE6FF;stroke-width:1.7;stroke-linecap:round;stroke-linejoin:round;}
.dmc-hstage__glyph--done{fill:none;stroke:#9BEFC6;stroke-width:1.9;stroke-linecap:round;stroke-linejoin:round;}

/* ── tracks and bars ── */
.dmc-hstage__track{fill:url(#hsTrack);}
.dmc-hstage__trackline{fill:none;stroke:rgba(0,8,30,.45);stroke-width:1;}
.dmc-hstage__fill{fill:url(#hsFill);}
.dmc-hstage__fillTop{fill:rgba(226,242,255,.38);}
.dmc-hstage__band{fill:url(#hsBand);stroke:rgba(140,200,255,.26);stroke-width:1;stroke-dasharray:3 5;}
.dmc-hstage__knob{fill:#E4F1FF;}
.dmc-hstage__knobHalo{fill:#8FC8FF;opacity:.26;}

.dmc-hstage__pip{fill:#8FC8FF;}
.dmc-hstage__pip--warn{fill:#FFAD7D;}
.dmc-hstage__pip--done{fill:#7BE3B0;}
.dmc-hstage__pipHalo{fill:#8FC8FF;opacity:.18;}

/* ── type: a real scale, sentence case, never a number ── */
.dmc-hstage__lbl{fill:#9FBBDE;font:600 11.5px/1 'Plus Jakarta Sans',system-ui,sans-serif;}
.dmc-hstage__ttl{fill:#F2F8FF;font:600 13.5px/1 'Plus Jakarta Sans',system-ui,sans-serif;}
.dmc-hstage__sub{fill:#8FA9CE;font:500 11.5px/1 'Plus Jakarta Sans',system-ui,sans-serif;}
.dmc-hstage__head{fill:#FFFFFF;font:700 15px/1 Montserrat,system-ui,sans-serif;}
.dmc-hstage__cap{fill:#7E97BC;font:600 10.5px/1 'Plus Jakarta Sans',system-ui,sans-serif;}

/* ── motion. The stage is complete and legible frozen. ── */
.dmc-hstage__seq{opacity:0;animation:hsIn 12s cubic-bezier(.22,.68,.24,1) infinite;}
.dmc-hstage__seq--2{animation-delay:1.5s;}
.dmc-hstage__seq--3{animation-delay:3s;}
.dmc-hstage__seq--4{animation-delay:4.5s;}
.dmc-hstage__seq--5{animation-delay:6s;}
.dmc-hstage__bloom{opacity:0;animation:hsBloom 12s ease-out infinite;}
.dmc-hstage__bloom--2{animation-delay:1.5s;}
.dmc-hstage__bloom--3{animation-delay:3s;}
.dmc-hstage__bloom--4{animation-delay:4.5s;}
.dmc-hstage__grow{transform-box:fill-box;transform-origin:left center;
  animation:hsGrow 12s cubic-bezier(.24,.72,.26,1) infinite;}
.dmc-hstage__grow--2{animation-delay:.45s;}
.dmc-hstage__grow--3{animation-delay:.9s;}
.dmc-hstage__grow--4{animation-delay:1.35s;}
/* The knob must travel WITH its bar. Placing it at the final position while the
   bar grows leaves it detached and floating in empty track, which reads as a
   rendering fault. --tx is the distance the bar covers. */
.dmc-hstage__travel{transform-box:fill-box;
  animation:hsTravel 12s cubic-bezier(.24,.72,.26,1) infinite;}
.dmc-hstage__travel--2{animation-delay:.45s;}
.dmc-hstage__travel--3{animation-delay:.9s;}
.dmc-hstage__travel--4{animation-delay:1.35s;}
.dmc-hstage__beat{transform-box:fill-box;transform-origin:center;
  animation:hsBeat 2.6s ease-in-out infinite;}
.dmc-hstage__sweep{animation:hsSweep 12s cubic-bezier(.4,0,.2,1) infinite;}
.dmc-hstage__drift{animation:hsDrift 14s ease-in-out infinite;}

@keyframes hsIn{
  0%,3%{opacity:0;transform:translateY(9px);}
  9%,88%{opacity:1;transform:translateY(0);}
  96%,100%{opacity:0;transform:translateY(0);}
}
@keyframes hsBloom{0%,4%{opacity:0;}10%{opacity:.8;}28%,100%{opacity:0;}}
@keyframes hsGrow{0%,5%{transform:scaleX(.04);}44%,90%{transform:scaleX(1);}99%,100%{transform:scaleX(.04);}}
@keyframes hsTravel{
  0%,5%{transform:translateX(calc(var(--tx,0px) * -1));}
  44%,90%{transform:translateX(0);}
  99%,100%{transform:translateX(calc(var(--tx,0px) * -1));}
}
@keyframes hsBeat{0%,100%{transform:scale(1);opacity:.9;}50%{transform:scale(1.55);opacity:.28;}}
@keyframes hsSweep{0%,10%{transform:translateX(-160px);opacity:0;}
  18%{opacity:.45;}46%{opacity:0;}100%{transform:translateX(560px);opacity:0;}}
@keyframes hsDrift{0%,100%{transform:translateY(0);}50%{transform:translateY(-7px);}}

@media (max-width:900px){.dmc-hstage{max-width:478px;}}
@media (max-width:768px){.dmc-hstage{max-width:424px;}}
@media (prefers-reduced-motion:reduce){
  .dmc-hstage__seq,.dmc-hstage__bloom,.dmc-hstage__grow,
  .dmc-hstage__beat,.dmc-hstage__sweep,.dmc-hstage__drift,
  .dmc-hstage__travel{animation:none;}
  .dmc-hstage__travel{transform:none;}
  .dmc-hstage__seq{opacity:1;transform:none;}
  .dmc-hstage__bloom{opacity:0;}
  .dmc-hstage__grow{transform:scaleX(1);}
}

/* ══ per-page graphic: _nav-buttons ══ */
/* ── Mobile nav accordion buttons, hardened ────────────────────────────────
   WHY THIS IS A FILE IN graphics/ AND NOT IN THE PAGE <style> BLOCK.
   Rules added to the source pages' own <style> did not reach the built
   stylesheet: extract-globals.py slices a specific CSS range out of those
   pages, so anything appended outside it is silently dropped. It looked like
   the fix had applied because the class name still appeared in the bundle,
   but that was the ORIGINAL rule. Files in graphics/ are concatenated last,
   after the design system, which is exactly where an override belongs.

   WHAT WAS WRONG. These accordion buttons turned pink on tap, hover and while
   open. The base rule never declared a background, so the theme's own button
   styling won. Same root cause as the modal submit button rendering red: a
   <button> that does not state its own background inherits whatever the theme
   decides. Every interactive state is therefore declared here explicitly. */
.dmc-hd__macc{
  -webkit-appearance:none; appearance:none;
  background:transparent !important; border:0; box-shadow:none;
  color:#fff; cursor:pointer; width:100%;
  display:flex; align-items:center; justify-content:space-between; gap:12px;
  text-align:left;
}
.dmc-hd__macc:hover,
.dmc-hd__macc:focus,
.dmc-hd__macc:focus-visible,
.dmc-hd__macc:active,
.dmc-hd__macc.is-open{
  background:transparent !important;
  box-shadow:none;
  color:#A8D0FF;
}
.dmc-hd__macc:focus{ outline:none; }
.dmc-hd__macc:focus-visible{ outline:2px solid #71B6FF; outline-offset:3px; }
.dmc-hd__macc .dmc-hd__chev{ flex:none; color:#71B6FF; transition:transform .35s; }
.dmc-hd__macc.is-open .dmc-hd__chev{ transform:rotate(180deg); }

/* the nav is a flex column, and flex children shrink by default, which
   squashed a sixteen item panel instead of letting the nav scroll */
.dmc-hd__mnav > *{ flex:0 0 auto; }

/* ── Desktop nav dropdown triggers ─────────────────────────────────────────
   "Our Specialties" and "Our Core Services" are <button> elements sitting in
   the nav. Like the mobile accordions and the modal submit, they never stated
   a background, so the theme painted them pink on hover, focus and while open.
   Declared in full here, every state. */
button.dmc-hd__link{
  -webkit-appearance:none; appearance:none;
  background:transparent !important; border:0; box-shadow:none;
  cursor:pointer; font:inherit;
}
button.dmc-hd__link:hover,
button.dmc-hd__link:focus,
button.dmc-hd__link:focus-visible,
button.dmc-hd__link:active,
.dmc-hd__item.is-open > button.dmc-hd__link{
  background:transparent !important;
  box-shadow:none;
}
button.dmc-hd__link:focus{ outline:none; }
button.dmc-hd__link:focus-visible{ outline:2px solid #71B6FF; outline-offset:4px; }

/* ══ per-page graphic: about-us ══ */
/* ═══════════════════════════════════════════════════════════════════
   ABOUT US  ·  dmc-abt4
   The four commercial constraints, drawn as a ledger of revenue
   deliberately given up. Left column: the rule we keep. Right column:
   the revenue that rule forbids us from earning, drawn as a dashed
   outline because it is not ours to take.

   Rest state carries the whole argument: four solid navy rules, four
   dashed sky chips naming what each one forgoes, and a cut node between
   them. Animation only pulses the cut node and marches the dashed
   outline, and both stop under prefers-reduced-motion.

   No quantities and no dollar figures anywhere: bar lengths are equal
   by construction so nothing can be read as a measured amount.

   Every class is prefixed dmc-abt4 so it cannot collide with another
   page's graphic.
   ═══════════════════════════════════════════════════════════════════ */

.dmc-abt4{position:relative;width:min(560px,100%);margin:0 auto 8px;}

.dmc-abt4__svg{display:block;width:100%;height:auto;overflow:visible;}

.dmc-abt4__hdr{fill:#00155D;fill-opacity:.5;
  font:600 11.5px/1 'Plus Jakarta Sans',system-ui,sans-serif;}

.dmc-abt4__div{stroke:#00155D;stroke-opacity:.14;stroke-width:1;}

.dmc-abt4__rule{fill:#00155D;}

.dmc-abt4__rulet{fill:#fff;
  font:600 13px/1 'Plus Jakarta Sans',system-ui,sans-serif;}

.dmc-abt4__link{stroke:#71B6FF;stroke-width:1.6;stroke-linecap:round;}

.dmc-abt4__cut{fill:#fff;stroke:#71B6FF;stroke-width:1.6;
  transform-box:fill-box;transform-origin:center;
  animation:dmcAbt4Pulse 4.4s ease-in-out infinite;
  animation-delay:var(--gd,0s);}

.dmc-abt4__cutbar{stroke:#00155D;stroke-width:2;stroke-linecap:round;}

.dmc-abt4__gone{fill:#71B6FF;fill-opacity:.09;
  stroke:#71B6FF;stroke-width:1.5;stroke-dasharray:6 4;
  animation:dmcAbt4March 26s linear infinite;}

/* 12px, not 12.5: "Every rival clinic in that city" is the longest label and
   at 12.5px it came within a few units of the dashed chip's right edge. */
.dmc-abt4__gonet{fill:#00155D;fill-opacity:.62;
  font:500 12px/1 'Plus Jakarta Sans',system-ui,sans-serif;}

.dmc-abt4__foot{fill:#00155D;fill-opacity:.5;
  font:500 11.5px/1 'Plus Jakarta Sans',system-ui,sans-serif;}

@keyframes dmcAbt4Pulse{
  0%,74%,100%{transform:scale(1);}
  86%{transform:scale(1.24);}
}

@keyframes dmcAbt4March{
  to{stroke-dashoffset:-200;}
}

.dmc-abt4__key{
  display:flex;flex-wrap:wrap;justify-content:center;gap:10px 22px;
  margin-top:20px;font-size:12.5px;line-height:1.5;
  font-family:'Plus Jakarta Sans',system-ui,sans-serif;
  color:#00155D;opacity:.68;
}

.dmc-abt4__key span{display:inline-flex;align-items:center;gap:8px;}

.dmc-abt4__key i{width:11px;height:11px;border-radius:3px;flex:0 0 auto;
  background:#00155D;}

.dmc-abt4__key i.is-gone{background:rgba(113,182,255,.12);
  border:1.5px dashed #71B6FF;}

@media (max-width:600px){
  .dmc-abt4{width:min(400px,100%);}
  .dmc-abt4__key{font-size:11.5px;gap:8px 14px;}
}

@media (prefers-reduced-motion:reduce){
  .dmc-abt4__cut,.dmc-abt4__gone{animation:none;}
}

/* ══ per-page graphic: clear-aligner-marketing ══ */
/* ── Two routes graphic, clear-aligner-marketing ───────────────────────────
   Sits in the dmc-ref__side column of the signature section, on a light
   background. Pure inline SVG plus CSS. No JavaScript, no libraries, and no
   invented numbers: every element is a label, a state or a relationship.
   No prices, no case counts, no treatment durations.

   The argument it carries AT REST, before any animation runs:
     one patient at the top wants straighter teeth, and the path forks. The
     left branch is the mail-order route, subtitled "sold on price": buys a
     kit online, impressions at home, aligners ship, and a terminal state,
     drawn hollow and dashed, reading "no clinician involved". The right
     branch is the supervised route, subtitled "won on candidacy": reads your
     page, books a scan, candidacy assessed, attachments and IPR, monitored to
     the end. The scan chip is the only filled chip on the diagram, so the eye
     lands on it first, and a bracket down the right edge marks the stretch
     from the page to the scan as "won or lost here". A dashed arrow crosses
     from the dead end of the mail-order route back into "candidacy assessed",
     because the unsupervised case is not lost demand, it is deferred demand.

   So the rest state already says: the competitor is a product not a practice,
   the two routes differ in supervision rather than in price, and the scan is
   the conversion event.

   Deliberately NOT a funnel with tapering widths, because a taper implies a
   quantity and there is no published quantity to imply. Every chip is the
   same height. Only weight, fill and dashing differ.

   Every class is prefixed dmc-alignr so it cannot collide with the fourteen
   existing per-page graphics. */

.dmc-alignr{position:relative;width:min(560px,100%);margin:0 auto 20px;}
.dmc-alignr__svg{display:block;width:100%;height:auto;overflow:visible;}

/* the shared starting state */
.dmc-alignr__start{fill:#fff;stroke:#00155D;stroke-width:1.6;}
.dmc-alignr__fork{
  fill:none;stroke:#00155D;stroke-width:1.6;
  stroke-linecap:round;stroke-linejoin:round;
}

/* column headings */
.dmc-alignr__head{
  fill:#00155D;font:700 12.5px/1 Montserrat,system-ui,sans-serif;
  text-anchor:middle;
}
.dmc-alignr__head--diy{fill:#4A5F8C;}
.dmc-alignr__sub{
  fill:#2273CE;font:600 11px/1 Montserrat,system-ui,sans-serif;
  text-anchor:middle;
}
.dmc-alignr__sub--diy{fill:#7A88A8;}

/* the chips. one shape, four states */
.dmc-alignr__chip{fill:#fff;stroke:#00155D;stroke-width:1.6;}
.dmc-alignr__chip--diy{fill:#F2F5FB;stroke:#9AA7C2;stroke-width:1.4;}
.dmc-alignr__chip--dead{
  fill:none;stroke:#9AA7C2;stroke-width:1.4;stroke-dasharray:5 4;
}
.dmc-alignr__chip--scan{fill:#00155D;stroke:#00155D;}

.dmc-alignr__label{
  fill:#00155D;font:700 12px/1 Montserrat,system-ui,sans-serif;
  text-anchor:middle;letter-spacing:-.005em;
}
.dmc-alignr__label--diy{fill:#6B7A99;font-weight:600;font-size:11.5px;}
.dmc-alignr__label--on{fill:#fff;}

/* the connectors between chips */
.dmc-alignr__link{stroke:#00155D;stroke-width:2;stroke-linecap:round;}
.dmc-alignr__link--diy{stroke:#9AA7C2;stroke-width:1.4;stroke-dasharray:4 4;}

/* the crossover: the unsupervised case arriving with you later */
.dmc-alignr__cross{
  fill:none;stroke:#71B6FF;stroke-width:2;stroke-linecap:round;
  stroke-dasharray:6 5;
  animation:dmcAlignrCross 2.8s linear infinite;
}
.dmc-alignr__crosshead{fill:#71B6FF;}

/* the travelling patient, so the right branch reads as a sequence */
.dmc-alignr__dot{
  fill:#71B6FF;
  animation:dmcAlignrTravel 6s ease-in-out infinite;
}

/* the bracket marking where the case is decided */
.dmc-alignr__brace{
  fill:none;stroke:#71B6FF;stroke-width:1.6;stroke-linejoin:round;
}
.dmc-alignr__bracetext{
  fill:#2273CE;font:600 11.5px/1 Montserrat,system-ui,sans-serif;
  text-anchor:middle;
}

/* key and caption, both in HTML so they stay selectable text */
.dmc-alignr__key{
  display:flex;flex-wrap:wrap;justify-content:center;gap:8px 18px;
  margin-top:4px;
}
.dmc-alignr__key span{
  display:inline-flex;align-items:center;gap:7px;
  font:600 12.5px/1.3 Montserrat,system-ui,sans-serif;color:#4A5F8C;
}
.dmc-alignr__key i{
  width:11px;height:11px;border-radius:3px;flex:0 0 auto;
}
.dmc-alignr__key i.is-diy{background:#F2F5FB;border:1.4px solid #9AA7C2;}
.dmc-alignr__key i.is-sup{background:#fff;border:1.6px solid #00155D;}
.dmc-alignr__key i.is-scan{background:#00155D;border:1.6px solid #00155D;}

.dmc-alignr__note{
  max-width:460px;margin:12px auto 0;text-align:center;
  font:400 14px/1.55 "Nunito Sans",system-ui,sans-serif;color:#4A5F8C;
}

@keyframes dmcAlignrCross{to{stroke-dashoffset:-22;}}
/* the dot rests in each gap between chips, so it never sits on a label */
@keyframes dmcAlignrTravel{
  0%      {transform:translateY(0);opacity:0;}
  10%     {opacity:1;}
  32%     {transform:translateY(52px);opacity:1;}
  56%     {transform:translateY(104px);opacity:1;}
  84%     {transform:translateY(156px);opacity:1;}
  96%,100%{transform:translateY(156px);opacity:0;}
}

@media (max-width:600px){
  .dmc-alignr{width:100%;}
  .dmc-alignr__note{font-size:13.5px;}
}

@media (prefers-reduced-motion:reduce){
  .dmc-alignr__cross,
  .dmc-alignr__dot{animation:none;}
  .dmc-alignr__dot{opacity:1;}
}

/* ══ per-page graphic: contact-us ══ */
/* ============================================================================
   dmc-next, "what happens next".  Page: /contact-us/ ONLY.
   Every class is prefixed dmc-next so it cannot collide with another page's
   graphic. Palette is navy #00155D and sky #71B6FF, nothing else.

   THE REST STATE CARRIES THE WHOLE ARGUMENT.
   Four numbered stops on one rail, enquiry, strategy call, visibility audit,
   decision. The rail then splits into TWO outcome chips drawn at the same
   size and the same visual weight: "Proposal, then launch" and "No, and the
   reason why". Equal weight is the point. A contact page that draws only the
   yes is selling. This one pre-commits to both endings, so a reader who is
   afraid of a pushy call can see the exit before they pick up the phone.

   NO NUMBERS ARE SHOWN. The stops carry labels only, never durations, never
   quantities, because we cannot evidence either.

   Animation is one sky dot running down the rail. It sharpens the sequence,
   it does not create it, and it is switched off under prefers-reduced-motion.
   ========================================================================== */

.dmc-next {
  width: min(520px, 100%);
  margin: 0 auto;
}

.dmc-next__svg {
  display: block;
  width: 100%;
  height: auto;
  overflow: visible;
}

/* the rail every stop sits on */
.dmc-next__rail {
  stroke: #00155D;
  stroke-opacity: .28;
  stroke-width: 2;
  stroke-linecap: round;
  fill: none;
}

/* the branch that splits into the two outcomes */
.dmc-next__branch {
  stroke: #00155D;
  stroke-opacity: .28;
  stroke-width: 2;
  stroke-linecap: round;
  fill: none;
}

/* a numbered stop */
.dmc-next__node {
  fill: #00155D;
}

.dmc-next__num {
  fill: #FFFFFF;
  font-family: "Nunito Sans", system-ui, sans-serif;
  font-size: 13px;
  font-weight: 700;
  text-anchor: middle;
  letter-spacing: .01em;
}

.dmc-next__label {
  fill: #00155D;
  font-family: "Nunito Sans", system-ui, sans-serif;
  font-size: 16px;
  font-weight: 700;
}

.dmc-next__sub {
  fill: #00155D;
  fill-opacity: .62;
  font-family: "Nunito Sans", system-ui, sans-serif;
  font-size: 13px;
  font-weight: 400;
}

/* the two outcomes, deliberately identical in size */
.dmc-next__chip {
  fill: #00155D;
  fill-opacity: .09;
  stroke: #00155D;
  stroke-opacity: .55;
  stroke-width: 1.4;
}

.dmc-next__chip--alt {
  fill: #71B6FF;
  fill-opacity: .12;
  stroke: #71B6FF;
  stroke-opacity: .8;
}

.dmc-next__chiptext {
  fill: #00155D;
  font-family: "Nunito Sans", system-ui, sans-serif;
  font-size: 13.5px;
  font-weight: 700;
  text-anchor: middle;
}

.dmc-next__chipsub {
  fill: #00155D;
  fill-opacity: .6;
  font-family: "Nunito Sans", system-ui, sans-serif;
  font-size: 11.5px;
  font-weight: 400;
  text-anchor: middle;
}

/* decorative only: one dot travelling the rail */
.dmc-next__spark {
  fill: #71B6FF;
  animation: dmcNextRun 5.4s cubic-bezier(.55,0,.45,1) infinite;
}

@keyframes dmcNextRun {
  0%   { transform: translateY(0);     opacity: 0; }
  6%   { opacity: 1; }
  22%  { transform: translateY(68px);  opacity: 1; }
  44%  { transform: translateY(136px); opacity: 1; }
  66%  { transform: translateY(204px); opacity: 1; }
  84%  { transform: translateY(238px); opacity: .55; }
  100% { transform: translateY(238px); opacity: 0; }
}

@media (max-width: 600px) {
  .dmc-next { width: min(400px, 100%); }
  .dmc-next__label { font-size: 15px; }
  .dmc-next__sub { font-size: 12px; }
}

@media (prefers-reduced-motion: reduce) {
  /* The spark is decorative. The four stops and the two outcome chips carry the
     argument on their own, so with motion off the dot simply does not appear.
     It is drawn behind the nodes, so it never covers a numeral in either state. */
  .dmc-next__spark { animation: none; opacity: 0; }
}

/* ── Contact hero, single column and form led ──────────────────────────────
   The two column hero put the form beside the copy, which reads as an aside.
   On this page the form IS the page, so the flow is now headline, one
   paragraph of why, then the form, then calling as the explicit alternative
   for anyone who would rather just talk. One column, so the order is the same
   on every screen size rather than reflowing differently on mobile. */
.dmc-hero--contact .dmc-hero__inner{ grid-template-columns:minmax(0,1fr); max-width:820px; }
.dmc-hero--contact .dmc-hero__content{ text-align:center; }
.dmc-hero--contact .dmc-crumbs,
.dmc-hero--contact .dmc-eyebrow{ justify-content:center; }
.dmc-hero--contact .dmc-hero__lead{ margin-left:auto; margin-right:auto; max-width:64ch; }
.dmc-hero--contact .dmc-form-card{ margin:30px auto 0; max-width:640px; text-align:left; }
.dmc-hero--contact .dmc-hero__formnote{
  margin:16px auto 0; max-width:60ch; font-size:13.5px; line-height:1.6;
  color:var(--soft-2); }

/* the call option, deliberately secondary to the form above it */
.dmc-hero--contact .dmc-hero__alt{
  margin:26px auto 0; padding-top:24px; max-width:640px;
  border-top:1px solid var(--line);
  display:flex; flex-direction:column; align-items:center; gap:12px; }
.dmc-hero--contact .dmc-hero__altlabel{
  margin:0; font-size:14px; color:var(--soft-2); }
.dmc-hero--contact .dmc-hero__trust{ justify-content:center; margin-top:26px; }

@media (max-width:768px){
  .dmc-hero--contact .dmc-form-card{ margin-top:24px; }
  .dmc-hero--contact .dmc-hero__alt{ margin-top:22px; padding-top:20px; }
}

/* ══ per-page graphic: cosmetic-dentistry-marketing ══ */
/* ── The decision with no deadline, cosmetic-dentistry-marketing ───────────
   Replaces dmc-cosmx entirely. That graphic argued about what a practice may
   not say, which is not what this buyer came for. This one argues about
   getting the case.

   Sits in the dmc-ref__side column of the signature section, on a light
   background. Inline SVG plus CSS only. No JavaScript, no libraries.

   NO INVENTED NUMBERS. Every element is a label, a state or a relationship.
   No prices, no percentages, no month counts, no case counts, no durations
   written as figures. The two lanes differ in LENGTH, which is a relationship
   between two paths, not a quantity of anything.

   What it says AT REST, before any animation runs, because that is how it is
   seen static and under prefers-reduced-motion:

     Two lanes side by side, drawn on panels of deliberately unequal height.
     The left panel is short. Every other treatment: something is wrong, then
     treatment booked, and the lane simply ends, captioned "the case closes
     itself". The right panel runs almost the full height of the frame. The
     cosmetic case: nothing is wrong, drawn hollow and dashed because there is
     no trigger, then wants a better smile, then enquires, then the sky
     outlined state "let me think about it". Below that the connector turns
     dashed and long, labelled "the wait" down the right edge, and it is
     crossed by a muted dashed rule reading "most follow-up stops here".
     Further down, past that rule, sits the only other solid navy chip on the
     diagram: "books the case". A bracket down the right edge marks the stretch
     between the two as "the cases nobody waits for".

     In the empty space beside the wait, where the left lane has already
     finished, three chips read "a new kitchen", "a holiday", "a car" under the
     heading "competing for the same money", with dashed sky arrows pointing
     into the wait. That is the discretionary-spend argument stated in the art.

   So the rest state already carries all three consequences: no clinical
   trigger, discretionary money as the real competitor, and a follow-up window
   that outlasts the follow-up almost every practice runs.

   Every class is prefixed dmc-cosmwait so it cannot collide with the twenty
   one other per-page graphics. */

.dmc-cosmwait{position:relative;width:min(560px,100%);margin:0 auto 20px;}
.dmc-cosmwait__svg{display:block;width:100%;height:auto;overflow:visible;}

/* the two panels. their unequal heights are the argument */
.dmc-cosmwait__panel{fill:#F2F5FB;stroke:#DCE4F2;stroke-width:1.2;}
.dmc-cosmwait__panel--long{fill:#EDF3FD;stroke:#C9DBF6;}

/* lane headings */
.dmc-cosmwait__head{
  fill:#00155D;font:700 12.5px/1 Montserrat,system-ui,sans-serif;
  text-anchor:middle;
}
.dmc-cosmwait__head--quiet{fill:#5A6B8C;}
.dmc-cosmwait__sub{
  fill:#2273CE;font:600 11px/1 Montserrat,system-ui,sans-serif;
  text-anchor:middle;
}
.dmc-cosmwait__sub--quiet{fill:#8494B0;}

/* the chips. one shape, four states */
.dmc-cosmwait__chip{fill:#fff;stroke:#00155D;stroke-width:1.6;}
.dmc-cosmwait__chip--quiet{fill:#fff;stroke:#9AA7C2;stroke-width:1.4;}
.dmc-cosmwait__chip--none{
  fill:none;stroke:#9AA7C2;stroke-width:1.4;stroke-dasharray:5 4;
}
.dmc-cosmwait__chip--think{fill:#fff;stroke:#71B6FF;stroke-width:2;}
.dmc-cosmwait__chip--won{fill:#00155D;stroke:#00155D;stroke-width:1.6;}

.dmc-cosmwait__label{
  fill:#00155D;font:700 12px/1 Montserrat,system-ui,sans-serif;
  text-anchor:middle;letter-spacing:-.005em;
}
.dmc-cosmwait__label--quiet{fill:#6B7A99;font-weight:600;font-size:11.5px;}
.dmc-cosmwait__label--on{fill:#fff;}

/* connectors */
.dmc-cosmwait__link{stroke:#00155D;stroke-width:2;stroke-linecap:round;}
.dmc-cosmwait__link--quiet{stroke:#9AA7C2;stroke-width:1.6;stroke-linecap:round;}

/* the wait itself, the longest connector on the diagram */
.dmc-cosmwait__wait{
  fill:none;stroke:#71B6FF;stroke-width:2.4;stroke-linecap:round;
  stroke-dasharray:7 6;
  animation:dmcCosmwaitFlow 3.2s linear infinite;
}
/* Both labels in the wait band sit ON TOP of lines that pass through them, so
   they carry a panel-coloured halo. Without it the dashed rule reads as a
   strikethrough. paint-order puts the stroke behind the fill, so the halo
   never thickens the letterforms. */
.dmc-cosmwait__waittext{
  fill:#2273CE;font:700 11.5px/1 Montserrat,system-ui,sans-serif;
  text-anchor:middle;
  stroke:#EDF3FD;stroke-width:3.5;paint-order:stroke;
}

/* where almost everyone gives up */
.dmc-cosmwait__stop{
  stroke:#9AA7C2;stroke-width:1.4;stroke-dasharray:4 4;
}
.dmc-cosmwait__stoptext{
  fill:#6B7A99;font:600 10.5px/1 Montserrat,system-ui,sans-serif;
  text-anchor:middle;
  stroke:#EDF3FD;stroke-width:3.5;paint-order:stroke;
}

/* the end of the left lane, drawn as a stop cap so the lane reads as finished */
.dmc-cosmwait__cap{stroke:#00155D;stroke-width:3;stroke-linecap:round;}
.dmc-cosmwait__captext{
  fill:#5A6B8C;font:600 11px/1 Montserrat,system-ui,sans-serif;
  text-anchor:middle;
}

/* the conversion marker on the case that closes late */
.dmc-cosmwait__dot{
  fill:#71B6FF;
  animation:dmcCosmwaitPulse 2.6s ease-in-out infinite;
}

/* the discretionary competitors */
.dmc-cosmwait__vstitle{
  fill:#2273CE;font:700 11px/1 Montserrat,system-ui,sans-serif;
  text-anchor:middle;
}
.dmc-cosmwait__vs{fill:#fff;stroke:#71B6FF;stroke-width:1.4;}
.dmc-cosmwait__vslabel{
  fill:#2C4270;font:600 11.5px/1 Montserrat,system-ui,sans-serif;
  text-anchor:middle;
}
.dmc-cosmwait__pull{
  fill:none;stroke:#71B6FF;stroke-width:1.6;stroke-linecap:round;
  stroke-dasharray:5 5;
}
.dmc-cosmwait__pullhead{fill:#71B6FF;}

/* the bracket marking the stretch nobody stays present for */
.dmc-cosmwait__brace{
  fill:none;stroke:#00155D;stroke-width:1.6;stroke-linejoin:round;
}
.dmc-cosmwait__bracetext{
  fill:#00155D;font:600 11px/1 Montserrat,system-ui,sans-serif;
  text-anchor:middle;
}

/* key and caption live in HTML so they stay selectable text */
.dmc-cosmwait__key{
  display:flex;flex-wrap:wrap;justify-content:center;gap:8px 18px;
  margin-top:4px;
}
.dmc-cosmwait__key span{
  display:inline-flex;align-items:center;gap:7px;
  font:600 12.5px/1.3 Montserrat,system-ui,sans-serif;color:#4A5F8C;
}
.dmc-cosmwait__key i{width:11px;height:11px;border-radius:3px;flex:0 0 auto;}
.dmc-cosmwait__key i.is-none{background:#fff;border:1.4px dashed #9AA7C2;}
.dmc-cosmwait__key i.is-think{background:#fff;border:2px solid #71B6FF;}
.dmc-cosmwait__key i.is-won{background:#00155D;border:1.6px solid #00155D;}

.dmc-cosmwait__note{
  max-width:460px;margin:12px auto 0;text-align:center;
  font:400 14px/1.55 "Nunito Sans",system-ui,sans-serif;color:#4A5F8C;
}

@keyframes dmcCosmwaitFlow{to{stroke-dashoffset:-26;}}
@keyframes dmcCosmwaitPulse{
  0%,100%{r:4.5;opacity:1;}
  50%    {r:6.5;opacity:.55;}
}

@media (max-width:600px){
  .dmc-cosmwait{width:100%;}
  .dmc-cosmwait__note{font-size:13.5px;}
}

@media (prefers-reduced-motion:reduce){
  .dmc-cosmwait__wait,
  .dmc-cosmwait__dot{animation:none;}
}

/* ══ per-page graphic: dental-crm-patient-conversion ══ */
/* ── Speed to lead decay ───────────────────────────────────────────────────
   Used in the dmc-ref__side column of /dental-crm-patient-conversion/.
   Pure inline SVG plus CSS, no JavaScript, no libraries. Scales on its
   viewBox so it is responsive by construction.

   WHAT IT SHOWS. Contact probability against time since the enquiry landed.
   The curve falls away steeply and then flattens. A second, dashed path
   branches off it at the point a call is missed and climbs back toward the
   peak, because an automatic text back puts the practice into the
   conversation again.

   NO QUANTITIES. There are no percentages and no minute markers anywhere in
   this graphic, deliberately. The axes are labelled "minutes", "hours" and
   "contact probability", which is the shape and the relationship. Every
   figure that circulates for speed to lead traces back to business to
   business sales research rather than to dentistry, so none of it may be
   drawn on a dental page. Do not add numbers to this chart.

   REST STATE. Both paths are drawn in full at rest, so the argument survives
   a screenshot and prefers-reduced-motion. The animation is a travelling
   highlight over an already complete curve, never the drawing of it.

   Every class is prefixed dmc-crmspeed so it cannot collide with another
   page's graphic. */

.dmc-crmspeed{position:relative;width:min(560px,100%);margin:0 auto 26px;}
.dmc-crmspeed__svg{display:block;width:100%;height:auto;overflow:visible;}

/* the plot panel */
.dmc-crmspeed__panel{fill:url(#dmcCrmPanel);stroke:rgba(113,182,255,.45);stroke-width:1.4;}
.dmc-crmspeed__axis{stroke:rgba(113,182,255,.26);stroke-width:1;}

/* the decay itself */
.dmc-crmspeed__area{fill:url(#dmcCrmFill);}
.dmc-crmspeed__curve{
  fill:none;stroke:#71B6FF;stroke-width:2.4;
  stroke-linecap:round;stroke-linejoin:round;
}
.dmc-crmspeed__pulse{
  fill:none;stroke:#DCEDFF;stroke-width:2.6;stroke-linecap:round;
  stroke-dasharray:16 460;stroke-dashoffset:476;
  animation:dmcCrmRun 6s linear infinite;
}

/* the recovery branch */
.dmc-crmspeed__branch{
  fill:none;stroke:#71B6FF;stroke-width:1.9;stroke-linecap:round;
  stroke-dasharray:6 5;opacity:.92;
}
.dmc-crmspeed__branchpulse{
  fill:none;stroke:#DCEDFF;stroke-width:2.4;stroke-linecap:round;
  stroke-dasharray:14 180;stroke-dashoffset:194;
  animation:dmcCrmRun 6s linear infinite;animation-delay:1.6s;
}
.dmc-crmspeed__arrow{fill:none;stroke:#71B6FF;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;}

/* nodes */
.dmc-crmspeed__start{fill:#71B6FF;stroke:#DCEDFF;stroke-width:1.6;}
.dmc-crmspeed__miss{fill:#041447;stroke:#71B6FF;stroke-width:2;}
.dmc-crmspeed__halo{
  fill:none;stroke:#71B6FF;stroke-width:1.4;opacity:0;
  transform-origin:216px 180px;animation:dmcCrmHalo 6s ease-out infinite;
}
.dmc-crmspeed__end{fill:#71B6FF;opacity:.55;}

/* labels inside the panel */
.dmc-crmspeed__tag{
  fill:#EAF3FF;font:600 9.6px/1 'Plus Jakarta Sans',system-ui,sans-serif;
  letter-spacing:.01em;
}
.dmc-crmspeed__tag--dim{fill:rgba(234,243,255,.66);font-weight:500;}

/* axis labels outside the panel, navy on the light section */
.dmc-crmspeed__axlabel{
  fill:#00155D;font:600 11px/1 'Plus Jakarta Sans',system-ui,sans-serif;
  letter-spacing:.02em;
}

@keyframes dmcCrmRun{to{stroke-dashoffset:0;}}
@keyframes dmcCrmHalo{
  0%{transform:scale(.6);opacity:0;}
  22%{opacity:.6;}
  46%{transform:scale(2.1);opacity:0;}
  100%{transform:scale(2.1);opacity:0;}
}

/* legend */
.dmc-crmspeed__key{
  display:flex;flex-wrap:wrap;gap:10px 20px;justify-content:center;
  margin-top:4px;font-size:12.5px;color:var(--soft-2,#8FA3C8);
}
.dmc-crmspeed__key span{display:inline-flex;align-items:center;gap:7px;}
.dmc-crmspeed__key i{width:16px;height:0;border-top:3px solid #71B6FF;border-radius:2px;flex:0 0 auto;}
.dmc-crmspeed__key i.is-recover{border-top-style:dashed;}

@media (max-width:600px){
  .dmc-crmspeed{width:min(360px,100%);}
  .dmc-crmspeed__key{font-size:11.5px;gap:8px 14px;}
  .dmc-crmspeed__tag{font-size:10.6px;}
  .dmc-crmspeed__axlabel{font-size:12px;}
}
@media (prefers-reduced-motion:reduce){
  .dmc-crmspeed__pulse,.dmc-crmspeed__branchpulse,.dmc-crmspeed__halo{animation:none;}
  .dmc-crmspeed__pulse,.dmc-crmspeed__branchpulse{opacity:0;}
  .dmc-crmspeed__halo{opacity:.34;transform:scale(1.6);}
}

/* ══ per-page graphic: dental-google-ads ══ */
/* ============================================================================
   dmc-cvt, case-value tiers.  Page: /dental-google-ads/ ONLY.
   Every class is prefixed dmc-cvt so it cannot collide with another page's
   graphic. Palette is navy #00155D and sky #71B6FF, nothing else.

   The rest state carries the whole argument on its own:
     three funnels whose TOP EDGE is that treatment's break-even cost per lead,
     one dashed sky line across all three at the single account target,
     a navy block on the implant funnel showing headroom the target never uses,
     a sky block over the hygiene funnel showing spend above what it can earn.
   Animation only marches the dashed line. It sharpens, it does not inform,
   and it is switched off under prefers-reduced-motion.
   ========================================================================== */

.dmc-cvt {
  width: min(560px, 100%);
  margin: 0 auto;
}

.dmc-cvt__svg {
  display: block;
  width: 100%;
  height: auto;
}

/* baseline the funnels stand on */
.dmc-cvt__base {
  stroke: #00155D;
  stroke-opacity: .3;
  stroke-width: 1.4;
  stroke-linecap: round;
}

/* the funnel body: wide at the lead stage, narrow at the started case */
.dmc-cvt__funnel {
  fill: #00155D;
  fill-opacity: .07;
  stroke: #00155D;
  stroke-opacity: .4;
  stroke-width: 1.4;
  stroke-linejoin: round;
}

/* internal stage dividers, so the shape reads as a funnel not a wedge */
.dmc-cvt__stage {
  stroke: #00155D;
  stroke-opacity: .24;
  stroke-width: 1;
  stroke-dasharray: 3 4;
}

/* the solid cap across each funnel top: that tier's break-even ceiling */
.dmc-cvt__cap { fill: #00155D; }

/* headroom a single low target never spends */
.dmc-cvt__zone {
  fill: #00155D;
  fill-opacity: .2;
}

/* spend sitting above what the tier can earn back */
/* Opacity is deliberately below half: the dashed target line is drawn over this
   block and sky on sky at .55 made the line look as though it stopped here. */
.dmc-cvt__zone--over {
  fill: #71B6FF;
  fill-opacity: .42;
  stroke: #71B6FF;
  stroke-width: 1.2;
  stroke-opacity: .8;
}

/* the one account-level target, cutting across all three tiers */
.dmc-cvt__target {
  stroke: #71B6FF;
  stroke-width: 2.6;
  stroke-linecap: round;
  stroke-dasharray: 8 7;
  animation: dmcCvtMarch 3.4s linear infinite;
}

.dmc-cvt__stem {
  stroke: #71B6FF;
  stroke-width: 1.6;
  stroke-linecap: round;
}

.dmc-cvt__chip { fill: #71B6FF; }

.dmc-cvt__chiptext {
  fill: #00155D;
  font: 700 9.5px/1 "Nunito Sans", system-ui, sans-serif;
}

.dmc-cvt__tier {
  fill: #00155D;
  font: 700 11px/1 "Nunito Sans", system-ui, sans-serif;
}

.dmc-cvt__verdict {
  fill: #00155D;
  fill-opacity: .68;
  font: 600 9px/1 "Nunito Sans", system-ui, sans-serif;
}

.dmc-cvt__axis {
  fill: #00155D;
  fill-opacity: .5;
  font: 600 8.5px/1 "Nunito Sans", system-ui, sans-serif;
  letter-spacing: .2px;
}

/* legend under the graphic */
.dmc-cvt__key {
  display: flex;
  flex-wrap: wrap;
  gap: 8px 20px;
  justify-content: center;
  margin: 14px auto 0;
  max-width: 520px;
  font: 600 12.5px/1.35 "Nunito Sans", system-ui, sans-serif;
  color: #00155D;
}

.dmc-cvt__key span {
  display: flex;
  align-items: center;
  gap: 8px;
  min-width: 0;
}

.dmc-cvt__key i {
  flex: 0 0 auto;
  width: 16px;
  height: 6px;
  border-radius: 3px;
  background: #00155D;
}

.dmc-cvt__key i.is-target { background: #71B6FF; }

@keyframes dmcCvtMarch {
  to { stroke-dashoffset: -30; }
}

@media (prefers-reduced-motion: reduce) {
  .dmc-cvt__target { animation: none; }
}

@media (max-width: 900px) {
  .dmc-cvt { width: min(480px, 100%); }
}

@media (max-width: 600px) {
  .dmc-cvt { width: min(420px, 100%); }
  .dmc-cvt__key { font-size: 12px; gap: 6px 14px; }
}

/* ══ per-page graphic: dental-implant-marketing ══ */
/* ── Implant case path graphic, dental-implant-marketing ───────────────────
   Sits in the dmc-ref__side column of the signature section, on a light
   background. Pure inline SVG plus CSS. No JavaScript, no libraries, and no
   invented numbers: every element is a label, a state or a relationship.

   The argument it carries AT REST, before any animation runs:
     a single vertical path runs Enquiry, Contact, Consult, Plan presented,
     Case started. A dashed funnel mouth at the very top is labelled as the
     only thing more leads widens. Four leak arrows peel off the path, one at
     each hand-off. The two before the consult are drawn thin. The two after
     it are drawn thick and in sky, and a bracket on the left marks that
     stretch as the weeks after the consult. So the eye reads: volume enters
     at the top, the losses are downstream, and the widest ones happen after
     the patient has already been in the chair.

   Deliberately not a funnel with tapering widths, because a taper implies a
   quantity and there is no published quantity to imply. The chips are all the
   same size. Only the leaks differ, and they differ in weight, not in value.

   Every class is prefixed dmc-implp so it cannot collide with the fourteen
   existing per-page graphics. */

.dmc-implp{position:relative;width:min(560px,100%);margin:0 auto 22px;}
.dmc-implp__svg{display:block;width:100%;height:auto;overflow:visible;}

/* the dashed mouth at the top: added lead volume */
.dmc-implp__mouth{
  fill:none;stroke:#71B6FF;stroke-width:1.8;
  stroke-dasharray:6 6;stroke-linecap:round;
  animation:dmcImplpMouth 2.6s linear infinite;
}
.dmc-implp__top{
  fill:#2273CE;font:600 11.5px/1 Montserrat,system-ui,sans-serif;
  text-anchor:middle;
}

/* the path itself */
.dmc-implp__spine{stroke:#00155D;stroke-width:2;stroke-linecap:round;}
.dmc-implp__chip{fill:#fff;stroke:#00155D;stroke-width:1.6;}
.dmc-implp__chip--end{fill:#00155D;stroke:#00155D;}
.dmc-implp__label{
  fill:#00155D;font:700 13.5px/1 Montserrat,system-ui,sans-serif;
  text-anchor:middle;letter-spacing:-.005em;
}
.dmc-implp__label--on{fill:#fff;}

/* the travelling case, so the path reads as a sequence and not a stack */
.dmc-implp__dot{
  fill:#71B6FF;
  animation:dmcImplpTravel 5.6s ease-in-out infinite;
}

/* the leaks. thin before the consult, heavy after it */
.dmc-implp__leak{fill:none;stroke:#00155D;stroke-width:1.5;stroke-linecap:round;}
.dmc-implp__leak--late{stroke:#71B6FF;stroke-width:3.4;}
.dmc-implp__head{fill:#00155D;}
.dmc-implp__head--late{fill:#71B6FF;}
.dmc-implp__leaklabel{
  fill:#4A5F8C;font:600 11px/1 Montserrat,system-ui,sans-serif;
}
.dmc-implp__leaklabel--late{fill:#2273CE;}
.dmc-implp__pulse{animation:dmcImplpPulse 3s ease-in-out infinite;}

/* the bracket marking the stretch where the decision is actually made */
.dmc-implp__brace{fill:none;stroke:#71B6FF;stroke-width:1.6;stroke-linejoin:round;}
.dmc-implp__bracetext{
  fill:#2273CE;font:600 11.5px/1 Montserrat,system-ui,sans-serif;
  text-anchor:middle;
}

@keyframes dmcImplpMouth{to{stroke-dashoffset:-24;}}
@keyframes dmcImplpPulse{0%,100%{opacity:.72;}50%{opacity:1;}}
@keyframes dmcImplpTravel{
  0%      {transform:translateY(0);opacity:0;}
  8%      {opacity:1;}
  40%     {transform:translateY(124px);opacity:1;}
  60%     {transform:translateY(186px);opacity:.85;}
  88%,100%{transform:translateY(248px);opacity:0;}
}

/* legend */
.dmc-implp__key{
  display:flex;flex-wrap:wrap;gap:9px 18px;justify-content:center;
  font-size:12.5px;color:#4A5F8C;
}
.dmc-implp__key span{display:inline-flex;align-items:center;gap:7px;}
.dmc-implp__key i{width:16px;height:0;flex:0 0 auto;}
.dmc-implp__key i.is-path{border-top:2px solid #00155D;}
.dmc-implp__key i.is-leak{border-top:3.4px solid #71B6FF;}
.dmc-implp__key i.is-added{border-top:2px dashed #71B6FF;}

@media (max-width:600px){
  .dmc-implp{width:min(360px,100%);}
  .dmc-implp__key{font-size:11.5px;gap:8px 14px;}
}
@media (prefers-reduced-motion:reduce){
  .dmc-implp__mouth,.dmc-implp__pulse,.dmc-implp__dot{animation:none;}
  .dmc-implp__dot{opacity:1;}
}

/* ══ per-page graphic: dental-meta-ads ══ */
/* ── Capture versus create ─────────────────────────────────────────────────
   dmc-mads, the signature graphic of /dental-meta-ads/. Lives in the
   dmc-ref__side column of a light section. Pure inline SVG plus CSS, no JS,
   no libraries, viewBox based so it is responsive by construction.

   WHAT IT ARGUES. One case you want can arrive by two different paths. On the
   capture path the patient already knows what they need, so the journey is
   short and ends at once. On the create path the patient does not know yet, so
   the journey is longer and the booking comes later. The treatments are sorted
   onto the path their patient behaviour actually belongs to, and the closing
   band names the mismatch this page exists to correct: emergency work never
   crosses to the create path.

   THE REST STATE CARRIES THE ARGUMENT. Two labelled columns, two rails of
   visibly different length, sorted chips and the closing band are all static.
   The travelling pulses only sharpen the difference in path length, they do
   not create it, and they are removed entirely under prefers-reduced-motion.

   Brand palette only: navy #00155D and sky #71B6FF, plus alpha variants of
   both. No invented numbers anywhere: every label is a state or a relation.
   Every class is prefixed dmc-mads so it cannot collide with another page. */

.dmc-mads{position:relative;width:min(560px,100%);margin:0 auto 26px;}
.dmc-mads__svg{display:block;width:100%;height:auto;overflow:visible;}

/* the shared origin */
.dmc-mads__pill{fill:#00155D;}
.dmc-mads__pilltext{
  fill:#fff;font:600 10px/1 Montserrat,system-ui,sans-serif;
  text-anchor:middle;letter-spacing:.08em;
}
.dmc-mads__link{fill:none;stroke:rgba(0,21,93,.34);stroke-width:1.4;}
.dmc-mads__link--cre{stroke:#71B6FF;stroke-dasharray:4 4;}

/* the two column heads. Capture is solid navy, create is a sky outline, so the
   two paths are told apart without colour alone doing the work. */
.dmc-mads__head{fill:#00155D;}
.dmc-mads__head--cre{fill:rgba(113,182,255,.20);stroke:#71B6FF;stroke-width:1.6;}
.dmc-mads__headline{
  fill:#fff;font:700 12.5px/1 Montserrat,system-ui,sans-serif;
  text-anchor:middle;letter-spacing:.06em;
}
.dmc-mads__headline--cre{fill:#00155D;}
.dmc-mads__headsub{
  fill:#fff;fill-opacity:.82;text-anchor:middle;
  font:500 9px/1 'Plus Jakarta Sans',system-ui,sans-serif;
}
.dmc-mads__headsub--cre{fill:#00155D;fill-opacity:.78;}

/* the stage rails. The create rail is longer because it has more to do before
   a booking exists, which is the whole point of the graphic. */
.dmc-mads__rail{stroke:rgba(0,21,93,.28);stroke-width:1.4;}
.dmc-mads__rail--cre{stroke:rgba(113,182,255,.75);}
.dmc-mads__node{fill:#00155D;}
.dmc-mads__node--cre{fill:#71B6FF;stroke:#00155D;stroke-width:1.2;}
.dmc-mads__stage{
  fill:#00155D;fill-opacity:.86;
  font:500 9.5px/1 'Plus Jakarta Sans',system-ui,sans-serif;
}

/* decorative travelling pulses. Same distance covered, different durations, so
   the create path reads as the slower one. */
.dmc-mads__pulse{
  fill:#00155D;animation:dmcMadsCap 2.8s ease-in-out infinite;
}
.dmc-mads__pulse--cre{
  fill:#71B6FF;stroke:#00155D;stroke-width:1;
  animation:dmcMadsCre 6.4s ease-in-out infinite;
}
@keyframes dmcMadsCap{
  0%{transform:translateY(0);opacity:0;}
  10%{opacity:1;}
  80%{opacity:1;}
  100%{transform:translateY(44px);opacity:0;}
}
@keyframes dmcMadsCre{
  0%{transform:translateY(0);opacity:0;}
  6%{opacity:1;}
  86%{opacity:1;}
  100%{transform:translateY(84px);opacity:0;}
}

/* the sorted treatments */
.dmc-mads__caption{
  fill:#00155D;fill-opacity:.55;text-anchor:middle;
  font:600 8.5px/1 Montserrat,system-ui,sans-serif;letter-spacing:.09em;
}
.dmc-mads__chip{fill:rgba(0,21,93,.06);stroke:rgba(0,21,93,.22);stroke-width:1;}
.dmc-mads__chip--cre{fill:rgba(113,182,255,.18);stroke:#71B6FF;}
.dmc-mads__chiptext{
  fill:#00155D;text-anchor:middle;
  font:500 9.5px/1 'Plus Jakarta Sans',system-ui,sans-serif;
}

/* the mismatch this page exists to correct */
.dmc-mads__band{
  fill:rgba(113,182,255,.10);stroke:rgba(0,21,93,.35);
  stroke-width:1.2;stroke-dasharray:5 4;
}
.dmc-mads__mark{fill:none;stroke:#00155D;stroke-width:1.6;}
.dmc-mads__slash{stroke:#00155D;stroke-width:1.6;stroke-linecap:round;}
.dmc-mads__bandtext{
  fill:#00155D;font:600 10px/1 'Plus Jakarta Sans',system-ui,sans-serif;
}

/* legend */
.dmc-mads__key{
  display:flex;flex-wrap:wrap;gap:10px 20px;justify-content:center;
  margin-top:4px;font-size:12.5px;color:var(--ink-soft,#45557E);
}
.dmc-mads__key span{display:inline-flex;align-items:center;gap:7px;}
.dmc-mads__key i{width:9px;height:9px;border-radius:2px;flex:0 0 auto;}
.dmc-mads__key i.is-cap{background:#00155D;}
.dmc-mads__key i.is-cre{background:rgba(113,182,255,.35);border:1.5px solid #71B6FF;}

@media (max-width:600px){
  .dmc-mads{width:min(360px,100%);}
  .dmc-mads__key{font-size:11.5px;gap:8px 14px;}
}
@media (prefers-reduced-motion:reduce){
  .dmc-mads__pulse,.dmc-mads__pulse--cre{animation:none;opacity:0;}
}

/* ══ per-page graphic: dental-reputation-management ══ */
/* ══════════════════════════════════════════════════════════════════════════
   dmc-repmeter, the review recency meter.
   Signature graphic for /dental-reputation-management/, dmc-ref__side column.

   Argument carried at REST, with no animation and no numbers:
     · one axis, older on the left, now on the right
     · dot opacity encodes age, so older reviews are literally faded out
     · a shaded band on the right is the recent window
     · the upper lane has more marks, all pale, and none reach the window
     · the lower lane has fewer marks, but three sit inside the window at full
       strength with a sky halo
     · the caption states the relationship in words

   Nothing here labels a quantity. The lanes are labelled by relationship
   (bigger / smaller lifetime total) and by state (nothing inside the window /
   steady flow inside it). There are no star counts and no review totals.

   Pure inline SVG plus this file. No JavaScript, no libraries. Scales on its
   viewBox. Motion is decorative and is switched off under reduced motion.
   Every class is prefixed dmc-repmeter so it cannot collide with another page.
   ══════════════════════════════════════════════════════════════════════════ */

.dmc-repmeter{ position:relative; width:min(560px,100%); margin:0 auto 26px; }
.dmc-repmeter__svg{ display:block; width:100%; height:auto; overflow:visible; }

/* the recent window, the only shaded region on the chart */
.dmc-repmeter__band{
  fill:rgba(113,182,255,.13);
  stroke:#71B6FF; stroke-width:1.2;
  stroke-dasharray:5 4;
  animation:dmcRepBand 26s linear infinite;
}
.dmc-repmeter__bandlabel{
  fill:#00155D; font:600 8px/1 Montserrat,system-ui,sans-serif;
  letter-spacing:.09em; text-anchor:middle;
}

/* the present moment, right edge of the window */
.dmc-repmeter__now{
  stroke:#00155D; stroke-width:1.1; stroke-dasharray:2 4; opacity:.45;
}

/* one horizontal track per clinic */
.dmc-repmeter__lane{ stroke:rgba(0,21,93,.16); stroke-width:1.1; }
.dmc-repmeter__lanelabel{
  fill:#00155D; font:600 10px/1 Montserrat,system-ui,sans-serif;
  letter-spacing:.07em;
}
.dmc-repmeter__lanesub{
  fill:#45557E; font:400 9px/1 Montserrat,system-ui,sans-serif;
  letter-spacing:.01em;
}

/* a review. --o is its age: faint when old, solid when recent. */
.dmc-repmeter__dot{ fill:#00155D; opacity:var(--o,1); }

/* older reviews keep losing weight, which is the whole point */
.dmc-repmeter__dot--old{ animation:dmcRepDecay 7s ease-in-out infinite; }

/* reviews inside the recent window, still counting */
.dmc-repmeter__dot--live{ animation:dmcRepLive 3.6s ease-in-out infinite; }
.dmc-repmeter__halo{
  fill:none; stroke:#71B6FF; stroke-width:1.6;
  animation:dmcRepHalo 3.6s ease-out infinite;
}

/* the empty window on the stalled lane */
.dmc-repmeter__gap{
  fill:none; stroke:rgba(0,21,93,.3); stroke-width:1.2; stroke-dasharray:3 3;
}

.dmc-repmeter__axis{ stroke:rgba(0,21,93,.22); stroke-width:1.1; fill:none; }
.dmc-repmeter__axislabel{
  fill:#45557E; font:600 8px/1 Montserrat,system-ui,sans-serif;
  letter-spacing:.12em;
}
.dmc-repmeter__caption{
  fill:#00155D; font:700 10px/1 Montserrat,system-ui,sans-serif;
  letter-spacing:.1em; text-anchor:middle;
}

@keyframes dmcRepBand{ to{ stroke-dashoffset:-180; } }
@keyframes dmcRepDecay{
  0%,100%{ opacity:var(--o,1); }
  50%    { opacity:calc(var(--o,1) * .42); }
}
@keyframes dmcRepLive{
  0%,100%{ opacity:1; }
  50%    { opacity:.72; }
}
@keyframes dmcRepHalo{
  0%  { transform:scale(.7);  opacity:.6; }
  70% { opacity:0; }
  100%{ transform:scale(1.5); opacity:0; }
}

/* legend */
.dmc-repmeter__key{
  display:flex; flex-wrap:wrap; gap:10px 20px; justify-content:center;
  margin-top:4px; font-size:12.5px; color:#45557E;
}
.dmc-repmeter__key span{ display:inline-flex; align-items:center; gap:7px; }
.dmc-repmeter__key i{ width:9px; height:9px; border-radius:50%; flex:0 0 auto; }
.dmc-repmeter__key i.is-old{ background:rgba(0,21,93,.22); }
.dmc-repmeter__key i.is-live{ background:#00155D; box-shadow:0 0 0 3px rgba(113,182,255,.4); }

@media (max-width:600px){
  .dmc-repmeter{ width:min(360px,100%); }
  .dmc-repmeter__key{ font-size:11.5px; gap:8px 14px; }
}

/* The rest state carries the argument on its own, so removing motion removes
   nothing. Halos are held at their base size so the recent window still reads. */
@media (prefers-reduced-motion:reduce){
  .dmc-repmeter__band,
  .dmc-repmeter__dot--old,
  .dmc-repmeter__dot--live,
  .dmc-repmeter__halo{ animation:none; }
  .dmc-repmeter__halo{ opacity:.55; }
}

/* ══ per-page graphic: dental-sleep-medicine-marketing ══ */
/* ── The Canadian sleep pathway graphic, dental-sleep-medicine-marketing ────
   Sits in the dmc-ref__side column of the signature section, on a light
   background. Pure inline SVG plus CSS. No JavaScript, no libraries, and no
   numbers of any kind: every element is a stage, a label or a relationship.

   The argument it carries AT REST, before any animation runs:

     A single vertical pathway, symptoms to physician to sleep study to
     diagnosis, with a horizontal gate ruled across the whole graphic that
     reads "appliance follows the diagnosis". The oral appliance box sits
     below that gate and is the only filled box, labelled as the place the
     dentist works.

     A consumer advertising chip, drawn dashed and unfilled, enters at the
     very top, at symptoms. A dashed shortcut leaves that same stage, runs
     down the left margin trying to reach the appliance, and is stopped dead
     by a bar at the gate. That is the whole "do not buy consumer sleep ads"
     argument in one shape.

     Two solid arrows enter from the right, BELOW the gate: physician and
     sleep clinic referral, and the already diagnosed patient who is off
     CPAP. Solid, short, and pointing straight into the filled box.

   Deliberately not a radial network and not a pair of engines. The
   endodontist page owns inward referral flow, the periodontist page owns
   opposing pull. This one is a gated linear pathway. Every class is
   prefixed dmc-sleep so it cannot collide with any other page's graphic. */

.dmc-sleep{position:relative;width:min(560px,100%);margin:0 auto 24px;}
.dmc-sleep__svg{display:block;width:100%;height:auto;overflow:visible;}

/* the pathway boxes above the gate: outlined, nothing filled */
.dmc-sleep__stage{fill:#fff;stroke:#00155D;stroke-width:1.5;}
.dmc-sleep__stagetext{
  fill:#00155D;font:700 13px/1 Montserrat,system-ui,sans-serif;
  text-anchor:middle;letter-spacing:-.005em;
}

/* the pathway itself */
.dmc-sleep__link{stroke:#00155D;stroke-width:1.7;stroke-linecap:round;}
.dmc-sleep__head{fill:#00155D;}

/* the gate: a physician's diagnosis, ruled across the whole graphic */
.dmc-sleep__gate{stroke:#00155D;stroke-width:1.4;stroke-dasharray:2 4;}
.dmc-sleep__gatelabel{
  fill:#2273CE;font:600 8.5px/1 Montserrat,system-ui,sans-serif;
  text-anchor:end;letter-spacing:.1em;text-transform:uppercase;
}

/* the only filled box on the graphic, and the only one the dentist owns */
.dmc-sleep__chair{fill:#00155D;stroke:#00155D;stroke-width:1.5;}
.dmc-sleep__chairtext{
  fill:#fff;font:700 14px/1 Montserrat,system-ui,sans-serif;
  text-anchor:middle;letter-spacing:-.005em;
}
.dmc-sleep__chairsub{
  fill:#71B6FF;font:600 9px/1 Montserrat,system-ui,sans-serif;
  text-anchor:middle;letter-spacing:.11em;text-transform:uppercase;
}

/* consumer advertising, drawn as the only unfilled dashed chip on the page */
.dmc-sleep__ad{fill:none;stroke:#71B6FF;stroke-width:1.5;stroke-dasharray:5 4;}
.dmc-sleep__adtext{
  fill:#2273CE;font:600 11px/1 Montserrat,system-ui,sans-serif;
  text-anchor:middle;
}
.dmc-sleep__adlink{stroke:#71B6FF;stroke-width:1.7;stroke-linecap:round;}
.dmc-sleep__adhead{fill:#71B6FF;}

/* the shortcut the advertising implies, and the bar that stops it */
.dmc-sleep__deadend{
  fill:none;stroke:#71B6FF;stroke-width:1.7;
  stroke-dasharray:6 6;stroke-linecap:round;
  animation:dmcSleepMarch 2.6s linear infinite;
}
.dmc-sleep__stop{
  stroke:#00155D;stroke-width:4;stroke-linecap:round;
  animation:dmcSleepStop 2.6s ease-in-out infinite;
}
.dmc-sleep__deadtext{
  fill:#2273CE;font:600 10px/1 Montserrat,system-ui,sans-serif;
  text-anchor:start;
}

/* the two entries that do work, both of them below the gate */
.dmc-sleep__source{fill:#fff;stroke:rgba(0,21,93,.55);stroke-width:1.4;}
.dmc-sleep__sourcetext{
  fill:#00155D;font:600 10px/1 Montserrat,system-ui,sans-serif;
  text-anchor:middle;
}
.dmc-sleep__in{stroke:#00155D;stroke-width:1.9;stroke-linecap:round;}
.dmc-sleep__in--a{animation:dmcSleepIn 3.2s ease-in-out infinite;}
.dmc-sleep__in--b{animation:dmcSleepIn 3.2s ease-in-out infinite .5s;}

@keyframes dmcSleepMarch{to{stroke-dashoffset:-24;}}
@keyframes dmcSleepStop{0%,100%{opacity:.62;}50%{opacity:1;}}
@keyframes dmcSleepIn{0%,100%{transform:translateX(0);}50%{transform:translateX(-4px);}}

/* legend */
.dmc-sleep__key{
  display:flex;flex-wrap:wrap;gap:10px 18px;justify-content:center;
  margin-top:2px;font-size:12.5px;color:#4A5F8C;
}
.dmc-sleep__key span{display:inline-flex;align-items:center;gap:7px;}
.dmc-sleep__key i{width:16px;height:0;flex:0 0 auto;}
.dmc-sleep__key i.is-path{border-top:2px solid #00155D;}
.dmc-sleep__key i.is-dead{border-top:2px dashed #71B6FF;}
/* a left pointing triangle, so the entry arrows do not read as the pathway line */
.dmc-sleep__key i.is-in{
  width:0;border-top:5px solid transparent;border-bottom:5px solid transparent;
  border-right:9px solid #00155D;
}

@media (max-width:600px){
  .dmc-sleep{width:min(380px,100%);}
  .dmc-sleep__key{font-size:11.5px;gap:8px 14px;}
}
@media (prefers-reduced-motion:reduce){
  .dmc-sleep__deadend,.dmc-sleep__stop,
  .dmc-sleep__in--a,.dmc-sleep__in--b{animation:none;}
  .dmc-sleep__stop{opacity:1;}
}

/* ══ per-page graphic: dental-social-media ══ */
/* ── The consent pipeline ──────────────────────────────────────────────────
   Page: /dental-social-media/  ·  lives in the dmc-ref__side column.
   Pure inline SVG plus CSS. No JavaScript, no libraries, viewBox based.
   Palette is navy #00155D and sky #71B6FF only.

   The argument, carried at rest: capture is blocked until consent is recorded,
   every downstream copy is registered against that same consent, and a
   withdrawal has to travel back through every copy AND back into the register.
   The return arrows are drawn statically, so the diagram argues in a screenshot
   and under prefers-reduced-motion. Motion only sharpens the direction.

   Every class is prefixed dmc-cpipe so it cannot collide with another page. */

.dmc-cpipe{position:relative;width:min(560px,100%);margin:0 auto 20px;}
.dmc-cpipe__svg{display:block;width:100%;height:auto;overflow:visible;}

/* the spine: shoot, consent, register, edit, publish */
.dmc-cpipe__rail{fill:none;stroke:#00155D;stroke-opacity:.28;stroke-width:2;}
.dmc-cpipe__pulse{
  fill:none;stroke:#71B6FF;stroke-width:2.6;stroke-linecap:round;
  stroke-dasharray:22 260;stroke-dashoffset:282;
  animation:dmcCpipeFlow 4.6s linear infinite;
}
.dmc-cpipe__node{fill:#00155D;stroke:none;}
.dmc-cpipe__node--pending{
  fill:#FFFFFF;stroke:#00155D;stroke-width:1.6;stroke-dasharray:3.5 3.5;
}
.dmc-cpipe__node--gate{fill:#00155D;stroke:#71B6FF;stroke-width:3;}
.dmc-cpipe__num{
  fill:#FFFFFF;font:600 11.5px/1 Montserrat,system-ui,sans-serif;
  text-anchor:middle;letter-spacing:.02em;
}
.dmc-cpipe__num--dark{fill:#00155D;}
.dmc-cpipe__label{
  fill:#00155D;font:600 12.5px/1 Montserrat,system-ui,sans-serif;
}
.dmc-cpipe__sub{
  fill:#00155D;fill-opacity:.62;
  font:500 11px/1 Montserrat,system-ui,sans-serif;
}

/* the fan out: every downstream copy of one consented asset */
.dmc-cpipe__fan{fill:none;stroke:#00155D;stroke-opacity:.28;stroke-width:1.6;}
.dmc-cpipe__chip{fill:#FFFFFF;stroke:#00155D;stroke-width:1.6;}
.dmc-cpipe__chiplabel{
  fill:#00155D;font:600 11px/1 Montserrat,system-ui,sans-serif;
  text-anchor:middle;
}

/* the withdrawal, and the path it has to travel back along */
.dmc-cpipe__bar{fill:rgba(113,182,255,.16);stroke:#71B6FF;stroke-width:1.8;}
.dmc-cpipe__barlabel{
  fill:#00155D;font:700 12.5px/1 Montserrat,system-ui,sans-serif;
}
.dmc-cpipe__recall{
  fill:none;stroke:#71B6FF;stroke-width:2.4;stroke-linecap:round;
  stroke-dasharray:7 6;
  animation:dmcCpipeRecall 2.6s linear infinite;
}
.dmc-cpipe__recall--short{animation-duration:1.6s;}
.dmc-cpipe__arrow{fill:#71B6FF;}

@keyframes dmcCpipeFlow{to{stroke-dashoffset:0;}}
@keyframes dmcCpipeRecall{to{stroke-dashoffset:-26;}}

/* legend and caption */
.dmc-cpipe__key{
  display:flex;flex-wrap:wrap;gap:9px 18px;justify-content:center;
  margin-top:2px;font-size:12.5px;color:#00155D;
}
.dmc-cpipe__key span{display:inline-flex;align-items:center;gap:7px;}
.dmc-cpipe__key i{width:10px;height:10px;border-radius:50%;flex:0 0 auto;}
.dmc-cpipe__key i.is-pending{background:#FFFFFF;border:1.5px dashed #00155D;}
.dmc-cpipe__key i.is-held{background:#00155D;}
.dmc-cpipe__key i.is-recall{background:#71B6FF;box-shadow:0 0 0 3px rgba(113,182,255,.28);}
.dmc-cpipe__note{
  margin:14px auto 0;max-width:520px;text-align:center;
  font-size:14px;line-height:1.55;color:#00155D;opacity:.75;
}

@media (max-width:600px){
  .dmc-cpipe{width:min(340px,100%);}
  .dmc-cpipe__key{font-size:11.5px;gap:7px 13px;}
  .dmc-cpipe__note{font-size:13px;}
}
@media (prefers-reduced-motion:reduce){
  .dmc-cpipe__pulse{animation:none;stroke-dasharray:none;stroke-dashoffset:0;opacity:.45;}
  .dmc-cpipe__recall{animation:none;}
}

/* ══ per-page graphic: dental-specialties ══ */
/* ══════════════════════════════════════════════════════════════════════════
   DENTAL SPECIALTIES  ·  /dental-specialties/  ·  page graphics

   dmc-dspec: the three growth engine map. Referral dependent, consumer
   direct, hybrid, with the tension between the first two drawn as a dashed
   feedback path. Every class is prefixed dmc-dspec so it cannot collide
   with another page's graphic.

   REST STATE CARRIES THE ARGUMENT. The three bands are labelled, each shows
   who decides the case arrives, and the dashed path from the consumer band
   back into the referral band is present and labelled without animation.
   Animation only makes the dashes travel, and it is off under
   prefers-reduced-motion.

   No quantities anywhere. Labels are states and relationships only.
   ══════════════════════════════════════════════════════════════════════════ */

.dmc-dspec{ width:min(560px,100%); margin:0 auto; }

.dmc-dspec__svg{
  display:block; width:100%; height:auto;
  filter:drop-shadow(0 40px 70px rgba(3,12,40,.30));
}

/* ── bands ── */
.dmc-dspec__band{
  fill:rgba(113,182,255,.055);
  stroke:rgba(113,182,255,.22);
  stroke-width:1;
}

.dmc-dspec__title{
  fill:#71B6FF; font-family:'Montserrat',system-ui,sans-serif;
  font-size:10.5px; font-weight:700; letter-spacing:1.5px;
}

.dmc-dspec__members{
  fill:rgba(219,232,252,.72); font-family:'Nunito Sans',system-ui,sans-serif;
  font-size:9.5px; font-weight:600; letter-spacing:.2px;
}

/* ── nodes ── */
.dmc-dspec__box{
  fill:rgba(113,182,255,.10);
  stroke:rgba(113,182,255,.42);
  stroke-width:1.1;
}

.dmc-dspec__box--core{
  fill:rgba(113,182,255,.22);
  stroke:#71B6FF;
  stroke-width:1.4;
}

.dmc-dspec__label{
  fill:#EAF2FF; font-family:'Nunito Sans',system-ui,sans-serif;
  font-size:10.5px; font-weight:700; text-anchor:middle;
}

.dmc-dspec__arrow{
  stroke:#71B6FF; stroke-width:1.6; stroke-linecap:round; fill:none;
  opacity:.85;
}

/* ── the tension: consumer facing advertising is visible to referrers ── */
.dmc-dspec__tension{
  stroke:#71B6FF; stroke-width:1.5; fill:none;
  stroke-dasharray:5 5; opacity:.9;
  animation:dmcDspecTravel 3.4s linear infinite;
}

.dmc-dspec__tlabel{
  fill:#9FC8FF; font-family:'Nunito Sans',system-ui,sans-serif;
  font-size:9.5px; font-weight:700; letter-spacing:.2px;
}

.dmc-dspec__pulse{
  fill:#71B6FF; opacity:.55;
  animation:dmcDspecPulse 3.4s ease-in-out infinite;
}

@keyframes dmcDspecTravel{ to{ stroke-dashoffset:-40; } }

@keyframes dmcDspecPulse{
  0%,100%{ opacity:.25; r:3; }
  50%{ opacity:.8; r:4.4; }
}

@media (prefers-reduced-motion:reduce){
  .dmc-dspec__tension, .dmc-dspec__pulse{ animation:none; }
  .dmc-dspec__pulse{ opacity:.55; }
}

/* ── caption under the graphic, readable, not aria-hidden ── */
.dmc-dspec__note{
  margin-top:20px; max-width:520px;
  font-family:'Nunito Sans',system-ui,sans-serif;
  font-size:14.5px; line-height:1.7; color:var(--ink-soft);
}

.dmc-dspec__note strong{ color:var(--ink); }

@media (max-width:600px){
  .dmc-dspec{ width:min(420px,100%); }
  .dmc-dspec__note{ font-size:14px; text-align:left; }
}

/* ══════════════════════════════════════════════════════════════════════════
   Page utilities. Prefixed for the same reason.
   ══════════════════════════════════════════════════════════════════════════ */

/* The eight live practice-type headings run as two three-card rows so that
   neither section breaches the 340 word section cap. These two rules make the
   second row read as a continuation of the first rather than as a new band:
   the first row loses most of its bottom padding, the second loses all of its
   top padding, leaving a gap close to the 26px grid gutter. */
.dmc-page .dmc-dspec-rowa{ padding-bottom:26px; }

.dmc-page .dmc-dspec-contd{ padding-top:0; }

/* A check item is display:flex with a 16px gap, so every inline <a> inside it
   becomes its own flex item and the commas float away from the words. The
   linked group list wraps its text in one span, and these rules give the links
   inside it a visible affordance, since .dmc-page a resets colour to inherit. */
.dmc-page .dmc-dspec-links li > span{ min-width:0; }

.dmc-page .dmc-dspec-links a{
  color:var(--sky-600); font-weight:700;
  border-bottom:1px solid rgba(34,115,206,.35);
  transition:color .3s,border-color .3s;
}

.dmc-page .dmc-dspec-links a:hover{ color:var(--sky-700); border-bottom-color:currentColor; }

/* Checks sit inside a specialty card, where the shared 15px check size is
   too large next to 14.5px card copy. */
.dmc-page .dmc-dark .dmc-dspec-card .dmc-checks{ margin-bottom:20px; }

.dmc-page .dmc-dark .dmc-dspec-card .dmc-checks li{
  font-size:13.5px; line-height:1.6; padding:9px 0; gap:9px;
}

/* ══ per-page graphic: denturist-marketing ══ */
/* ═══════════════════════════════════════════════════════════════════════════
   DENTURIST MARKETING · direct access infographic  (dmc-dacc)
   Two routes to treatment, drawn side by side. The referral route carries a
   solid gate that stops the track. The denturist route carries the same gate
   position as an empty dashed outline, with the track running straight
   through it. The argument is legible with no animation at all: one lane is
   blocked, the other is not. Motion only sharpens it.
   Every class is prefixed dmc-dacc so it cannot collide with another page.
   Palette: navy #00155D, sky #71B6FF. No quantities anywhere.
   ═══════════════════════════════════════════════════════════════════════════ */

.dmc-dacc{ position:relative; width:min(560px,100%); margin:0 auto 24px; }

.dmc-dacc__svg{ display:block; width:100%; height:auto; overflow:visible; }

/* lane titles */
.dmc-dacc__lane{
  fill:#00155D; font-family:var(--font-d); font-size:12.5px; font-weight:700;
}

/* the faint rule that separates the two lanes */
.dmc-dacc__rule{ stroke:rgba(0,21,93,.14); stroke-width:1; }

/* nodes */
.dmc-dacc__node{ fill:#fff; stroke:rgba(0,21,93,.3); stroke-width:1.4; }
.dmc-dacc__node--dest{ fill:#00155D; stroke:#00155D; }

.dmc-dacc__nodetext{
  fill:#00155D; font-family:var(--font-d); font-size:13px; font-weight:600;
  text-anchor:middle;
}
.dmc-dacc__nodetext--inv{ fill:#fff; }

/* tracks */
.dmc-dacc__track{
  fill:none; stroke:rgba(0,21,93,.5); stroke-width:2.4; stroke-linecap:round;
}
.dmc-dacc__track--blocked{ stroke:rgba(0,21,93,.2); stroke-dasharray:5 6; }
.dmc-dacc__track--open{ stroke:#71B6FF; stroke-width:4; }

/* the gate, present on one route and removed on the other */
.dmc-dacc__gate{ fill:#00155D; }
.dmc-dacc__gate--ghost{
  fill:none; stroke:rgba(0,21,93,.36); stroke-width:1.4; stroke-dasharray:4 5;
}

.dmc-dacc__gatelabel{
  fill:#00155D; font-family:var(--font-d); font-size:11.5px; font-weight:700;
  text-anchor:middle;
}
.dmc-dacc__gatelabel--off{ fill:#45557E; font-weight:600; }

/* arrow heads */
.dmc-dacc__arrow{
  fill:none; stroke-width:2.2; stroke-linecap:round; stroke-linejoin:round;
}
.dmc-dacc__arrow--dim{ stroke:rgba(0,21,93,.24); }
.dmc-dacc__arrow--open{ stroke:#71B6FF; }

/* the travelling patient. Decorative: the rest state already carries the
   argument, so switching these off changes nothing about what is being said. */
.dmc-dacc__pip{ fill:#00155D; }
.dmc-dacc__pip--blocked{ animation:dmc-dacc-stop 4.6s ease-in-out infinite; }
.dmc-dacc__pip--open{
  fill:#71B6FF; stroke:#00155D; stroke-width:1.2;
  animation:dmc-dacc-run 4.6s linear infinite;
}

@keyframes dmc-dacc-stop{
  0%   { transform:translateX(0);    opacity:0; }
  10%  { transform:translateX(6px);  opacity:1; }
  42%  { transform:translateX(58px); opacity:1; }
  58%  { transform:translateX(58px); opacity:.25; }
  70%  { transform:translateX(58px); opacity:0; }
  100% { transform:translateX(58px); opacity:0; }
}

@keyframes dmc-dacc-run{
  0%   { transform:translateX(0);     opacity:0; }
  6%   { transform:translateX(6px);   opacity:1; }
  88%  { transform:translateX(150px); opacity:1; }
  96%  { transform:translateX(150px); opacity:0; }
  100% { transform:translateX(150px); opacity:0; }
}

.dmc-dacc__cap{
  max-width:470px; margin:0 auto; text-align:center;
  font-size:13.5px; line-height:1.65; color:var(--ink-soft);
}

@media (max-width:600px){
  .dmc-dacc{ width:min(380px,100%); }
  .dmc-dacc__cap{ font-size:12.5px; }
}

@media (prefers-reduced-motion:reduce){
  .dmc-dacc__pip--blocked, .dmc-dacc__pip--open{ animation:none; }
}

/* ══ per-page graphic: full-arch-implant-marketing ══ */
/* ── Two paths through one practice ────────────────────────────────────────
   Page: full-arch-implant-marketing. Lives in the dmc-ref__side column.

   What it argues: a full arch case is not a bigger implant case, it is a
   different business, and the clearest proof is operational. A routine case
   runs enquiry, booking, treatment. A full arch case has to run through the
   same front desk and then through four more stations that most practices do
   not have: same day triage, imaging and a plan inside the first visit, one
   person owning the case, and a financing conversation that was prepared
   before it was needed. Every missing station is an exit.

   The REST state carries all of it. The two lanes differ in length, the four
   missing stations are drawn hollow and dashed, the exits point out of the
   lane at exactly those four points, and the horizontal marker shows that the
   routine case is already finished while the full arch case still has most of
   its path in front of it. The travelling pulse only sharpens a contrast that
   is already drawn, which matters because this graphic is screenshotted,
   printed, and read under prefers-reduced-motion.

   Pure inline SVG plus CSS. No JavaScript, no libraries, viewBox based so it
   is responsive by construction. Brand palette only: navy #00155D, sky
   #71B6FF. Stations and states are labelled. Nothing is quantified: no counts,
   no percentages, no case values, no dollar figures anywhere on the graphic.

   Every class is prefixed dmc-fapath so it cannot collide with any of the
   other per-page graphics.
   ────────────────────────────────────────────────────────────────────────── */
.dmc-fapath{position:relative;width:min(560px,100%);margin:0 auto 22px;}
.dmc-fapath__svg{display:block;width:100%;height:auto;overflow:visible;}

/* column captions */
.dmc-fapath__cap{
  fill:#00155D;fill-opacity:.5;
  font:600 11px/1 'Plus Jakarta Sans',system-ui,sans-serif;
}

/* the two lanes */
.dmc-fapath__spine{stroke:#00155D;stroke-opacity:.5;stroke-width:2.4;stroke-linecap:round;}
.dmc-fapath__pulse{stroke:#71B6FF;stroke-width:3.4;stroke-linecap:round;}
.dmc-fapath__pulse--short{
  stroke-dasharray:14 200;stroke-dashoffset:214;
  animation:dmcFapathRun 3s linear infinite;
}
.dmc-fapath__pulse--long{
  stroke-dasharray:14 420;stroke-dashoffset:434;
  animation:dmcFapathRun 6s linear infinite;
}

/* stations */
.dmc-fapath__node{fill:#00155D;stroke:#71B6FF;stroke-width:2;}
.dmc-fapath__node--gap{fill:#fff;stroke:#71B6FF;stroke-width:2;stroke-dasharray:3 3;}
.dmc-fapath__dot{fill:#71B6FF;}
.dmc-fapath__label{
  fill:#00155D;text-anchor:end;
  font:600 12px/1 'Plus Jakarta Sans',system-ui,sans-serif;
}

/* the exits, one at every missing station */
.dmc-fapath__exit{
  stroke:#71B6FF;stroke-width:2;stroke-linecap:round;stroke-dasharray:3 3.5;
  animation:dmcFapathLeak 6s ease-in-out infinite;animation-delay:var(--xd,0s);
}
.dmc-fapath__head{
  fill:#71B6FF;
  animation:dmcFapathLeak 6s ease-in-out infinite;animation-delay:var(--xd,0s);
}
.dmc-fapath__gutter{stroke:#00155D;stroke-opacity:.22;stroke-width:1.4;stroke-dasharray:2 5;}
.dmc-fapath__gutterlabel{
  fill:#00155D;fill-opacity:.62;text-anchor:middle;
  font:600 11px/1 'Plus Jakarta Sans',system-ui,sans-serif;
}

/* where the routine case has already ended */
.dmc-fapath__mark{stroke:#00155D;stroke-opacity:.28;stroke-width:1;stroke-dasharray:2 4;}
.dmc-fapath__marklabel{
  fill:#00155D;fill-opacity:.55;
  font:600 11px/1 'Plus Jakarta Sans',system-ui,sans-serif;
}
.dmc-fapath__foot{
  fill:#00155D;fill-opacity:.62;text-anchor:middle;
  font:600 11.5px/1 'Plus Jakarta Sans',system-ui,sans-serif;
}

@keyframes dmcFapathRun{to{stroke-dashoffset:0;}}
@keyframes dmcFapathLeak{0%,100%{opacity:.85;}48%{opacity:1;}}

/* legend */
.dmc-fapath__key{
  display:flex;flex-wrap:wrap;gap:9px 18px;justify-content:center;
  margin-top:2px;font-size:12.5px;color:#4A5A7A;
}
.dmc-fapath__key span{display:inline-flex;align-items:center;gap:7px;}
.dmc-fapath__key i{
  width:11px;height:11px;border-radius:50%;flex:0 0 auto;background:#00155D;
}
.dmc-fapath__key i.is-gap{background:#fff;border:2px dashed #71B6FF;}
.dmc-fapath__key i.is-exit{
  width:16px;height:0;border-radius:0;background:none;
  border:0;border-top:3px dotted #71B6FF;
}

@media (max-width:600px){
  .dmc-fapath{width:min(380px,100%);}
  .dmc-fapath__key{font-size:11.5px;gap:8px 13px;}
  /* Two columns of labels meet in the middle of this graphic, so the mobile
     type bump is deliberately smaller than on the single-column graphics. At
     14px "Booked as an exam" runs into the left edge of the viewBox. */
  .dmc-fapath__label{font-size:13px;}
  .dmc-fapath__cap{font-size:13px;}
  .dmc-fapath__gutterlabel,.dmc-fapath__marklabel{font-size:13px;}
  .dmc-fapath__foot{font-size:13px;}
}

/* Motion is decorative. Without it the two lane lengths, the four hollow
   stations, the four exits and the finish marker still state the whole
   argument. */
@media (prefers-reduced-motion:reduce){
  .dmc-fapath__pulse,.dmc-fapath__exit,.dmc-fapath__head{animation:none;}
  .dmc-fapath__pulse{opacity:0;}
}

/* ══ per-page graphic: full-mouth-rehabilitation-marketing ══ */
/* ── The accumulation stack ────────────────────────────────────────────────
   Page: full-mouth-rehabilitation-marketing. Lives in the dmc-ref__side column.

   What it argues, in the REST state, with no animation running: the patient
   booked about one small thing (the sky chip at the top). Underneath it sits a
   stack of prior single fixes, each one the cheapest thing that would hold at
   the time, tinting darker as it accumulates. A brace ties the whole stack
   together as one comprehensive case, and the band at the foot says where that
   case came from: it was diagnosed at an exam, not asked for at the desk.

   Deliberately NOT a timeline. The prosthodontist page already owns a phased
   case spine, and this page's argument is accumulation and discovery, not
   sequence and referrer visibility.

   Pure inline SVG plus CSS. No JavaScript, no libraries, viewBox based so it is
   responsive by construction. Brand palette only: navy #00155D, sky #71B6FF.
   States and relationships are labelled, quantities never are: no years, no
   dollar figures, no tooth counts, no percentages.

   Every class is prefixed dmc-fmrx so it cannot collide with the other graphics.
   ────────────────────────────────────────────────────────────────────────── */
.dmc-fmrx{position:relative;width:min(560px,100%);margin:0 auto 22px;}
.dmc-fmrx__svg{display:block;width:100%;height:auto;overflow:visible;}

/* small captions naming the two halves of the argument */
.dmc-fmrx__cap{
  fill:#00155D;fill-opacity:.5;
  font:600 10.5px/1 'Plus Jakarta Sans',system-ui,sans-serif;
}

/* what the patient booked about: one small, specific complaint */
.dmc-fmrx__now{fill:rgba(113,182,255,.2);stroke:#71B6FF;stroke-width:2;}
.dmc-fmrx__nowlabel{
  fill:#00155D;
  font:700 13px/1 'Plus Jakarta Sans',system-ui,sans-serif;
}

/* connectors: the complaint leads into the history, the history into the case */
.dmc-fmrx__arrow{stroke:#00155D;stroke-opacity:.45;stroke-width:2;stroke-linecap:round;}
.dmc-fmrx__arrowhead{fill:#00155D;fill-opacity:.45;}

/* the run of prior single fixes, tinting darker as it piles up */
.dmc-fmrx__bar{
  fill:rgba(0,21,93,var(--bo,.08));stroke:#00155D;stroke-opacity:.34;stroke-width:1.4;
}
.dmc-fmrx__barlabel{
  fill:#00155D;
  font:600 12.5px/1 'Plus Jakarta Sans',system-ui,sans-serif;
}

/* the rail down the left, marking each visit that ended in one more fix */
.dmc-fmrx__rail{stroke:#00155D;stroke-opacity:.28;stroke-width:2.4;stroke-linecap:round;}
.dmc-fmrx__pulse{
  stroke:#71B6FF;stroke-width:3;stroke-linecap:round;
  stroke-dasharray:14 300;stroke-dashoffset:314;
  animation:dmcFmrxPulse 7s linear infinite;
}
.dmc-fmrx__node{
  fill:#71B6FF;
  animation:dmcFmrxNode 7s ease-in-out infinite;animation-delay:var(--nd,0s);
}

/* the brace that reads the whole stack as one case */
.dmc-fmrx__brace{fill:none;stroke:#00155D;stroke-opacity:.55;stroke-width:2;
  stroke-linecap:round;stroke-linejoin:round;}
.dmc-fmrx__bracelabel{
  fill:#00155D;fill-opacity:.72;text-anchor:middle;
  font:700 11.5px/1 'Plus Jakarta Sans',system-ui,sans-serif;
}

/* where the case actually came from */
.dmc-fmrx__found{fill:#00155D;}
.dmc-fmrx__foundlabel{
  fill:#fff;text-anchor:middle;
  font:700 14px/1 'Plus Jakarta Sans',system-ui,sans-serif;
}
.dmc-fmrx__foundsub{
  fill:#71B6FF;text-anchor:middle;
  font:600 11.5px/1 'Plus Jakarta Sans',system-ui,sans-serif;
}

@keyframes dmcFmrxPulse{to{stroke-dashoffset:0;}}
@keyframes dmcFmrxNode{0%,100%{opacity:.55;}18%{opacity:1;}}

/* legend */
.dmc-fmrx__key{
  display:flex;flex-wrap:wrap;gap:9px 18px;justify-content:center;
  margin-top:2px;font-size:12.5px;color:#4A5A7A;
}
.dmc-fmrx__key span{display:inline-flex;align-items:center;gap:7px;}
.dmc-fmrx__key i{width:11px;height:11px;border-radius:3px;flex:0 0 auto;
  background:rgba(0,21,93,.16);border:1.5px solid rgba(0,21,93,.4);}
.dmc-fmrx__key i.is-now{background:rgba(113,182,255,.25);border-color:#71B6FF;}
.dmc-fmrx__key i.is-found{background:#00155D;border-color:#00155D;}

@media (max-width:600px){
  .dmc-fmrx{width:min(380px,100%);}
  .dmc-fmrx__key{font-size:11.5px;gap:8px 13px;}
  .dmc-fmrx__barlabel{font-size:14px;}
  .dmc-fmrx__nowlabel{font-size:14.5px;}
  .dmc-fmrx__cap{font-size:12px;}
  .dmc-fmrx__bracelabel{font-size:13px;}
}

/* Motion is decorative. With it switched off the chip, the tinting stack, the
   brace and the foot band still state the whole argument on their own. */
@media (prefers-reduced-motion:reduce){
  .dmc-fmrx__pulse,.dmc-fmrx__node{animation:none;}
  .dmc-fmrx__pulse{opacity:0;}
}

/* ══ per-page graphic: general-dentistry-marketing ══ */
/* ── Two stacked economies ─────────────────────────────────────────────────
   Used in the dmc-ref__side column of the general-dentistry-marketing page.
   Pure SVG + CSS, no JS, viewBox based so it is responsive by construction.
   Brand palette only: navy #00155D, sky #71B6FF.

   The argument must be readable at rest, because the page is screenshotted and
   because motion is switched off under prefers-reduced-motion. At rest you can
   already see: two bands sharing one practice, the four levers in rank order,
   and which band each lever acts on. The travelling pulse only sharpens the
   order in which they pay.

   Labels states and relationships only. No quantities, no scale, no figures.
   Every class is prefixed dmc-econ so it cannot collide with another page.
   Sits on a light section, so type is navy on white.
─────────────────────────────────────────────────────────────────────────── */
.dmc-econ{position:relative;width:min(560px,100%);margin:0 auto 22px;}
.dmc-econ__svg{display:block;width:100%;height:auto;overflow:visible;}

/* column headings inside the graphic */
.dmc-econ__title{
  fill:#00155D;font:700 12px/1 Montserrat,system-ui,sans-serif;
  letter-spacing:.03em;
}

/* the two bands */
.dmc-econ__band{stroke-width:1.5;}
.dmc-econ__band--top{fill:#00155D;stroke:#00155D;}
.dmc-econ__band--base{fill:rgba(113,182,255,.14);stroke:#71B6FF;}

.dmc-econ__blab{fill:#FFFFFF;font:700 15px/1 Montserrat,system-ui,sans-serif;}
.dmc-econ__bsub{fill:#71B6FF;font:500 12px/1 'Plus Jakarta Sans',system-ui,sans-serif;}
.dmc-econ__blabd{fill:#00155D;font:700 15px/1 Montserrat,system-ui,sans-serif;}
.dmc-econ__bsubd{fill:#00155D;opacity:.62;font:500 12px/1 'Plus Jakarta Sans',system-ui,sans-serif;}

/* the shared boundary: one practice, one team, one set of chairs */
.dmc-econ__divider{stroke:#71B6FF;stroke-width:1.4;stroke-dasharray:4 5;}
.dmc-econ__mid{
  fill:#00155D;opacity:.55;text-anchor:middle;
  font:500 10.5px/1 'Plus Jakarta Sans',system-ui,sans-serif;
}

/* the ranked levers */
.dmc-econ__lever{fill:#FFFFFF;stroke:#00155D;stroke-width:1.4;}
.dmc-econ__lever--weak{fill:rgba(113,182,255,.08);stroke:#71B6FF;stroke-dasharray:5 4;}
.dmc-econ__rank{
  fill:#00155D;opacity:.45;
  font:700 11px/1 Montserrat,system-ui,sans-serif;letter-spacing:.04em;
}
.dmc-econ__lname{fill:#00155D;font:600 13px/1 'Plus Jakarta Sans',system-ui,sans-serif;}

/* which band each lever acts on */
.dmc-econ__link{fill:none;stroke:#00155D;stroke-width:1.6;opacity:.5;}
.dmc-econ__link--weak{stroke:#71B6FF;stroke-dasharray:4 4;opacity:.95;}
.dmc-econ__tip{fill:#00155D;}
.dmc-econ__tip--weak{fill:#71B6FF;}

/* decorative pulse, rank order. Adds nothing the rest state does not say. */
.dmc-econ__flow{
  fill:none;stroke:#71B6FF;stroke-width:2.6;stroke-linecap:round;
  stroke-dasharray:18 240;stroke-dashoffset:258;
  animation:dmcEconFlow 4.4s linear infinite;
}
@keyframes dmcEconFlow{to{stroke-dashoffset:0;}}

/* legend and the honesty note */
.dmc-econ__key{
  display:flex;flex-wrap:wrap;gap:10px 20px;justify-content:center;
  margin-top:2px;font-size:12.5px;color:#45557E;
}
.dmc-econ__key span{display:inline-flex;align-items:center;gap:7px;}
.dmc-econ__sw{width:11px;height:11px;border-radius:3px;flex:0 0 auto;}
.dmc-econ__sw--top{background:#00155D;}
.dmc-econ__sw--base{background:rgba(113,182,255,.35);border:1.5px solid #71B6FF;}
.dmc-econ__sw--weak{background:transparent;border:1.5px dashed #71B6FF;}
.dmc-econ__note{
  margin-top:8px;text-align:center;font-size:12.5px;line-height:1.6;color:#45557E;
  opacity:.78;
}

@media (max-width:600px){
  .dmc-econ{width:min(380px,100%);}
  .dmc-econ__key{font-size:11.5px;gap:8px 14px;}
  .dmc-econ__note{font-size:11.5px;}
}
@media (prefers-reduced-motion:reduce){
  .dmc-econ__flow{animation:none;display:none;}
}

/* ══ per-page graphic: multi-location-dental-marketing ══ */
/* ===========================================================================
   dmc-mlring, the multi-location hub and local rings graphic
   Page: /multi-location-dental-marketing/   Section: dmc-ref (light)

   What it argues, at rest, with no animation running:
     one hub carries brand and systems DOWN to every location, and stops at a
     line above the rings. Below that line sit separate local rings that never
     touch each other. Each ring holds your clinic and the independents in the
     same map pack. Nothing is quantified: no counts, no scores, no figures.

   Every class is prefixed dmc-mlring so it cannot collide with dmc-refnet on
   the endodontist page or with any other per-page graphic.
   Palette: navy #00155D, sky #71B6FF only.
   =========================================================================== */

.dmc-mlring{
  width:min(560px,100%);
  margin:0 auto;
}

.dmc-mlring__svg{
  display:block;
  width:100%;
  height:auto;
  overflow:visible;
}

/* ---- the hub ---- */
.dmc-mlring__hub{
  fill:#00155D;
}
.dmc-mlring__hublabel{
  fill:#fff;
  font-family:'Nunito Sans',system-ui,sans-serif;
  font-size:13px;
  font-weight:800;
  letter-spacing:.09em;
  text-anchor:middle;
}

/* ---- spokes: what the hub really does carry down ---- */
.dmc-mlring__spoke{
  stroke:#00155D;
  stroke-width:1.6;
  stroke-opacity:.34;
  stroke-linecap:round;
}
.dmc-mlring__flow{
  stroke:#71B6FF;
  stroke-width:3;
  stroke-linecap:round;
  stroke-dasharray:16 600;
  stroke-dashoffset:16;
  animation:dmcMlFlow 3.6s cubic-bezier(.42,0,.7,1) infinite;
}
.dmc-mlring__flow--mid{
  animation-name:dmcMlFlowMid;
}
@keyframes dmcMlFlow{
  0%   {stroke-dashoffset:16;  opacity:0}
  12%  {opacity:1}
  74%  {opacity:1}
  100% {stroke-dashoffset:-161;opacity:0}
}
@keyframes dmcMlFlowMid{
  0%   {stroke-dashoffset:16; opacity:0}
  12%  {opacity:1}
  74%  {opacity:1}
  100% {stroke-dashoffset:-86;opacity:0}
}

/* ---- the boundary the hub cannot cross ---- */
.dmc-mlring__border{
  stroke:#00155D;
  stroke-width:1.1;
  stroke-opacity:.28;
  stroke-dasharray:3 7;
}
.dmc-mlring__stop{
  stroke:#00155D;
  stroke-width:3.4;
  stroke-opacity:.85;
  stroke-linecap:round;
}
.dmc-mlring__note{
  fill:#00155D;
  fill-opacity:.62;
  font-family:'Nunito Sans',system-ui,sans-serif;
  font-size:11.5px;
  font-weight:700;
  text-anchor:middle;
}

/* ---- the local rings ---- */
.dmc-mlring__halo{
  fill:#71B6FF;
  fill-opacity:.09;
}
.dmc-mlring__ring{
  fill:none;
  stroke:#71B6FF;
  stroke-width:2.2;
  stroke-dasharray:6 7;
  animation:dmcMlDrift 34s linear infinite;
}
@keyframes dmcMlDrift{
  to{stroke-dashoffset:-104}
}
.dmc-mlring__site{
  fill:#00155D;
}
.dmc-mlring__pin{
  fill:#71B6FF;
}
.dmc-mlring__rival{
  fill:none;
  stroke:#00155D;
  stroke-width:1.5;
  stroke-opacity:.4;
  stroke-dasharray:2.6 3;
}
.dmc-mlring__ringlabel{
  fill:#00155D;
  fill-opacity:.7;
  font-family:'Nunito Sans',system-ui,sans-serif;
  font-size:9.4px;
  font-weight:800;
  letter-spacing:.03em;
  text-anchor:middle;
}
.dmc-mlring__foot{
  fill:#00155D;
  fill-opacity:.55;
  font-family:'Nunito Sans',system-ui,sans-serif;
  font-size:11.5px;
  font-weight:600;
  font-style:italic;
  text-anchor:middle;
}

/* ---- key ---- */
.dmc-mlring__key{
  display:flex;
  flex-wrap:wrap;
  gap:8px 18px;
  justify-content:center;
  margin-top:18px;
  font-family:'Nunito Sans',system-ui,sans-serif;
  font-size:13px;
  color:rgba(0,21,93,.72);
}
.dmc-mlring__key span{
  display:inline-flex;
  align-items:center;
  gap:7px;
  min-width:0;
}
.dmc-mlring__key i{
  flex:0 0 auto;
  display:inline-block;
  width:11px;
  height:11px;
  border-radius:50%;
}
.dmc-mlring__key i.is-hub{
  width:20px;
  height:3px;
  border-radius:2px;
  background:#00155D;
  opacity:.55;
}
.dmc-mlring__key i.is-site{
  background:#00155D;
  box-shadow:inset 0 0 0 3px #71B6FF;
}
.dmc-mlring__key i.is-rival{
  background:transparent;
  border:1.6px dashed rgba(0,21,93,.45);
}

@media (max-width:600px){
  .dmc-mlring{width:min(400px,100%)}
  .dmc-mlring__key{font-size:12px;gap:6px 14px}
}

/* The rest state is the argument. Animation only sharpens it, so removing the
   travelling pulses entirely is safe: the spokes, the stop bars and the three
   separate rings still read exactly the same. */
@media (prefers-reduced-motion:reduce){
  .dmc-mlring__ring{
    animation:none;
  }
  .dmc-mlring__flow{
    animation:none;
    display:none;
  }
}

/* ══ per-page graphic: omfs-marketing ══ */
/* ── Two demand engines, omfs-marketing ────────────────────────────────
   Sits in the dmc-ref__side column of the signature section, on a light
   background. Pure inline SVG plus CSS. No JavaScript, no libraries, no
   numbers anywhere: every element is a label or a relationship.

   The argument it carries AT REST, before any animation runs:
     two parallel lanes, one above the other, each with its own source on
     the left. The upper lane is the referring dentists sending the cases
     they will not take on. The lower lane is patients who searched and
     found the practice themselves. A dashed guard line runs the full
     length between them, labelled, so the eye reads "these two never
     touch". Only past the end of that guard do the two curves converge,
     and they converge on one node: the surgical schedule. Nothing crosses
     from one lane into the other at any point.

   Animation only sharpens what is already there: a travelling dash on
   each lane shows both engines running at once, at different rhythms,
   and a soft pulse on the two ports shows both are live. Frozen, the
   diagram is unchanged apart from the dashes sitting still.

   Every class is prefixed dmc-omfs so it cannot collide with any other
   page's graphic. Checked against dist/global/dmc-design-system.css and
   every existing graphics/*.css file before use: no collision. */

.dmc-omfs{position:relative;width:min(560px,100%);margin:0 auto 26px;}
.dmc-omfs__svg{display:block;width:100%;height:auto;overflow:visible;}

/* the two lane bands, so the parallel structure reads before any label does */
.dmc-omfs__band{fill:rgba(0,21,93,.035);stroke:rgba(0,21,93,.10);stroke-width:1;}

/* "Engine one" / "Engine two" markers above each band */
.dmc-omfs__eyebrow{
  fill:#4A5F8C;font:600 10px/1 Montserrat,system-ui,sans-serif;text-anchor:start;
}

/* the source node on each lane, and the shared destination on the right */
.dmc-omfs__node{stroke-width:1.8;}
.dmc-omfs__node--ref{fill:#00155D;stroke:#00155D;}
.dmc-omfs__node--pat{fill:#fff;stroke:#00155D;}
.dmc-omfs__node--hub{fill:#fff;stroke:#2273CE;stroke-width:2.2;}
.dmc-omfs__nodetext{
  fill:#fff;font:700 12px/1 Montserrat,system-ui,sans-serif;text-anchor:middle;
}
.dmc-omfs__nodetext--ink{fill:#00155D;}
.dmc-omfs__nodetext--hub{fill:#2273CE;}

/* the lanes themselves: a base track with a travelling dash over it */
.dmc-omfs__track{fill:none;stroke:rgba(0,21,93,.34);stroke-width:1.6;stroke-linecap:round;}
.dmc-omfs__flow{
  fill:none;stroke:#2273CE;stroke-width:2.4;stroke-linecap:round;
  stroke-dasharray:9 7;animation:dmcOmfsFlow 1.9s linear infinite;
}
.dmc-omfs__flow--slow{animation-duration:2.8s;stroke:#71B6FF;}
.dmc-omfs__head{fill:#2273CE;}
.dmc-omfs__head--slow{fill:#71B6FF;}

/* what travels on each lane */
.dmc-omfs__cargo{
  fill:#00155D;font:600 10.5px/1 Montserrat,system-ui,sans-serif;text-anchor:middle;
}

/* the guard line between the lanes: the promise of the section */
.dmc-omfs__guard{fill:none;stroke:rgba(34,115,206,.55);stroke-width:1.4;stroke-dasharray:5 5;}
.dmc-omfs__guardtext{
  fill:#2273CE;font:700 10.5px/1 Montserrat,system-ui,sans-serif;text-anchor:middle;
}

/* the live port where each engine leaves its source */
.dmc-omfs__port{
  fill:#2273CE;transform-box:fill-box;transform-origin:center;
  animation:dmcOmfsPulse 2.4s ease-in-out infinite;
}
.dmc-omfs__port--slow{fill:#71B6FF;animation-duration:3.2s;}

@keyframes dmcOmfsFlow{to{stroke-dashoffset:-32;}}
@keyframes dmcOmfsPulse{0%,100%{transform:scale(1);opacity:1;}50%{transform:scale(1.45);opacity:.6;}}

/* legend */
.dmc-omfs__key{
  display:flex;flex-wrap:wrap;gap:10px 18px;justify-content:center;
  margin-top:2px;font-size:12.5px;color:#4A5F8C;
}
.dmc-omfs__key span{display:inline-flex;align-items:center;gap:7px;}
.dmc-omfs__key i{width:16px;height:0;flex:0 0 auto;}
.dmc-omfs__key i.is-ref{border-top:2px solid #2273CE;}
.dmc-omfs__key i.is-pat{border-top:2px solid #71B6FF;}

@media (max-width:600px){
  .dmc-omfs{width:min(360px,100%);}
  .dmc-omfs__key{font-size:11.5px;gap:8px 14px;}
}
@media (prefers-reduced-motion:reduce){
  .dmc-omfs__flow,.dmc-omfs__port{animation:none;}
  .dmc-omfs__port{opacity:1;}
}

/* ══ per-page graphic: orthodontist-marketing ══ */
/* ── The referral shift graphic, orthodontist-marketing ─────────────────
   Sits in the dmc-ref__side column of the signature section, on a light
   background. Pure inline SVG plus CSS. No JavaScript, no libraries, no
   invented numbers: every element is a label or a relationship.

   The argument it carries at rest, before any animation runs:
     two stacked lanes, "then" over "now". In the "then" lane, three
     parallel lines run unbroken from the general dentist to the
     orthodontist, every case type referred. In the "now" lane, two of
     those three lines peel away into a dashed "kept in the practice"
     tray next to the general dentist, and only one line, brighter and in
     motion, still reaches the orthodontist: the complex cases.

   Every class is prefixed dmc-ortho so it cannot collide with any other
   page's graphic. Checked against dist/global/dmc-design-system.css and
   every existing graphics/*.css before use: no collision. */

.dmc-ortho{position:relative;width:min(560px,100%);margin:0 auto 26px;}
.dmc-ortho__svg{display:block;width:100%;height:auto;overflow:visible;}

/* the "Then" / "Now" pills above each lane */
.dmc-ortho__chip{fill:rgba(0,21,93,.06);stroke:rgba(0,21,93,.28);stroke-width:1.3;}
.dmc-ortho__chiptext{
  fill:#00155D;font:700 12px/1 Montserrat,system-ui,sans-serif;
  text-anchor:middle;letter-spacing:.02em;
}

/* the general-dentist and orthodontist nodes, repeated in both lanes */
.dmc-ortho__node{stroke-width:1.8;}
.dmc-ortho__node--gp{fill:#00155D;stroke:#00155D;}
.dmc-ortho__node--ortho{fill:#fff;stroke:#00155D;}
.dmc-ortho__nodetext{
  fill:#fff;font:700 12px/1 Montserrat,system-ui,sans-serif;text-anchor:middle;
}
.dmc-ortho__nodetext--ortho{fill:#00155D;}

/* the referral lines: three that all arrive (then), one that still does (now) */
.dmc-ortho__flow{fill:none;stroke:rgba(0,21,93,.50);stroke-width:1.6;stroke-linecap:round;}
.dmc-ortho__flow--active{
  fill:none;stroke:#2273CE;stroke-width:2.4;stroke-linecap:round;
  stroke-dasharray:8 6;animation:dmcOrthoFlow 1.6s linear infinite;
}
.dmc-ortho__head{fill:#00155D;}
.dmc-ortho__head--active{fill:#2273CE;}

/* the two lines that now divert into the practice instead of referring out */
.dmc-ortho__divert{fill:none;stroke:rgba(113,182,255,.9);stroke-width:1.8;stroke-dasharray:5 5;}
.dmc-ortho__split{
  fill:#2273CE;transform-box:fill-box;transform-origin:center;
  animation:dmcOrthoPulse 2.2s ease-in-out infinite;
}
.dmc-ortho__dot{fill:#71B6FF;}

/* the "kept in the practice" tray */
.dmc-ortho__tray{fill:rgba(113,182,255,.08);stroke:rgba(0,21,93,.32);stroke-width:1.4;stroke-dasharray:4 4;}
.dmc-ortho__traytext{fill:#2273CE;font:600 10.5px/1 Montserrat,system-ui,sans-serif;text-anchor:middle;}

@keyframes dmcOrthoFlow{to{stroke-dashoffset:-28;}}
@keyframes dmcOrthoPulse{0%,100%{transform:scale(1);opacity:1;}50%{transform:scale(1.4);opacity:.65;}}

/* legend */
.dmc-ortho__key{
  display:flex;flex-wrap:wrap;gap:10px 18px;justify-content:center;
  margin-top:2px;font-size:12.5px;color:#4A5F8C;
}
.dmc-ortho__key span{display:inline-flex;align-items:center;gap:7px;}
.dmc-ortho__key i{width:16px;height:0;flex:0 0 auto;}
.dmc-ortho__key i.is-active{border-top:2px solid #2273CE;}
.dmc-ortho__key i.is-retained{border-top:2px dashed #71B6FF;}

@media (max-width:600px){
  .dmc-ortho{width:min(360px,100%);}
  .dmc-ortho__key{font-size:11.5px;gap:8px 14px;}
}
@media (prefers-reduced-motion:reduce){
  .dmc-ortho__flow--active,.dmc-ortho__split{animation:none;}
  .dmc-ortho__split{opacity:1;}
}

/* ══ per-page graphic: orthognathic-surgery-marketing ══ */
/* ── The orthognathic decision path ────────────────────────────────────────
   Page: orthognathic-surgery-marketing. Lives in the dmc-ref__side column.

   What it argues, in the REST state, with no animation and no numbers:

     1. The pathway is long. Eight stages run from the first concern to the
        finishing orthodontics, and most of them sit BELOW the point where the
        surgeon is chosen. The brace on the left of the lower spine says so.
     2. The surgeon is chosen early, not at the end. The highlighted band and
        ringed node sit near the top of the path.
     3. Nobody chooses alone. Four labelled parties converge on that one node.
     4. Funding is not a closing question. The band down the right edge runs
        the full height of the path.

   Deliberately absent: month counts, year counts, percentages, case volumes.
   The stages and the relationships between them are labelled. Quantities are
   not, because none of them could be sourced.

   Pure inline SVG plus CSS. No JavaScript, no libraries, viewBox based so it
   is responsive by construction. Brand palette only: navy #00155D, sky
   #71B6FF.

   Every class is prefixed dmc-ognx so it cannot collide with the fourteen
   graphics already in this folder.
   ────────────────────────────────────────────────────────────────────────── */
.dmc-ognx{position:relative;width:min(560px,100%);margin:0 auto 22px;}
.dmc-ognx__svg{display:block;width:100%;height:auto;overflow:visible;}

/* column captions across the top */
.dmc-ognx__cap{
  fill:#00155D;fill-opacity:.5;
  font:600 10.5px/1 'Plus Jakarta Sans',system-ui,sans-serif;
}

/* the pathway spine and its stage nodes */
.dmc-ognx__spine{stroke:#00155D;stroke-opacity:.5;stroke-width:2.4;stroke-linecap:round;}
.dmc-ognx__pulse{
  stroke:#71B6FF;stroke-width:3;stroke-linecap:round;
  stroke-dasharray:18 440;stroke-dashoffset:458;
  animation:dmcOgnxPulse 9s linear infinite;
}
.dmc-ognx__node{fill:#fff;stroke:#00155D;stroke-width:1.8;}
.dmc-ognx__node--pick{fill:#00155D;stroke:#71B6FF;stroke-width:2.4;}
.dmc-ognx__dot{fill:#71B6FF;}
.dmc-ognx__label{
  fill:#00155D;
  font:600 12px/1 'Plus Jakarta Sans',system-ui,sans-serif;
}
.dmc-ognx__label--pick{fill:#00155D;font-weight:800;}
.dmc-ognx__note{
  fill:#00155D;fill-opacity:.62;
  font:600 10.5px/1 'Plus Jakarta Sans',system-ui,sans-serif;
}

/* the decision row: the one place where every party is engaged at once */
.dmc-ognx__band{fill:#71B6FF;fill-opacity:.16;}
.dmc-ognx__ring{
  fill:none;stroke:#71B6FF;stroke-width:1.6;
  animation:dmcOgnxRing 4.5s ease-in-out infinite;
}
.dmc-ognx__who{fill:#fff;stroke:#00155D;stroke-width:1.6;}
.dmc-ognx__whodot{fill:#00155D;}
.dmc-ognx__wholabel{
  fill:#00155D;text-anchor:end;
  font:600 11px/1 'Plus Jakarta Sans',system-ui,sans-serif;
}
.dmc-ognx__join{stroke:#00155D;stroke-opacity:.42;stroke-width:1.4;}

/* the brace marking everything that happens after the choice is made */
.dmc-ognx__brace{stroke:#00155D;stroke-opacity:.3;stroke-width:1.4;stroke-linecap:round;}
.dmc-ognx__bracelabel{
  fill:#00155D;fill-opacity:.6;text-anchor:middle;
  font:600 10.5px/1 'Plus Jakarta Sans',system-ui,sans-serif;
}

/* funding, open the whole way down the right edge */
.dmc-ognx__fund{fill:#71B6FF;fill-opacity:.28;}
.dmc-ognx__fundlabel{
  fill:#00155D;fill-opacity:.66;text-anchor:middle;
  font:600 11px/1 'Plus Jakarta Sans',system-ui,sans-serif;
}

@keyframes dmcOgnxPulse{to{stroke-dashoffset:0;}}
@keyframes dmcOgnxRing{0%,100%{opacity:.55;}50%{opacity:1;}}

/* legend */
.dmc-ognx__key{
  display:flex;flex-wrap:wrap;gap:9px 18px;justify-content:center;
  margin-top:2px;font-size:12.5px;color:#4A5A7A;
}
.dmc-ognx__key span{display:inline-flex;align-items:center;gap:7px;}
.dmc-ognx__key i{width:11px;height:11px;border-radius:50%;flex:0 0 auto;
  background:#00155D;}
.dmc-ognx__key i.is-pick{background:transparent;border:2px solid #71B6FF;}
.dmc-ognx__key i.is-fund{
  width:15px;height:0;border-radius:0;border:0;
  border-top:5px solid rgba(113,182,255,.55);
}

@media (max-width:600px){
  .dmc-ognx{width:min(370px,100%);}
  .dmc-ognx__key{font-size:11.5px;gap:8px 13px;}
  .dmc-ognx__label{font-size:14px;}
  .dmc-ognx__wholabel{font-size:13px;}
  .dmc-ognx__cap{font-size:12px;}
  .dmc-ognx__note{font-size:12px;}
}

/* Motion is decorative. With it removed the spine, the eight stages, the
   highlighted decision row, the four converging parties, the brace and the
   funding band still state the entire argument. */
@media (prefers-reduced-motion:reduce){
  .dmc-ognx__pulse,.dmc-ognx__ring{animation:none;}
  .dmc-ognx__pulse{opacity:0;}
  .dmc-ognx__ring{opacity:.85;}
}

/* ══ per-page graphic: our-services ══ */
/* ═══════════════════════════════════════════════════════════════════════
   our-services.css  ·  dmc-osix, "the six disciplines interlocking"

   The signature graphic for /our-services/. It is deliberately NOT the
   ecosystem wheel ({{WHEEL}} is used further down the same page). The wheel
   argues MEMBERSHIP: eight disciplines, one operating system, one team.
   This one argues DEPENDENCY and FAILURE: six stages in a fixed order, each
   producing only what the next stage can consume, with one stage drawn
   missing so the break is visible without hovering, without JavaScript and
   without motion.

   Rest state carries the whole argument:
     · six named stages, top to bottom, in the order they run
     · under each name, the one thing it hands to the stage below it
     · stage six drawn dashed and chipped "missing"
     · the spine between five and six drawn broken, labelled "chain stops here"
   Animation only adds a travelling pulse that dies at the break. It is
   disabled under prefers-reduced-motion, where the static break still reads.

   Palette: navy #00155D, sky #71B6FF, white text. Nothing else.
   Every selector is prefixed dmc-osix so it cannot collide with another page.
   ═══════════════════════════════════════════════════════════════════════ */

.dmc-osix {
  width: min(560px, 100%);
  margin: 0 auto;
}

.dmc-osix__svg {
  display: block;
  width: 100%;
  height: auto;
  overflow: visible;
}

/* ---- the panel ---- */
.dmc-osix__panel { fill: #00155D; }

.dmc-osix__edge {
  fill: none;
  stroke: #71B6FF;
  stroke-opacity: .28;
  stroke-width: 1;
}

/* ---- the spine and its connectors ---- */
.dmc-osix__spine {
  stroke: #71B6FF;
  stroke-opacity: .55;
  stroke-width: 2;
  stroke-linecap: round;
}

.dmc-osix__spine--broken {
  stroke-opacity: .34;
  stroke-dasharray: 4 5;
}

.dmc-osix__tip {
  fill: #71B6FF;
  fill-opacity: .7;
}

.dmc-osix__break {
  stroke: #71B6FF;
  stroke-width: 2;
  stroke-linecap: round;
}

/* ---- stage badges ---- */
.dmc-osix__badge {
  fill: #71B6FF;
}

.dmc-osix__badge--gone {
  fill: none;
  stroke: #71B6FF;
  stroke-opacity: .55;
  stroke-width: 1.4;
  stroke-dasharray: 3 4;
}

.dmc-osix__num {
  fill: #00155D;
  font-family: "Montserrat", "Nunito Sans", system-ui, sans-serif;
  font-size: 11px;
  font-weight: 700;
  text-anchor: middle;
}

.dmc-osix__num--gone {
  fill: #71B6FF;
  fill-opacity: .8;
}

/* ---- stage cards ---- */
.dmc-osix__node {
  fill: #71B6FF;
  fill-opacity: .11;
  stroke: #71B6FF;
  stroke-opacity: .42;
  stroke-width: 1.2;
}

.dmc-osix__node--gone {
  fill-opacity: 0;
  stroke-opacity: .5;
  stroke-dasharray: 5 5;
}

.dmc-osix__name {
  fill: #FFFFFF;
  font-family: "Nunito Sans", system-ui, sans-serif;
  font-size: 13.5px;
  font-weight: 700;
}

.dmc-osix__name--gone {
  fill: #71B6FF;
  fill-opacity: .82;
}

.dmc-osix__hand {
  fill: #71B6FF;
  fill-opacity: .92;
  font-family: "Nunito Sans", system-ui, sans-serif;
  font-size: 10.5px;
  font-weight: 400;
}

.dmc-osix__hand--gone { fill-opacity: .6; }

/* ---- the "missing" chip and the break caption ---- */
.dmc-osix__chip {
  fill: none;
  stroke: #71B6FF;
  stroke-opacity: .75;
  stroke-width: 1.2;
}

.dmc-osix__chiptext {
  fill: #71B6FF;
  font-family: "Montserrat", "Nunito Sans", system-ui, sans-serif;
  font-size: 9.5px;
  font-weight: 700;
  text-anchor: middle;
}

.dmc-osix__stop {
  fill: #71B6FF;
  font-family: "Nunito Sans", system-ui, sans-serif;
  font-size: 10.5px;
  font-style: italic;
  font-weight: 600;
}

/* ---- the travelling pulse, decoration only ---- */
.dmc-osix__pulse {
  fill: #71B6FF;
  transform-box: view-box;
  transform-origin: 0 0;
  animation: dmcOsixFlow 6.4s cubic-bezier(.5, 0, .5, 1) infinite;
}

@keyframes dmcOsixFlow {
  0%        { transform: translateY(0);     opacity: 0; }
  6%        { transform: translateY(0);     opacity: 1; }
  14%       { transform: translateY(74px);  opacity: 1; }
  28%       { transform: translateY(148px); opacity: 1; }
  42%       { transform: translateY(222px); opacity: 1; }
  56%       { transform: translateY(296px); opacity: 1; }
  66%       { transform: translateY(320px); opacity: 1; }
  74%       { transform: translateY(327px); opacity: .12; }
  100%      { transform: translateY(327px); opacity: 0; }
}

/* ---- legend under the graphic ---- */
.dmc-osix__key {
  display: flex;
  flex-wrap: wrap;
  gap: 8px 20px;
  margin: 16px 2px 0;
  font-family: "Nunito Sans", system-ui, sans-serif;
  font-size: 13px;
  line-height: 1.5;
  color: #00155D;
}

.dmc-osix__key span {
  display: flex;
  align-items: center;
  gap: 8px;
}

.dmc-osix__key i {
  flex: 0 0 auto;
  width: 16px;
  height: 10px;
  border-radius: 3px;
  background: #71B6FF;
  border: 1.2px solid #00155D;
}

.dmc-osix__key i.is-gone {
  background: transparent;
  border-style: dashed;
}

.dmc-osix__note {
  margin: 10px 2px 0;
  font-family: "Nunito Sans", system-ui, sans-serif;
  font-size: 13px;
  line-height: 1.55;
  color: #00155D;
  opacity: .78;
}

@media (max-width: 600px) {
  .dmc-osix { width: min(420px, 100%); }
  .dmc-osix__key { font-size: 12px; }
  .dmc-osix__note { font-size: 12px; }
}

@media (prefers-reduced-motion: reduce) {
  .dmc-osix__pulse {
    animation: none;
    opacity: 0;
  }
}

/* ══ per-page graphic: pediatric-dentist-marketing ══ */
/* ── Family lifecycle ──────────────────────────────────────────────────────
   Used in the dmc-ref__side column of /pediatric-dentist-marketing/.
   Pure inline SVG plus CSS. No JavaScript, no libraries, no images.

   What it shows: one parent makes one decision, siblings enter together, the
   household sits in active care, and every patient eventually ages out the
   other side. A return loop runs from the exit back to the parent, because the
   parent relationship is the only part that survives the age-out.

   The REST STATE carries the whole argument on its own: the entry fan, the
   box, the exit lane and the return loop are all drawn statically with their
   arrowheads and labels in place. Motion only sharpens which way things move,
   and it is switched off entirely under prefers-reduced-motion.

   It scales on its viewBox, so it is responsive by construction. It labels
   states and direction only. There is not a single quantity, age or count
   anywhere in it, by design.

   Every class is prefixed dmc-pedlc so it cannot collide with another page.
   ───────────────────────────────────────────────────────────────────────── */

.dmc-pedlc{ position:relative; width:min(560px,100%); margin:0 auto 20px; }
.dmc-pedlc__svg{ display:block; width:100%; height:auto; overflow:visible; }

/* the household in active care */
.dmc-pedlc__box{ fill:#00155D; stroke:#71B6FF; stroke-width:1.4; }
.dmc-pedlc__boxlabel{
  fill:#fff; font:600 13px/1 Montserrat,system-ui,sans-serif;
  text-anchor:middle; letter-spacing:.07em;
}

/* the one person who decides */
.dmc-pedlc__parent{ fill:#00155D; stroke:#71B6FF; stroke-width:1.6; }
.dmc-pedlc__parentlabel{
  fill:#fff; font:600 10px/1 Montserrat,system-ui,sans-serif;
  text-anchor:middle; letter-spacing:.08em;
}

/* lanes: entry fan, exit, and the return loop */
.dmc-pedlc__lane{ fill:none; stroke:rgba(113,182,255,.5); stroke-width:1.6; }
.dmc-pedlc__exitlane{
  fill:none; stroke:rgba(113,182,255,.34); stroke-width:1.6;
  stroke-dasharray:5 5;
}
.dmc-pedlc__loop{
  fill:none; stroke:rgba(113,182,255,.42); stroke-width:1.6;
}

/* the households moving through */
.dmc-pedlc__node{ fill:#71B6FF; }
.dmc-pedlc__exitnode{ fill:#71B6FF; opacity:.34; }

/* travelling pulses, decorative only */
.dmc-pedlc__pulse{
  fill:none; stroke:#71B6FF; stroke-width:2.4; stroke-linecap:round;
}
.dmc-pedlc__pulse--fan{
  stroke-dasharray:10 74; stroke-dashoffset:84;
  animation:dmcPedFlow 3.6s linear infinite;
}
.dmc-pedlc__pulse--exit{
  stroke:rgba(113,182,255,.55);
  stroke-dasharray:10 100; stroke-dashoffset:110;
  animation:dmcPedFlow 3.6s linear infinite;
}
.dmc-pedlc__pulse--loop{
  stroke:rgba(113,182,255,.7); stroke-width:2;
  stroke-dasharray:16 600; stroke-dashoffset:616;
  animation:dmcPedFlow 7.2s linear infinite;
}

/* labels sit on the light section background */
.dmc-pedlc__label{
  fill:#00155D; font:600 12.5px/1 Montserrat,system-ui,sans-serif;
  text-anchor:middle;
}
.dmc-pedlc__label--soft{ fill:#00155D; opacity:.62; font-weight:500; }

@keyframes dmcPedFlow{ to{ stroke-dashoffset:0; } }

/* legend, the rest-state summary of the three states */
.dmc-pedlc__key{
  display:flex; flex-wrap:wrap; gap:10px 20px; justify-content:center;
  font-size:12.5px; color:#45557E;
}
.dmc-pedlc__key span{ display:inline-flex; align-items:center; gap:7px; }
.dmc-pedlc__key i{ width:10px; height:10px; border-radius:50%; flex:0 0 auto; }
.dmc-pedlc__key i.is-entering{ background:#71B6FF; }
.dmc-pedlc__key i.is-active{ background:#00155D; border-radius:3px; }
.dmc-pedlc__key i.is-aged{ background:transparent; border:1.5px solid rgba(113,182,255,.55); }

@media (max-width:600px){
  .dmc-pedlc{ width:min(340px,100%); }
  .dmc-pedlc__key{ font-size:11.5px; gap:8px 14px; }
}

@media (prefers-reduced-motion:reduce){
  .dmc-pedlc__pulse{ animation:none; stroke-dasharray:none; stroke-dashoffset:0; opacity:.45; }
}

/* ══ per-page graphic: periodontist-marketing ══ */
/* ── Two engines graphic, periodontist-marketing ───────────────────────────
   Sits in the dmc-ref__side column of the signature section, on a light
   background. Pure inline SVG plus CSS. No JavaScript, no libraries, no
   invented numbers: every element is a label or a relationship.

   The argument it carries at rest, before any animation runs:
     two engines side by side, one filled (referral fed periodontal therapy)
     and one outlined (patient-direct implant surgery), each with its own
     source arrow, joined by a strained link and pulled outward in opposite
     directions, with a dashed path showing that the offices feeding the
     first engine are now competing inside the second.

   Deliberately not a radial network. The endodontist page owns inward
   referral flow. This one is about opposing pull. Every class is prefixed
   dmc-perio so it cannot collide with any other page's graphic. */

.dmc-perio{position:relative;width:min(560px,100%);margin:0 auto 26px;}
.dmc-perio__svg{display:block;width:100%;height:auto;overflow:visible;}

/* the two source chips at the top */
.dmc-perio__chip{fill:none;stroke:rgba(0,21,93,.30);stroke-width:1.3;}
.dmc-perio__chiptext{
  fill:#00155D;font:600 13px/1 Montserrat,system-ui,sans-serif;
  text-anchor:middle;letter-spacing:.01em;
}

/* solid feeds: a source sending you work */
.dmc-perio__feed{stroke:#00155D;stroke-width:1.6;stroke-linecap:round;}
.dmc-perio__head{fill:#00155D;}
.dmc-perio__head--sky{fill:#71B6FF;}

/* the engines themselves */
.dmc-perio__engine{stroke-width:1.8;}
.dmc-perio__engine--therapy{fill:#00155D;stroke:#00155D;}
.dmc-perio__engine--implant{fill:#fff;stroke:#00155D;}
.dmc-perio__etitle{
  fill:#00155D;font:700 17px/1 Montserrat,system-ui,sans-serif;
  text-anchor:middle;letter-spacing:-.005em;
}
.dmc-perio__etitle--on{fill:#fff;}
.dmc-perio__rule{stroke:rgba(0,21,93,.22);stroke-width:1;}
.dmc-perio__rule--on{stroke:rgba(113,182,255,.45);}
.dmc-perio__esub{
  fill:#2273CE;font:600 11.5px/1 Montserrat,system-ui,sans-serif;
  text-anchor:middle;letter-spacing:.08em;text-transform:uppercase;
}
.dmc-perio__esub--on{fill:#71B6FF;}

/* the link between them, drawn already under strain */
.dmc-perio__anchor{fill:#71B6FF;}
.dmc-perio__strain{
  fill:none;stroke:#71B6FF;stroke-width:2.2;
  stroke-linecap:round;stroke-linejoin:round;
  animation:dmcPerioStrain 3.2s ease-in-out infinite;
}

/* the opposing pull, one arrow leaving each side */
.dmc-perio__pull{stroke:#00155D;stroke-width:1.8;stroke-linecap:round;}
.dmc-perio__pull--l{animation:dmcPerioPullL 3.2s ease-in-out infinite;}
.dmc-perio__pull--r{animation:dmcPerioPullR 3.2s ease-in-out infinite;}

/* the dashed path: your referral source, competing in your other engine */
.dmc-perio__cross{
  fill:none;stroke:#71B6FF;stroke-width:1.8;
  stroke-dasharray:7 7;
  animation:dmcPerioCross 2.4s linear infinite;
}
.dmc-perio__crosslabel{
  fill:#2273CE;font:600 12.5px/1 Montserrat,system-ui,sans-serif;
  text-anchor:middle;
}

@keyframes dmcPerioStrain{0%,100%{opacity:.65;}50%{opacity:1;}}
@keyframes dmcPerioPullL{0%,100%{transform:translateX(0);}50%{transform:translateX(-4px);}}
@keyframes dmcPerioPullR{0%,100%{transform:translateX(0);}50%{transform:translateX(4px);}}
@keyframes dmcPerioCross{to{stroke-dashoffset:-28;}}

/* legend */
.dmc-perio__key{
  display:flex;flex-wrap:wrap;gap:10px 18px;justify-content:center;
  margin-top:2px;font-size:12.5px;color:#4A5F8C;
}
.dmc-perio__key span{display:inline-flex;align-items:center;gap:7px;}
.dmc-perio__key i{width:16px;height:0;flex:0 0 auto;}
.dmc-perio__key i.is-feed{border-top:2px solid #00155D;}
.dmc-perio__key i.is-cross{border-top:2px dashed #71B6FF;}
.dmc-perio__key i.is-strain{border-top:2.4px solid #71B6FF;transform:rotate(-14deg);}

@media (max-width:600px){
  .dmc-perio{width:min(360px,100%);}
  .dmc-perio__key{font-size:11.5px;gap:8px 14px;}
}
@media (prefers-reduced-motion:reduce){
  .dmc-perio__strain,.dmc-perio__pull--l,.dmc-perio__pull--r,
  .dmc-perio__cross{animation:none;}
  .dmc-perio__strain{opacity:1;}
}

/* ══ per-page graphic: prosthodontist-marketing ══ */
/* ── Case sequencing timeline ──────────────────────────────────────────────
   Page: prosthodontist-marketing. Lives in the dmc-ref__side column.

   What it argues: a complex restorative case runs through many phases. The
   patient can leave at three of the joins, and the referring dentist can see
   the case at the start and at the end and nowhere in between. Both facts are
   drawn in the REST state, because the graphic is screenshotted, printed and
   read under prefers-reduced-motion. The travelling pulse only sharpens a
   contrast that is already there.

   Pure inline SVG plus CSS. No JavaScript, no libraries, viewBox based so it
   is responsive by construction. Brand palette only: navy #00155D, sky
   #71B6FF. Phases and states are labelled, quantities never are: no months,
   no percentages, no counts.

   Every class is prefixed dmc-pseq so it cannot collide with another page.
   ────────────────────────────────────────────────────────────────────────── */
.dmc-pseq{position:relative;width:min(560px,100%);margin:0 auto 22px;}
.dmc-pseq__svg{display:block;width:100%;height:auto;overflow:visible;}

/* column captions across the top */
.dmc-pseq__cap{
  fill:#00155D;fill-opacity:.5;
  font:600 10.5px/1 'Plus Jakarta Sans',system-ui,sans-serif;
}

/* the case spine and its phase nodes */
.dmc-pseq__spine{stroke:#00155D;stroke-opacity:.5;stroke-width:2.4;stroke-linecap:round;}
.dmc-pseq__pulse{
  stroke:#71B6FF;stroke-width:3;stroke-linecap:round;
  stroke-dasharray:16 400;stroke-dashoffset:416;
  animation:dmcPseqPulse 7s linear infinite;
}
.dmc-pseq__node{fill:#fff;stroke:#00155D;stroke-width:1.8;}
.dmc-pseq__node--seen{fill:#00155D;stroke:#71B6FF;stroke-width:2;}
.dmc-pseq__dot{fill:#71B6FF;}
.dmc-pseq__label{
  fill:#00155D;
  font:600 12px/1 'Plus Jakarta Sans',system-ui,sans-serif;
}

/* where the patient leaves: dashed arrows peeling off the spine */
.dmc-pseq__drop{
  stroke:#71B6FF;stroke-width:2;stroke-linecap:round;stroke-dasharray:3 3.5;
  animation:dmcPseqDrop 7s ease-in-out infinite;animation-delay:var(--dd,0s);
}
.dmc-pseq__head{
  fill:#71B6FF;
  animation:dmcPseqDrop 7s ease-in-out infinite;animation-delay:var(--dd,0s);
}
.dmc-pseq__droplabel{
  fill:#00155D;fill-opacity:.72;text-anchor:end;
  font:600 11px/1 'Plus Jakarta Sans',system-ui,sans-serif;
}

/* the referring dentist's line of sight, down the right gutter */
.dmc-pseq__rail{stroke-width:3.5;stroke-linecap:round;}
.dmc-pseq__rail--seen{stroke:#71B6FF;}
.dmc-pseq__rail--blind{stroke:#00155D;stroke-opacity:.2;stroke-dasharray:2 6;}
.dmc-pseq__tick{stroke:#00155D;stroke-opacity:.34;stroke-width:1;}
.dmc-pseq__raillabel{
  fill:#00155D;fill-opacity:.62;text-anchor:middle;
  font:600 11px/1 'Plus Jakarta Sans',system-ui,sans-serif;
}

@keyframes dmcPseqPulse{to{stroke-dashoffset:0;}}
@keyframes dmcPseqDrop{0%,100%{opacity:.9;}46%{opacity:1;}}

/* legend */
.dmc-pseq__key{
  display:flex;flex-wrap:wrap;gap:9px 18px;justify-content:center;
  margin-top:2px;font-size:12.5px;color:#4A5A7A;
}
.dmc-pseq__key span{display:inline-flex;align-items:center;gap:7px;}
.dmc-pseq__key i{width:11px;height:11px;border-radius:50%;flex:0 0 auto;
  background:#00155D;}
.dmc-pseq__key i.is-drop{background:transparent;border:2px solid #71B6FF;}
.dmc-pseq__key i.is-blind{
  width:15px;height:0;border-radius:0;border:0;
  border-top:3px dotted rgba(0,21,93,.3);
}

@media (max-width:600px){
  .dmc-pseq{width:min(370px,100%);}
  .dmc-pseq__key{font-size:11.5px;gap:8px 13px;}
  .dmc-pseq__label{font-size:14px;}
  .dmc-pseq__droplabel{font-size:13px;}
  .dmc-pseq__cap{font-size:12px;}
}

/* Motion is decorative. Without it the spine, the three peel-off arrows and
   the broken visibility rail still state the whole argument. */
@media (prefers-reduced-motion:reduce){
  .dmc-pseq__pulse,.dmc-pseq__drop,.dmc-pseq__head{animation:none;}
  .dmc-pseq__pulse{opacity:0;}
}

/* ══ per-page graphic: sedation-dentistry-marketing ══ */
/* ── The avoidance cycle ───────────────────────────────────────────────────
   Used in the dmc-ref__side column of /sedation-dentistry-marketing/.
   Pure inline SVG plus CSS. No JavaScript, no libraries, no images.

   What it shows: four states joined into a closed clockwise loop. Puts it off
   again, it gets worse, more to admit, harder to walk in, and back to putting
   it off. The loop feeds itself, which is the whole point of the page. A single
   force arrives from outside, labelled with the two lines a normal dental ad
   uses, and it is stopped dead at the edge of the loop rather than entering it.
   One route leaves the loop, and it does not lead to a booking: it leads to a
   conversation with no treatment attached, and only then to a first visit.

   The REST STATE carries the whole argument on its own. Every leg, arrowhead,
   state label, the stop bar and both exit boxes are drawn statically. Motion
   only sharpens which way the loop turns, and it is switched off entirely under
   prefers-reduced-motion.

   It scales on its viewBox, so it is responsive by construction. It labels
   states and direction only. There is not a single quantity, percentage, year
   count or prevalence figure anywhere in it, by design.

   Every class is prefixed dmc-sedcyc so it cannot collide with any of the other
   per-page graphics.
   ───────────────────────────────────────────────────────────────────────── */

.dmc-sedcyc{ position:relative; width:min(560px,100%); margin:0 auto 18px; }
.dmc-sedcyc__svg{ display:block; width:100%; height:auto; overflow:visible; }

/* the loop itself */
.dmc-sedcyc__arc{
  fill:none; stroke:rgba(113,182,255,.62); stroke-width:2; stroke-linecap:round;
}
/* Each leg carries pathLength="100" in the markup, so one dasharray animates
   every leg identically regardless of its real length. */
.dmc-sedcyc__pulse{
  fill:none; stroke:#71B6FF; stroke-width:3.4; stroke-linecap:round;
  stroke-dasharray:14 86; stroke-dashoffset:100;
  animation:dmcSedFlow 4.4s linear infinite;
}

/* the four states */
.dmc-sedcyc__node{ fill:#fff; stroke:rgba(0,21,93,.28); stroke-width:1.3; }
.dmc-sedcyc__nodelabel{
  fill:#00155D; font:600 13px/1 Montserrat,system-ui,sans-serif;
  text-anchor:middle;
}

/* the core, naming what the loop is */
.dmc-sedcyc__core{ fill:#00155D; stroke:#71B6FF; stroke-width:1.6; }
.dmc-sedcyc__corelabel{
  fill:#fff; font:600 12px/1 Montserrat,system-ui,sans-serif;
  text-anchor:middle; letter-spacing:.08em;
}

/* pressure applied from outside, and where it stops */
.dmc-sedcyc__push{
  fill:none; stroke:rgba(0,21,93,.34); stroke-width:2.4; stroke-linecap:round;
  stroke-dasharray:6 5;
}
.dmc-sedcyc__stop{
  fill:none; stroke:#00155D; stroke-width:3.2; stroke-linecap:round; opacity:.55;
}
.dmc-sedcyc__pushlabel{
  fill:#00155D; opacity:.55;
  font:500 12.5px/1 Montserrat,system-ui,sans-serif; text-anchor:middle;
}

/* the route out */
.dmc-sedcyc__exit{
  fill:none; stroke:#00155D; stroke-width:2.2; stroke-linecap:round;
}
.dmc-sedcyc__outlabel{
  fill:#00155D; opacity:.66;
  font:500 12.5px/1 Montserrat,system-ui,sans-serif; text-anchor:start;
}
.dmc-sedcyc__box{ fill:#00155D; stroke:#00155D; stroke-width:1.4; }
.dmc-sedcyc__box--end{ fill:#71B6FF; stroke:#71B6FF; }
.dmc-sedcyc__boxlabel{
  fill:#fff; font:600 12px/1 Montserrat,system-ui,sans-serif;
  text-anchor:middle; letter-spacing:.06em;
}
.dmc-sedcyc__boxlabel--end{ fill:#00155D; }

@keyframes dmcSedFlow{ to{ stroke-dashoffset:0; } }

/* legend, the rest-state summary of the three relationships */
.dmc-sedcyc__key{
  display:flex; flex-wrap:wrap; gap:10px 18px; justify-content:center;
  font-size:12.5px; color:#45557E;
}
.dmc-sedcyc__key span{ display:inline-flex; align-items:center; gap:7px; }
.dmc-sedcyc__key i{ width:10px; height:10px; border-radius:50%; flex:0 0 auto; }
.dmc-sedcyc__key i.is-cycle{ background:#71B6FF; }
.dmc-sedcyc__key i.is-blocked{ background:transparent; border:1.5px solid rgba(0,21,93,.4); }
.dmc-sedcyc__key i.is-out{ background:#00155D; border-radius:3px; }

@media (max-width:600px){
  .dmc-sedcyc{ width:min(340px,100%); }
  .dmc-sedcyc__key{ font-size:11.5px; gap:8px 13px; }
}

@media (prefers-reduced-motion:reduce){
  .dmc-sedcyc__pulse{
    animation:none; stroke-dasharray:none; stroke-dashoffset:0; opacity:.5;
  }
}
