/* ==========================================================================
   Design Pattern Heading Icons
   Per-page stylesheet — loaded only on design pattern pages via page_css meta
   ========================================================================== */

:root {
  /* Creational */
  --dp-icon--singleton: url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm0 18c-4.42 0-8-3.58-8-8s3.58-8 8-8 8 3.58 8 8-3.58 8-8 8z"/><circle cx="12" cy="12" r="3"/></svg>');
  --dp-icon--factory-method: url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M19.43 12.98c.04-.32.07-.64.07-.98s-.03-.66-.07-.98l2.11-1.65c.19-.15.24-.42.12-.64l-2-3.46c-.12-.22-.39-.3-.61-.22l-2.49 1c-.52-.4-1.08-.73-1.69-.98l-.38-2.65C14.46 2.18 14.25 2 14 2h-4c-.25 0-.46.18-.49.42l-.38 2.65c-.61.25-1.17.59-1.69.98l-2.49-1c-.23-.09-.49 0-.61.22l-2 3.46c-.13.22-.07.49.12.64l2.11 1.65c-.04.32-.07.65-.07.98s.03.66.07.98l-2.11 1.65c-.19.15-.24.42-.12.64l2 3.46c.12.22.39.3.61.22l2.49-1c.52.4 1.08.73 1.69.98l.38 2.65c.03.24.24.42.49.42h4c.25 0 .46-.18.49-.42l.38-2.65c.61-.25 1.17-.59 1.69-.98l2.49 1c.23.09.49 0 .61-.22l2-3.46c.12-.22.07-.49-.12-.64l-2.11-1.65zM12 15.5c-1.93 0-3.5-1.57-3.5-3.5s1.57-3.5 3.5-3.5 3.5 1.57 3.5 3.5-1.57 3.5-3.5 3.5z"/></svg>');
  --dp-icon--abstract-factory: url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M3 3h7v7H3V3zm11 0h7v7h-7V3zM3 14h7v7H3v-7zm11 0h7v7h-7v-7z"/></svg>');
  --dp-icon--builder: url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M3 20h5v-6H3v6zm7 0h5v-10H10v10zm7 0h4v-14h-4v14z"/></svg>');
  --dp-icon--prototype: url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M16 1H4c-1.1 0-2 .9-2 2v14h2V3h12V1zm3 4H8c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h11c1.1 0 2-.9 2-2V7c0-1.1-.9-2-2-2zm0 16H8V7h11v14z"/></svg>');
  /* Structural */
  --dp-icon--adapter: url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M3.9 12c0-1.71 1.39-3.1 3.1-3.1h4V7H7c-2.76 0-5 2.24-5 5s2.24 5 5 5h4v-1.9H7c-1.71 0-3.1-1.39-3.1-3.1zM8 13h8v-2H8v2zm9-6h-4v1.9h4c1.71 0 3.1 1.39 3.1 3.1s-1.39 3.1-3.1 3.1h-4V17h4c2.76 0 5-2.24 5-5s-2.24-5-5-5z"/></svg>');
  --dp-icon--bridge: url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M4 6h4v12H4V6zm12 0h4v12h-4V6zM9 11h6v2H9v-2z"/></svg>');
  --dp-icon--composite: url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M22 11V3h-7v3H9V3H2v8h7V8h2v10h4v3h7v-8h-7v3h-2V8h2v3h7zM7 9H4V5h3v4zm10 6h3v4h-3v-4zm0-10h3v4h-3V5z"/></svg>');
  --dp-icon--decorator: url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M11.99 18.54l-7.37-5.73L3 14.07l9 7 9-7-1.63-1.27-7.38 5.74zM12 16l7.36-5.73L21 9l-9-7-9 7 1.63 1.27L12 16z"/></svg>');
  --dp-icon--facade: url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M10 20v-6h4v6h5v-8h3L12 3 2 12h3v8h5z"/></svg>');
  --dp-icon--flyweight: url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M18 16.08c-.76 0-1.44.3-1.96.77L8.91 12.7c.05-.23.09-.46.09-.7s-.04-.47-.09-.7l7.05-4.11c.54.5 1.25.81 2.04.81 1.66 0 3-1.34 3-3s-1.34-3-3-3-3 1.34-3 3c0 .24.04.47.09.7L8.04 9.81C7.5 9.31 6.79 9 6 9c-1.66 0-3 1.34-3 3s1.34 3 3 3c.79 0 1.5-.31 2.04-.81l7.12 4.16c-.05.21-.08.43-.08.65 0 1.61 1.31 2.92 2.92 2.92s2.92-1.31 2.92-2.92-1.31-2.92-2.92-2.92z"/></svg>');
  --dp-icon--proxy: url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M12 1L3 5v6c0 5.55 3.84 10.74 9 12 5.16-1.26 9-6.45 9-12V5l-9-4zm0 10.99h7c-.53 4.12-3.28 7.79-7 8.94V12H5V6.3l7-3.11v8.8z"/></svg>');
  /* Behavioral */
  --dp-icon--chain: url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M4 12a2.5 2.5 0 105 0 2.5 2.5 0 00-5 0zm5.5 0a2.5 2.5 0 105 0 2.5 2.5 0 00-5 0zm5.5 0a2.5 2.5 0 105 0 2.5 2.5 0 00-5 0zM8.5 11.25h2v1.5h-2v-1.5zm5 0h2v1.5h-2v-1.5z"/></svg>');
  --dp-icon--command: url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M20 4H4c-1.1 0-2 .9-2 2v12c0 1.1.9 2 2 2h16c1.1 0 2-.9 2-2V6c0-1.1-.9-2-2-2zM8 17l-1.41-1.41L11.17 11 6.59 6.41 8 5l6 6-6 6zm8 0h-4v-2h4v2z"/></svg>');
  --dp-icon--iterator: url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M6 18l8.5-6L6 6v12zM16 6v12h2V6h-2z"/></svg>');
  --dp-icon--mediator: url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M17 16l-4-4V8.82C14.16 8.4 15 7.3 15 6c0-1.66-1.34-3-3-3S9 4.34 9 6c0 1.3.84 2.4 2 2.82V12l-4 4H3v5h5v-3.05l4-4.2 4 4.2V21h5v-5h-4z"/></svg>');
  --dp-icon--memento: url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M13 3c-4.97 0-9 4.03-9 9H1l3.89 3.89.07.14L9 12H6c0-3.87 3.13-7 7-7s7 3.13 7 7-3.13 7-7 7c-1.93 0-3.68-.79-4.94-2.06l-1.42 1.42C8.27 19.99 10.51 21 13 21c4.97 0 9-4.03 9-9s-4.03-9-9-9zm-1 5v5l4.28 2.54.72-1.21-3.5-2.08V8H12z"/></svg>');
  --dp-icon--observer: url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M12 22c1.1 0 2-.9 2-2h-4c0 1.1.89 2 2 2zm6-6v-5c0-3.07-1.63-5.64-4.5-6.32V4c0-.83-.67-1.5-1.5-1.5s-1.5.67-1.5 1.5v.68C7.64 5.36 6 7.92 6 11v5l-2 2v1h16v-1l-2-2zm-2 1H8v-6c0-2.48 1.51-4.5 4-4.5s4 2.02 4 4.5v6z"/></svg>');
  --dp-icon--state: url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M12 4V1L8 5l4 4V6c3.31 0 6 2.69 6 6 0 1.01-.25 1.97-.7 2.8l1.46 1.46C19.54 15.03 20 13.57 20 12c0-4.42-3.58-8-8-8zm0 14c-3.31 0-6-2.69-6-6 0-1.01.25-1.97.7-2.8L5.24 7.74C4.46 8.97 4 10.43 4 12c0 4.42 3.58 8 8 8v3l4-4-4-4v3z"/></svg>');
  --dp-icon--strategy: url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M14 4l2.29 2.29-2.88 2.88 1.42 1.42 2.88-2.88L20 10V4h-6zm-4 0H4v6l2.29-2.29 4.71 4.7V20h2v-8.41l-5.29-5.3L10 4z"/></svg>');
  --dp-icon--template-method: url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M14 2H6c-1.1 0-1.99.9-1.99 2L4 20c0 1.1.89 2 1.99 2H18c1.1 0 2-.9 2-2V8l-6-6zm2 16H8v-2h8v2zm0-4H8v-2h8v2zm-3-5V3.5L18.5 9H13z"/></svg>');
  --dp-icon--visitor: url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M15.5 14h-.79l-.28-.27C15.41 12.59 16 11.11 16 9.5 16 5.91 13.09 3 9.5 3S3 5.91 3 9.5 5.91 16 9.5 16c1.61 0 3.09-.59 4.23-1.57l.27.28v.79l5 4.99L20.49 19l-4.99-5zm-6 0C7.01 14 5 11.99 5 9.5S7.01 5 9.5 5 14 7.01 14 9.5 11.99 14 9.5 14z"/></svg>');
  --dp-icon--interpreter: url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M9.4 16.6L4.8 12l4.6-4.6L8 6l-6 6 6 6 1.4-1.4zm5.2 0l4.6-4.6-4.6-4.6L16 6l6 6-6 6-1.4-1.4z"/></svg>');
}

