{"componentChunkName":"component---src-templates-raw-html-js","path":"/internal-pencil-banner-creation/","result":{"pageContext":{"pageContent":{"HTML":{"order":0,"visible":true,"scriptJS":"","rawHTML":"<div><!DOCTYPE html>\n<html lang=\"en\">\n<head>\n<meta charset=\"UTF-8\">\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">\n<title>Pencil Banner Editor — Team MXS</title>\n<meta name=\"robots\" content=\"noindex, nofollow\">\n<link rel=\"preconnect\" href=\"https://fonts.googleapis.com\">\n<link rel=\"preconnect\" href=\"https://fonts.gstatic.com\" crossorigin>\n<link href=\"https://fonts.googleapis.com/css2?family=Montserrat:wght@300;400;500;600;700;800&family=JetBrains+Mono:wght@400;500;600&display=swap\" rel=\"stylesheet\">\n<style>\n  /* ============================================================\n     PENCIL BANNER EDITOR — Team MXS brand-scoped\n     Aligned to mxs-hub v2 design tokens\n     ============================================================ */\n  :root {\n    --c-black:      #0a0e1a;\n    --c-dark:       #0e121f;\n    --c-dark-2:     #141a2b;\n    --c-navy:       #1a2b3e;\n    --c-navy-mid:   #2a497b;\n    --c-blue:       #4177c3;\n    --c-cyan:       #5eb9de;\n    --c-cyan-light: #c7e3f1;\n    --c-pop-blue:   #3b6ce9;\n    --c-pop-cyan:   #2dbce3;\n    --c-text:       #4a5563;\n    --c-text-dark:  #b8c4d2;\n    --c-muted:      #7e8a96;\n    --c-line:       #e6eaef;\n    --c-bg-soft:    #f7f9fb;\n\n    --grad-pop:       linear-gradient(135deg, #3b6ce9 0%, #2dbce3 100%);\n    --grad-pop-deep:  linear-gradient(135deg, #3b6ce9 0%, #2dbce3 50%, #5eb9de 100%);\n    --grad-dark-tilt: linear-gradient(135deg, #0a0e1a 0%, #1a2b3e 65%, #2a497b 130%);\n\n    --font-sans: 'Montserrat', -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;\n    --font-mono: 'JetBrains Mono', ui-monospace, 'SF Mono', Menlo, Consolas, monospace;\n  }\n\n  * { box-sizing: border-box; margin: 0; padding: 0; }\n  html, body { min-height: 100vh; }\n  body {\n    background: var(--c-bg-soft);\n    font-family: var(--font-sans);\n    color: var(--c-text);\n    font-size: 15px;\n    line-height: 1.45;\n    -webkit-font-smoothing: antialiased;\n    -moz-osx-font-smoothing: grayscale;\n  }\n\n  /* ── FULL-VIEWPORT BREAKOUT ───────────\n     When this tool is embedded inside a teammxs.com layout\n     with a max-width content container, this wrapper escapes\n     that container and spans the full viewport width.\n     Margin-top values clear the sticky MXS nav at every\n     breakpoint — copied verbatim from .mxs-hub.\n     ──────────────────────────────────── */\n  .tool-wrap {\n    width: 100vw;\n    position: relative;\n    left: 50%;\n    right: 50%;\n    margin-left: -50vw;\n    margin-right: -50vw;\n    max-width: 100vw;\n    background: var(--c-bg-soft);\n    overflow: hidden;\n    margin-top: 110px;\n  }\n  @media (max-width: 1024px) { .tool-wrap { margin-top: 90px; } }\n  @media (max-width: 768px)  { .tool-wrap { margin-top: 80px; } }\n  @media (max-width: 480px)  { .tool-wrap { margin-top: 100px; } }\n\n  /* ── HERO ────────────────────────────── */\n  .hero {\n    background: var(--grad-dark-tilt);\n    color: #fff;\n    padding: 72px 24px 56px;\n    position: relative;\n    overflow: hidden;\n  }\n  .hero-orb {\n    position: absolute;\n    border-radius: 50%;\n    filter: blur(80px);\n    pointer-events: none;\n    z-index: 0;\n  }\n  .hero-orb--1 {\n    top: -120px; right: -60px;\n    width: 420px; height: 420px;\n    background: radial-gradient(circle, rgba(59,108,233,0.42) 0%, transparent 70%);\n    animation: orb-float 22s ease-in-out infinite;\n  }\n  .hero-orb--2 {\n    bottom: -160px; left: 8%;\n    width: 340px; height: 340px;\n    background: radial-gradient(circle, rgba(45,188,227,0.28) 0%, transparent 70%);\n    animation: orb-float 28s ease-in-out infinite reverse;\n  }\n  @keyframes orb-float {\n    0%, 100% { transform: translate(0, 0) scale(1); opacity: 0.55; }\n    33%      { transform: translate(40px, -30px) scale(1.1); opacity: 0.75; }\n    66%      { transform: translate(-20px, 30px) scale(0.95); opacity: 0.45; }\n  }\n  .hero-grid {\n    position: absolute;\n    inset: 0;\n    background-image:\n      linear-gradient(to right, rgba(94,185,222,0.06) 1px, transparent 1px),\n      linear-gradient(to bottom, rgba(94,185,222,0.06) 1px, transparent 1px);\n    background-size: 56px 56px;\n    mask-image: radial-gradient(ellipse 80% 70% at 50% 50%, #000 35%, transparent 80%);\n    -webkit-mask-image: radial-gradient(ellipse 80% 70% at 50% 50%, #000 35%, transparent 80%);\n    opacity: 0.4;\n    pointer-events: none;\n  }\n  .hero-wrap {\n    max-width: 1280px;\n    margin: 0 auto;\n    position: relative;\n    z-index: 1;\n  }\n  .eyebrow {\n    display: inline-flex;\n    align-items: center;\n    gap: 12px;\n    font-size: 11px;\n    letter-spacing: 0.26em;\n    text-transform: uppercase;\n    font-weight: 700;\n    color: var(--c-cyan);\n    margin-bottom: 18px;\n    padding: 8px 16px;\n    background: rgba(45,188,227,0.05);\n    border: 1px solid rgba(45,188,227,0.35);\n  }\n  .eyebrow::before {\n    content: \"\";\n    width: 6px; height: 6px;\n    border-radius: 50%;\n    background: var(--c-pop-cyan);\n    flex-shrink: 0;\n    box-shadow: 0 0 12px var(--c-pop-cyan), 0 0 0 0 rgba(45,188,227,0.6);\n    animation: eyebrow-pulse 2.4s ease-in-out infinite;\n  }\n  @keyframes eyebrow-pulse {\n    0%, 100% { box-shadow: 0 0 12px var(--c-pop-cyan), 0 0 0 0 rgba(45,188,227,0.6); transform: scale(1); }\n    50%      { box-shadow: 0 0 12px var(--c-pop-cyan), 0 0 0 8px rgba(45,188,227,0); transform: scale(1.15); }\n  }\n  .hero-title {\n    font-size: 48px;\n    line-height: 1;\n    font-weight: 800;\n    letter-spacing: -0.025em;\n    margin-bottom: 16px;\n    color: #fff;\n  }\n  .hero-title .em {\n    background: var(--grad-pop-deep);\n    -webkit-background-clip: text;\n    background-clip: text;\n    -webkit-text-fill-color: transparent;\n  }\n  .hero-sub {\n    font-size: 16px;\n    color: var(--c-text-dark);\n    max-width: 640px;\n    font-weight: 400;\n  }\n  .hero-sub strong { color: #fff; font-weight: 600; }\n  @media (max-width: 768px) {\n    .hero { padding: 56px 20px 44px; }\n    .hero-title { font-size: 34px; }\n  }\n\n  /* ── MAIN LAYOUT ──────────────────────── */\n  .main-wrap {\n    max-width: 1280px;\n    margin: -32px auto 0;\n    padding: 0 24px 80px;\n    position: relative;\n    z-index: 2;\n  }\n\n  .grid {\n    display: grid;\n    grid-template-columns: 440px 1fr;\n    gap: 24px;\n    align-items: start;\n  }\n  @media (max-width: 980px) { .grid { grid-template-columns: 1fr; } }\n\n  .card {\n    background: #fff;\n    border: 1px solid var(--c-line);\n    box-shadow: 0 4px 24px rgba(10,14,26,0.06), 0 1px 3px rgba(10,14,26,0.04);\n    overflow: hidden;\n  }\n  .card-head {\n    display: flex;\n    align-items: center;\n    justify-content: space-between;\n    padding: 16px 22px;\n    border-bottom: 1px solid var(--c-line);\n    background: var(--c-bg-soft);\n  }\n  .card-head h2 {\n    font-size: 11px;\n    font-weight: 800;\n    letter-spacing: 0.18em;\n    text-transform: uppercase;\n    color: var(--c-black);\n  }\n  .card-head .meta {\n    font-family: var(--font-mono);\n    font-size: 10px;\n    letter-spacing: 0.08em;\n    color: var(--c-muted);\n    text-transform: uppercase;\n  }\n  .card-body { padding: 22px; }\n\n  /* ── FORM ─────────────────────────────── */\n  .label-row {\n    display: flex;\n    align-items: center;\n    gap: 8px;\n    margin-bottom: 10px;\n  }\n  label {\n    font-size: 10px;\n    font-weight: 800;\n    letter-spacing: 0.16em;\n    text-transform: uppercase;\n    color: var(--c-black);\n  }\n\n  /* Info tooltip */\n  .info {\n    width: 16px;\n    height: 16px;\n    border-radius: 50%;\n    background: var(--c-bg-soft);\n    border: 1px solid var(--c-line);\n    color: var(--c-muted);\n    font-size: 10px;\n    font-weight: 700;\n    display: inline-flex;\n    align-items: center;\n    justify-content: center;\n    cursor: help;\n    position: relative;\n    transition: all 0.18s;\n    font-family: var(--font-sans);\n  }\n  .info:hover {\n    background: var(--grad-pop);\n    border-color: var(--c-pop-blue);\n    color: #fff;\n    transform: scale(1.1);\n  }\n  .info .tip {\n    visibility: hidden;\n    opacity: 0;\n    position: absolute;\n    left: 24px;\n    top: 50%;\n    transform: translateY(-50%);\n    background: var(--c-black);\n    color: #fff;\n    font-size: 12px;\n    font-weight: 400;\n    letter-spacing: 0;\n    text-transform: none;\n    padding: 12px 16px;\n    width: 280px;\n    z-index: 100;\n    box-shadow: 0 16px 40px rgba(10,14,26,0.35);\n    transition: opacity 0.18s, visibility 0.18s;\n    line-height: 1.5;\n    text-align: left;\n    border: 1px solid rgba(45,188,227,0.4);\n  }\n  .info .tip::before {\n    content: '';\n    position: absolute;\n    left: -6px;\n    top: 50%;\n    transform: translateY(-50%);\n    width: 0; height: 0;\n    border-top: 6px solid transparent;\n    border-bottom: 6px solid transparent;\n    border-right: 6px solid var(--c-black);\n  }\n  .info .tip strong {\n    color: var(--c-pop-cyan);\n    display: block;\n    margin-bottom: 6px;\n    font-weight: 600;\n    font-size: 11px;\n    letter-spacing: 0.1em;\n    text-transform: uppercase;\n  }\n  .info .tip ul { list-style: none; padding: 0; margin: 6px 0 0; }\n  .info .tip ul li { padding: 3px 0; color: var(--c-text-dark); }\n  .info .tip ul li b { color: #fff; font-weight: 600; }\n  .info:hover .tip { visibility: visible; opacity: 1; }\n\n  textarea, input[type=\"text\"] {\n    width: 100%;\n    background: #fff;\n    border: 1px solid var(--c-line);\n    color: var(--c-black);\n    font-family: var(--font-sans);\n    font-size: 14px;\n    padding: 12px 14px;\n    transition: border-color 0.18s, box-shadow 0.18s;\n  }\n  textarea { resize: vertical; min-height: 76px; line-height: 1.5; }\n  textarea:focus, input:focus {\n    outline: none;\n    border-color: var(--c-pop-blue);\n    box-shadow: 0 0 0 3px rgba(59,108,233,0.12);\n  }\n\n  .field { margin-bottom: 22px; }\n  .field:last-child { margin-bottom: 0; }\n\n  .color-row { display: flex; gap: 10px; align-items: stretch; }\n  input[type=\"color\"] {\n    width: 50px;\n    height: 44px;\n    border: 1px solid var(--c-line);\n    background: #fff;\n    cursor: pointer;\n    padding: 3px;\n  }\n  input[type=\"color\"]::-webkit-color-swatch-wrapper { padding: 0; }\n  input[type=\"color\"]::-webkit-color-swatch { border: none; }\n  .color-row input[type=\"text\"] {\n    flex: 1;\n    font-family: var(--font-mono);\n    font-size: 12px;\n    text-transform: uppercase;\n  }\n\n  .field-row { display: grid; grid-template-columns: 1fr 1fr; gap: 14px; }\n\n  /* Padding toggle group */\n  .toggle-group {\n    display: flex;\n    background: var(--c-bg-soft);\n    border: 1px solid var(--c-line);\n    padding: 4px;\n    gap: 2px;\n  }\n  .toggle-group button {\n    flex: 1;\n    background: transparent;\n    border: none;\n    color: var(--c-text);\n    font-family: var(--font-sans);\n    font-size: 12px;\n    font-weight: 700;\n    letter-spacing: 0.04em;\n    padding: 10px 8px;\n    cursor: pointer;\n    transition: all 0.15s;\n    text-transform: uppercase;\n  }\n  .toggle-group button:hover { color: var(--c-black); background: rgba(10,14,26,0.04); }\n  .toggle-group button.active {\n    background: var(--grad-pop);\n    color: #fff;\n    box-shadow: 0 4px 14px -4px rgba(59,108,233,0.5);\n  }\n\n  .reset-link {\n    background: none;\n    border: none;\n    color: var(--c-muted);\n    font-family: var(--font-mono);\n    font-size: 10px;\n    font-weight: 600;\n    letter-spacing: 0.12em;\n    text-transform: uppercase;\n    cursor: pointer;\n    padding: 8px 0 0;\n    text-decoration: underline;\n    text-underline-offset: 4px;\n  }\n  .reset-link:hover { color: var(--c-pop-blue); }\n\n  /* ── ADVANCED (COLLAPSIBLE) ──────────── */\n  .advanced {\n    margin-top: 20px;\n    padding-top: 18px;\n    border-top: 1px solid var(--c-line);\n  }\n  .advanced-toggle {\n    background: none;\n    border: none;\n    width: 100%;\n    display: flex;\n    justify-content: space-between;\n    align-items: center;\n    cursor: pointer;\n    padding: 6px 0;\n    font-family: var(--font-mono);\n    font-size: 10px;\n    font-weight: 700;\n    letter-spacing: 0.16em;\n    text-transform: uppercase;\n    color: var(--c-muted);\n    transition: color 0.15s;\n  }\n  .advanced-toggle:hover { color: var(--c-pop-blue); }\n  .advanced-toggle .gear { color: var(--c-pop-cyan); margin-right: 6px; }\n  .advanced-toggle .chevron {\n    font-size: 9px;\n    transition: transform 0.2s;\n  }\n  .advanced.open .advanced-toggle .chevron { transform: rotate(180deg); }\n  .advanced-body {\n    display: none;\n    margin-top: 14px;\n  }\n  .advanced.open .advanced-body { display: block; }\n  .advanced-note {\n    font-size: 12px;\n    color: var(--c-text);\n    line-height: 1.55;\n    margin-bottom: 16px;\n    padding: 12px 14px;\n    background: linear-gradient(135deg, rgba(45,188,227,0.06) 0%, rgba(59,108,233,0.06) 100%);\n    border-left: 3px solid var(--c-pop-cyan);\n  }\n  .advanced-note strong { color: var(--c-black); font-weight: 700; }\n  .advanced-note code {\n    font-family: var(--font-mono);\n    font-size: 11px;\n    background: #fff;\n    padding: 1px 6px;\n    color: var(--c-pop-blue);\n    border: 1px solid var(--c-line);\n  }\n  .toggle-group.tg-small button { font-size: 10px; padding: 9px 4px; letter-spacing: 0.03em; }\n\n  /* Brand / template select dropdown */\n  .brand-select {\n    width: 100%;\n    background: #fff;\n    border: 1px solid var(--c-line);\n    color: var(--c-black);\n    font-family: var(--font-sans);\n    font-size: 13px;\n    font-weight: 600;\n    padding: 12px 38px 12px 13px;\n    cursor: pointer;\n    appearance: none;\n    -webkit-appearance: none;\n    -moz-appearance: none;\n    background-image: url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='8' viewBox='0 0 12 8'%3E%3Cpath fill='%233b6ce9' d='M1 1l5 5 5-5'/%3E%3C/svg%3E\");\n    background-repeat: no-repeat;\n    background-position: right 14px center;\n    transition: border-color 0.18s, box-shadow 0.18s;\n  }\n  .brand-select:focus {\n    outline: none;\n    border-color: var(--c-pop-blue);\n    box-shadow: 0 0 0 3px rgba(59,108,233,0.12);\n  }\n  .brand-select optgroup { font-weight: 700; color: var(--c-muted); }\n  .brand-select option { font-weight: 500; color: var(--c-black); }\n\n  /* Auto-position hint (shows for script-based templates) */\n  .auto-pos-note {\n    display: none;\n    margin-top: 10px;\n    padding: 9px 12px;\n    background: rgba(59,108,233,0.07);\n    border: 1px solid rgba(59,108,233,0.25);\n    border-radius: 7px;\n    font-size: 11px;\n    line-height: 1.45;\n    color: var(--c-black);\n  }\n  .auto-pos-note.show { display: block; }\n  .auto-pos-note b { color: var(--c-pop-blue); }\n\n  /* Custom px input (revealed when Custom nav clearance selected) */\n  .custom-px {\n    display: none;\n    margin-top: 10px;\n    align-items: center;\n    gap: 10px;\n  }\n  .custom-px.show { display: flex; }\n  .custom-px label {\n    margin: 0;\n    font-size: 10px;\n    white-space: nowrap;\n  }\n  .custom-px input {\n    width: 90px;\n    font-family: var(--font-mono);\n    font-size: 12px;\n    padding: 8px 10px;\n  }\n  .custom-px .unit {\n    font-family: var(--font-mono);\n    font-size: 11px;\n    color: var(--c-muted);\n  }\n\n  /* ── MEASURE-A-NEW-TEMPLATE HELPER ─────── */\n  .measure-help {\n    margin-top: 12px;\n    font-size: 12px;\n  }\n  .measure-help summary {\n    cursor: pointer;\n    color: var(--c-pop-blue);\n    font-weight: 600;\n    user-select: none;\n  }\n  .measure-help .measure-body {\n    margin-top: 8px;\n    padding: 12px;\n    background: rgba(59,108,233,0.04);\n    border: 1px solid var(--c-line);\n    border-radius: 8px;\n    line-height: 1.5;\n    color: var(--c-muted);\n  }\n  .measure-help .measure-body p { margin: 0 0 8px; }\n  .measure-help .snippet {\n    display: block;\n    font-family: var(--font-mono);\n    font-size: 11px;\n    background: var(--c-black);\n    color: #9fe1cb;\n    padding: 10px;\n    border-radius: 6px;\n    margin: 8px 0;\n    word-break: break-all;\n    white-space: pre-wrap;\n  }\n\n  .dev-note {\n    margin-top: 20px;\n    padding-top: 18px;\n    border-top: 1px solid var(--c-line);\n  }\n  .dev-note textarea {\n    min-height: 60px;\n    font-family: var(--font-mono);\n    font-size: 12px;\n  }\n  .dev-note .hint {\n    font-size: 11px;\n    color: var(--c-muted);\n    margin-top: 8px;\n    line-height: 1.5;\n  }\n  .dev-note .hint b { color: var(--c-text); font-weight: 700; }\n\n  /* ── PREVIEW ──────────────────────────── */\n  .preview-wrap {\n    background: repeating-conic-gradient(rgba(10,14,26,0.025) 0% 25%, transparent 0% 50%) 50% / 18px 18px,\n                #fff;\n    border: 1px solid var(--c-line);\n    overflow: hidden;\n    line-height: 0;\n  }\n  .preview-scope {\n    display: block;\n    width: 100%;\n    font-family: system-ui, -apple-system, BlinkMacSystemFont, sans-serif;\n    font-size: 16px;\n    line-height: 1.5;\n    color: #1a1a1a;\n  }\n  .preview-scope * { box-sizing: border-box; }\n  .preview-scope div { display: block; width: 100%; margin: 0; }\n  .preview-scope h1, .preview-scope h2, .preview-scope h3 {\n    margin: 0;\n    font-family: inherit;\n    font-weight: 700;\n    line-height: 1.25;\n  }\n  .preview-scope h1 { font-size: 2em; }\n  .preview-scope h2 { font-size: 1.5em; }\n  .preview-scope h3 { font-size: 1.17em; }\n\n  /* ── CODE BLOCK ──────────────────────── */\n  .code-block {\n    background: var(--c-black);\n    border: 1px solid var(--c-navy);\n    font-family: var(--font-mono);\n    font-size: 12px;\n    line-height: 1.7;\n    color: #e8eef6;\n    padding: 18px 22px;\n    overflow-x: auto;\n    white-space: pre-wrap;\n    word-break: break-word;\n  }\n  .code-block .tag { color: #ff8b8b; }\n  .code-block .attr { color: var(--c-pop-cyan); }\n  .code-block .string { color: #ffd066; }\n  .code-block .comment { color: #6b7a99; font-style: italic; }\n\n  button.copy {\n    position: relative;\n    background: var(--grad-pop);\n    color: #fff;\n    border: none;\n    padding: 9px 20px;\n    font-family: var(--font-sans);\n    font-size: 11px;\n    font-weight: 800;\n    letter-spacing: 0.14em;\n    text-transform: uppercase;\n    cursor: pointer;\n    overflow: hidden;\n    transition: transform 0.35s cubic-bezier(0.16,1,0.3,1), box-shadow 0.3s ease;\n    box-shadow: 0 6px 18px -4px rgba(59,108,233,0.55);\n  }\n  button.copy::before {\n    content: \"\";\n    position: absolute; top: 0; left: 0;\n    width: 60%; height: 100%;\n    background: linear-gradient(120deg, transparent 0%, rgba(255,255,255,0.35) 50%, transparent 100%);\n    transform: translateX(-100%);\n    transition: transform 0.6s ease;\n  }\n  button.copy:hover {\n    transform: translateY(-2px);\n    box-shadow: 0 14px 32px -6px rgba(45,188,227,0.7);\n  }\n  button.copy:hover::before { transform: translateX(200%); }\n  button.copy.copied {\n    background: #1a9d4a;\n    box-shadow: 0 6px 18px -4px rgba(26,157,74,0.5);\n  }\n\n  .stack > * + * { margin-top: 20px; }\n\n  /* ── PLACEMENT ────────────────────────── */\n  .placement-section {\n    margin-top: 40px;\n    padding-top: 32px;\n    border-top: 1px solid var(--c-line);\n  }\n  .placement-head {\n    text-align: center;\n    margin-bottom: 28px;\n  }\n  .placement-head .eyebrow {\n    background: rgba(59,108,233,0.06);\n    border-color: rgba(59,108,233,0.3);\n    color: var(--c-pop-blue);\n  }\n  .placement-head .eyebrow::before {\n    background: var(--c-pop-blue);\n    box-shadow: 0 0 12px var(--c-pop-blue), 0 0 0 0 rgba(59,108,233,0.6);\n  }\n  .placement-title {\n    font-size: 28px;\n    font-weight: 800;\n    color: var(--c-black);\n    letter-spacing: -0.02em;\n    margin-bottom: 8px;\n  }\n  .placement-sub { color: var(--c-text); font-size: 15px; }\n\n  .placement {\n    display: grid;\n    grid-template-columns: 1fr 1fr;\n    gap: 20px;\n  }\n  @media (max-width: 720px) { .placement { grid-template-columns: 1fr; } }\n  .place-card {\n    background: #fff;\n    border: 1px solid var(--c-line);\n    padding: 26px 28px;\n    position: relative;\n    overflow: hidden;\n    transition: transform 0.3s ease, box-shadow 0.3s ease;\n  }\n  .place-card:hover {\n    transform: translateY(-2px);\n    box-shadow: 0 12px 30px rgba(10,14,26,0.1);\n  }\n  .place-card::before {\n    content: '';\n    position: absolute;\n    left: 0; top: 0; bottom: 0;\n    width: 4px;\n    background: var(--grad-pop);\n  }\n  .place-card.warm::before { background: linear-gradient(180deg, #ffd066 0%, #ff9d3a 100%); }\n  .place-card h3 {\n    font-family: var(--font-sans);\n    font-size: 20px;\n    font-weight: 800;\n    color: var(--c-black);\n    margin-bottom: 4px;\n    letter-spacing: -0.015em;\n  }\n  .place-card .scope-label {\n    font-family: var(--font-mono);\n    font-size: 10px;\n    font-weight: 600;\n    letter-spacing: 0.14em;\n    text-transform: uppercase;\n    color: var(--c-pop-blue);\n    margin-bottom: 14px;\n    display: block;\n  }\n  .place-card.warm .scope-label { color: #d68800; }\n  .place-card ol {\n    padding-left: 22px;\n    color: var(--c-text);\n    font-size: 14px;\n    line-height: 1.7;\n  }\n  .place-card ol li { margin-bottom: 6px; }\n  .place-card ol li::marker { color: var(--c-pop-blue); font-weight: 700; }\n  .place-card.warm ol li::marker { color: #d68800; }\n  .place-card ol li strong { color: var(--c-black); font-weight: 700; }\n  .place-card code {\n    font-family: var(--font-mono);\n    font-size: 12px;\n    background: var(--c-bg-soft);\n    padding: 2px 8px;\n    color: var(--c-pop-blue);\n    border: 1px solid var(--c-line);\n    font-weight: 600;\n  }\n\n  /* Callout note */\n  .note {\n    margin-top: 22px;\n    background: linear-gradient(135deg, rgba(45,188,227,0.06) 0%, rgba(59,108,233,0.06) 100%);\n    border: 1px solid rgba(45,188,227,0.35);\n    border-left: 4px solid var(--c-pop-cyan);\n    padding: 16px 22px;\n    color: var(--c-text);\n    font-size: 13px;\n    line-height: 1.6;\n  }\n  .note strong {\n    color: var(--c-black);\n    font-weight: 700;\n    display: block;\n    margin-bottom: 4px;\n    font-size: 11px;\n    letter-spacing: 0.14em;\n    text-transform: uppercase;\n  }\n  .note code {\n    font-family: var(--font-mono);\n    font-size: 12px;\n    background: #fff;\n    padding: 1px 6px;\n    color: var(--c-pop-blue);\n    border: 1px solid var(--c-line);\n  }\n\n  /* ── CLOSING / FOOTER CTA ─────────────\n     Mirrors .mxs-hub__cta from the OEM Programs page —\n     dark backdrop, glowing orb, gradient title.\n     Sits FLUSH with the section before (no margin-top gap)\n     and butts directly against the platform footer below\n     so the hydration script can paint one continuous dark\n     zone from this section → site footer.\n     ──────────────────────────────────── */\n  .closer {\n    background: var(--c-black);\n    color: #fff;\n    padding: 80px 24px;\n    text-align: center;\n    position: relative;\n    overflow: hidden;\n  }\n  .closer::before {\n    content: \"\";\n    position: absolute;\n    top: 50%; left: 50%;\n    transform: translate(-50%, -50%);\n    width: 800px; height: 800px;\n    border-radius: 50%;\n    background: radial-gradient(circle, rgba(59,108,233,0.18) 0%, transparent 60%);\n    filter: blur(80px);\n    pointer-events: none;\n  }\n  .closer-wrap {\n    max-width: 720px;\n    margin: 0 auto;\n    position: relative;\n    z-index: 1;\n  }\n  .closer .eyebrow {\n    background: rgba(45,188,227,0.05);\n    border-color: rgba(45,188,227,0.35);\n    color: var(--c-pop-cyan);\n  }\n  .closer-title {\n    font-size: 40px;\n    line-height: 1;\n    font-weight: 800;\n    letter-spacing: -0.025em;\n    color: #fff;\n    margin: 0 0 14px;\n  }\n  .closer-title .em {\n    background: var(--grad-pop-deep);\n    -webkit-background-clip: text;\n    background-clip: text;\n    -webkit-text-fill-color: transparent;\n  }\n  .closer-sub {\n    font-size: 16px;\n    color: var(--c-text-dark);\n    line-height: 1.5;\n    max-width: 560px;\n    margin: 0 auto 28px;\n  }\n  .closer-sub strong { color: #fff; font-weight: 600; }\n  .closer-meta {\n    margin-top: 32px;\n    padding-top: 22px;\n    border-top: 1px solid rgba(255,255,255,0.08);\n    font-family: var(--font-mono);\n    font-size: 10px;\n    letter-spacing: 0.18em;\n    text-transform: uppercase;\n    color: var(--c-muted);\n  }\n  .closer-meta span { color: var(--c-pop-cyan); font-weight: 600; }\n  @media (max-width: 768px) {\n    .closer { padding: 64px 20px; }\n    .closer-title { font-size: 28px; }\n  }\n</style>\n</head>\n<body>\n\n<div class=\"tool-wrap\">\n\n<!-- HERO -->\n<section class=\"hero\">\n  <div class=\"hero-grid\"></div>\n  <div class=\"hero-orb hero-orb--1\"></div>\n  <div class=\"hero-orb hero-orb--2\"></div>\n  <div class=\"hero-wrap\">\n    <span class=\"eyebrow\">Team MXS · Internal Tool</span>\n    <h1 class=\"hero-title\">Pencil Banner <span class=\"em\">Editor</span></h1>\n    <p class=\"hero-sub\">\n      <strong>Edit colors, text &amp; padding.</strong> Copy the code. Paste into the DealerMasters HTML Array. Designed to lock the approved Team MXS banner template — no custom HTML required.\n    </p>\n  </div>\n</section>\n\n<!-- MAIN -->\n<div class=\"main-wrap\">\n  <div class=\"grid\">\n\n    <!-- FORM -->\n    <div class=\"card\">\n      <div class=\"card-head\">\n        <h2>Banner Settings</h2>\n        <span class=\"meta\">live update</span>\n      </div>\n      <div class=\"card-body\">\n\n        <div class=\"field\">\n          <div class=\"label-row\">\n            <label for=\"bannerText\">Banner Text</label>\n          </div>\n          <textarea id=\"bannerText\">Put dealership message here</textarea>\n        </div>\n\n        <div class=\"field-row\">\n          <div class=\"field\">\n            <div class=\"label-row\">\n              <label for=\"bgColor\">Background</label>\n            </div>\n            <div class=\"color-row\">\n              <input type=\"color\" id=\"bgColor\" value=\"#ba162b\">\n              <input type=\"text\" id=\"bgHex\" value=\"#ba162b\" maxlength=\"7\">\n            </div>\n          </div>\n          <div class=\"field\">\n            <div class=\"label-row\">\n              <label for=\"textColor\">Text Color</label>\n            </div>\n            <div class=\"color-row\">\n              <input type=\"color\" id=\"textColor\" value=\"#ffffff\">\n              <input type=\"text\" id=\"textHex\" value=\"#ffffff\" maxlength=\"7\">\n            </div>\n          </div>\n        </div>\n\n        <div class=\"field\">\n          <div class=\"label-row\">\n            <label>Banner Width / Padding</label>\n            <span class=\"info\" tabindex=\"0\">?\n              <span class=\"tip\">\n                <strong>Banner Height</strong>\n                Higher padding = taller banner. Same width across; only top/bottom changes.\n                <ul>\n                  <li><b>Slim</b> — 0.5% — minimal strip</li>\n                  <li><b>Normal</b> — 1% — DM default</li>\n                  <li><b>Wide</b> — 2% — emphasized</li>\n                  <li><b>X-Wide</b> — 3% — major announcements</li>\n                </ul>\n              </span>\n            </span>\n          </div>\n          <div class=\"toggle-group\" id=\"paddingToggle\">\n            <button data-value=\"0.5% 0%\">Slim</button>\n            <button data-value=\"1% 0%\" class=\"active\">Normal</button>\n            <button data-value=\"2% 0%\">Wide</button>\n            <button data-value=\"3% 0%\">X-Wide</button>\n          </div>\n        </div>\n\n        <div class=\"field\">\n          <div class=\"label-row\">\n            <label>Text Size</label>\n            <span class=\"info\" tabindex=\"0\">?\n              <span class=\"tip\">\n                <strong>Banner Text Size</strong>\n                Sets the HTML heading tag used inside the banner — this controls how large the text renders.\n                <ul>\n                  <li><b>Small</b> — &lt;h3&gt; — subtle, low-key</li>\n                  <li><b>Medium</b> — &lt;h2&gt; — DM default</li>\n                  <li><b>Large</b> — &lt;h1&gt; — bold &amp; attention-grabbing</li>\n                </ul>\n              </span>\n            </span>\n          </div>\n          <div class=\"toggle-group\" id=\"headingToggle\">\n            <button data-value=\"h3\">Small</button>\n            <button data-value=\"h2\" class=\"active\">Medium</button>\n            <button data-value=\"h1\">Large</button>\n          </div>\n        </div>\n\n        <!-- ADVANCED (collapsible) -->\n        <div class=\"advanced\" id=\"advancedSection\">\n          <button class=\"advanced-toggle\" id=\"advancedToggle\" type=\"button\">\n            <span><span class=\"gear\">⚙</span>Advanced — Dealer Template &amp; Spacing</span>\n            <span class=\"chevron\">▼</span>\n          </button>\n          <div class=\"advanced-body\">\n            <div class=\"advanced-note\">\n              <strong>Banner hiding under the nav, or floating too low?</strong><br>\n              Pick the dealership <b>brand</b> below to auto-set the spacing. Then use the two symptoms to fine-tune:\n              <br>• <b>Banner hidden under the nav</b> → nav floats over it. Keep \"floats over\" = Yes, and if it's still clipped, bump the spacing up (Custom).\n              <br>• <b>Big gap above the banner</b> → too much spacing. Set \"floats over\" to <b>No</b>, or lower the Custom px.\n            </div>\n            <div class=\"field\" style=\"margin-bottom:0;\">\n              <div class=\"label-row\">\n                <label for=\"templateSelect\">Dealer Template</label>\n                <span class=\"info\" tabindex=\"0\">?\n                  <span class=\"tip\">\n                    <strong>Pick the dealership's brand</strong>\n                    Each OEM template has a different nav height. Pick the brand to auto-set the right top spacing.\n                    <ul>\n                      <li><b>✓ Confirmed</b> — verified on a live site</li>\n                      <li><b>(est.)</b> — best guess, verify on the live site &amp; tell the team to confirm</li>\n                      <li><b>General</b> — use when the template is unknown</li>\n                      <li><b>Custom</b> — type an exact px value</li>\n                    </ul>\n                  </span>\n                </span>\n              </div>\n              <select id=\"templateSelect\" class=\"brand-select\"></select>\n              <div class=\"auto-pos-note\" id=\"autoPosNote\"></div>\n              <div class=\"custom-px\" id=\"customPxWrap\">\n                <label for=\"customPxInput\">Desktop top spacing</label>\n                <input type=\"number\" id=\"customPxInput\" value=\"97\" min=\"0\" max=\"400\">\n                <span class=\"unit\">px</span>\n              </div>\n              <details class=\"measure-help\">\n                <summary>New template? Measure the nav &rsaquo;</summary>\n                <div class=\"measure-body\">\n                  <p>On the live dealer site at <b>full desktop width</b>, open DevTools &rarr; Console, paste this, press Enter:</p>\n                  <code class=\"snippet\" id=\"measureSnippet\">(()=&gt;{const c=[...document.querySelectorAll('header,#header,.js-header,[class*=\"header\"]')].map(e=&gt;{const r=e.getBoundingClientRect();return{b:Math.round(r.bottom),t:r.top,w:r.width}}).filter(o=&gt;o.t&lt;10&amp;&amp;o.b&gt;40&amp;&amp;o.b&lt;250&amp;&amp;o.w&gt;800).sort((a,b)=&gt;b.b-a.b);return c.length?c[0].b:'no nav found - use the visual method'})()</code>\n                  <p>Returns the real nav's bottom edge in px (it filters out sliders &amp; page-tall elements that fooled older snippets). Put that number in <b>Custom</b> above, set floats-over to <b>Yes</b>, then send it to the team to confirm.</p>\n                  <p style=\"margin-bottom:0\"><b>If it says \"no nav found\":</b> right-click the nav bar &rarr; Inspect, hover the highlighted element, and read its pixel height from the tooltip.</p>\n                </div>\n              </details>\n            </div>\n\n            <div class=\"field\" style=\"margin-top:18px; margin-bottom:0;\">\n              <div class=\"label-row\">\n                <label>Does the nav float over the banner?</label>\n                <span class=\"info\" tabindex=\"0\">?\n                  <span class=\"tip\">\n                    <strong>Does the nav sit ON TOP of the page?</strong>\n                    Look at the very top of the live dealer site.\n                    <ul>\n                      <li><b>Yes</b> — nav floats over the content (fixed, or an overlay on the hero) → banner needs top spacing or it hides under the nav</li>\n                      <li><b>No</b> — nav pushes content down normally → banner needs NO top spacing</li>\n                    </ul>\n                    A nav can <em>scroll away</em> and still float over the top — what matters is whether it covers the banner. Picking a brand auto-sets this; you can override.\n                  </span>\n                </span>\n              </div>\n              <div class=\"toggle-group tg-small\" id=\"overlapToggle\">\n                <button data-value=\"yes\" class=\"active\">Yes (floats over)</button>\n                <button data-value=\"no\">No (pushes down)</button>\n              </div>\n            </div>\n\n            <div class=\"field\" style=\"margin-top:18px; margin-bottom:0;\">\n              <div class=\"label-row\">\n                <label>Below Banner</label>\n                <span class=\"info\" tabindex=\"0\">?\n                  <span class=\"tip\">\n                    <strong>Space below the banner</strong>\n                    DM Gatsby templates wrap page content in a <b>.body</b> div with a padding-top that creates a gap below the banner. <b>Flush</b> zeros it out.\n                    <ul>\n                      <li><b>Flush</b> — removes the gap (recommended default)</li>\n                      <li><b>Normal</b> — keeps the dealer's original spacing</li>\n                    </ul>\n                  </span>\n                </span>\n              </div>\n              <div class=\"toggle-group tg-small\" id=\"belowBannerToggle\">\n                <button data-value=\"normal\">Normal</button>\n                <button data-value=\"flush\" class=\"active\">Flush</button>\n              </div>\n            </div>\n          </div>\n        </div>\n\n        <!-- DEVELOPER NOTE -->\n        <div class=\"dev-note\">\n          <div class=\"label-row\">\n            <label for=\"devNote\">Developer Note</label>\n            <span class=\"info\" tabindex=\"0\">?\n              <span class=\"tip\">\n                <strong>Invisible code comment</strong>\n                Auto-fills with today's date and is <b>always added</b> as an HTML comment at the top of the code. It's <b>never visible on the live site</b> — only developers see it in the code. Edit the text if you want, but it works as-is.\n              </span>\n            </span>\n          </div>\n          <textarea id=\"devNote\"></textarea>\n          <p class=\"hint\">Auto-dated &amp; always included as an <b>invisible</b> <code style=\"font-family:var(--font-mono);font-size:11px;\">&lt;!-- AMT Note: ... --&gt;</code> comment. Visible to devs, never shown on the website. Editable.</p>\n        </div>\n\n        <button class=\"reset-link\" id=\"resetBtn\">↺ Reset to original</button>\n      </div>\n    </div>\n\n    <!-- OUTPUT -->\n    <div class=\"stack\">\n\n      <div class=\"card\">\n        <div class=\"card-head\">\n          <h2>Live Preview</h2>\n          <span class=\"meta\">as rendered on site</span>\n        </div>\n        <div class=\"card-body\">\n          <div class=\"preview-wrap\">\n            <div class=\"preview-scope\" id=\"previewScope\"></div>\n          </div>\n        </div>\n      </div>\n\n      <div class=\"card\">\n        <div class=\"card-head\">\n          <h2>Generated Code <span style=\"color:var(--c-muted); font-weight:500; letter-spacing:0; text-transform:none; margin-left:8px;\">— paste into DM HTML Insert field</span></h2>\n          <button class=\"copy\" id=\"copyBtn\">Copy</button>\n        </div>\n        <div style=\"padding:0;\">\n          <pre class=\"code-block\" id=\"codeOut\"></pre>\n        </div>\n      </div>\n\n    </div>\n  </div>\n\n  <!-- PLACEMENT -->\n  <div class=\"placement-section\">\n    <div class=\"placement-head\">\n      <span class=\"eyebrow\">Where it goes</span>\n      <h2 class=\"placement-title\">Placement Instructions</h2>\n      <p class=\"placement-sub\">Pick the scope. Follow the steps. Publish.</p>\n    </div>\n\n    <div class=\"placement\">\n      <div class=\"place-card\">\n        <span class=\"scope-label\">Page-Specific Placement</span>\n        <h3>One page only</h3>\n        <ol>\n          <li>In DM, open the <strong>specific page</strong> for the banner</li>\n          <li>Scroll to the <strong>HTML Array</strong> section</li>\n          <li>Open or create a <strong>Raw HTML</strong> block component</li>\n          <li>Paste the generated code into the <strong>HTML Insert</strong> field</li>\n          <li>Set <strong>Component Order</strong> to <code>-1</code> so it renders at the very top</li>\n          <li>Go back to <strong>Pages</strong> in the left nav and press <strong>Publish</strong></li>\n        </ol>\n      </div>\n      <div class=\"place-card warm\">\n        <span class=\"scope-label\">Sitewide Placement</span>\n        <h3>Every page</h3>\n        <ol>\n          <li>In DM, go to <strong>Site Settings</strong></li>\n          <li>Find the <strong>Site-Wide Top HTML</strong> box</li>\n          <li>Paste the generated code <strong>below the final <code>style</code> / <code>div</code> block</strong> already in the field</li>\n          <li>Save &amp; verify across multiple pages</li>\n        </ol>\n      </div>\n    </div>\n\n    <div class=\"note\">\n      <strong>Component Order Note (Page-Specific Only)</strong>\n      For <b>page-specific</b> placement: if the page doesn't already have a Raw HTML block in the HTML Array, you'll need to <b>create a new block component</b> for this. Set its <code>Component Order</code> to <code>-1</code> — that's what pushes the banner above all other page content. The order field is in the DM UI, not in the code. <b>Sitewide</b> placement doesn't need this — just paste below the existing block in the Site-Wide Top HTML box.\n    </div>\n  </div>\n\n</div><!-- /.main-wrap -->\n\n<!-- CLOSING SECTION — dark, brand-aligned -->\n<section class=\"closer\">\n  <div class=\"closer-wrap\">\n    <span class=\"eyebrow\">Team MXS · Internal</span>\n    <h2 class=\"closer-title\">Built. Branded. <span class=\"em\">Locked.</span></h2>\n    <p class=\"closer-sub\">\n      This editor enforces the <strong>approved MXS pencil banner template</strong>. Edits are restricted to colors, text, padding, and heading size — keeping every dealership banner on-brand and platform-safe.\n    </p>\n    <div class=\"closer-meta\">\n      Team MXS · Internal Tool · <span>teammxs.com</span>\n    </div>\n  </div>\n</section>\n\n</div><!-- /.tool-wrap -->\n\n<script>\n  // ============================================================\n  // OEM TEMPLATE NAV-CLEARANCE VALUES  ←  EDIT THESE AS YOU LEARN\n  // Top margin (px) needed to clear each dealer template's nav.\n  //   d = desktop   t = ≤1024px   m = ≤768px   s = ≤480px\n  //   overlap: true  = nav floats OVER content (fixed OR a top overlay) →\n  //                    banner needs clearance or it hides under the nav\n  //   overlap: false = nav sits in normal flow / pushes content down →\n  //                    banner needs NO clearance\n  //   NOTE: \"scrolls away on scroll\" does NOT mean overlap:false. A nav can\n  //   scroll away yet still float over the page at the top (e.g. Aston).\n  //   The test is purely: does the nav sit ON TOP of the banner? → overlap:true\n  //   flush: true  = also zero the .body padding-top (kills gap BELOW banner)\n  //   flush: false = leave dealer's spacing below the banner alone\n  //   status: 'confirmed' = verified live   |   'estimate' = needs testing\n  //   method: (optional, defaults to 'flow')\n  //     'flow'    = standard fixed-px .margin-addition clearance (most templates)\n  //     'measure' = self-measuring script reads the real nav height live and\n  //                 sets clearance to match — for tall float-over navs where a\n  //                 fixed px overshoots at some widths (CONFIRMED on Lamborghini)\n  //     'group'   = Manhattan Motorcars GROUP template only. Different site\n  //                 (navigation-module--* nav, fixed). Banner sits at top, a\n  //                 script slides the fixed nav down by the banner height and\n  //                 lets it ride back up on scroll. .margin-addition/.body do\n  //                 NOT exist here, so the flow approach can't be used.\n  // ============================================================\n  const OEM_TEMPLATES = {\n    general:     { label: 'General / Unknown Template', d: 97,  t: 61,  m: 60,  s: 60,  overlap: true,  flush: true,  status: 'baseline' },\n    maserati:    { label: 'Maserati',     d: 80,  t: 70,  m: 60,  s: 70,  overlap: true,  flush: false, status: 'confirmed' },\n    astonmartin: { label: 'Aston Martin', d: 97,  t: 61,  m: 60,  s: 60,  overlap: true,  flush: true,  status: 'confirmed' },\n    bentley:     { label: 'Bentley',      d: 0,   t: 0,   m: 0,   s: 0,   overlap: false, flush: true,  status: 'confirmed' },\n    lamborghini: { label: 'Lamborghini',  d: 145, t: 105, m: 82,  s: 82,  overlap: true,  flush: true,  status: 'confirmed', method: 'measure' },\n    rollsroyce:  { label: 'Rolls-Royce',  d: 155, t: 110, m: 85,  s: 85,  overlap: true,  flush: true,  status: 'confirmed' },\n    mmcgroup:    { label: 'Manhattan Motorcars (Group)', d: 0, t: 0, m: 0, s: 0, overlap: true, flush: false, status: 'confirmed', method: 'group' },\n    lotus:       { label: 'Lotus',        d: 120, t: 85,  m: 70,  s: 70,  overlap: true,  flush: true,  status: 'confirmed' },\n    polestar:    { label: 'Polestar',     d: 110, t: 90,  m: 80,  s: 80,  overlap: true,  flush: true,  status: 'estimate'  },\n    honda:       { label: 'Honda',        d: 143, t: 100, m: 80,  s: 80,  overlap: true,  flush: true,  status: 'confirmed' },\n    nissan:      { label: 'Nissan',       d: 90,  t: 70,  m: 65,  s: 65,  overlap: true,  flush: true,  status: 'estimate'  },\n    audi:        { label: 'Audi',         d: 130, t: 95,  m: 80,  s: 75,  overlap: true,  flush: true,  status: 'estimate'  }\n  };\n\n  function resolveNav(key, customPx, overlap) {\n    if (!overlap) return null;         // nav in normal flow → no clearance needed\n    if (key === 'custom') {\n      const px = parseInt(customPx, 10);\n      if (!px || px <= 0) return null;\n      const sm = Math.round(px * 0.63); // mobile navs run shorter\n      return { d: px, t: sm, m: sm, s: sm };\n    }\n    const t = OEM_TEMPLATES[key];\n    return t ? { d: t.d, t: t.t, m: t.m, s: t.s } : null;\n  }\n\n  // Auto-dated default developer note (no name — just the date)\n  function todayStr() {\n    const d = new Date();\n    return (d.getMonth() + 1) + '/' + d.getDate() + '/' + d.getFullYear();\n  }\n  function defaultDevNote() {\n    return 'Pencil banner updated ' + todayStr() + ' via Team MXS Banner Tool';\n  }\n\n  // Strip anything that would break an HTML comment\n  function sanitizeComment(s) {\n    return String(s).replace(/--+/g, '–').replace(/[<>]/g, '').trim();\n  }\n\n  function templateMethod(key) {\n    return (key !== 'custom' && OEM_TEMPLATES[key] && OEM_TEMPLATES[key].method) || 'flow';\n  }\n\n  // Self-measuring banner (tall float-over navs, e.g. Lamborghini).\n  // Reads the real nav height live and matches clearance to it — no px to guess.\n  function buildMeasure(s, note, text) {\n    const flushRule = (s.belowBanner === 'flush')\n      ? '<style>.body{padding-top:0px !important;}</style>\\n' : '';\n    return `${note}${flushRule}<div class=\"margin-addition\"></div>\n<div class=\"language\" style=\"text-align: center;background-color: ${s.bg};padding:${s.padding};color:${s.fg};\"><${s.heading} style=\"margin:0;\">${text}</${s.heading}></div>\n<script>\n(function(){\n  function place(){\n    var navs=[].slice.call(document.querySelectorAll('header,#header,.js-header,[class*=\"header\"]'))\n      .map(function(e){var r=e.getBoundingClientRect();return{b:Math.round(r.bottom),t:r.top,w:r.width};})\n      .filter(function(o){return o.t<10&&o.b>40&&o.b<250&&o.w>800;})\n      .sort(function(a,b){return b.b-a.b;});\n    var h=navs.length?navs[0].b:0;\n    var m=document.querySelector('.margin-addition');\n    if(m){m.style.marginTop=h+'px';}\n  }\n  place();\n  [200,600,1200,2500].forEach(function(t){setTimeout(place,t);});\n  window.addEventListener('resize',place);\n})();\n<\\/script>`;\n  }\n\n  // Manhattan Motorcars GROUP template only. Different site (navigation-module--*\n  // fixed nav). Banner sits at top; script slides the fixed nav down by the\n  // banner height, then lets it ride back up on scroll.\n  function buildGroup(s, note, text) {\n    return `<style>#mxsPencil{text-align:center;background-color:${s.bg};color:${s.fg};padding:${s.padding};box-sizing:border-box;}#mxsPencil>*{margin:0;}</style>\n${note}<div id=\"mxsPencil\"><${s.heading}>${text}</${s.heading}></div>\n<script>\n(function(){\n  var b=document.getElementById('mxsPencil');\n  function sync(){\n    if(!b)return;\n    var h=Math.ceil(b.getBoundingClientRect().height);\n    var nav=document.querySelector('[class*=\"navigation-module--header\"],[class*=\"navigation-module--nav\"]');\n    if(nav){\n      var cs=getComputedStyle(nav);\n      if(cs.position==='fixed'||cs.position==='sticky'){\n        var y=window.pageYOffset||document.documentElement.scrollTop;\n        nav.style.top=Math.max(0,h-y)+'px';\n      }\n    }\n  }\n  sync();\n  window.addEventListener('scroll',sync,{passive:true});\n  window.addEventListener('resize',sync);\n  [200,600,1200,2500].forEach(function(t){setTimeout(sync,t);});\n})();\n<\\/script>`;\n  }\n\n  function buildBannerCode(s) {\n    const note = (s.devNote && s.devNote.trim())\n      ? `<!-- AMT Note: ${sanitizeComment(s.devNote)} -->\\n`\n      : '';\n    const text = escapeForHtml(s.text);\n\n    const method = templateMethod(s.navClearance);\n    if (method === 'measure') return buildMeasure(s, note, text);\n    if (method === 'group')   return buildGroup(s, note, text);\n\n    // 'flow' (default) — standard fixed-px clearance\n    const cfg = resolveNav(s.navClearance, s.customPx, s.overlap);\n    let rules = '';\n    if (cfg) {\n      rules += `.margin-addition{margin-top:${cfg.d}px;}\n@media (max-width:1024px){.margin-addition{margin-top:${cfg.t}px;}}\n@media (max-width:768px){.margin-addition{margin-top:${cfg.m}px;}}\n@media (max-width:480px){.margin-addition{margin-top:${cfg.s}px;}}\n`;\n    }\n    if (s.belowBanner === 'flush') {\n      // CONFIRMED via DevTools on Lotus/Maserati/Aston Gatsby templates:\n      // the white gap below the banner is .body's padding-top (60px desktop,\n      // 40px ≤1600, 0 ≤1200). A single !important rule kills it at every width.\n      // (.language + * does NOT work — .body is a sibling of the banner's\n      // wrapper div, not of .language itself.)\n      rules += `.body{padding-top:0px !important;}\n`;\n    }\n    const styleBlock = rules ? `<style>\\n${rules}</style>\\n` : '';\n    return `${note}${styleBlock}<div class=\"margin-addition\"></div>\n<div class=\"language\" style=\"text-align: center;background-color: ${s.bg};padding:${s.padding};color:${s.fg};\"><${s.heading}>${text}</${s.heading}></div>`;\n  }\n\n  const DEFAULT = {\n    text: 'Put dealership message here',\n    bg: '#ba162b',\n    fg: '#ffffff',\n    padding: '1% 0%',\n    heading: 'h2',\n    navClearance: 'general',\n    customPx: '97',\n    overlap: true,\n    belowBanner: 'flush',\n    devNote: defaultDevNote()\n  };\n  const state = { ...DEFAULT };\n\n  const $ = id => document.getElementById(id);\n  const bannerTextEl = $('bannerText');\n  const bgColorEl = $('bgColor');\n  const bgHexEl = $('bgHex');\n  const textColorEl = $('textColor');\n  const textHexEl = $('textHex');\n  const paddingToggle = $('paddingToggle');\n  const headingToggle = $('headingToggle');\n  const templateSelect = $('templateSelect');\n  const customPxWrap = $('customPxWrap');\n  const customPxInput = $('customPxInput');\n  const overlapToggle = $('overlapToggle');\n  const belowBannerToggle = $('belowBannerToggle');\n  const autoPosNote = $('autoPosNote');\n  const devNoteInput = $('devNote');\n  const advancedSection = $('advancedSection');\n  const advancedToggle = $('advancedToggle');\n  const previewScope = $('previewScope');\n  const codeOut = $('codeOut');\n  const copyBtn = $('copyBtn');\n  const resetBtn = $('resetBtn');\n\n  function escapeForHtml(s) {\n    return String(s)\n      .replace(/&/g, '&amp;')\n      .replace(/</g, '&lt;')\n      .replace(/>/g, '&gt;')\n      .replace(/\"/g, '&quot;');\n  }\n  function escapeForDisplay(s) {\n    return String(s).replace(/&/g, '&amp;').replace(/</g, '&lt;').replace(/>/g, '&gt;');\n  }\n\n  function buildCode() {\n    return buildBannerCode(state);\n  }\n\n  function syntaxHighlight(rawCode) {\n    let html = escapeForDisplay(rawCode);\n    // Highlight HTML comments first\n    html = html.replace(/(&lt;!--[\\s\\S]*?--&gt;)/g, '<span class=\"comment\">$1</span>');\n    // Process each tag (&lt;...&gt;) as a unit so the attr regex can't bleed\n    // into the spans we insert.\n    html = html.replace(/(&lt;\\/?)([\\w-]+)([^&]*?)(&gt;)/g, (m, opener, tagName, attrs, closer) => {\n      // Skip comment spans we already wrapped\n      if (tagName === 'span') return m;\n      const highlightedAttrs = attrs.replace(\n        /(\\s)([\\w-]+)(=)(&quot;)([^\"&]*?)(&quot;)/g,\n        '$1<span class=\"attr\">$2</span>$3<span class=\"string\">\"$5\"</span>'\n      );\n      return `${opener}<span class=\"tag\">${tagName}</span>${highlightedAttrs}${closer}`;\n    });\n    return html;\n  }\n\n  function renderPreview() {\n    // Strip the <style>, <script>, and comment blocks for the in-tool preview so\n    // we don't see empty space above the banner or run positioning scripts.\n    // They stay in the copied output.\n    const code = buildBannerCode(state)\n      .replace(/<!--[\\s\\S]*?-->\\s*/g, '')\n      .replace(/<style>[\\s\\S]*?<\\/style>\\s*/i, '')\n      .replace(/<script>[\\s\\S]*?<\\/script>\\s*/i, '');\n    previewScope.innerHTML = code;\n  }\n\n  function update() {\n    codeOut.innerHTML = syntaxHighlight(buildCode());\n    renderPreview();\n  }\n\n  bannerTextEl.addEventListener('input', e => {\n    state.text = e.target.value;\n    update();\n  });\n\n  function bindColor(picker, hex, key) {\n    picker.addEventListener('input', e => {\n      state[key] = e.target.value;\n      hex.value = e.target.value;\n      update();\n    });\n    hex.addEventListener('input', e => {\n      let v = e.target.value.trim();\n      if (!v.startsWith('#')) v = '#' + v;\n      if (/^#[0-9a-fA-F]{6}$/.test(v)) {\n        state[key] = v;\n        picker.value = v;\n        update();\n      } else if (/^#[0-9a-fA-F]{3}$/.test(v)) {\n        const r = v[1], g = v[2], b = v[3];\n        const full = `#${r}${r}${g}${g}${b}${b}`;\n        state[key] = full;\n        picker.value = full;\n        update();\n      }\n    });\n  }\n  bindColor(bgColorEl, bgHexEl, 'bg');\n  bindColor(textColorEl, textHexEl, 'fg');\n\n  paddingToggle.querySelectorAll('button').forEach(btn => {\n    btn.addEventListener('click', () => {\n      paddingToggle.querySelectorAll('button').forEach(b => b.classList.remove('active'));\n      btn.classList.add('active');\n      state.padding = btn.dataset.value;\n      update();\n    });\n  });\n\n  headingToggle.querySelectorAll('button').forEach(btn => {\n    btn.addEventListener('click', () => {\n      headingToggle.querySelectorAll('button').forEach(b => b.classList.remove('active'));\n      btn.classList.add('active');\n      state.heading = btn.dataset.value;\n      update();\n    });\n  });\n\n  // Build the template dropdown from OEM_TEMPLATES (single source of truth)\n  function populateTemplateDropdown() {\n    templateSelect.innerHTML = '';\n    // General first\n    const gen = document.createElement('option');\n    gen.value = 'general';\n    gen.textContent = OEM_TEMPLATES.general.label;\n    templateSelect.appendChild(gen);\n\n    const confirmed = [], estimate = [];\n    Object.keys(OEM_TEMPLATES).forEach(key => {\n      if (key === 'general') return;\n      const t = OEM_TEMPLATES[key];\n      (t.status === 'confirmed' ? confirmed : estimate).push([key, t]);\n    });\n\n    if (confirmed.length) {\n      const og = document.createElement('optgroup');\n      og.label = 'Confirmed';\n      confirmed.forEach(([key, t]) => {\n        const o = document.createElement('option');\n        o.value = key;\n        o.textContent = t.label + '  ✓';\n        og.appendChild(o);\n      });\n      templateSelect.appendChild(og);\n    }\n    if (estimate.length) {\n      const og = document.createElement('optgroup');\n      og.label = 'Estimated — verify live';\n      estimate.forEach(([key, t]) => {\n        const o = document.createElement('option');\n        o.value = key;\n        o.textContent = t.label + '  (est.)';\n        og.appendChild(o);\n      });\n      templateSelect.appendChild(og);\n    }\n\n    const ogOther = document.createElement('optgroup');\n    ogOther.label = 'Other';\n    [['custom', 'Custom (enter px)']].forEach(([v, l]) => {\n      const o = document.createElement('option');\n      o.value = v;\n      o.textContent = l;\n      ogOther.appendChild(o);\n    });\n    templateSelect.appendChild(ogOther);\n\n    templateSelect.value = state.navClearance;\n  }\n  populateTemplateDropdown();\n\n  // Show the auto-position hint and disable manual spacing toggles for the\n  // script-based templates (measure / group), where they have no effect.\n  function applyMethodUI(key) {\n    const method = templateMethod(key);\n    const isScript = (method === 'measure' || method === 'group');\n    if (method === 'measure') {\n      autoPosNote.innerHTML = '<b>Auto-positions.</b> This template measures the real nav height live, so the spacing toggles below don\\u2019t apply \\u2014 the banner always lands flush under the nav.';\n    } else if (method === 'group') {\n      autoPosNote.innerHTML = '<b>Group template.</b> Different site structure \\u2014 the banner sits at the top and the script slides the fixed nav below it on load. The spacing toggles below don\\u2019t apply.';\n    }\n    autoPosNote.classList.toggle('show', isScript);\n    [overlapToggle, belowBannerToggle].forEach(tg => {\n      tg.style.opacity = isScript ? '0.4' : '';\n      tg.style.pointerEvents = isScript ? 'none' : '';\n    });\n  }\n\n  templateSelect.addEventListener('change', e => {\n    const val = e.target.value;\n    state.navClearance = val;\n    customPxWrap.classList.toggle('show', val === 'custom');\n    // Auto-set Nav Overlap + Below-Banner flush from the brand's known behavior\n    if (val !== 'custom' && OEM_TEMPLATES[val]) {\n      state.overlap = OEM_TEMPLATES[val].overlap;\n      syncOverlapToggle();\n      state.belowBanner = OEM_TEMPLATES[val].flush ? 'flush' : 'normal';\n      syncBelowBannerToggle();\n    }\n    applyMethodUI(val);\n    update();\n  });\n\n  function syncOverlapToggle() {\n    overlapToggle.querySelectorAll('button').forEach(b => {\n      b.classList.toggle('active', (b.dataset.value === 'yes') === state.overlap);\n    });\n  }\n\n  function syncBelowBannerToggle() {\n    belowBannerToggle.querySelectorAll('button').forEach(b => {\n      b.classList.toggle('active', b.dataset.value === state.belowBanner);\n    });\n  }\n\n  overlapToggle.querySelectorAll('button').forEach(btn => {\n    btn.addEventListener('click', () => {\n      overlapToggle.querySelectorAll('button').forEach(b => b.classList.remove('active'));\n      btn.classList.add('active');\n      state.overlap = btn.dataset.value === 'yes';\n      update();\n    });\n  });\n\n  customPxInput.addEventListener('input', e => {\n    state.customPx = e.target.value;\n    update();\n  });\n\n  devNoteInput.addEventListener('input', e => {\n    state.devNote = e.target.value;\n    update();\n  });\n\n  belowBannerToggle.querySelectorAll('button').forEach(btn => {\n    btn.addEventListener('click', () => {\n      belowBannerToggle.querySelectorAll('button').forEach(b => b.classList.remove('active'));\n      btn.classList.add('active');\n      state.belowBanner = btn.dataset.value;\n      update();\n    });\n  });\n\n  advancedToggle.addEventListener('click', () => {\n    advancedSection.classList.toggle('open');\n  });\n\n  // Bulletproof copy — works across browsers, hosting configs, and iframes\n  function copyToClipboard(text) {\n    return new Promise((resolve, reject) => {\n      // Method 1: textarea + execCommand (most reliable, works everywhere)\n      const ta = document.createElement('textarea');\n      ta.value = text;\n      ta.style.position = 'fixed';\n      ta.style.top = '0';\n      ta.style.left = '-9999px';\n      ta.style.opacity = '0';\n      ta.setAttribute('readonly', '');\n      document.body.appendChild(ta);\n\n      // iOS Safari requires this dance\n      const prevSelection = document.getSelection().rangeCount > 0\n        ? document.getSelection().getRangeAt(0)\n        : null;\n      ta.focus();\n      ta.select();\n      ta.setSelectionRange(0, text.length);\n\n      let success = false;\n      try {\n        success = document.execCommand('copy');\n      } catch (err) {\n        success = false;\n      }\n      document.body.removeChild(ta);\n\n      // Restore prior selection if there was one\n      if (prevSelection) {\n        const sel = document.getSelection();\n        sel.removeAllRanges();\n        sel.addRange(prevSelection);\n      }\n\n      if (success) {\n        resolve();\n        return;\n      }\n\n      // Method 2: Modern clipboard API as backup\n      if (navigator.clipboard && navigator.clipboard.writeText) {\n        navigator.clipboard.writeText(text).then(resolve).catch(reject);\n      } else {\n        reject(new Error('Both copy methods failed'));\n      }\n    });\n  }\n\n  copyBtn.addEventListener('click', async () => {\n    const raw = buildCode();\n    try {\n      await copyToClipboard(raw);\n      copyBtn.textContent = '✓ Copied';\n      copyBtn.classList.add('copied');\n      setTimeout(() => {\n        copyBtn.textContent = 'Copy';\n        copyBtn.classList.remove('copied');\n      }, 1600);\n    } catch (err) {\n      console.error('[Banner Tool] Copy failed:', err);\n      alert('Copy failed. Please select the code in the box and copy manually with Cmd/Ctrl+C.');\n    }\n  });\n\n  resetBtn.addEventListener('click', () => {\n    Object.assign(state, DEFAULT);\n    bannerTextEl.value = DEFAULT.text;\n    bgColorEl.value = DEFAULT.bg;\n    bgHexEl.value = DEFAULT.bg;\n    textColorEl.value = DEFAULT.fg;\n    textHexEl.value = DEFAULT.fg;\n    paddingToggle.querySelectorAll('button').forEach(b => {\n      b.classList.toggle('active', b.dataset.value === DEFAULT.padding);\n    });\n    headingToggle.querySelectorAll('button').forEach(b => {\n      b.classList.toggle('active', b.dataset.value === DEFAULT.heading);\n    });\n    templateSelect.value = DEFAULT.navClearance;\n    state.overlap = DEFAULT.overlap;\n    syncOverlapToggle();\n    belowBannerToggle.querySelectorAll('button').forEach(b => {\n      b.classList.toggle('active', b.dataset.value === DEFAULT.belowBanner);\n    });\n    customPxInput.value = DEFAULT.customPx;\n    customPxWrap.classList.remove('show');\n    applyMethodUI(DEFAULT.navClearance);\n    // Refresh the dev note with today's date on reset\n    state.devNote = defaultDevNote();\n    devNoteInput.value = state.devNote;\n    update();\n  });\n\n  // Pre-fill the dev note textarea with the auto-dated default\n  devNoteInput.value = state.devNote;\n\n  applyMethodUI(state.navClearance);\n  update();\n</script>\n\n<script>\n// ============================================================\n// PLATFORM WRAPPER FIX\n// Adopted from the MXS OEM Programs hub (.mxs-hub).\n// Walks up the DOM from .tool-wrap and forces every parent +\n// the site's footer to dark so there's no white seam between\n// the tool and teammxs.com chrome. Runs at multiple intervals\n// to catch Gatsby/SPA delayed renders.\n// ============================================================\n(function() {\n  var DARK = '#0a0e1a';\n  var root = document.querySelector('.tool-wrap');\n  if (!root) return;\n\n  function applyPlatformFix() {\n    try {\n      // Walk up the DOM from the tool's root and dark-paint every ancestor\n      var node = root.parentElement;\n      while (node && node !== document.body && node !== document.documentElement) {\n        node.style.backgroundColor = DARK;\n        node = node.parentElement;\n      }\n\n      // Hit common platform wrapper IDs / classes (Gatsby, Next, generic)\n      var commonWrappers = document.querySelectorAll(\n        '#___gatsby, #gatsby-focus-wrapper, #__next, #root, #app, ' +\n        'main, #main, .main, .main-content, .page-content, ' +\n        '.site-content, .content-wrapper, .page-wrapper, #content, #page'\n      );\n      commonWrappers.forEach(function(el) { el.style.backgroundColor = DARK; });\n      document.documentElement.style.backgroundColor = DARK;\n      document.body.style.backgroundColor = DARK;\n\n      // Dark-paint the platform footer + 4 levels up so there's no seam\n      var platformFooters = document.querySelectorAll(\n        'footer, .site-footer, .main-footer, #footer, .footer, [class*=\"footer\"]'\n      );\n      platformFooters.forEach(function(footer) {\n        if (root.contains(footer)) return; // skip our own closer\n        footer.style.backgroundColor = DARK;\n        var ancestor = footer.parentElement;\n        var hops = 0;\n        while (ancestor && hops < 4 && ancestor !== document.body) {\n          ancestor.style.backgroundColor = DARK;\n          ancestor = ancestor.parentElement;\n          hops++;\n        }\n      });\n    } catch (e) {\n      if (window.console && console.warn) {\n        console.warn('[MXS Banner Tool] Platform fix skipped:', e.message);\n      }\n    }\n  }\n\n  // Run immediately + at staged intervals to catch SPA hydration\n  applyPlatformFix();\n  setTimeout(applyPlatformFix, 250);\n  setTimeout(applyPlatformFix, 1000);\n  setTimeout(applyPlatformFix, 2500);\n  if (document.readyState !== 'complete') {\n    window.addEventListener('load', applyPlatformFix);\n  }\n})();\n</script>\n\n</body>\n</html></div>"},"SEO":{"order":15,"visible":true,"seo":{"MetaData":"","MetaTitle":"","tags":["",{"tagName":"robots","tagContent":"noindex","id":"\"robotsnoindex\"","editState":false},{"tagName":"robots","tagContent":"nofollow","id":"\"robotsnofollow\"","editState":false}]}}},"title":"Internal Pencil Banner Creation","theme":{"colors":{"primary":"#0a0f1c","secondary":"white","text":"#ffffff","secondarytext":"#272727","accent1":"#276df1","accent2":"#276df1"}},"dealerInfo":{"dealerAddress":"333 N Lantana Street, Suite 122,,Camarillo, CA 93010","dealerLogo":"https://media.dealermasters.com/Nissan/MXS/MXS_logo_04.webp","dealerName":"Team MXS","salesNumber":"866-665-4669","serviceNumber":"866-665-4669","partsNumber":"866-665-4669","bodyShopNumber":"866-665-4669","financeNumber":"866-665-4669","manufacturer":"","website":"Team MXS","websiteLink":"/","directions":"https://www.google.com/maps/","newInventory":"/","usedInventory":"/","bgBackground":"","salesHours":[{"day":"Mon - Fri","time":"8 AM - 5 PM PST"}],"financeHours":[],"serviceHours":[],"partsHours":[],"collisionHours":[],"managerSpecialPage":"/manager","financeSpecialPage":"/finance","leaseSpecialPage":"/lease","privacy":"/","termsOfService":"/","favicon":"https://media.dealermasters.com/6351ab9310c6d3e9abe42c4b/dbf217aa4f6ef4a9a7227a195766d659.png","gtmId":"GTM-PZD6C7W","socialThumbnail":"https://media.dealermasters.com/6351ab9310c6d3e9abe42c4b/dbf217aa4f6ef4a9a7227a195766d659.png"},"inventorymanagement":{"filterOptions":"NUC","costrange":"5000","mileagerange":"10000","months":"180","downpayment":"15","aRate":"0","bRate":"0","cRate":"0","dRate":"0","eRate":"0","fRate":"0","unavailableImg":"","vehiclecardbutton":[{"btnleft":"","btnleftlink":"","btnright":"","btnrightlink":"","overrideTheme":false,"btncolor":"","btntxtcolor":""}],"topHtmlVDP":"<p></p>","botHtmlVDP":"<p></p>","topHtmlSRP":"<p></p>","botHtmlSRP":"<p></p>","disclaimerSRP":"<p dir = \"auto\">We make every effort to present information that is accurate. However, it is based on data provided by the vehicle manufacturar and/or other sources and therefore exact configuration, color, specifications & accesories should be used as a guide only and are not guaranteed. Under no circumstances will be liable for any inaccuracies, claims or losses of any nature. Furthermore inventory is subject to prior sale and prices are subject ot change without notice., cannot be combined with any other offer(s), do not include provincial or local taxes, tags, registration or title fees. To ensure your complete satisfaction, please verify accuracy prior to purchase.</p>\n","vdpslug":"{{year}}/{{make}}/{{model}}/{{vin}}","actionButtons":[{"buttonText":"Check availability","buttonLink":"","buttonImage":"","overrideTheme":"","btncolor":"","btntxtcolor":""}],"disclaimerVDP":"<p dir = \"auto\">We make every effort to present information that is accurate. However, it is based on data provided by the vehicle manufacturar and/or other sources and therefore exact configuration, color, specifications & accesories should be used as a guide only and are not guaranteed. Under no circumstances will be liable for any inaccuracies, claims or losses of any nature. Furthermore inventory is subject to prior sale and prices are subject ot change without notice., cannot be combined with any other offer(s), do not include provincial or local taxes, tags, registration or title fees. To ensure your complete satisfaction, please verify accuracy prior to purchase.</p>\n","disclaimerCalculator":"<p></p>","disclaimerFinanceApp":"<p></p>","disclaimerContact":"<p></p>","fallbackText":"Call for Price","PosDifText":"Dealer Accessories","NegDifText":"Dealer Discount","netPriceCustomText":"","LocationFilter":false},"footer":{"logo":"https://media.dealermasters.com/242ebbad91ba7e3a4af114846cbcd19a.png","links":[{"linkName":"SERVICE & PARTS","linkValue":"/service","subLinks":[{"linkName":"Shop Parts","linkValue":"/parts"}]}],"cookieDisclaimer":"<div></div>","linkLI":"","linkIOS":"","linkAndroid":"","bottomLinks":[{"linkName":"Dealer Masters","linkValue":"/dealermasters"},{"linkName":"eCommerce","linkValue":"/ecommerce-services"},{"linkName":"About","linkValue":"/about"},{"linkName":"Contact Us","linkValue":"?title=Get%20In%20Touch%20With%20Us#contact-form"},{"linkName":"Privacy Policy","linkValue":"/privacy-policy-and-cookie-policy"},{"linkName":"SOC 2 | Trust Center","linkValue":"https://trust.teammxs.com/"}]},"lead_url":"https://leads.dealermasters.com/leads","site_id":"6351ab9310c6d3e9abe42c4b","blogmanagement":{"blogResultsTopHTML":"<style>\n</style>\n","blogResultsBottomHTML":"<div class=\"wrapper\">\n<!--Alignment valid values: \"left-align\", \"center-left-align\", \"middle-align\", \"right-align\". Defaults to left-align.-->\n<!--Theme valid values: \"no-bg\" \"dark\", \"light\". Defaults to no-bg.-->\n    <section id=\"main-bg\" class=\"content-section light middle-align\">\n        <h3 id=\"content-title\">MEET WITH TEAM MXS</h3>\n        <a id=\"a-link\" class=\"content-cta\" href=\"#contact-form\">BOOK NOW</a>\n    </section>\n</div>\n<style>\n  .blog-module--blog-jumbotron--1yRvV {\n    max-width: 1920px;\n    margin: 54px auto 0;\n    background-position: left;\n\t}\n  \n  .wrapper {\n    max-width: 1920px;\n    display: flex;\n    justify-content: center;\n    align-items: center;\n    flex-wrap: wrap;\n    margin: 0 auto;\n  }\n  section.content-section {\n    width: 100%;\n    display: flex;\n    flex-direction: column;\n    padding: 4rem;\n    gap: 1.5rem;\n  }\n  .content-section h3 {\n    font-size: 32px;\n    font-family: var(--primary-font);\n    text-align: center;\n    font-weight: 300;\n  }\n  .content-section p {\n    letter-spacing: 0.1px;\n    line-height: 1.5;\n    font-size: 16px;\n  }\n  a.content-cta {\n    background-color: var(--primary-text);\n    padding: 1rem;\n    font-size: 16px;\n    box-shadow: 3px 3px 5px rgba(0,0,0,0.15);\n    width: fit-content;\n  }\n  @media only screen and (max-width: 576px) {\n    .content-section h3 { font-size: 28px; }\n  }\n  /*Alignment*/\n  /**Left**/\n  section.content-section.left-align {\n    align-items: flex-start;\n  } \n  .left-align.content-section p {\n    text-align: left;\n  }\n  /**Center Left**/\n  section.content-section.center-left-align {\n    align-items: center;\n  } \n  .center-left-align.content-section p {\n    text-align: left;\n  }\n  /**Middle**/\n  section.content-section.middle-align {\n    align-items: center;\n  } \n  .middle-align.content-section p {\n    text-align: center;\n  }\n  /**Right**/\n  section.content-section.right-align {\n    align-items: flex-end;\n  }\n  .right-align.content-section p {\n    text-align: right;\n  }\n  /*Themes*/\n  /**No BG**/\n  section.content-section.no-bg {\n    background-color: transparent;\n  }\n  .content-section.no-bg a.content-cta {\n    background: var(--primary-accent) linear-gradient(295.53deg,#276df1 22.68%,#539cff 98.61%);\n    color: var(--primary-text);\n  }\n  /**Light**/\n  section.content-section.light {\n    background: var(--primary-accent) linear-gradient(295.53deg,#276df1 22.68%,#539cff 98.61%);\n  }\n  .content-section.light a.content-cta {\n    background-color: var(--primary-text);\n    color: var(--primary-accent);\n  }\n  /**Dark**/\n  section.content-section.dark {\n    background: #272727;\n  }\n  .content-section.dark a.content-cta {\n    background: var(--primary-accent) linear-gradient(295.53deg,#276df1 22.68%,#539cff 98.61%);\n    color: var(--primary-text);\n  }\n  \n  /** MOBILE ADJUSTMENTS **/ \n  @media screen and (max-width: 750px) {\n    .blog-module--blog-jumbotron--1yRvV {\n     min-height: 300px !important;  \n    }\n    \n    .blog-module--blog-jumbotron--1yRvV p {\n      font-size: 30px !important; \n    }\n  }\n</style>","allBlogPagesBottomHTML":"","categoriesBlogResultsHTML":"","blogResultsPageSlug":"/blogs"},"gtmId":"GTM-PZD6C7W"}},"staticQueryHashes":["952559061"]}