/* -- Base heading icon style -- */
.md-typeset h2[class*="dp-"]::before {
  content: "";
  display: inline-block;
  width: 1.2em;
  height: 1.2em;
  margin-right: 0.4em;
  vertical-align: -0.15em;
  -webkit-mask-size: contain;
  mask-size: contain;
  -webkit-mask-repeat: no-repeat;
  mask-repeat: no-repeat;
}

/* -- Creational -- */
.md-typeset h2.dp-singleton::before {
  background-color: #e91e63;
  -webkit-mask-image: var(--dp-icon--singleton);
          mask-image: var(--dp-icon--singleton);
}
.md-typeset h2.dp-factory-method::before {
  background-color: #ff5722;
  -webkit-mask-image: var(--dp-icon--factory-method);
          mask-image: var(--dp-icon--factory-method);
}
.md-typeset h2.dp-abstract-factory::before {
  background-color: #ff9800;
  -webkit-mask-image: var(--dp-icon--abstract-factory);
          mask-image: var(--dp-icon--abstract-factory);
}
.md-typeset h2.dp-builder::before {
  background-color: #fbc02d;
  -webkit-mask-image: var(--dp-icon--builder);
          mask-image: var(--dp-icon--builder);
}
.md-typeset h2.dp-prototype::before {
  background-color: #8bc34a;
  -webkit-mask-image: var(--dp-icon--prototype);
          mask-image: var(--dp-icon--prototype);
}

/* -- Structural -- */
.md-typeset h2.dp-adapter::before {
  background-color: #2196f3;
  -webkit-mask-image: var(--dp-icon--adapter);
          mask-image: var(--dp-icon--adapter);
}
.md-typeset h2.dp-bridge::before {
  background-color: #00bcd4;
  -webkit-mask-image: var(--dp-icon--bridge);
          mask-image: var(--dp-icon--bridge);
}
.md-typeset h2.dp-composite::before {
  background-color: #009688;
  -webkit-mask-image: var(--dp-icon--composite);
          mask-image: var(--dp-icon--composite);
}
.md-typeset h2.dp-decorator::before {
  background-color: #3f51b5;
  -webkit-mask-image: var(--dp-icon--decorator);
          mask-image: var(--dp-icon--decorator);
}
.md-typeset h2.dp-facade::before {
  background-color: #03a9f4;
  -webkit-mask-image: var(--dp-icon--facade);
          mask-image: var(--dp-icon--facade);
}
.md-typeset h2.dp-flyweight::before {
  background-color: #4caf50;
  -webkit-mask-image: var(--dp-icon--flyweight);
          mask-image: var(--dp-icon--flyweight);
}
.md-typeset h2.dp-proxy::before {
  background-color: #607d8b;
  -webkit-mask-image: var(--dp-icon--proxy);
          mask-image: var(--dp-icon--proxy);
}

/* -- Behavioral -- */
.md-typeset h2.dp-chain::before {
  background-color: #9c27b0;
  -webkit-mask-image: var(--dp-icon--chain);
          mask-image: var(--dp-icon--chain);
}
.md-typeset h2.dp-command::before {
  background-color: #673ab7;
  -webkit-mask-image: var(--dp-icon--command);
          mask-image: var(--dp-icon--command);
}
.md-typeset h2.dp-iterator::before {
  background-color: #c0ca33;
  -webkit-mask-image: var(--dp-icon--iterator);
          mask-image: var(--dp-icon--iterator);
}
.md-typeset h2.dp-mediator::before {
  background-color: #f44336;
  -webkit-mask-image: var(--dp-icon--mediator);
          mask-image: var(--dp-icon--mediator);
}
.md-typeset h2.dp-memento::before {
  background-color: #795548;
  -webkit-mask-image: var(--dp-icon--memento);
          mask-image: var(--dp-icon--memento);
}
.md-typeset h2.dp-observer::before {
  background-color: #ff7043;
  -webkit-mask-image: var(--dp-icon--observer);
          mask-image: var(--dp-icon--observer);
}
.md-typeset h2.dp-state::before {
  background-color: #26a69a;
  -webkit-mask-image: var(--dp-icon--state);
          mask-image: var(--dp-icon--state);
}
.md-typeset h2.dp-strategy::before {
  background-color: #7e57c2;
  -webkit-mask-image: var(--dp-icon--strategy);
          mask-image: var(--dp-icon--strategy);
}
.md-typeset h2.dp-template-method::before {
  background-color: #5c6bc0;
  -webkit-mask-image: var(--dp-icon--template-method);
          mask-image: var(--dp-icon--template-method);
}
.md-typeset h2.dp-visitor::before {
  background-color: #66bb6a;
  -webkit-mask-image: var(--dp-icon--visitor);
          mask-image: var(--dp-icon--visitor);
}
.md-typeset h2.dp-interpreter::before {
  background-color: #78909c;
  -webkit-mask-image: var(--dp-icon--interpreter);
          mask-image: var(--dp-icon--interpreter);
}
