`s.
+
+.nav {
+ display: flex;
+ flex-wrap: wrap;
+ padding-left: 0;
+ margin-bottom: 0;
+ list-style: none;
+}
+
+.nav-link {
+ display: block;
+ padding: $nav-link-padding-y $nav-link-padding-x;
+ text-decoration: if($link-decoration == none, null, none);
+
+ @include hover-focus() {
+ text-decoration: none;
+ }
+
+ // Disabled state lightens text
+ &.disabled {
+ color: $nav-link-disabled-color;
+ pointer-events: none;
+ cursor: default;
+ }
+}
+
+//
+// Tabs
+//
+
+.nav-tabs {
+ border-bottom: $nav-tabs-border-width solid $nav-tabs-border-color;
+
+ .nav-link {
+ margin-bottom: -$nav-tabs-border-width;
+ background-color: transparent;
+ border: $nav-tabs-border-width solid transparent;
+ @include border-top-radius($nav-tabs-border-radius);
+
+ @include hover-focus() {
+ // Prevents active .nav-link tab overlapping focus outline of previous/next .nav-link
+ isolation: isolate;
+ border-color: $nav-tabs-link-hover-border-color;
+ }
+
+ &.disabled {
+ color: $nav-link-disabled-color;
+ background-color: transparent;
+ border-color: transparent;
+ }
+ }
+
+ .nav-link.active,
+ .nav-item.show .nav-link {
+ color: $nav-tabs-link-active-color;
+ background-color: $nav-tabs-link-active-bg;
+ border-color: $nav-tabs-link-active-border-color;
+ }
+
+ .dropdown-menu {
+ // Make dropdown border overlap tab border
+ margin-top: -$nav-tabs-border-width;
+ // Remove the top rounded corners here since there is a hard edge above the menu
+ @include border-top-radius(0);
+ }
+}
+
+
+//
+// Pills
+//
+
+.nav-pills {
+ .nav-link {
+ background: none;
+ border: 0;
+ @include border-radius($nav-pills-border-radius);
+ }
+
+ .nav-link.active,
+ .show > .nav-link {
+ color: $nav-pills-link-active-color;
+ background-color: $nav-pills-link-active-bg;
+ }
+}
+
+
+//
+// Justified variants
+//
+
+.nav-fill {
+ > .nav-link,
+ .nav-item {
+ flex: 1 1 auto;
+ text-align: center;
+ }
+}
+
+.nav-justified {
+ > .nav-link,
+ .nav-item {
+ flex-basis: 0;
+ flex-grow: 1;
+ text-align: center;
+ }
+}
+
+
+// Tabbable tabs
+//
+// Hide tabbable panes to start, show them when `.active`
+
+.tab-content {
+ > .tab-pane {
+ display: none;
+ }
+ > .active {
+ display: block;
+ }
+}
diff --git a/_sass/node_modules/bootstrap/scss/_navbar.scss b/_sass/node_modules/bootstrap/scss/_navbar.scss
new file mode 100644
index 0000000000..cf5b667908
--- /dev/null
+++ b/_sass/node_modules/bootstrap/scss/_navbar.scss
@@ -0,0 +1,332 @@
+// Contents
+//
+// Navbar
+// Navbar brand
+// Navbar nav
+// Navbar text
+// Navbar divider
+// Responsive navbar
+// Navbar position
+// Navbar themes
+
+
+// Navbar
+//
+// Provide a static navbar from which we expand to create full-width, fixed, and
+// other navbar variations.
+
+.navbar {
+ position: relative;
+ display: flex;
+ flex-wrap: wrap; // allow us to do the line break for collapsing content
+ align-items: center;
+ justify-content: space-between; // space out brand from logo
+ padding: $navbar-padding-y $navbar-padding-x;
+
+ // Because flex properties aren't inherited, we need to redeclare these first
+ // few properties so that content nested within behave properly.
+ %container-flex-properties {
+ display: flex;
+ flex-wrap: wrap;
+ align-items: center;
+ justify-content: space-between;
+ }
+
+ .container,
+ .container-fluid {
+ @extend %container-flex-properties;
+ }
+
+ @each $breakpoint, $container-max-width in $container-max-widths {
+ > .container#{breakpoint-infix($breakpoint, $container-max-widths)} {
+ @extend %container-flex-properties;
+ }
+ }
+}
+
+
+// Navbar brand
+//
+// Used for brand, project, or site names.
+
+.navbar-brand {
+ display: inline-block;
+ padding-top: $navbar-brand-padding-y;
+ padding-bottom: $navbar-brand-padding-y;
+ margin-right: $navbar-padding-x;
+ @include font-size($navbar-brand-font-size);
+ line-height: inherit;
+ white-space: nowrap;
+
+ @include hover-focus() {
+ text-decoration: none;
+ }
+}
+
+
+// Navbar nav
+//
+// Custom navbar navigation (doesn't require `.nav`, but does make use of `.nav-link`).
+
+.navbar-nav {
+ display: flex;
+ flex-direction: column; // cannot use `inherit` to get the `.navbar`s value
+ padding-left: 0;
+ margin-bottom: 0;
+ list-style: none;
+
+ .nav-link {
+ padding-right: 0;
+ padding-left: 0;
+ }
+
+ .dropdown-menu {
+ position: static;
+ float: none;
+ }
+}
+
+
+// Navbar text
+//
+//
+
+.navbar-text {
+ display: inline-block;
+ padding-top: $nav-link-padding-y;
+ padding-bottom: $nav-link-padding-y;
+}
+
+
+// Responsive navbar
+//
+// Custom styles for responsive collapsing and toggling of navbar contents.
+// Powered by the collapse Bootstrap JavaScript plugin.
+
+// When collapsed, prevent the toggleable navbar contents from appearing in
+// the default flexbox row orientation. Requires the use of `flex-wrap: wrap`
+// on the `.navbar` parent.
+.navbar-collapse {
+ flex-basis: 100%;
+ flex-grow: 1;
+ // For always expanded or extra full navbars, ensure content aligns itself
+ // properly vertically. Can be easily overridden with flex utilities.
+ align-items: center;
+}
+
+// Button for toggling the navbar when in its collapsed state
+.navbar-toggler {
+ padding: $navbar-toggler-padding-y $navbar-toggler-padding-x;
+ @include font-size($navbar-toggler-font-size);
+ line-height: 1;
+ background-color: transparent; // remove default button style
+ border: $border-width solid transparent; // remove default button style
+ @include border-radius($navbar-toggler-border-radius);
+
+ @include hover-focus() {
+ text-decoration: none;
+ }
+}
+
+// Keep as a separate element so folks can easily override it with another icon
+// or image file as needed.
+.navbar-toggler-icon {
+ display: inline-block;
+ width: 1.5em;
+ height: 1.5em;
+ vertical-align: middle;
+ content: "";
+ background: 50% / 100% 100% no-repeat;
+}
+
+.navbar-nav-scroll {
+ max-height: $navbar-nav-scroll-max-height;
+ overflow-y: auto;
+}
+
+// Generate series of `.navbar-expand-*` responsive classes for configuring
+// where your navbar collapses.
+.navbar-expand {
+ @each $breakpoint in map-keys($grid-breakpoints) {
+ $next: breakpoint-next($breakpoint, $grid-breakpoints);
+ $infix: breakpoint-infix($next, $grid-breakpoints);
+
+ {$infix} {
+ @include media-breakpoint-down($breakpoint) {
+ %container-navbar-expand-#{$breakpoint} {
+ padding-right: 0;
+ padding-left: 0;
+ }
+
+ > .container,
+ > .container-fluid {
+ @extend %container-navbar-expand-#{$breakpoint};
+ }
+
+ @each $size, $container-max-width in $container-max-widths {
+ > .container#{breakpoint-infix($size, $container-max-widths)} {
+ @extend %container-navbar-expand-#{$breakpoint};
+ }
+ }
+ }
+
+ @include media-breakpoint-up($next) {
+ flex-flow: row nowrap;
+ justify-content: flex-start;
+
+ .navbar-nav {
+ flex-direction: row;
+
+ .dropdown-menu {
+ position: absolute;
+ }
+
+ .nav-link {
+ padding-right: $navbar-nav-link-padding-x;
+ padding-left: $navbar-nav-link-padding-x;
+ }
+ }
+
+ // For nesting containers, have to redeclare for alignment purposes
+ %container-nesting-#{$breakpoint} {
+ flex-wrap: nowrap;
+ }
+
+ > .container,
+ > .container-fluid {
+ @extend %container-nesting-#{$breakpoint};
+ }
+
+ @each $size, $container-max-width in $container-max-widths {
+ > .container#{breakpoint-infix($size, $container-max-widths)} {
+ @extend %container-nesting-#{$breakpoint};
+ }
+ }
+
+ .navbar-nav-scroll {
+ overflow: visible;
+ }
+
+ .navbar-collapse {
+ display: flex !important; // stylelint-disable-line declaration-no-important
+
+ // Changes flex-bases to auto because of an IE10 bug
+ flex-basis: auto;
+ }
+
+ .navbar-toggler {
+ display: none;
+ }
+ }
+ }
+ }
+}
+
+
+// Navbar themes
+//
+// Styles for switching between navbars with light or dark background.
+
+// Dark links against a light background
+.navbar-light {
+ .navbar-brand {
+ color: $navbar-light-brand-color;
+
+ @include hover-focus() {
+ color: $navbar-light-brand-hover-color;
+ }
+ }
+
+ .navbar-nav {
+ .nav-link {
+ color: $navbar-light-color;
+
+ @include hover-focus() {
+ color: $navbar-light-hover-color;
+ }
+
+ &.disabled {
+ color: $navbar-light-disabled-color;
+ }
+ }
+
+ .show > .nav-link,
+ .active > .nav-link,
+ .nav-link.show,
+ .nav-link.active {
+ color: $navbar-light-active-color;
+ }
+ }
+
+ .navbar-toggler {
+ color: $navbar-light-color;
+ border-color: $navbar-light-toggler-border-color;
+ }
+
+ .navbar-toggler-icon {
+ background-image: escape-svg($navbar-light-toggler-icon-bg);
+ }
+
+ .navbar-text {
+ color: $navbar-light-color;
+ a {
+ color: $navbar-light-active-color;
+
+ @include hover-focus() {
+ color: $navbar-light-active-color;
+ }
+ }
+ }
+}
+
+// White links against a dark background
+.navbar-dark {
+ .navbar-brand {
+ color: $navbar-dark-brand-color;
+
+ @include hover-focus() {
+ color: $navbar-dark-brand-hover-color;
+ }
+ }
+
+ .navbar-nav {
+ .nav-link {
+ color: $navbar-dark-color;
+
+ @include hover-focus() {
+ color: $navbar-dark-hover-color;
+ }
+
+ &.disabled {
+ color: $navbar-dark-disabled-color;
+ }
+ }
+
+ .show > .nav-link,
+ .active > .nav-link,
+ .nav-link.show,
+ .nav-link.active {
+ color: $navbar-dark-active-color;
+ }
+ }
+
+ .navbar-toggler {
+ color: $navbar-dark-color;
+ border-color: $navbar-dark-toggler-border-color;
+ }
+
+ .navbar-toggler-icon {
+ background-image: escape-svg($navbar-dark-toggler-icon-bg);
+ }
+
+ .navbar-text {
+ color: $navbar-dark-color;
+ a {
+ color: $navbar-dark-active-color;
+
+ @include hover-focus() {
+ color: $navbar-dark-active-color;
+ }
+ }
+ }
+}
diff --git a/_sass/node_modules/bootstrap/scss/_pagination.scss b/_sass/node_modules/bootstrap/scss/_pagination.scss
new file mode 100644
index 0000000000..9313cc5475
--- /dev/null
+++ b/_sass/node_modules/bootstrap/scss/_pagination.scss
@@ -0,0 +1,74 @@
+.pagination {
+ display: flex;
+ @include list-unstyled();
+ @include border-radius();
+}
+
+.page-link {
+ position: relative;
+ display: block;
+ padding: $pagination-padding-y $pagination-padding-x;
+ margin-left: -$pagination-border-width;
+ line-height: $pagination-line-height;
+ color: $pagination-color;
+ text-decoration: if($link-decoration == none, null, none);
+ background-color: $pagination-bg;
+ border: $pagination-border-width solid $pagination-border-color;
+
+ &:hover {
+ z-index: 2;
+ color: $pagination-hover-color;
+ text-decoration: none;
+ background-color: $pagination-hover-bg;
+ border-color: $pagination-hover-border-color;
+ }
+
+ &:focus {
+ z-index: 3;
+ outline: $pagination-focus-outline;
+ box-shadow: $pagination-focus-box-shadow;
+ }
+}
+
+.page-item {
+ &:first-child {
+ .page-link {
+ margin-left: 0;
+ @include border-left-radius($border-radius);
+ }
+ }
+ &:last-child {
+ .page-link {
+ @include border-right-radius($border-radius);
+ }
+ }
+
+ &.active .page-link {
+ z-index: 3;
+ color: $pagination-active-color;
+ background-color: $pagination-active-bg;
+ border-color: $pagination-active-border-color;
+ }
+
+ &.disabled .page-link {
+ color: $pagination-disabled-color;
+ pointer-events: none;
+ // Opinionated: remove the "hand" cursor set previously for .page-link
+ cursor: auto;
+ background-color: $pagination-disabled-bg;
+ border-color: $pagination-disabled-border-color;
+ }
+}
+
+
+//
+// Sizing
+//
+
+.pagination-lg {
+ @include pagination-size($pagination-padding-y-lg, $pagination-padding-x-lg, $font-size-lg, $line-height-lg, $pagination-border-radius-lg);
+}
+
+.pagination-sm {
+ @include pagination-size($pagination-padding-y-sm, $pagination-padding-x-sm, $font-size-sm, $line-height-sm, $pagination-border-radius-sm);
+}
diff --git a/_sass/node_modules/bootstrap/scss/_popover.scss b/_sass/node_modules/bootstrap/scss/_popover.scss
new file mode 100644
index 0000000000..c7106a809d
--- /dev/null
+++ b/_sass/node_modules/bootstrap/scss/_popover.scss
@@ -0,0 +1,170 @@
+.popover {
+ position: absolute;
+ top: 0;
+ left: 0;
+ z-index: $zindex-popover;
+ display: block;
+ max-width: $popover-max-width;
+ // Our parent element can be arbitrary since tooltips are by default inserted as a sibling of their target element.
+ // So reset our font and text properties to avoid inheriting weird values.
+ @include reset-text();
+ @include font-size($popover-font-size);
+ // Allow breaking very long words so they don't overflow the popover's bounds
+ word-wrap: break-word;
+ background-color: $popover-bg;
+ background-clip: padding-box;
+ border: $popover-border-width solid $popover-border-color;
+ @include border-radius($popover-border-radius);
+ @include box-shadow($popover-box-shadow);
+
+ .arrow {
+ position: absolute;
+ display: block;
+ width: $popover-arrow-width;
+ height: $popover-arrow-height;
+ margin: 0 $popover-border-radius;
+
+ &::before,
+ &::after {
+ position: absolute;
+ display: block;
+ content: "";
+ border-color: transparent;
+ border-style: solid;
+ }
+ }
+}
+
+.bs-popover-top {
+ margin-bottom: $popover-arrow-height;
+
+ > .arrow {
+ bottom: subtract(-$popover-arrow-height, $popover-border-width);
+
+ &::before {
+ bottom: 0;
+ border-width: $popover-arrow-height ($popover-arrow-width * .5) 0;
+ border-top-color: $popover-arrow-outer-color;
+ }
+
+ &::after {
+ bottom: $popover-border-width;
+ border-width: $popover-arrow-height ($popover-arrow-width * .5) 0;
+ border-top-color: $popover-arrow-color;
+ }
+ }
+}
+
+.bs-popover-right {
+ margin-left: $popover-arrow-height;
+
+ > .arrow {
+ left: subtract(-$popover-arrow-height, $popover-border-width);
+ width: $popover-arrow-height;
+ height: $popover-arrow-width;
+ margin: $popover-border-radius 0; // make sure the arrow does not touch the popover's rounded corners
+
+ &::before {
+ left: 0;
+ border-width: ($popover-arrow-width * .5) $popover-arrow-height ($popover-arrow-width * .5) 0;
+ border-right-color: $popover-arrow-outer-color;
+ }
+
+ &::after {
+ left: $popover-border-width;
+ border-width: ($popover-arrow-width * .5) $popover-arrow-height ($popover-arrow-width * .5) 0;
+ border-right-color: $popover-arrow-color;
+ }
+ }
+}
+
+.bs-popover-bottom {
+ margin-top: $popover-arrow-height;
+
+ > .arrow {
+ top: subtract(-$popover-arrow-height, $popover-border-width);
+
+ &::before {
+ top: 0;
+ border-width: 0 ($popover-arrow-width * .5) $popover-arrow-height ($popover-arrow-width * .5);
+ border-bottom-color: $popover-arrow-outer-color;
+ }
+
+ &::after {
+ top: $popover-border-width;
+ border-width: 0 ($popover-arrow-width * .5) $popover-arrow-height ($popover-arrow-width * .5);
+ border-bottom-color: $popover-arrow-color;
+ }
+ }
+
+ // This will remove the popover-header's border just below the arrow
+ .popover-header::before {
+ position: absolute;
+ top: 0;
+ left: 50%;
+ display: block;
+ width: $popover-arrow-width;
+ margin-left: -$popover-arrow-width * .5;
+ content: "";
+ border-bottom: $popover-border-width solid $popover-header-bg;
+ }
+}
+
+.bs-popover-left {
+ margin-right: $popover-arrow-height;
+
+ > .arrow {
+ right: subtract(-$popover-arrow-height, $popover-border-width);
+ width: $popover-arrow-height;
+ height: $popover-arrow-width;
+ margin: $popover-border-radius 0; // make sure the arrow does not touch the popover's rounded corners
+
+ &::before {
+ right: 0;
+ border-width: ($popover-arrow-width * .5) 0 ($popover-arrow-width * .5) $popover-arrow-height;
+ border-left-color: $popover-arrow-outer-color;
+ }
+
+ &::after {
+ right: $popover-border-width;
+ border-width: ($popover-arrow-width * .5) 0 ($popover-arrow-width * .5) $popover-arrow-height;
+ border-left-color: $popover-arrow-color;
+ }
+ }
+}
+
+.bs-popover-auto {
+ &[x-placement^="top"] {
+ @extend .bs-popover-top;
+ }
+ &[x-placement^="right"] {
+ @extend .bs-popover-right;
+ }
+ &[x-placement^="bottom"] {
+ @extend .bs-popover-bottom;
+ }
+ &[x-placement^="left"] {
+ @extend .bs-popover-left;
+ }
+}
+
+
+// Offset the popover to account for the popover arrow
+.popover-header {
+ padding: $popover-header-padding-y $popover-header-padding-x;
+ margin-bottom: 0; // Reset the default from Reboot
+ @include font-size($font-size-base);
+ color: $popover-header-color;
+ background-color: $popover-header-bg;
+ border-bottom: $popover-border-width solid darken($popover-header-bg, 5%);
+ @include border-top-radius($popover-inner-border-radius);
+
+ &:empty {
+ display: none;
+ }
+}
+
+.popover-body {
+ padding: $popover-body-padding-y $popover-body-padding-x;
+ color: $popover-body-color;
+}
diff --git a/_sass/node_modules/bootstrap/scss/_print.scss b/_sass/node_modules/bootstrap/scss/_print.scss
new file mode 100644
index 0000000000..915298aaae
--- /dev/null
+++ b/_sass/node_modules/bootstrap/scss/_print.scss
@@ -0,0 +1,132 @@
+// stylelint-disable declaration-no-important, selector-no-qualifying-type
+
+// Source: https://github.com/h5bp/main.css/blob/master/src/_print.css
+
+// ==========================================================================
+// Print styles.
+// Inlined to avoid the additional HTTP request:
+// https://www.phpied.com/delay-loading-your-print-css/
+// ==========================================================================
+
+@if $enable-print-styles {
+ @media print {
+ *,
+ *::before,
+ *::after {
+ // Bootstrap specific; comment out `color` and `background`
+ //color: $black !important; // Black prints faster
+ text-shadow: none !important;
+ //background: transparent !important;
+ box-shadow: none !important;
+ }
+
+ a {
+ &:not(.btn) {
+ text-decoration: underline;
+ }
+ }
+
+ // Bootstrap specific; comment the following selector out
+ //a[href]::after {
+ // content: " (" attr(href) ")";
+ //}
+
+ abbr[title]::after {
+ content: " (" attr(title) ")";
+ }
+
+ // Bootstrap specific; comment the following selector out
+ //
+ // Don't show links that are fragment identifiers,
+ // or use the `javascript:` pseudo protocol
+ //
+
+ //a[href^="#"]::after,
+ //a[href^="javascript:"]::after {
+ // content: "";
+ //}
+
+ pre {
+ white-space: pre-wrap !important;
+ }
+ pre,
+ blockquote {
+ border: $border-width solid $gray-500; // Bootstrap custom code; using `$border-width` instead of 1px
+ page-break-inside: avoid;
+ }
+
+ tr,
+ img {
+ page-break-inside: avoid;
+ }
+
+ p,
+ h2,
+ h3 {
+ orphans: 3;
+ widows: 3;
+ }
+
+ h2,
+ h3 {
+ page-break-after: avoid;
+ }
+
+ // Bootstrap specific changes start
+
+ // Specify a size and min-width to make printing closer across browsers.
+ // We don't set margin here because it breaks `size` in Chrome. We also
+ // don't use `!important` on `size` as it breaks in Chrome.
+ @page {
+ size: $print-page-size;
+ }
+ body {
+ min-width: $print-body-min-width !important;
+ }
+ .container {
+ min-width: $print-body-min-width !important;
+ }
+
+ // Bootstrap components
+ .navbar {
+ display: none;
+ }
+ .badge {
+ border: $border-width solid $black;
+ }
+
+ .table {
+ border-collapse: collapse !important;
+
+ td,
+ th {
+ background-color: $white !important;
+ }
+ }
+
+ .table-bordered {
+ th,
+ td {
+ border: 1px solid $gray-300 !important;
+ }
+ }
+
+ .table-dark {
+ color: inherit;
+
+ th,
+ td,
+ thead th,
+ tbody + tbody {
+ border-color: $table-border-color;
+ }
+ }
+
+ .table .thead-dark th {
+ color: inherit;
+ border-color: $table-border-color;
+ }
+
+ // Bootstrap specific changes end
+ }
+}
diff --git a/_sass/node_modules/bootstrap/scss/_progress.scss b/_sass/node_modules/bootstrap/scss/_progress.scss
new file mode 100644
index 0000000000..e206474a83
--- /dev/null
+++ b/_sass/node_modules/bootstrap/scss/_progress.scss
@@ -0,0 +1,47 @@
+// Disable animation if transitions are disabled
+@if $enable-transitions {
+ @keyframes progress-bar-stripes {
+ from { background-position: $progress-height 0; }
+ to { background-position: 0 0; }
+ }
+}
+
+.progress {
+ display: flex;
+ height: $progress-height;
+ overflow: hidden; // force rounded corners by cropping it
+ line-height: 0;
+ @include font-size($progress-font-size);
+ background-color: $progress-bg;
+ @include border-radius($progress-border-radius);
+ @include box-shadow($progress-box-shadow);
+}
+
+.progress-bar {
+ display: flex;
+ flex-direction: column;
+ justify-content: center;
+ overflow: hidden;
+ color: $progress-bar-color;
+ text-align: center;
+ white-space: nowrap;
+ background-color: $progress-bar-bg;
+ @include transition($progress-bar-transition);
+}
+
+.progress-bar-striped {
+ @include gradient-striped();
+ background-size: $progress-height $progress-height;
+}
+
+@if $enable-transitions {
+ .progress-bar-animated {
+ animation: $progress-bar-animation-timing progress-bar-stripes;
+
+ @if $enable-prefers-reduced-motion-media-query {
+ @media (prefers-reduced-motion: reduce) {
+ animation: none;
+ }
+ }
+ }
+}
diff --git a/_sass/node_modules/bootstrap/scss/_reboot.scss b/_sass/node_modules/bootstrap/scss/_reboot.scss
new file mode 100644
index 0000000000..cd93bfe240
--- /dev/null
+++ b/_sass/node_modules/bootstrap/scss/_reboot.scss
@@ -0,0 +1,484 @@
+// stylelint-disable declaration-no-important, selector-no-qualifying-type, property-no-vendor-prefix
+
+// Reboot
+//
+// Normalization of HTML elements, manually forked from Normalize.css to remove
+// styles targeting irrelevant browsers while applying new styles.
+//
+// Normalize is licensed MIT. https://github.com/necolas/normalize.css
+
+
+// Document
+//
+// 1. Change from `box-sizing: content-box` so that `width` is not affected by `padding` or `border`.
+// 2. Change the default font family in all browsers.
+// 3. Correct the line height in all browsers.
+// 4. Prevent adjustments of font size after orientation changes in IE on Windows Phone and in iOS.
+// 5. Change the default tap highlight to be completely transparent in iOS.
+
+*,
+*::before,
+*::after {
+ box-sizing: border-box; // 1
+}
+
+html {
+ font-family: sans-serif; // 2
+ line-height: 1.15; // 3
+ -webkit-text-size-adjust: 100%; // 4
+ -webkit-tap-highlight-color: rgba($black, 0); // 5
+}
+
+// Shim for "new" HTML5 structural elements to display correctly (IE10, older browsers)
+// TODO: remove in v5
+// stylelint-disable-next-line selector-list-comma-newline-after
+article, aside, figcaption, figure, footer, header, hgroup, main, nav, section {
+ display: block;
+}
+
+// Body
+//
+// 1. Remove the margin in all browsers.
+// 2. As a best practice, apply a default `background-color`.
+// 3. Set an explicit initial text-align value so that we can later use
+// the `inherit` value on things like `` elements.
+
+body {
+ margin: 0; // 1
+ font-family: $font-family-base;
+ @include font-size($font-size-base);
+ font-weight: $font-weight-base;
+ line-height: $line-height-base;
+ color: $body-color;
+ text-align: left; // 3
+ background-color: $body-bg; // 2
+}
+
+// Future-proof rule: in browsers that support :focus-visible, suppress the focus outline
+// on elements that programmatically receive focus but wouldn't normally show a visible
+// focus outline. In general, this would mean that the outline is only applied if the
+// interaction that led to the element receiving programmatic focus was a keyboard interaction,
+// or the browser has somehow determined that the user is primarily a keyboard user and/or
+// wants focus outlines to always be presented.
+//
+// See https://developer.mozilla.org/en-US/docs/Web/CSS/:focus-visible
+// and https://developer.paciellogroup.com/blog/2018/03/focus-visible-and-backwards-compatibility/
+[tabindex="-1"]:focus:not(:focus-visible) {
+ outline: 0 !important;
+}
+
+
+// Content grouping
+//
+// 1. Add the correct box sizing in Firefox.
+// 2. Show the overflow in Edge and IE.
+
+hr {
+ box-sizing: content-box; // 1
+ height: 0; // 1
+ overflow: visible; // 2
+}
+
+
+//
+// Typography
+//
+
+// Remove top margins from headings
+//
+// By default, ``-`` all receive top and bottom margins. We nuke the top
+// margin for easier control within type scales as it avoids margin collapsing.
+// stylelint-disable-next-line selector-list-comma-newline-after
+h1, h2, h3, h4, h5, h6 {
+ margin-top: 0;
+ margin-bottom: $headings-margin-bottom;
+}
+
+// Reset margins on paragraphs
+//
+// Similarly, the top margin on ` `s get reset. However, we also reset the
+// bottom margin to use `rem` units instead of `em`.
+p {
+ margin-top: 0;
+ margin-bottom: $paragraph-margin-bottom;
+}
+
+// Abbreviations
+//
+// 1. Duplicate behavior to the data-* attribute for our tooltip plugin
+// 2. Add the correct text decoration in Chrome, Edge, IE, Opera, and Safari.
+// 3. Add explicit cursor to indicate changed behavior.
+// 4. Remove the bottom border in Firefox 39-.
+// 5. Prevent the text-decoration to be skipped.
+
+abbr[title],
+abbr[data-original-title] { // 1
+ text-decoration: underline; // 2
+ text-decoration: underline dotted; // 2
+ cursor: help; // 3
+ border-bottom: 0; // 4
+ text-decoration-skip-ink: none; // 5
+}
+
+address {
+ margin-bottom: 1rem;
+ font-style: normal;
+ line-height: inherit;
+}
+
+ol,
+ul,
+dl {
+ margin-top: 0;
+ margin-bottom: 1rem;
+}
+
+ol ol,
+ul ul,
+ol ul,
+ul ol {
+ margin-bottom: 0;
+}
+
+dt {
+ font-weight: $dt-font-weight;
+}
+
+dd {
+ margin-bottom: .5rem;
+ margin-left: 0; // Undo browser default
+}
+
+blockquote {
+ margin: 0 0 1rem;
+}
+
+b,
+strong {
+ font-weight: $font-weight-bolder; // Add the correct font weight in Chrome, Edge, and Safari
+}
+
+small {
+ @include font-size(80%); // Add the correct font size in all browsers
+}
+
+//
+// Prevent `sub` and `sup` elements from affecting the line height in
+// all browsers.
+//
+
+sub,
+sup {
+ position: relative;
+ @include font-size(75%);
+ line-height: 0;
+ vertical-align: baseline;
+}
+
+sub { bottom: -.25em; }
+sup { top: -.5em; }
+
+
+//
+// Links
+//
+
+a {
+ color: $link-color;
+ text-decoration: $link-decoration;
+ background-color: transparent; // Remove the gray background on active links in IE 10.
+
+ @include hover() {
+ color: $link-hover-color;
+ text-decoration: $link-hover-decoration;
+ }
+}
+
+// And undo these styles for placeholder links/named anchors (without href).
+// It would be more straightforward to just use a[href] in previous block, but that
+// causes specificity issues in many other styles that are too complex to fix.
+// See https://github.com/twbs/bootstrap/issues/19402
+
+a:not([href]):not([class]) {
+ color: inherit;
+ text-decoration: none;
+
+ @include hover() {
+ color: inherit;
+ text-decoration: none;
+ }
+}
+
+
+//
+// Code
+//
+
+pre,
+code,
+kbd,
+samp {
+ font-family: $font-family-monospace;
+ @include font-size(1em); // Correct the odd `em` font sizing in all browsers.
+}
+
+pre {
+ // Remove browser default top margin
+ margin-top: 0;
+ // Reset browser default of `1em` to use `rem`s
+ margin-bottom: 1rem;
+ // Don't allow content to break outside
+ overflow: auto;
+ // Disable auto-hiding scrollbar in IE & legacy Edge to avoid overlap,
+ // making it impossible to interact with the content
+ -ms-overflow-style: scrollbar;
+}
+
+
+//
+// Figures
+//
+
+figure {
+ // Apply a consistent margin strategy (matches our type styles).
+ margin: 0 0 1rem;
+}
+
+
+//
+// Images and content
+//
+
+img {
+ vertical-align: middle;
+ border-style: none; // Remove the border on images inside links in IE 10-.
+}
+
+svg {
+ // Workaround for the SVG overflow bug in IE10/11 is still required.
+ // See https://github.com/twbs/bootstrap/issues/26878
+ overflow: hidden;
+ vertical-align: middle;
+}
+
+
+//
+// Tables
+//
+
+table {
+ border-collapse: collapse; // Prevent double borders
+}
+
+caption {
+ padding-top: $table-cell-padding;
+ padding-bottom: $table-cell-padding;
+ color: $table-caption-color;
+ text-align: left;
+ caption-side: bottom;
+}
+
+// 1. Removes font-weight bold by inheriting
+// 2. Matches default `
` alignment by inheriting `text-align`.
+// 3. Fix alignment for Safari
+
+th {
+ font-weight: $table-th-font-weight; // 1
+ text-align: inherit; // 2
+ text-align: -webkit-match-parent; // 3
+}
+
+
+//
+// Forms
+//
+
+label {
+ // Allow labels to use `margin` for spacing.
+ display: inline-block;
+ margin-bottom: $label-margin-bottom;
+}
+
+// Remove the default `border-radius` that macOS Chrome adds.
+//
+// Details at https://github.com/twbs/bootstrap/issues/24093
+button {
+ // stylelint-disable-next-line property-disallowed-list
+ border-radius: 0;
+}
+
+// Explicitly remove focus outline in Chromium when it shouldn't be
+// visible (e.g. as result of mouse click or touch tap). It already
+// should be doing this automatically, but seems to currently be
+// confused and applies its very visible two-tone outline anyway.
+
+button:focus:not(:focus-visible) {
+ outline: 0;
+}
+
+input,
+button,
+select,
+optgroup,
+textarea {
+ margin: 0; // Remove the margin in Firefox and Safari
+ font-family: inherit;
+ @include font-size(inherit);
+ line-height: inherit;
+}
+
+button,
+input {
+ overflow: visible; // Show the overflow in Edge
+}
+
+button,
+select {
+ text-transform: none; // Remove the inheritance of text transform in Firefox
+}
+
+// Set the cursor for non-`` buttons
+//
+// Details at https://github.com/twbs/bootstrap/pull/30562
+[role="button"] {
+ cursor: pointer;
+}
+
+// Remove the inheritance of word-wrap in Safari.
+//
+// Details at https://github.com/twbs/bootstrap/issues/24990
+select {
+ word-wrap: normal;
+}
+
+
+// 1. Prevent a WebKit bug where (2) destroys native `audio` and `video`
+// controls in Android 4.
+// 2. Correct the inability to style clickable types in iOS and Safari.
+button,
+[type="button"], // 1
+[type="reset"],
+[type="submit"] {
+ -webkit-appearance: button; // 2
+}
+
+// Opinionated: add "hand" cursor to non-disabled button elements.
+@if $enable-pointer-cursor-for-buttons {
+ button,
+ [type="button"],
+ [type="reset"],
+ [type="submit"] {
+ &:not(:disabled) {
+ cursor: pointer;
+ }
+ }
+}
+
+// Remove inner border and padding from Firefox, but don't restore the outline like Normalize.
+button::-moz-focus-inner,
+[type="button"]::-moz-focus-inner,
+[type="reset"]::-moz-focus-inner,
+[type="submit"]::-moz-focus-inner {
+ padding: 0;
+ border-style: none;
+}
+
+input[type="radio"],
+input[type="checkbox"] {
+ box-sizing: border-box; // 1. Add the correct box sizing in IE 10-
+ padding: 0; // 2. Remove the padding in IE 10-
+}
+
+
+textarea {
+ overflow: auto; // Remove the default vertical scrollbar in IE.
+ // Textareas should really only resize vertically so they don't break their (horizontal) containers.
+ resize: vertical;
+}
+
+fieldset {
+ // Browsers set a default `min-width: min-content;` on fieldsets,
+ // unlike e.g. ``s, which have `min-width: 0;` by default.
+ // So we reset that to ensure fieldsets behave more like a standard block element.
+ // See https://github.com/twbs/bootstrap/issues/12359
+ // and https://html.spec.whatwg.org/multipage/#the-fieldset-and-legend-elements
+ min-width: 0;
+ // Reset the default outline behavior of fieldsets so they don't affect page layout.
+ padding: 0;
+ margin: 0;
+ border: 0;
+}
+
+// 1. Correct the text wrapping in Edge and IE.
+// 2. Correct the color inheritance from `fieldset` elements in IE.
+legend {
+ display: block;
+ width: 100%;
+ max-width: 100%; // 1
+ padding: 0;
+ margin-bottom: .5rem;
+ @include font-size(1.5rem);
+ line-height: inherit;
+ color: inherit; // 2
+ white-space: normal; // 1
+}
+
+progress {
+ vertical-align: baseline; // Add the correct vertical alignment in Chrome, Firefox, and Opera.
+}
+
+// Correct the cursor style of increment and decrement buttons in Chrome.
+[type="number"]::-webkit-inner-spin-button,
+[type="number"]::-webkit-outer-spin-button {
+ height: auto;
+}
+
+[type="search"] {
+ // This overrides the extra rounded corners on search inputs in iOS so that our
+ // `.form-control` class can properly style them. Note that this cannot simply
+ // be added to `.form-control` as it's not specific enough. For details, see
+ // https://github.com/twbs/bootstrap/issues/11586.
+ outline-offset: -2px; // 2. Correct the outline style in Safari.
+ -webkit-appearance: none;
+}
+
+//
+// Remove the inner padding in Chrome and Safari on macOS.
+//
+
+[type="search"]::-webkit-search-decoration {
+ -webkit-appearance: none;
+}
+
+//
+// 1. Correct the inability to style clickable types in iOS and Safari.
+// 2. Change font properties to `inherit` in Safari.
+//
+
+::-webkit-file-upload-button {
+ font: inherit; // 2
+ -webkit-appearance: button; // 1
+}
+
+//
+// Correct element displays
+//
+
+output {
+ display: inline-block;
+}
+
+summary {
+ display: list-item; // Add the correct display in all browsers
+ cursor: pointer;
+}
+
+template {
+ display: none; // Add the correct display in IE
+}
+
+// Always hide an element with the `hidden` HTML attribute (from PureCSS).
+// Needed for proper display in IE 10-.
+[hidden] {
+ display: none !important;
+}
diff --git a/_sass/node_modules/bootstrap/scss/_root.scss b/_sass/node_modules/bootstrap/scss/_root.scss
new file mode 100644
index 0000000000..ad550df3b4
--- /dev/null
+++ b/_sass/node_modules/bootstrap/scss/_root.scss
@@ -0,0 +1,19 @@
+:root {
+ // Custom variable values only support SassScript inside `#{}`.
+ @each $color, $value in $colors {
+ --#{$color}: #{$value};
+ }
+
+ @each $color, $value in $theme-colors {
+ --#{$color}: #{$value};
+ }
+
+ @each $bp, $value in $grid-breakpoints {
+ --breakpoint-#{$bp}: #{$value};
+ }
+
+ // Use `inspect` for lists so that quoted items keep the quotes.
+ // See https://github.com/sass/sass/issues/2383#issuecomment-336349172
+ --font-family-sans-serif: #{inspect($font-family-sans-serif)};
+ --font-family-monospace: #{inspect($font-family-monospace)};
+}
diff --git a/_sass/node_modules/bootstrap/scss/_spinners.scss b/_sass/node_modules/bootstrap/scss/_spinners.scss
new file mode 100644
index 0000000000..61f3e0a356
--- /dev/null
+++ b/_sass/node_modules/bootstrap/scss/_spinners.scss
@@ -0,0 +1,65 @@
+//
+// Rotating border
+//
+
+@keyframes spinner-border {
+ to { transform: rotate(360deg); }
+}
+
+.spinner-border {
+ display: inline-block;
+ width: $spinner-width;
+ height: $spinner-height;
+ vertical-align: $spinner-vertical-align;
+ border: $spinner-border-width solid currentcolor;
+ border-right-color: transparent;
+ // stylelint-disable-next-line property-disallowed-list
+ border-radius: 50%;
+ animation: .75s linear infinite spinner-border;
+}
+
+.spinner-border-sm {
+ width: $spinner-width-sm;
+ height: $spinner-height-sm;
+ border-width: $spinner-border-width-sm;
+}
+
+//
+// Growing circle
+//
+
+@keyframes spinner-grow {
+ 0% {
+ transform: scale(0);
+ }
+ 50% {
+ opacity: 1;
+ transform: none;
+ }
+}
+
+.spinner-grow {
+ display: inline-block;
+ width: $spinner-width;
+ height: $spinner-height;
+ vertical-align: $spinner-vertical-align;
+ background-color: currentcolor;
+ // stylelint-disable-next-line property-disallowed-list
+ border-radius: 50%;
+ opacity: 0;
+ animation: .75s linear infinite spinner-grow;
+}
+
+.spinner-grow-sm {
+ width: $spinner-width-sm;
+ height: $spinner-height-sm;
+}
+
+@if $enable-prefers-reduced-motion-media-query {
+ @media (prefers-reduced-motion: reduce) {
+ .spinner-border,
+ .spinner-grow {
+ animation-duration: 1.5s;
+ }
+ }
+}
diff --git a/_sass/node_modules/bootstrap/scss/_tables.scss b/_sass/node_modules/bootstrap/scss/_tables.scss
new file mode 100644
index 0000000000..5fd77a4eb0
--- /dev/null
+++ b/_sass/node_modules/bootstrap/scss/_tables.scss
@@ -0,0 +1,185 @@
+//
+// Basic Bootstrap table
+//
+
+.table {
+ width: 100%;
+ margin-bottom: $spacer;
+ color: $table-color;
+ background-color: $table-bg; // Reset for nesting within parents with `background-color`.
+
+ th,
+ td {
+ padding: $table-cell-padding;
+ vertical-align: top;
+ border-top: $table-border-width solid $table-border-color;
+ }
+
+ thead th {
+ vertical-align: bottom;
+ border-bottom: (2 * $table-border-width) solid $table-border-color;
+ }
+
+ tbody + tbody {
+ border-top: (2 * $table-border-width) solid $table-border-color;
+ }
+}
+
+
+//
+// Condensed table w/ half padding
+//
+
+.table-sm {
+ th,
+ td {
+ padding: $table-cell-padding-sm;
+ }
+}
+
+
+// Border versions
+//
+// Add or remove borders all around the table and between all the columns.
+
+.table-bordered {
+ border: $table-border-width solid $table-border-color;
+
+ th,
+ td {
+ border: $table-border-width solid $table-border-color;
+ }
+
+ thead {
+ th,
+ td {
+ border-bottom-width: 2 * $table-border-width;
+ }
+ }
+}
+
+.table-borderless {
+ th,
+ td,
+ thead th,
+ tbody + tbody {
+ border: 0;
+ }
+}
+
+// Zebra-striping
+//
+// Default zebra-stripe styles (alternating gray and transparent backgrounds)
+
+.table-striped {
+ tbody tr:nth-of-type(#{$table-striped-order}) {
+ background-color: $table-accent-bg;
+ }
+}
+
+
+// Hover effect
+//
+// Placed here since it has to come after the potential zebra striping
+
+.table-hover {
+ tbody tr {
+ @include hover() {
+ color: $table-hover-color;
+ background-color: $table-hover-bg;
+ }
+ }
+}
+
+
+// Table backgrounds
+//
+// Exact selectors below required to override `.table-striped` and prevent
+// inheritance to nested tables.
+
+@each $color, $value in $theme-colors {
+ @include table-row-variant($color, theme-color-level($color, $table-bg-level), theme-color-level($color, $table-border-level));
+}
+
+@include table-row-variant(active, $table-active-bg);
+
+
+// Dark styles
+//
+// Same table markup, but inverted color scheme: dark background and light text.
+
+// stylelint-disable-next-line no-duplicate-selectors
+.table {
+ .thead-dark {
+ th {
+ color: $table-dark-color;
+ background-color: $table-dark-bg;
+ border-color: $table-dark-border-color;
+ }
+ }
+
+ .thead-light {
+ th {
+ color: $table-head-color;
+ background-color: $table-head-bg;
+ border-color: $table-border-color;
+ }
+ }
+}
+
+.table-dark {
+ color: $table-dark-color;
+ background-color: $table-dark-bg;
+
+ th,
+ td,
+ thead th {
+ border-color: $table-dark-border-color;
+ }
+
+ &.table-bordered {
+ border: 0;
+ }
+
+ &.table-striped {
+ tbody tr:nth-of-type(#{$table-striped-order}) {
+ background-color: $table-dark-accent-bg;
+ }
+ }
+
+ &.table-hover {
+ tbody tr {
+ @include hover() {
+ color: $table-dark-hover-color;
+ background-color: $table-dark-hover-bg;
+ }
+ }
+ }
+}
+
+
+// Responsive tables
+//
+// Generate series of `.table-responsive-*` classes for configuring the screen
+// size of where your table will overflow.
+
+.table-responsive {
+ @each $breakpoint in map-keys($grid-breakpoints) {
+ $next: breakpoint-next($breakpoint, $grid-breakpoints);
+ $infix: breakpoint-infix($next, $grid-breakpoints);
+
+ {$infix} {
+ @include media-breakpoint-down($breakpoint) {
+ display: block;
+ width: 100%;
+ overflow-x: auto;
+ -webkit-overflow-scrolling: touch;
+
+ // Prevent double border on horizontal scroll due to use of `display: block;`
+ > .table-bordered {
+ border: 0;
+ }
+ }
+ }
+ }
+}
diff --git a/_sass/node_modules/bootstrap/scss/_toasts.scss b/_sass/node_modules/bootstrap/scss/_toasts.scss
new file mode 100644
index 0000000000..f9ca8d91cd
--- /dev/null
+++ b/_sass/node_modules/bootstrap/scss/_toasts.scss
@@ -0,0 +1,46 @@
+.toast {
+ // Prevents from shrinking in IE11, when in a flex container
+ // See https://github.com/twbs/bootstrap/issues/28341
+ flex-basis: $toast-max-width;
+ max-width: $toast-max-width;
+ @include font-size($toast-font-size);
+ color: $toast-color;
+ background-color: $toast-background-color;
+ background-clip: padding-box;
+ border: $toast-border-width solid $toast-border-color;
+ box-shadow: $toast-box-shadow;
+ opacity: 0;
+ @include border-radius($toast-border-radius);
+
+ &:not(:last-child) {
+ margin-bottom: $toast-padding-x;
+ }
+
+ &.showing {
+ opacity: 1;
+ }
+
+ &.show {
+ display: block;
+ opacity: 1;
+ }
+
+ &.hide {
+ display: none;
+ }
+}
+
+.toast-header {
+ display: flex;
+ align-items: center;
+ padding: $toast-padding-y $toast-padding-x;
+ color: $toast-header-color;
+ background-color: $toast-header-background-color;
+ background-clip: padding-box;
+ border-bottom: $toast-border-width solid $toast-header-border-color;
+ @include border-top-radius(subtract($toast-border-radius, $toast-border-width));
+}
+
+.toast-body {
+ padding: $toast-padding-x; // apply to both vertical and horizontal
+}
diff --git a/_sass/node_modules/bootstrap/scss/_tooltip.scss b/_sass/node_modules/bootstrap/scss/_tooltip.scss
new file mode 100644
index 0000000000..6771b4eb4f
--- /dev/null
+++ b/_sass/node_modules/bootstrap/scss/_tooltip.scss
@@ -0,0 +1,115 @@
+// Base class
+.tooltip {
+ position: absolute;
+ z-index: $zindex-tooltip;
+ display: block;
+ margin: $tooltip-margin;
+ // Our parent element can be arbitrary since tooltips are by default inserted as a sibling of their target element.
+ // So reset our font and text properties to avoid inheriting weird values.
+ @include reset-text();
+ @include font-size($tooltip-font-size);
+ // Allow breaking very long words so they don't overflow the tooltip's bounds
+ word-wrap: break-word;
+ opacity: 0;
+
+ &.show { opacity: $tooltip-opacity; }
+
+ .arrow {
+ position: absolute;
+ display: block;
+ width: $tooltip-arrow-width;
+ height: $tooltip-arrow-height;
+
+ &::before {
+ position: absolute;
+ content: "";
+ border-color: transparent;
+ border-style: solid;
+ }
+ }
+}
+
+.bs-tooltip-top {
+ padding: $tooltip-arrow-height 0;
+
+ .arrow {
+ bottom: 0;
+
+ &::before {
+ top: 0;
+ border-width: $tooltip-arrow-height ($tooltip-arrow-width * .5) 0;
+ border-top-color: $tooltip-arrow-color;
+ }
+ }
+}
+
+.bs-tooltip-right {
+ padding: 0 $tooltip-arrow-height;
+
+ .arrow {
+ left: 0;
+ width: $tooltip-arrow-height;
+ height: $tooltip-arrow-width;
+
+ &::before {
+ right: 0;
+ border-width: ($tooltip-arrow-width * .5) $tooltip-arrow-height ($tooltip-arrow-width * .5) 0;
+ border-right-color: $tooltip-arrow-color;
+ }
+ }
+}
+
+.bs-tooltip-bottom {
+ padding: $tooltip-arrow-height 0;
+
+ .arrow {
+ top: 0;
+
+ &::before {
+ bottom: 0;
+ border-width: 0 ($tooltip-arrow-width * .5) $tooltip-arrow-height;
+ border-bottom-color: $tooltip-arrow-color;
+ }
+ }
+}
+
+.bs-tooltip-left {
+ padding: 0 $tooltip-arrow-height;
+
+ .arrow {
+ right: 0;
+ width: $tooltip-arrow-height;
+ height: $tooltip-arrow-width;
+
+ &::before {
+ left: 0;
+ border-width: ($tooltip-arrow-width * .5) 0 ($tooltip-arrow-width * .5) $tooltip-arrow-height;
+ border-left-color: $tooltip-arrow-color;
+ }
+ }
+}
+
+.bs-tooltip-auto {
+ &[x-placement^="top"] {
+ @extend .bs-tooltip-top;
+ }
+ &[x-placement^="right"] {
+ @extend .bs-tooltip-right;
+ }
+ &[x-placement^="bottom"] {
+ @extend .bs-tooltip-bottom;
+ }
+ &[x-placement^="left"] {
+ @extend .bs-tooltip-left;
+ }
+}
+
+// Wrapper for the tooltip content
+.tooltip-inner {
+ max-width: $tooltip-max-width;
+ padding: $tooltip-padding-y $tooltip-padding-x;
+ color: $tooltip-color;
+ text-align: center;
+ background-color: $tooltip-bg;
+ @include border-radius($tooltip-border-radius);
+}
diff --git a/_sass/node_modules/bootstrap/scss/_transitions.scss b/_sass/node_modules/bootstrap/scss/_transitions.scss
new file mode 100644
index 0000000000..a261f2ddc5
--- /dev/null
+++ b/_sass/node_modules/bootstrap/scss/_transitions.scss
@@ -0,0 +1,26 @@
+.fade {
+ @include transition($transition-fade);
+
+ &:not(.show) {
+ opacity: 0;
+ }
+}
+
+.collapse {
+ &:not(.show) {
+ display: none;
+ }
+}
+
+.collapsing {
+ position: relative;
+ height: 0;
+ overflow: hidden;
+ @include transition($transition-collapse);
+
+ &.width {
+ width: 0;
+ height: auto;
+ @include transition($transition-collapse-width);
+ }
+}
diff --git a/_sass/node_modules/bootstrap/scss/_type.scss b/_sass/node_modules/bootstrap/scss/_type.scss
new file mode 100644
index 0000000000..3112a734bb
--- /dev/null
+++ b/_sass/node_modules/bootstrap/scss/_type.scss
@@ -0,0 +1,125 @@
+// stylelint-disable selector-list-comma-newline-after
+
+//
+// Headings
+//
+
+h1, h2, h3, h4, h5, h6,
+.h1, .h2, .h3, .h4, .h5, .h6 {
+ margin-bottom: $headings-margin-bottom;
+ font-family: $headings-font-family;
+ font-weight: $headings-font-weight;
+ line-height: $headings-line-height;
+ color: $headings-color;
+}
+
+h1, .h1 { @include font-size($h1-font-size); }
+h2, .h2 { @include font-size($h2-font-size); }
+h3, .h3 { @include font-size($h3-font-size); }
+h4, .h4 { @include font-size($h4-font-size); }
+h5, .h5 { @include font-size($h5-font-size); }
+h6, .h6 { @include font-size($h6-font-size); }
+
+.lead {
+ @include font-size($lead-font-size);
+ font-weight: $lead-font-weight;
+}
+
+// Type display classes
+.display-1 {
+ @include font-size($display1-size);
+ font-weight: $display1-weight;
+ line-height: $display-line-height;
+}
+.display-2 {
+ @include font-size($display2-size);
+ font-weight: $display2-weight;
+ line-height: $display-line-height;
+}
+.display-3 {
+ @include font-size($display3-size);
+ font-weight: $display3-weight;
+ line-height: $display-line-height;
+}
+.display-4 {
+ @include font-size($display4-size);
+ font-weight: $display4-weight;
+ line-height: $display-line-height;
+}
+
+
+//
+// Horizontal rules
+//
+
+hr {
+ margin-top: $hr-margin-y;
+ margin-bottom: $hr-margin-y;
+ border: 0;
+ border-top: $hr-border-width solid $hr-border-color;
+}
+
+
+//
+// Emphasis
+//
+
+small,
+.small {
+ @include font-size($small-font-size);
+ font-weight: $font-weight-normal;
+}
+
+mark,
+.mark {
+ padding: $mark-padding;
+ background-color: $mark-bg;
+}
+
+
+//
+// Lists
+//
+
+.list-unstyled {
+ @include list-unstyled();
+}
+
+// Inline turns list items into inline-block
+.list-inline {
+ @include list-unstyled();
+}
+.list-inline-item {
+ display: inline-block;
+
+ &:not(:last-child) {
+ margin-right: $list-inline-padding;
+ }
+}
+
+
+//
+// Misc
+//
+
+// Builds on `abbr`
+.initialism {
+ @include font-size(90%);
+ text-transform: uppercase;
+}
+
+// Blockquotes
+.blockquote {
+ margin-bottom: $spacer;
+ @include font-size($blockquote-font-size);
+}
+
+.blockquote-footer {
+ display: block;
+ @include font-size($blockquote-small-font-size);
+ color: $blockquote-small-color;
+
+ &::before {
+ content: "\2014\00A0"; // em dash, nbsp
+ }
+}
diff --git a/_sass/node_modules/bootstrap/scss/_utilities.scss b/_sass/node_modules/bootstrap/scss/_utilities.scss
new file mode 100644
index 0000000000..10e31dd7e9
--- /dev/null
+++ b/_sass/node_modules/bootstrap/scss/_utilities.scss
@@ -0,0 +1,18 @@
+@import "utilities/align";
+@import "utilities/background";
+@import "utilities/borders";
+@import "utilities/clearfix";
+@import "utilities/display";
+@import "utilities/embed";
+@import "utilities/flex";
+@import "utilities/float";
+@import "utilities/interactions";
+@import "utilities/overflow";
+@import "utilities/position";
+@import "utilities/screenreaders";
+@import "utilities/shadows";
+@import "utilities/sizing";
+@import "utilities/spacing";
+@import "utilities/stretched-link";
+@import "utilities/text";
+@import "utilities/visibility";
diff --git a/_sass/node_modules/bootstrap/scss/_variables.scss b/_sass/node_modules/bootstrap/scss/_variables.scss
new file mode 100644
index 0000000000..293d238b97
--- /dev/null
+++ b/_sass/node_modules/bootstrap/scss/_variables.scss
@@ -0,0 +1,1149 @@
+// Variables
+//
+// Variables should follow the `$component-state-property-size` formula for
+// consistent naming. Ex: $nav-link-disabled-color and $modal-content-box-shadow-xs.
+
+// Color system
+
+$white: #fff !default;
+$gray-100: #f8f9fa !default;
+$gray-200: #e9ecef !default;
+$gray-300: #dee2e6 !default;
+$gray-400: #ced4da !default;
+$gray-500: #adb5bd !default;
+$gray-600: #6c757d !default;
+$gray-700: #495057 !default;
+$gray-800: #343a40 !default;
+$gray-900: #212529 !default;
+$black: #000 !default;
+
+$grays: () !default;
+$grays: map-merge(
+ (
+ "100": $gray-100,
+ "200": $gray-200,
+ "300": $gray-300,
+ "400": $gray-400,
+ "500": $gray-500,
+ "600": $gray-600,
+ "700": $gray-700,
+ "800": $gray-800,
+ "900": $gray-900
+ ),
+ $grays
+);
+
+$blue: #007bff !default;
+$indigo: #6610f2 !default;
+$purple: #6f42c1 !default;
+$pink: #e83e8c !default;
+$red: #dc3545 !default;
+$orange: #fd7e14 !default;
+$yellow: #ffc107 !default;
+$green: #28a745 !default;
+$teal: #20c997 !default;
+$cyan: #17a2b8 !default;
+
+$colors: () !default;
+$colors: map-merge(
+ (
+ "blue": $blue,
+ "indigo": $indigo,
+ "purple": $purple,
+ "pink": $pink,
+ "red": $red,
+ "orange": $orange,
+ "yellow": $yellow,
+ "green": $green,
+ "teal": $teal,
+ "cyan": $cyan,
+ "white": $white,
+ "gray": $gray-600,
+ "gray-dark": $gray-800
+ ),
+ $colors
+);
+
+$primary: $blue !default;
+$secondary: $gray-600 !default;
+$success: $green !default;
+$info: $cyan !default;
+$warning: $yellow !default;
+$danger: $red !default;
+$light: $gray-100 !default;
+$dark: $gray-800 !default;
+
+$theme-colors: () !default;
+$theme-colors: map-merge(
+ (
+ "primary": $primary,
+ "secondary": $secondary,
+ "success": $success,
+ "info": $info,
+ "warning": $warning,
+ "danger": $danger,
+ "light": $light,
+ "dark": $dark
+ ),
+ $theme-colors
+);
+
+// Set a specific jump point for requesting color jumps
+$theme-color-interval: 8% !default;
+
+// The yiq lightness value that determines when the lightness of color changes from "dark" to "light". Acceptable values are between 0 and 255.
+$yiq-contrasted-threshold: 150 !default;
+
+// Customize the light and dark text colors for use in our YIQ color contrast function.
+$yiq-text-dark: $gray-900 !default;
+$yiq-text-light: $white !default;
+
+// Characters which are escaped by the escape-svg function
+$escaped-characters: (
+ ("<", "%3c"),
+ (">", "%3e"),
+ ("#", "%23"),
+ ("(", "%28"),
+ (")", "%29"),
+) !default;
+
+
+// Options
+//
+// Quickly modify global styling by enabling or disabling optional features.
+
+$enable-caret: true !default;
+$enable-rounded: true !default;
+$enable-shadows: false !default;
+$enable-gradients: false !default;
+$enable-transitions: true !default;
+$enable-prefers-reduced-motion-media-query: true !default;
+$enable-hover-media-query: false !default; // Deprecated, no longer affects any compiled CSS
+$enable-grid-classes: true !default;
+$enable-pointer-cursor-for-buttons: true !default;
+$enable-print-styles: true !default;
+$enable-responsive-font-sizes: false !default;
+$enable-validation-icons: true !default;
+$enable-deprecation-messages: true !default;
+
+
+// Spacing
+//
+// Control the default styling of most Bootstrap elements by modifying these
+// variables. Mostly focused on spacing.
+// You can add more entries to the $spacers map, should you need more variation.
+
+$spacer: 1rem !default;
+$spacers: () !default;
+$spacers: map-merge(
+ (
+ 0: 0,
+ 1: ($spacer * .25),
+ 2: ($spacer * .5),
+ 3: $spacer,
+ 4: ($spacer * 1.5),
+ 5: ($spacer * 3)
+ ),
+ $spacers
+);
+
+// This variable affects the `.h-*` and `.w-*` classes.
+$sizes: () !default;
+$sizes: map-merge(
+ (
+ 25: 25%,
+ 50: 50%,
+ 75: 75%,
+ 100: 100%,
+ auto: auto
+ ),
+ $sizes
+);
+
+
+// Body
+//
+// Settings for the `` element.
+
+$body-bg: $white !default;
+$body-color: $gray-900 !default;
+
+
+// Links
+//
+// Style anchor elements.
+
+$link-color: theme-color("primary") !default;
+$link-decoration: none !default;
+$link-hover-color: darken($link-color, 15%) !default;
+$link-hover-decoration: underline !default;
+// Darken percentage for links with `.text-*` class (e.g. `.text-success`)
+$emphasized-link-hover-darken-percentage: 15% !default;
+
+// Paragraphs
+//
+// Style p element.
+
+$paragraph-margin-bottom: 1rem !default;
+
+
+// Grid breakpoints
+//
+// Define the minimum dimensions at which your layout will change,
+// adapting to different screen sizes, for use in media queries.
+
+$grid-breakpoints: (
+ xs: 0,
+ sm: 576px,
+ md: 768px,
+ lg: 992px,
+ xl: 1200px
+) !default;
+
+@include _assert-ascending($grid-breakpoints, "$grid-breakpoints");
+@include _assert-starts-at-zero($grid-breakpoints, "$grid-breakpoints");
+
+
+// Grid containers
+//
+// Define the maximum width of `.container` for different screen sizes.
+
+$container-max-widths: (
+ sm: 540px,
+ md: 720px,
+ lg: 960px,
+ xl: 1140px
+) !default;
+
+@include _assert-ascending($container-max-widths, "$container-max-widths");
+
+
+// Grid columns
+//
+// Set the number of columns and specify the width of the gutters.
+
+$grid-columns: 12 !default;
+$grid-gutter-width: 30px !default;
+$grid-row-columns: 6 !default;
+
+
+// Components
+//
+// Define common padding and border radius sizes and more.
+
+$line-height-lg: 1.5 !default;
+$line-height-sm: 1.5 !default;
+
+$border-width: 1px !default;
+$border-color: $gray-300 !default;
+
+$border-radius: .25rem !default;
+$border-radius-lg: .3rem !default;
+$border-radius-sm: .2rem !default;
+
+$rounded-pill: 50rem !default;
+
+$box-shadow-sm: 0 .125rem .25rem rgba($black, .075) !default;
+$box-shadow: 0 .5rem 1rem rgba($black, .15) !default;
+$box-shadow-lg: 0 1rem 3rem rgba($black, .175) !default;
+
+$component-active-color: $white !default;
+$component-active-bg: theme-color("primary") !default;
+
+$caret-width: .3em !default;
+$caret-vertical-align: $caret-width * .85 !default;
+$caret-spacing: $caret-width * .85 !default;
+
+$transition-base: all .2s ease-in-out !default;
+$transition-fade: opacity .15s linear !default;
+$transition-collapse: height .35s ease !default;
+$transition-collapse-width: width .35s ease !default;
+
+$embed-responsive-aspect-ratios: () !default;
+$embed-responsive-aspect-ratios: join(
+ (
+ (21 9),
+ (16 9),
+ (4 3),
+ (1 1),
+ ),
+ $embed-responsive-aspect-ratios
+);
+
+// Typography
+//
+// Font, line-height, and color for body text, headings, and more.
+
+// stylelint-disable value-keyword-case
+$font-family-sans-serif: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans", "Liberation Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji" !default;
+$font-family-monospace: SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace !default;
+$font-family-base: $font-family-sans-serif !default;
+// stylelint-enable value-keyword-case
+
+$font-size-base: 1rem !default; // Assumes the browser default, typically `16px`
+$font-size-lg: $font-size-base * 1.25 !default;
+$font-size-sm: $font-size-base * .875 !default;
+
+$font-weight-lighter: lighter !default;
+$font-weight-light: 300 !default;
+$font-weight-normal: 400 !default;
+$font-weight-bold: 700 !default;
+$font-weight-bolder: bolder !default;
+
+$font-weight-base: $font-weight-normal !default;
+$line-height-base: 1.5 !default;
+
+$h1-font-size: $font-size-base * 2.5 !default;
+$h2-font-size: $font-size-base * 2 !default;
+$h3-font-size: $font-size-base * 1.75 !default;
+$h4-font-size: $font-size-base * 1.5 !default;
+$h5-font-size: $font-size-base * 1.25 !default;
+$h6-font-size: $font-size-base !default;
+
+$headings-margin-bottom: $spacer * .5 !default;
+$headings-font-family: null !default;
+$headings-font-weight: 500 !default;
+$headings-line-height: 1.2 !default;
+$headings-color: null !default;
+
+$display1-size: 6rem !default;
+$display2-size: 5.5rem !default;
+$display3-size: 4.5rem !default;
+$display4-size: 3.5rem !default;
+
+$display1-weight: 300 !default;
+$display2-weight: 300 !default;
+$display3-weight: 300 !default;
+$display4-weight: 300 !default;
+$display-line-height: $headings-line-height !default;
+
+$lead-font-size: $font-size-base * 1.25 !default;
+$lead-font-weight: 300 !default;
+
+$small-font-size: .875em !default;
+
+$text-muted: $gray-600 !default;
+
+$blockquote-small-color: $gray-600 !default;
+$blockquote-small-font-size: $small-font-size !default;
+$blockquote-font-size: $font-size-base * 1.25 !default;
+
+$hr-border-color: rgba($black, .1) !default;
+$hr-border-width: $border-width !default;
+
+$mark-padding: .2em !default;
+
+$dt-font-weight: $font-weight-bold !default;
+
+$kbd-box-shadow: inset 0 -.1rem 0 rgba($black, .25) !default;
+$nested-kbd-font-weight: $font-weight-bold !default;
+
+$list-inline-padding: .5rem !default;
+
+$mark-bg: #fcf8e3 !default;
+
+$hr-margin-y: $spacer !default;
+
+
+// Tables
+//
+// Customizes the `.table` component with basic values, each used across all table variations.
+
+$table-cell-padding: .75rem !default;
+$table-cell-padding-sm: .3rem !default;
+
+$table-color: $body-color !default;
+$table-bg: null !default;
+$table-accent-bg: rgba($black, .05) !default;
+$table-hover-color: $table-color !default;
+$table-hover-bg: rgba($black, .075) !default;
+$table-active-bg: $table-hover-bg !default;
+
+$table-border-width: $border-width !default;
+$table-border-color: $border-color !default;
+
+$table-head-bg: $gray-200 !default;
+$table-head-color: $gray-700 !default;
+$table-th-font-weight: null !default;
+
+$table-dark-color: $white !default;
+$table-dark-bg: $gray-800 !default;
+$table-dark-accent-bg: rgba($white, .05) !default;
+$table-dark-hover-color: $table-dark-color !default;
+$table-dark-hover-bg: rgba($white, .075) !default;
+$table-dark-border-color: lighten($table-dark-bg, 7.5%) !default;
+
+$table-striped-order: odd !default;
+
+$table-caption-color: $text-muted !default;
+
+$table-bg-level: -9 !default;
+$table-border-level: -6 !default;
+
+
+// Buttons + Forms
+//
+// Shared variables that are reassigned to `$input-` and `$btn-` specific variables.
+
+$input-btn-padding-y: .375rem !default;
+$input-btn-padding-x: .75rem !default;
+$input-btn-font-family: null !default;
+$input-btn-font-size: $font-size-base !default;
+$input-btn-line-height: $line-height-base !default;
+
+$input-btn-focus-width: .2rem !default;
+$input-btn-focus-color: rgba($component-active-bg, .25) !default;
+$input-btn-focus-box-shadow: 0 0 0 $input-btn-focus-width $input-btn-focus-color !default;
+
+$input-btn-padding-y-sm: .25rem !default;
+$input-btn-padding-x-sm: .5rem !default;
+$input-btn-font-size-sm: $font-size-sm !default;
+$input-btn-line-height-sm: $line-height-sm !default;
+
+$input-btn-padding-y-lg: .5rem !default;
+$input-btn-padding-x-lg: 1rem !default;
+$input-btn-font-size-lg: $font-size-lg !default;
+$input-btn-line-height-lg: $line-height-lg !default;
+
+$input-btn-border-width: $border-width !default;
+
+
+// Buttons
+//
+// For each of Bootstrap's buttons, define text, background, and border color.
+
+$btn-padding-y: $input-btn-padding-y !default;
+$btn-padding-x: $input-btn-padding-x !default;
+$btn-font-family: $input-btn-font-family !default;
+$btn-font-size: $input-btn-font-size !default;
+$btn-line-height: $input-btn-line-height !default;
+$btn-white-space: null !default; // Set to `nowrap` to prevent text wrapping
+
+$btn-padding-y-sm: $input-btn-padding-y-sm !default;
+$btn-padding-x-sm: $input-btn-padding-x-sm !default;
+$btn-font-size-sm: $input-btn-font-size-sm !default;
+$btn-line-height-sm: $input-btn-line-height-sm !default;
+
+$btn-padding-y-lg: $input-btn-padding-y-lg !default;
+$btn-padding-x-lg: $input-btn-padding-x-lg !default;
+$btn-font-size-lg: $input-btn-font-size-lg !default;
+$btn-line-height-lg: $input-btn-line-height-lg !default;
+
+$btn-border-width: $input-btn-border-width !default;
+
+$btn-font-weight: $font-weight-normal !default;
+$btn-box-shadow: inset 0 1px 0 rgba($white, .15), 0 1px 1px rgba($black, .075) !default;
+$btn-focus-width: $input-btn-focus-width !default;
+$btn-focus-box-shadow: $input-btn-focus-box-shadow !default;
+$btn-disabled-opacity: .65 !default;
+$btn-active-box-shadow: inset 0 3px 5px rgba($black, .125) !default;
+
+$btn-link-disabled-color: $gray-600 !default;
+
+$btn-block-spacing-y: .5rem !default;
+
+// Allows for customizing button radius independently from global border radius
+$btn-border-radius: $border-radius !default;
+$btn-border-radius-lg: $border-radius-lg !default;
+$btn-border-radius-sm: $border-radius-sm !default;
+
+$btn-transition: color .15s ease-in-out, background-color .15s ease-in-out, border-color .15s ease-in-out, box-shadow .15s ease-in-out !default;
+
+
+// Forms
+
+$label-margin-bottom: .5rem !default;
+
+$input-padding-y: $input-btn-padding-y !default;
+$input-padding-x: $input-btn-padding-x !default;
+$input-font-family: $input-btn-font-family !default;
+$input-font-size: $input-btn-font-size !default;
+$input-font-weight: $font-weight-base !default;
+$input-line-height: $input-btn-line-height !default;
+
+$input-padding-y-sm: $input-btn-padding-y-sm !default;
+$input-padding-x-sm: $input-btn-padding-x-sm !default;
+$input-font-size-sm: $input-btn-font-size-sm !default;
+$input-line-height-sm: $input-btn-line-height-sm !default;
+
+$input-padding-y-lg: $input-btn-padding-y-lg !default;
+$input-padding-x-lg: $input-btn-padding-x-lg !default;
+$input-font-size-lg: $input-btn-font-size-lg !default;
+$input-line-height-lg: $input-btn-line-height-lg !default;
+
+$input-bg: $white !default;
+$input-disabled-bg: $gray-200 !default;
+
+$input-color: $gray-700 !default;
+$input-border-color: $gray-400 !default;
+$input-border-width: $input-btn-border-width !default;
+$input-box-shadow: inset 0 1px 1px rgba($black, .075) !default;
+
+$input-border-radius: $border-radius !default;
+$input-border-radius-lg: $border-radius-lg !default;
+$input-border-radius-sm: $border-radius-sm !default;
+
+$input-focus-bg: $input-bg !default;
+$input-focus-border-color: lighten($component-active-bg, 25%) !default;
+$input-focus-color: $input-color !default;
+$input-focus-width: $input-btn-focus-width !default;
+$input-focus-box-shadow: $input-btn-focus-box-shadow !default;
+
+$input-placeholder-color: $gray-600 !default;
+$input-plaintext-color: $body-color !default;
+
+$input-height-border: $input-border-width * 2 !default;
+
+$input-height-inner: add($input-line-height * 1em, $input-padding-y * 2) !default;
+$input-height-inner-half: add($input-line-height * .5em, $input-padding-y) !default;
+$input-height-inner-quarter: add($input-line-height * .25em, $input-padding-y * .5) !default;
+
+$input-height: add($input-line-height * 1em, add($input-padding-y * 2, $input-height-border, false)) !default;
+$input-height-sm: add($input-line-height-sm * 1em, add($input-padding-y-sm * 2, $input-height-border, false)) !default;
+$input-height-lg: add($input-line-height-lg * 1em, add($input-padding-y-lg * 2, $input-height-border, false)) !default;
+
+$input-transition: border-color .15s ease-in-out, box-shadow .15s ease-in-out !default;
+
+$form-text-margin-top: .25rem !default;
+
+$form-check-input-gutter: 1.25rem !default;
+$form-check-input-margin-y: .3rem !default;
+$form-check-input-margin-x: .25rem !default;
+
+$form-check-inline-margin-x: .75rem !default;
+$form-check-inline-input-margin-x: .3125rem !default;
+
+$form-grid-gutter-width: 10px !default;
+$form-group-margin-bottom: 1rem !default;
+
+$input-group-addon-color: $input-color !default;
+$input-group-addon-bg: $gray-200 !default;
+$input-group-addon-border-color: $input-border-color !default;
+
+$custom-forms-transition: background-color .15s ease-in-out, border-color .15s ease-in-out, box-shadow .15s ease-in-out !default;
+
+$custom-control-gutter: .5rem !default;
+$custom-control-spacer-x: 1rem !default;
+$custom-control-cursor: null !default;
+
+$custom-control-indicator-size: 1rem !default;
+$custom-control-indicator-bg: $input-bg !default;
+
+$custom-control-indicator-bg-size: 50% 50% !default;
+$custom-control-indicator-box-shadow: $input-box-shadow !default;
+$custom-control-indicator-border-color: $gray-500 !default;
+$custom-control-indicator-border-width: $input-border-width !default;
+
+$custom-control-label-color: null !default;
+
+$custom-control-indicator-disabled-bg: $input-disabled-bg !default;
+$custom-control-label-disabled-color: $gray-600 !default;
+
+$custom-control-indicator-checked-color: $component-active-color !default;
+$custom-control-indicator-checked-bg: $component-active-bg !default;
+$custom-control-indicator-checked-disabled-bg: rgba(theme-color("primary"), .5) !default;
+$custom-control-indicator-checked-box-shadow: null !default;
+$custom-control-indicator-checked-border-color: $custom-control-indicator-checked-bg !default;
+
+$custom-control-indicator-focus-box-shadow: $input-focus-box-shadow !default;
+$custom-control-indicator-focus-border-color: $input-focus-border-color !default;
+
+$custom-control-indicator-active-color: $component-active-color !default;
+$custom-control-indicator-active-bg: lighten($component-active-bg, 35%) !default;
+$custom-control-indicator-active-box-shadow: null !default;
+$custom-control-indicator-active-border-color: $custom-control-indicator-active-bg !default;
+
+$custom-checkbox-indicator-border-radius: $border-radius !default;
+$custom-checkbox-indicator-icon-checked: url("data:image/svg+xml,
") !default;
+
+$custom-checkbox-indicator-indeterminate-bg: $component-active-bg !default;
+$custom-checkbox-indicator-indeterminate-color: $custom-control-indicator-checked-color !default;
+$custom-checkbox-indicator-icon-indeterminate: url("data:image/svg+xml,
") !default;
+$custom-checkbox-indicator-indeterminate-box-shadow: null !default;
+$custom-checkbox-indicator-indeterminate-border-color: $custom-checkbox-indicator-indeterminate-bg !default;
+
+$custom-radio-indicator-border-radius: 50% !default;
+$custom-radio-indicator-icon-checked: url("data:image/svg+xml,
") !default;
+
+$custom-switch-width: $custom-control-indicator-size * 1.75 !default;
+$custom-switch-indicator-border-radius: $custom-control-indicator-size * .5 !default;
+$custom-switch-indicator-size: subtract($custom-control-indicator-size, $custom-control-indicator-border-width * 4) !default;
+
+$custom-select-padding-y: $input-padding-y !default;
+$custom-select-padding-x: $input-padding-x !default;
+$custom-select-font-family: $input-font-family !default;
+$custom-select-font-size: $input-font-size !default;
+$custom-select-height: $input-height !default;
+$custom-select-indicator-padding: 1rem !default; // Extra padding to account for the presence of the background-image based indicator
+$custom-select-font-weight: $input-font-weight !default;
+$custom-select-line-height: $input-line-height !default;
+$custom-select-color: $input-color !default;
+$custom-select-disabled-color: $gray-600 !default;
+$custom-select-bg: $input-bg !default;
+$custom-select-disabled-bg: $gray-200 !default;
+$custom-select-bg-size: 8px 10px !default; // In pixels because image dimensions
+$custom-select-indicator-color: $gray-800 !default;
+$custom-select-indicator: url("data:image/svg+xml,
") !default;
+$custom-select-background: escape-svg($custom-select-indicator) right $custom-select-padding-x center / $custom-select-bg-size no-repeat !default; // Used so we can have multiple background elements (e.g., arrow and feedback icon)
+
+$custom-select-feedback-icon-padding-right: add(1em * .75, (2 * $custom-select-padding-y * .75) + $custom-select-padding-x + $custom-select-indicator-padding) !default;
+$custom-select-feedback-icon-position: center right ($custom-select-padding-x + $custom-select-indicator-padding) !default;
+$custom-select-feedback-icon-size: $input-height-inner-half $input-height-inner-half !default;
+
+$custom-select-border-width: $input-border-width !default;
+$custom-select-border-color: $input-border-color !default;
+$custom-select-border-radius: $border-radius !default;
+$custom-select-box-shadow: inset 0 1px 2px rgba($black, .075) !default;
+
+$custom-select-focus-border-color: $input-focus-border-color !default;
+$custom-select-focus-width: $input-focus-width !default;
+$custom-select-focus-box-shadow: 0 0 0 $custom-select-focus-width $input-btn-focus-color !default;
+
+$custom-select-padding-y-sm: $input-padding-y-sm !default;
+$custom-select-padding-x-sm: $input-padding-x-sm !default;
+$custom-select-font-size-sm: $input-font-size-sm !default;
+$custom-select-height-sm: $input-height-sm !default;
+
+$custom-select-padding-y-lg: $input-padding-y-lg !default;
+$custom-select-padding-x-lg: $input-padding-x-lg !default;
+$custom-select-font-size-lg: $input-font-size-lg !default;
+$custom-select-height-lg: $input-height-lg !default;
+
+$custom-range-track-width: 100% !default;
+$custom-range-track-height: .5rem !default;
+$custom-range-track-cursor: pointer !default;
+$custom-range-track-bg: $gray-300 !default;
+$custom-range-track-border-radius: 1rem !default;
+$custom-range-track-box-shadow: inset 0 .25rem .25rem rgba($black, .1) !default;
+
+$custom-range-thumb-width: 1rem !default;
+$custom-range-thumb-height: $custom-range-thumb-width !default;
+$custom-range-thumb-bg: $component-active-bg !default;
+$custom-range-thumb-border: 0 !default;
+$custom-range-thumb-border-radius: 1rem !default;
+$custom-range-thumb-box-shadow: 0 .1rem .25rem rgba($black, .1) !default;
+$custom-range-thumb-focus-box-shadow: 0 0 0 1px $body-bg, $input-focus-box-shadow !default;
+$custom-range-thumb-focus-box-shadow-width: $input-focus-width !default; // For focus box shadow issue in IE/Edge
+$custom-range-thumb-active-bg: lighten($component-active-bg, 35%) !default;
+$custom-range-thumb-disabled-bg: $gray-500 !default;
+
+$custom-file-height: $input-height !default;
+$custom-file-height-inner: $input-height-inner !default;
+$custom-file-focus-border-color: $input-focus-border-color !default;
+$custom-file-focus-box-shadow: $input-focus-box-shadow !default;
+$custom-file-disabled-bg: $input-disabled-bg !default;
+
+$custom-file-padding-y: $input-padding-y !default;
+$custom-file-padding-x: $input-padding-x !default;
+$custom-file-line-height: $input-line-height !default;
+$custom-file-font-family: $input-font-family !default;
+$custom-file-font-weight: $input-font-weight !default;
+$custom-file-color: $input-color !default;
+$custom-file-bg: $input-bg !default;
+$custom-file-border-width: $input-border-width !default;
+$custom-file-border-color: $input-border-color !default;
+$custom-file-border-radius: $input-border-radius !default;
+$custom-file-box-shadow: $input-box-shadow !default;
+$custom-file-button-color: $custom-file-color !default;
+$custom-file-button-bg: $input-group-addon-bg !default;
+$custom-file-text: (
+ en: "Browse"
+) !default;
+
+
+// Form validation
+
+$form-feedback-margin-top: $form-text-margin-top !default;
+$form-feedback-font-size: $small-font-size !default;
+$form-feedback-valid-color: theme-color("success") !default;
+$form-feedback-invalid-color: theme-color("danger") !default;
+
+$form-feedback-icon-valid-color: $form-feedback-valid-color !default;
+$form-feedback-icon-valid: url("data:image/svg+xml,
") !default;
+$form-feedback-icon-invalid-color: $form-feedback-invalid-color !default;
+$form-feedback-icon-invalid: url("data:image/svg+xml,
") !default;
+
+$form-validation-states: () !default;
+$form-validation-states: map-merge(
+ (
+ "valid": (
+ "color": $form-feedback-valid-color,
+ "icon": $form-feedback-icon-valid
+ ),
+ "invalid": (
+ "color": $form-feedback-invalid-color,
+ "icon": $form-feedback-icon-invalid
+ ),
+ ),
+ $form-validation-states
+);
+
+// Z-index master list
+//
+// Warning: Avoid customizing these values. They're used for a bird's eye view
+// of components dependent on the z-axis and are designed to all work together.
+
+$zindex-dropdown: 1000 !default;
+$zindex-sticky: 1020 !default;
+$zindex-fixed: 1030 !default;
+$zindex-modal-backdrop: 1040 !default;
+$zindex-modal: 1050 !default;
+$zindex-popover: 1060 !default;
+$zindex-tooltip: 1070 !default;
+
+
+// Navs
+
+$nav-link-padding-y: .5rem !default;
+$nav-link-padding-x: 1rem !default;
+$nav-link-disabled-color: $gray-600 !default;
+
+$nav-tabs-border-color: $gray-300 !default;
+$nav-tabs-border-width: $border-width !default;
+$nav-tabs-border-radius: $border-radius !default;
+$nav-tabs-link-hover-border-color: $gray-200 $gray-200 $nav-tabs-border-color !default;
+$nav-tabs-link-active-color: $gray-700 !default;
+$nav-tabs-link-active-bg: $body-bg !default;
+$nav-tabs-link-active-border-color: $gray-300 $gray-300 $nav-tabs-link-active-bg !default;
+
+$nav-pills-border-radius: $border-radius !default;
+$nav-pills-link-active-color: $component-active-color !default;
+$nav-pills-link-active-bg: $component-active-bg !default;
+
+$nav-divider-color: $gray-200 !default;
+$nav-divider-margin-y: $spacer * .5 !default;
+
+
+// Navbar
+
+$navbar-padding-y: $spacer * .5 !default;
+$navbar-padding-x: $spacer !default;
+
+$navbar-nav-link-padding-x: .5rem !default;
+
+$navbar-brand-font-size: $font-size-lg !default;
+// Compute the navbar-brand padding-y so the navbar-brand will have the same height as navbar-text and nav-link
+$nav-link-height: $font-size-base * $line-height-base + $nav-link-padding-y * 2 !default;
+$navbar-brand-height: $navbar-brand-font-size * $line-height-base !default;
+$navbar-brand-padding-y: ($nav-link-height - $navbar-brand-height) * .5 !default;
+
+$navbar-toggler-padding-y: .25rem !default;
+$navbar-toggler-padding-x: .75rem !default;
+$navbar-toggler-font-size: $font-size-lg !default;
+$navbar-toggler-border-radius: $btn-border-radius !default;
+
+$navbar-nav-scroll-max-height: 75vh !default;
+
+$navbar-dark-color: rgba($white, .5) !default;
+$navbar-dark-hover-color: rgba($white, .75) !default;
+$navbar-dark-active-color: $white !default;
+$navbar-dark-disabled-color: rgba($white, .25) !default;
+$navbar-dark-toggler-icon-bg: url("data:image/svg+xml,
") !default;
+$navbar-dark-toggler-border-color: rgba($white, .1) !default;
+
+$navbar-light-color: rgba($black, .5) !default;
+$navbar-light-hover-color: rgba($black, .7) !default;
+$navbar-light-active-color: rgba($black, .9) !default;
+$navbar-light-disabled-color: rgba($black, .3) !default;
+$navbar-light-toggler-icon-bg: url("data:image/svg+xml,
") !default;
+$navbar-light-toggler-border-color: rgba($black, .1) !default;
+
+$navbar-light-brand-color: $navbar-light-active-color !default;
+$navbar-light-brand-hover-color: $navbar-light-active-color !default;
+$navbar-dark-brand-color: $navbar-dark-active-color !default;
+$navbar-dark-brand-hover-color: $navbar-dark-active-color !default;
+
+
+// Dropdowns
+//
+// Dropdown menu container and contents.
+
+$dropdown-min-width: 10rem !default;
+$dropdown-padding-x: 0 !default;
+$dropdown-padding-y: .5rem !default;
+$dropdown-spacer: .125rem !default;
+$dropdown-font-size: $font-size-base !default;
+$dropdown-color: $body-color !default;
+$dropdown-bg: $white !default;
+$dropdown-border-color: rgba($black, .15) !default;
+$dropdown-border-radius: $border-radius !default;
+$dropdown-border-width: $border-width !default;
+$dropdown-inner-border-radius: subtract($dropdown-border-radius, $dropdown-border-width) !default;
+$dropdown-divider-bg: $gray-200 !default;
+$dropdown-divider-margin-y: $nav-divider-margin-y !default;
+$dropdown-box-shadow: 0 .5rem 1rem rgba($black, .175) !default;
+
+$dropdown-link-color: $gray-900 !default;
+$dropdown-link-hover-color: darken($gray-900, 5%) !default;
+$dropdown-link-hover-bg: $gray-200 !default;
+
+$dropdown-link-active-color: $component-active-color !default;
+$dropdown-link-active-bg: $component-active-bg !default;
+
+$dropdown-link-disabled-color: $gray-500 !default;
+
+$dropdown-item-padding-y: .25rem !default;
+$dropdown-item-padding-x: 1.5rem !default;
+
+$dropdown-header-color: $gray-600 !default;
+$dropdown-header-padding: $dropdown-padding-y $dropdown-item-padding-x !default;
+
+
+// Pagination
+
+$pagination-padding-y: .5rem !default;
+$pagination-padding-x: .75rem !default;
+$pagination-padding-y-sm: .25rem !default;
+$pagination-padding-x-sm: .5rem !default;
+$pagination-padding-y-lg: .75rem !default;
+$pagination-padding-x-lg: 1.5rem !default;
+$pagination-line-height: 1.25 !default;
+
+$pagination-color: $link-color !default;
+$pagination-bg: $white !default;
+$pagination-border-width: $border-width !default;
+$pagination-border-color: $gray-300 !default;
+
+$pagination-focus-box-shadow: $input-btn-focus-box-shadow !default;
+$pagination-focus-outline: 0 !default;
+
+$pagination-hover-color: $link-hover-color !default;
+$pagination-hover-bg: $gray-200 !default;
+$pagination-hover-border-color: $gray-300 !default;
+
+$pagination-active-color: $component-active-color !default;
+$pagination-active-bg: $component-active-bg !default;
+$pagination-active-border-color: $pagination-active-bg !default;
+
+$pagination-disabled-color: $gray-600 !default;
+$pagination-disabled-bg: $white !default;
+$pagination-disabled-border-color: $gray-300 !default;
+
+$pagination-border-radius-sm: $border-radius-sm !default;
+$pagination-border-radius-lg: $border-radius-lg !default;
+
+
+// Jumbotron
+
+$jumbotron-padding: 2rem !default;
+$jumbotron-color: null !default;
+$jumbotron-bg: $gray-200 !default;
+
+
+// Cards
+
+$card-spacer-y: .75rem !default;
+$card-spacer-x: 1.25rem !default;
+$card-border-width: $border-width !default;
+$card-border-radius: $border-radius !default;
+$card-border-color: rgba($black, .125) !default;
+$card-inner-border-radius: subtract($card-border-radius, $card-border-width) !default;
+$card-cap-bg: rgba($black, .03) !default;
+$card-cap-color: null !default;
+$card-height: null !default;
+$card-color: null !default;
+$card-bg: $white !default;
+
+$card-img-overlay-padding: 1.25rem !default;
+
+$card-group-margin: $grid-gutter-width * .5 !default;
+$card-deck-margin: $card-group-margin !default;
+
+$card-columns-count: 3 !default;
+$card-columns-gap: 1.25rem !default;
+$card-columns-margin: $card-spacer-y !default;
+
+
+// Tooltips
+
+$tooltip-font-size: $font-size-sm !default;
+$tooltip-max-width: 200px !default;
+$tooltip-color: $white !default;
+$tooltip-bg: $black !default;
+$tooltip-border-radius: $border-radius !default;
+$tooltip-opacity: .9 !default;
+$tooltip-padding-y: .25rem !default;
+$tooltip-padding-x: .5rem !default;
+$tooltip-margin: 0 !default;
+
+$tooltip-arrow-width: .8rem !default;
+$tooltip-arrow-height: .4rem !default;
+$tooltip-arrow-color: $tooltip-bg !default;
+
+// Form tooltips must come after regular tooltips
+$form-feedback-tooltip-padding-y: $tooltip-padding-y !default;
+$form-feedback-tooltip-padding-x: $tooltip-padding-x !default;
+$form-feedback-tooltip-font-size: $tooltip-font-size !default;
+$form-feedback-tooltip-line-height: $line-height-base !default;
+$form-feedback-tooltip-opacity: $tooltip-opacity !default;
+$form-feedback-tooltip-border-radius: $tooltip-border-radius !default;
+
+
+// Popovers
+
+$popover-font-size: $font-size-sm !default;
+$popover-bg: $white !default;
+$popover-max-width: 276px !default;
+$popover-border-width: $border-width !default;
+$popover-border-color: rgba($black, .2) !default;
+$popover-border-radius: $border-radius-lg !default;
+$popover-inner-border-radius: subtract($popover-border-radius, $popover-border-width) !default;
+$popover-box-shadow: 0 .25rem .5rem rgba($black, .2) !default;
+
+$popover-header-bg: darken($popover-bg, 3%) !default;
+$popover-header-color: $headings-color !default;
+$popover-header-padding-y: .5rem !default;
+$popover-header-padding-x: .75rem !default;
+
+$popover-body-color: $body-color !default;
+$popover-body-padding-y: $popover-header-padding-y !default;
+$popover-body-padding-x: $popover-header-padding-x !default;
+
+$popover-arrow-width: 1rem !default;
+$popover-arrow-height: .5rem !default;
+$popover-arrow-color: $popover-bg !default;
+
+$popover-arrow-outer-color: fade-in($popover-border-color, .05) !default;
+
+
+// Toasts
+
+$toast-max-width: 350px !default;
+$toast-padding-x: .75rem !default;
+$toast-padding-y: .25rem !default;
+$toast-font-size: .875rem !default;
+$toast-color: null !default;
+$toast-background-color: rgba($white, .85) !default;
+$toast-border-width: 1px !default;
+$toast-border-color: rgba(0, 0, 0, .1) !default;
+$toast-border-radius: .25rem !default;
+$toast-box-shadow: 0 .25rem .75rem rgba($black, .1) !default;
+
+$toast-header-color: $gray-600 !default;
+$toast-header-background-color: rgba($white, .85) !default;
+$toast-header-border-color: rgba(0, 0, 0, .05) !default;
+
+
+// Badges
+
+$badge-font-size: 75% !default;
+$badge-font-weight: $font-weight-bold !default;
+$badge-padding-y: .25em !default;
+$badge-padding-x: .4em !default;
+$badge-border-radius: $border-radius !default;
+
+$badge-transition: $btn-transition !default;
+$badge-focus-width: $input-btn-focus-width !default;
+
+$badge-pill-padding-x: .6em !default;
+// Use a higher than normal value to ensure completely rounded edges when
+// customizing padding or font-size on labels.
+$badge-pill-border-radius: 10rem !default;
+
+
+// Modals
+
+// Padding applied to the modal body
+$modal-inner-padding: 1rem !default;
+
+// Margin between elements in footer, must be lower than or equal to 2 * $modal-inner-padding
+$modal-footer-margin-between: .5rem !default;
+
+$modal-dialog-margin: .5rem !default;
+$modal-dialog-margin-y-sm-up: 1.75rem !default;
+
+$modal-title-line-height: $line-height-base !default;
+
+$modal-content-color: null !default;
+$modal-content-bg: $white !default;
+$modal-content-border-color: rgba($black, .2) !default;
+$modal-content-border-width: $border-width !default;
+$modal-content-border-radius: $border-radius-lg !default;
+$modal-content-inner-border-radius: subtract($modal-content-border-radius, $modal-content-border-width) !default;
+$modal-content-box-shadow-xs: 0 .25rem .5rem rgba($black, .5) !default;
+$modal-content-box-shadow-sm-up: 0 .5rem 1rem rgba($black, .5) !default;
+
+$modal-backdrop-bg: $black !default;
+$modal-backdrop-opacity: .5 !default;
+$modal-header-border-color: $border-color !default;
+$modal-footer-border-color: $modal-header-border-color !default;
+$modal-header-border-width: $modal-content-border-width !default;
+$modal-footer-border-width: $modal-header-border-width !default;
+$modal-header-padding-y: 1rem !default;
+$modal-header-padding-x: 1rem !default;
+$modal-header-padding: $modal-header-padding-y $modal-header-padding-x !default; // Keep this for backwards compatibility
+
+$modal-xl: 1140px !default;
+$modal-lg: 800px !default;
+$modal-md: 500px !default;
+$modal-sm: 300px !default;
+
+$modal-fade-transform: translate(0, -50px) !default;
+$modal-show-transform: none !default;
+$modal-transition: transform .3s ease-out !default;
+$modal-scale-transform: scale(1.02) !default;
+
+
+// Alerts
+//
+// Define alert colors, border radius, and padding.
+
+$alert-padding-y: .75rem !default;
+$alert-padding-x: 1.25rem !default;
+$alert-margin-bottom: 1rem !default;
+$alert-border-radius: $border-radius !default;
+$alert-link-font-weight: $font-weight-bold !default;
+$alert-border-width: $border-width !default;
+
+$alert-bg-level: -10 !default;
+$alert-border-level: -9 !default;
+$alert-color-level: 6 !default;
+
+
+// Progress bars
+
+$progress-height: 1rem !default;
+$progress-font-size: $font-size-base * .75 !default;
+$progress-bg: $gray-200 !default;
+$progress-border-radius: $border-radius !default;
+$progress-box-shadow: inset 0 .1rem .1rem rgba($black, .1) !default;
+$progress-bar-color: $white !default;
+$progress-bar-bg: theme-color("primary") !default;
+$progress-bar-animation-timing: 1s linear infinite !default;
+$progress-bar-transition: width .6s ease !default;
+
+
+// List group
+
+$list-group-color: null !default;
+$list-group-bg: $white !default;
+$list-group-border-color: rgba($black, .125) !default;
+$list-group-border-width: $border-width !default;
+$list-group-border-radius: $border-radius !default;
+
+$list-group-item-padding-y: .75rem !default;
+$list-group-item-padding-x: 1.25rem !default;
+
+$list-group-hover-bg: $gray-100 !default;
+$list-group-active-color: $component-active-color !default;
+$list-group-active-bg: $component-active-bg !default;
+$list-group-active-border-color: $list-group-active-bg !default;
+
+$list-group-disabled-color: $gray-600 !default;
+$list-group-disabled-bg: $list-group-bg !default;
+
+$list-group-action-color: $gray-700 !default;
+$list-group-action-hover-color: $list-group-action-color !default;
+
+$list-group-action-active-color: $body-color !default;
+$list-group-action-active-bg: $gray-200 !default;
+
+
+// Image thumbnails
+
+$thumbnail-padding: .25rem !default;
+$thumbnail-bg: $body-bg !default;
+$thumbnail-border-width: $border-width !default;
+$thumbnail-border-color: $gray-300 !default;
+$thumbnail-border-radius: $border-radius !default;
+$thumbnail-box-shadow: 0 1px 2px rgba($black, .075) !default;
+
+
+// Figures
+
+$figure-caption-font-size: 90% !default;
+$figure-caption-color: $gray-600 !default;
+
+
+// Breadcrumbs
+
+$breadcrumb-font-size: null !default;
+
+$breadcrumb-padding-y: .75rem !default;
+$breadcrumb-padding-x: 1rem !default;
+$breadcrumb-item-padding: .5rem !default;
+
+$breadcrumb-margin-bottom: 1rem !default;
+
+$breadcrumb-bg: $gray-200 !default;
+$breadcrumb-divider-color: $gray-600 !default;
+$breadcrumb-active-color: $gray-600 !default;
+$breadcrumb-divider: quote("/") !default;
+
+$breadcrumb-border-radius: $border-radius !default;
+
+
+// Carousel
+
+$carousel-control-color: $white !default;
+$carousel-control-width: 15% !default;
+$carousel-control-opacity: .5 !default;
+$carousel-control-hover-opacity: .9 !default;
+$carousel-control-transition: opacity .15s ease !default;
+
+$carousel-indicator-width: 30px !default;
+$carousel-indicator-height: 3px !default;
+$carousel-indicator-hit-area-height: 10px !default;
+$carousel-indicator-spacer: 3px !default;
+$carousel-indicator-active-bg: $white !default;
+$carousel-indicator-transition: opacity .6s ease !default;
+
+$carousel-caption-width: 70% !default;
+$carousel-caption-color: $white !default;
+
+$carousel-control-icon-width: 20px !default;
+
+$carousel-control-prev-icon-bg: url("data:image/svg+xml,
") !default;
+$carousel-control-next-icon-bg: url("data:image/svg+xml,
") !default;
+
+$carousel-transition-duration: .6s !default;
+$carousel-transition: transform $carousel-transition-duration ease-in-out !default; // Define transform transition first if using multiple transitions (e.g., `transform 2s ease, opacity .5s ease-out`)
+
+
+// Spinners
+
+$spinner-width: 2rem !default;
+$spinner-height: $spinner-width !default;
+$spinner-vertical-align: -.125em !default;
+$spinner-border-width: .25em !default;
+
+$spinner-width-sm: 1rem !default;
+$spinner-height-sm: $spinner-width-sm !default;
+$spinner-border-width-sm: .2em !default;
+
+
+// Close
+
+$close-font-size: $font-size-base * 1.5 !default;
+$close-font-weight: $font-weight-bold !default;
+$close-color: $black !default;
+$close-text-shadow: 0 1px 0 $white !default;
+
+
+// Code
+
+$code-font-size: 87.5% !default;
+$code-color: $pink !default;
+
+$kbd-padding-y: .2rem !default;
+$kbd-padding-x: .4rem !default;
+$kbd-font-size: $code-font-size !default;
+$kbd-color: $white !default;
+$kbd-bg: $gray-900 !default;
+
+$pre-color: $gray-900 !default;
+$pre-scrollable-max-height: 340px !default;
+
+
+// Utilities
+
+$displays: none, inline, inline-block, block, table, table-row, table-cell, flex, inline-flex !default;
+$overflows: auto, hidden !default;
+$positions: static, relative, absolute, fixed, sticky !default;
+$user-selects: all, auto, none !default;
+
+
+// Printing
+
+$print-page-size: a3 !default;
+$print-body-min-width: map-get($grid-breakpoints, "lg") !default;
diff --git a/_sass/node_modules/bootstrap/scss/bootstrap-grid.scss b/_sass/node_modules/bootstrap/scss/bootstrap-grid.scss
new file mode 100644
index 0000000000..1d529a6618
--- /dev/null
+++ b/_sass/node_modules/bootstrap/scss/bootstrap-grid.scss
@@ -0,0 +1,30 @@
+/*!
+ * Bootstrap Grid v4.6.2 (https://getbootstrap.com/)
+ * Copyright 2011-2022 The Bootstrap Authors
+ * Copyright 2011-2022 Twitter, Inc.
+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
+ */
+
+html {
+ box-sizing: border-box;
+ -ms-overflow-style: scrollbar;
+}
+
+*,
+*::before,
+*::after {
+ box-sizing: inherit;
+}
+
+@import "functions";
+@import "variables";
+
+@import "mixins/deprecate";
+@import "mixins/breakpoints";
+@import "mixins/grid-framework";
+@import "mixins/grid";
+
+@import "grid";
+@import "utilities/display";
+@import "utilities/flex";
+@import "utilities/spacing";
diff --git a/_sass/node_modules/bootstrap/scss/bootstrap-reboot.scss b/_sass/node_modules/bootstrap/scss/bootstrap-reboot.scss
new file mode 100644
index 0000000000..8a5fcf0032
--- /dev/null
+++ b/_sass/node_modules/bootstrap/scss/bootstrap-reboot.scss
@@ -0,0 +1,12 @@
+/*!
+ * Bootstrap Reboot v4.6.2 (https://getbootstrap.com/)
+ * Copyright 2011-2022 The Bootstrap Authors
+ * Copyright 2011-2022 Twitter, Inc.
+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
+ * Forked from Normalize.css, licensed MIT (https://github.com/necolas/normalize.css/blob/master/LICENSE.md)
+ */
+
+@import "functions";
+@import "variables";
+@import "mixins";
+@import "reboot";
diff --git a/_sass/node_modules/bootstrap/scss/bootstrap.scss b/_sass/node_modules/bootstrap/scss/bootstrap.scss
new file mode 100644
index 0000000000..ff38ed0334
--- /dev/null
+++ b/_sass/node_modules/bootstrap/scss/bootstrap.scss
@@ -0,0 +1,44 @@
+/*!
+ * Bootstrap v4.6.2 (https://getbootstrap.com/)
+ * Copyright 2011-2022 The Bootstrap Authors
+ * Copyright 2011-2022 Twitter, Inc.
+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
+ */
+
+@import "functions";
+@import "variables";
+@import "mixins";
+@import "root";
+@import "reboot";
+@import "type";
+@import "images";
+@import "code";
+@import "grid";
+@import "tables";
+@import "forms";
+@import "buttons";
+@import "transitions";
+@import "dropdown";
+@import "button-group";
+@import "input-group";
+@import "custom-forms";
+@import "nav";
+@import "navbar";
+@import "card";
+@import "breadcrumb";
+@import "pagination";
+@import "badge";
+@import "jumbotron";
+@import "alert";
+@import "progress";
+@import "media";
+@import "list-group";
+@import "close";
+@import "toasts";
+@import "modal";
+@import "tooltip";
+@import "popover";
+@import "carousel";
+@import "spinners";
+@import "utilities";
+@import "print";
diff --git a/_sass/node_modules/bootstrap/scss/mixins/_alert.scss b/_sass/node_modules/bootstrap/scss/mixins/_alert.scss
new file mode 100644
index 0000000000..db5a7eb454
--- /dev/null
+++ b/_sass/node_modules/bootstrap/scss/mixins/_alert.scss
@@ -0,0 +1,13 @@
+@mixin alert-variant($background, $border, $color) {
+ color: $color;
+ @include gradient-bg($background);
+ border-color: $border;
+
+ hr {
+ border-top-color: darken($border, 5%);
+ }
+
+ .alert-link {
+ color: darken($color, 10%);
+ }
+}
diff --git a/_sass/node_modules/bootstrap/scss/mixins/_background-variant.scss b/_sass/node_modules/bootstrap/scss/mixins/_background-variant.scss
new file mode 100644
index 0000000000..80580189ad
--- /dev/null
+++ b/_sass/node_modules/bootstrap/scss/mixins/_background-variant.scss
@@ -0,0 +1,23 @@
+// stylelint-disable declaration-no-important
+
+// Contextual backgrounds
+
+@mixin bg-variant($parent, $color, $ignore-warning: false) {
+ #{$parent} {
+ background-color: $color !important;
+ }
+ a#{$parent},
+ button#{$parent} {
+ @include hover-focus() {
+ background-color: darken($color, 10%) !important;
+ }
+ }
+ @include deprecate("The `bg-variant` mixin", "v4.4.0", "v5", $ignore-warning);
+}
+
+@mixin bg-gradient-variant($parent, $color, $ignore-warning: false) {
+ #{$parent} {
+ background: $color linear-gradient(180deg, mix($body-bg, $color, 15%), $color) repeat-x !important;
+ }
+ @include deprecate("The `bg-gradient-variant` mixin", "v4.5.0", "v5", $ignore-warning);
+}
diff --git a/_sass/node_modules/bootstrap/scss/mixins/_badge.scss b/_sass/node_modules/bootstrap/scss/mixins/_badge.scss
new file mode 100644
index 0000000000..f1c499141a
--- /dev/null
+++ b/_sass/node_modules/bootstrap/scss/mixins/_badge.scss
@@ -0,0 +1,17 @@
+@mixin badge-variant($bg) {
+ color: color-yiq($bg);
+ background-color: $bg;
+
+ @at-root a#{&} {
+ @include hover-focus() {
+ color: color-yiq($bg);
+ background-color: darken($bg, 10%);
+ }
+
+ &:focus,
+ &.focus {
+ outline: 0;
+ box-shadow: 0 0 0 $badge-focus-width rgba($bg, .5);
+ }
+ }
+}
diff --git a/_sass/node_modules/bootstrap/scss/mixins/_border-radius.scss b/_sass/node_modules/bootstrap/scss/mixins/_border-radius.scss
new file mode 100644
index 0000000000..4fad91d676
--- /dev/null
+++ b/_sass/node_modules/bootstrap/scss/mixins/_border-radius.scss
@@ -0,0 +1,76 @@
+// stylelint-disable property-disallowed-list
+// Single side border-radius
+
+// Helper function to replace negative values with 0
+@function valid-radius($radius) {
+ $return: ();
+ @each $value in $radius {
+ @if type-of($value) == number {
+ $return: append($return, max($value, 0));
+ } @else {
+ $return: append($return, $value);
+ }
+ }
+ @return $return;
+}
+
+@mixin border-radius($radius: $border-radius, $fallback-border-radius: false) {
+ @if $enable-rounded {
+ border-radius: valid-radius($radius);
+ }
+ @else if $fallback-border-radius != false {
+ border-radius: $fallback-border-radius;
+ }
+}
+
+@mixin border-top-radius($radius) {
+ @if $enable-rounded {
+ border-top-left-radius: valid-radius($radius);
+ border-top-right-radius: valid-radius($radius);
+ }
+}
+
+@mixin border-right-radius($radius) {
+ @if $enable-rounded {
+ border-top-right-radius: valid-radius($radius);
+ border-bottom-right-radius: valid-radius($radius);
+ }
+}
+
+@mixin border-bottom-radius($radius) {
+ @if $enable-rounded {
+ border-bottom-right-radius: valid-radius($radius);
+ border-bottom-left-radius: valid-radius($radius);
+ }
+}
+
+@mixin border-left-radius($radius) {
+ @if $enable-rounded {
+ border-top-left-radius: valid-radius($radius);
+ border-bottom-left-radius: valid-radius($radius);
+ }
+}
+
+@mixin border-top-left-radius($radius) {
+ @if $enable-rounded {
+ border-top-left-radius: valid-radius($radius);
+ }
+}
+
+@mixin border-top-right-radius($radius) {
+ @if $enable-rounded {
+ border-top-right-radius: valid-radius($radius);
+ }
+}
+
+@mixin border-bottom-right-radius($radius) {
+ @if $enable-rounded {
+ border-bottom-right-radius: valid-radius($radius);
+ }
+}
+
+@mixin border-bottom-left-radius($radius) {
+ @if $enable-rounded {
+ border-bottom-left-radius: valid-radius($radius);
+ }
+}
diff --git a/_sass/node_modules/bootstrap/scss/mixins/_box-shadow.scss b/_sass/node_modules/bootstrap/scss/mixins/_box-shadow.scss
new file mode 100644
index 0000000000..0726d4359a
--- /dev/null
+++ b/_sass/node_modules/bootstrap/scss/mixins/_box-shadow.scss
@@ -0,0 +1,20 @@
+@mixin box-shadow($shadow...) {
+ @if $enable-shadows {
+ $result: ();
+
+ @if (length($shadow) == 1) {
+ // We can pass `@include box-shadow(none);`
+ $result: $shadow;
+ } @else {
+ // Filter to avoid invalid properties for example `box-shadow: none, 1px 1px black;`
+ @for $i from 1 through length($shadow) {
+ @if nth($shadow, $i) != "none" {
+ $result: append($result, nth($shadow, $i), "comma");
+ }
+ }
+ }
+ @if (length($result) > 0) {
+ box-shadow: $result;
+ }
+ }
+}
diff --git a/_sass/node_modules/bootstrap/scss/mixins/_breakpoints.scss b/_sass/node_modules/bootstrap/scss/mixins/_breakpoints.scss
new file mode 100644
index 0000000000..23a5de96be
--- /dev/null
+++ b/_sass/node_modules/bootstrap/scss/mixins/_breakpoints.scss
@@ -0,0 +1,123 @@
+// Breakpoint viewport sizes and media queries.
+//
+// Breakpoints are defined as a map of (name: minimum width), order from small to large:
+//
+// (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px)
+//
+// The map defined in the `$grid-breakpoints` global variable is used as the `$breakpoints` argument by default.
+
+// Name of the next breakpoint, or null for the last breakpoint.
+//
+// >> breakpoint-next(sm)
+// md
+// >> breakpoint-next(sm, (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px))
+// md
+// >> breakpoint-next(sm, $breakpoint-names: (xs sm md lg xl))
+// md
+@function breakpoint-next($name, $breakpoints: $grid-breakpoints, $breakpoint-names: map-keys($breakpoints)) {
+ $n: index($breakpoint-names, $name);
+ @return if($n != null and $n < length($breakpoint-names), nth($breakpoint-names, $n + 1), null);
+}
+
+// Minimum breakpoint width. Null for the smallest (first) breakpoint.
+//
+// >> breakpoint-min(sm, (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px))
+// 576px
+@function breakpoint-min($name, $breakpoints: $grid-breakpoints) {
+ $min: map-get($breakpoints, $name);
+ @return if($min != 0, $min, null);
+}
+
+// Maximum breakpoint width. Null for the largest (last) breakpoint.
+// The maximum value is calculated as the minimum of the next one less 0.02px
+// to work around the limitations of `min-` and `max-` prefixes and viewports with fractional widths.
+// See https://www.w3.org/TR/mediaqueries-4/#mq-min-max
+// Uses 0.02px rather than 0.01px to work around a current rounding bug in Safari.
+// See https://bugs.webkit.org/show_bug.cgi?id=178261
+//
+// >> breakpoint-max(sm, (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px))
+// 767.98px
+@function breakpoint-max($name, $breakpoints: $grid-breakpoints) {
+ $next: breakpoint-next($name, $breakpoints);
+ @return if($next, breakpoint-min($next, $breakpoints) - .02, null);
+}
+
+// Returns a blank string if smallest breakpoint, otherwise returns the name with a dash in front.
+// Useful for making responsive utilities.
+//
+// >> breakpoint-infix(xs, (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px))
+// "" (Returns a blank string)
+// >> breakpoint-infix(sm, (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px))
+// "-sm"
+@function breakpoint-infix($name, $breakpoints: $grid-breakpoints) {
+ @return if(breakpoint-min($name, $breakpoints) == null, "", "-#{$name}");
+}
+
+// Media of at least the minimum breakpoint width. No query for the smallest breakpoint.
+// Makes the @content apply to the given breakpoint and wider.
+@mixin media-breakpoint-up($name, $breakpoints: $grid-breakpoints) {
+ $min: breakpoint-min($name, $breakpoints);
+ @if $min {
+ @media (min-width: $min) {
+ @content;
+ }
+ } @else {
+ @content;
+ }
+}
+
+// Media of at most the maximum breakpoint width. No query for the largest breakpoint.
+// Makes the @content apply to the given breakpoint and narrower.
+@mixin media-breakpoint-down($name, $breakpoints: $grid-breakpoints) {
+ $max: breakpoint-max($name, $breakpoints);
+ @if $max {
+ @media (max-width: $max) {
+ @content;
+ }
+ } @else {
+ @content;
+ }
+}
+
+// Media that spans multiple breakpoint widths.
+// Makes the @content apply between the min and max breakpoints
+@mixin media-breakpoint-between($lower, $upper, $breakpoints: $grid-breakpoints) {
+ $min: breakpoint-min($lower, $breakpoints);
+ $max: breakpoint-max($upper, $breakpoints);
+
+ @if $min != null and $max != null {
+ @media (min-width: $min) and (max-width: $max) {
+ @content;
+ }
+ } @else if $max == null {
+ @include media-breakpoint-up($lower, $breakpoints) {
+ @content;
+ }
+ } @else if $min == null {
+ @include media-breakpoint-down($upper, $breakpoints) {
+ @content;
+ }
+ }
+}
+
+// Media between the breakpoint's minimum and maximum widths.
+// No minimum for the smallest breakpoint, and no maximum for the largest one.
+// Makes the @content apply only to the given breakpoint, not viewports any wider or narrower.
+@mixin media-breakpoint-only($name, $breakpoints: $grid-breakpoints) {
+ $min: breakpoint-min($name, $breakpoints);
+ $max: breakpoint-max($name, $breakpoints);
+
+ @if $min != null and $max != null {
+ @media (min-width: $min) and (max-width: $max) {
+ @content;
+ }
+ } @else if $max == null {
+ @include media-breakpoint-up($name, $breakpoints) {
+ @content;
+ }
+ } @else if $min == null {
+ @include media-breakpoint-down($name, $breakpoints) {
+ @content;
+ }
+ }
+}
diff --git a/_sass/node_modules/bootstrap/scss/mixins/_buttons.scss b/_sass/node_modules/bootstrap/scss/mixins/_buttons.scss
new file mode 100644
index 0000000000..d6235aa27c
--- /dev/null
+++ b/_sass/node_modules/bootstrap/scss/mixins/_buttons.scss
@@ -0,0 +1,110 @@
+// Button variants
+//
+// Easily pump out default styles, as well as :hover, :focus, :active,
+// and disabled options for all buttons
+
+@mixin button-variant($background, $border, $hover-background: darken($background, 7.5%), $hover-border: darken($border, 10%), $active-background: darken($background, 10%), $active-border: darken($border, 12.5%)) {
+ color: color-yiq($background);
+ @include gradient-bg($background);
+ border-color: $border;
+ @include box-shadow($btn-box-shadow);
+
+ @include hover() {
+ color: color-yiq($hover-background);
+ @include gradient-bg($hover-background);
+ border-color: $hover-border;
+ }
+
+ &:focus,
+ &.focus {
+ color: color-yiq($hover-background);
+ @include gradient-bg($hover-background);
+ border-color: $hover-border;
+ @if $enable-shadows {
+ @include box-shadow($btn-box-shadow, 0 0 0 $btn-focus-width rgba(mix(color-yiq($background), $border, 15%), .5));
+ } @else {
+ // Avoid using mixin so we can pass custom focus shadow properly
+ box-shadow: 0 0 0 $btn-focus-width rgba(mix(color-yiq($background), $border, 15%), .5);
+ }
+ }
+
+ // Disabled comes first so active can properly restyle
+ &.disabled,
+ &:disabled {
+ color: color-yiq($background);
+ background-color: $background;
+ border-color: $border;
+ // Remove CSS gradients if they're enabled
+ @if $enable-gradients {
+ background-image: none;
+ }
+ }
+
+ &:not(:disabled):not(.disabled):active,
+ &:not(:disabled):not(.disabled).active,
+ .show > &.dropdown-toggle {
+ color: color-yiq($active-background);
+ background-color: $active-background;
+ @if $enable-gradients {
+ background-image: none; // Remove the gradient for the pressed/active state
+ }
+ border-color: $active-border;
+
+ &:focus {
+ @if $enable-shadows and $btn-active-box-shadow != none {
+ @include box-shadow($btn-active-box-shadow, 0 0 0 $btn-focus-width rgba(mix(color-yiq($background), $border, 15%), .5));
+ } @else {
+ // Avoid using mixin so we can pass custom focus shadow properly
+ box-shadow: 0 0 0 $btn-focus-width rgba(mix(color-yiq($background), $border, 15%), .5);
+ }
+ }
+ }
+}
+
+@mixin button-outline-variant($color, $color-hover: color-yiq($color), $active-background: $color, $active-border: $color) {
+ color: $color;
+ border-color: $color;
+
+ @include hover() {
+ color: $color-hover;
+ background-color: $active-background;
+ border-color: $active-border;
+ }
+
+ &:focus,
+ &.focus {
+ box-shadow: 0 0 0 $btn-focus-width rgba($color, .5);
+ }
+
+ &.disabled,
+ &:disabled {
+ color: $color;
+ background-color: transparent;
+ }
+
+ &:not(:disabled):not(.disabled):active,
+ &:not(:disabled):not(.disabled).active,
+ .show > &.dropdown-toggle {
+ color: color-yiq($active-background);
+ background-color: $active-background;
+ border-color: $active-border;
+
+ &:focus {
+ @if $enable-shadows and $btn-active-box-shadow != none {
+ @include box-shadow($btn-active-box-shadow, 0 0 0 $btn-focus-width rgba($color, .5));
+ } @else {
+ // Avoid using mixin so we can pass custom focus shadow properly
+ box-shadow: 0 0 0 $btn-focus-width rgba($color, .5);
+ }
+ }
+ }
+}
+
+// Button sizes
+@mixin button-size($padding-y, $padding-x, $font-size, $line-height, $border-radius) {
+ padding: $padding-y $padding-x;
+ @include font-size($font-size);
+ line-height: $line-height;
+ // Manually declare to provide an override to the browser default
+ @include border-radius($border-radius, 0);
+}
diff --git a/_sass/node_modules/bootstrap/scss/mixins/_caret.scss b/_sass/node_modules/bootstrap/scss/mixins/_caret.scss
new file mode 100644
index 0000000000..27466495b2
--- /dev/null
+++ b/_sass/node_modules/bootstrap/scss/mixins/_caret.scss
@@ -0,0 +1,62 @@
+@mixin caret-down() {
+ border-top: $caret-width solid;
+ border-right: $caret-width solid transparent;
+ border-bottom: 0;
+ border-left: $caret-width solid transparent;
+}
+
+@mixin caret-up() {
+ border-top: 0;
+ border-right: $caret-width solid transparent;
+ border-bottom: $caret-width solid;
+ border-left: $caret-width solid transparent;
+}
+
+@mixin caret-right() {
+ border-top: $caret-width solid transparent;
+ border-right: 0;
+ border-bottom: $caret-width solid transparent;
+ border-left: $caret-width solid;
+}
+
+@mixin caret-left() {
+ border-top: $caret-width solid transparent;
+ border-right: $caret-width solid;
+ border-bottom: $caret-width solid transparent;
+}
+
+@mixin caret($direction: down) {
+ @if $enable-caret {
+ &::after {
+ display: inline-block;
+ margin-left: $caret-spacing;
+ vertical-align: $caret-vertical-align;
+ content: "";
+ @if $direction == down {
+ @include caret-down();
+ } @else if $direction == up {
+ @include caret-up();
+ } @else if $direction == right {
+ @include caret-right();
+ }
+ }
+
+ @if $direction == left {
+ &::after {
+ display: none;
+ }
+
+ &::before {
+ display: inline-block;
+ margin-right: $caret-spacing;
+ vertical-align: $caret-vertical-align;
+ content: "";
+ @include caret-left();
+ }
+ }
+
+ &:empty::after {
+ margin-left: 0;
+ }
+ }
+}
diff --git a/_sass/node_modules/bootstrap/scss/mixins/_clearfix.scss b/_sass/node_modules/bootstrap/scss/mixins/_clearfix.scss
new file mode 100644
index 0000000000..11a977b737
--- /dev/null
+++ b/_sass/node_modules/bootstrap/scss/mixins/_clearfix.scss
@@ -0,0 +1,7 @@
+@mixin clearfix() {
+ &::after {
+ display: block;
+ clear: both;
+ content: "";
+ }
+}
diff --git a/_sass/node_modules/bootstrap/scss/mixins/_deprecate.scss b/_sass/node_modules/bootstrap/scss/mixins/_deprecate.scss
new file mode 100644
index 0000000000..df070bc596
--- /dev/null
+++ b/_sass/node_modules/bootstrap/scss/mixins/_deprecate.scss
@@ -0,0 +1,10 @@
+// Deprecate mixin
+//
+// This mixin can be used to deprecate mixins or functions.
+// `$enable-deprecation-messages` is a global variable, `$ignore-warning` is a variable that can be passed to
+// some deprecated mixins to suppress the warning (for example if the mixin is still be used in the current version of Bootstrap)
+@mixin deprecate($name, $deprecate-version, $remove-version, $ignore-warning: false) {
+ @if ($enable-deprecation-messages != false and $ignore-warning != true) {
+ @warn "#{$name} has been deprecated as of #{$deprecate-version}. It will be removed entirely in #{$remove-version}.";
+ }
+}
diff --git a/_sass/node_modules/bootstrap/scss/mixins/_float.scss b/_sass/node_modules/bootstrap/scss/mixins/_float.scss
new file mode 100644
index 0000000000..6b376a2580
--- /dev/null
+++ b/_sass/node_modules/bootstrap/scss/mixins/_float.scss
@@ -0,0 +1,14 @@
+// stylelint-disable declaration-no-important
+
+@mixin float-left() {
+ float: left !important;
+ @include deprecate("The `float-left` mixin", "v4.3.0", "v5");
+}
+@mixin float-right() {
+ float: right !important;
+ @include deprecate("The `float-right` mixin", "v4.3.0", "v5");
+}
+@mixin float-none() {
+ float: none !important;
+ @include deprecate("The `float-none` mixin", "v4.3.0", "v5");
+}
diff --git a/_sass/node_modules/bootstrap/scss/mixins/_forms.scss b/_sass/node_modules/bootstrap/scss/mixins/_forms.scss
new file mode 100644
index 0000000000..b8847cc80d
--- /dev/null
+++ b/_sass/node_modules/bootstrap/scss/mixins/_forms.scss
@@ -0,0 +1,195 @@
+// Form control focus state
+//
+// Generate a customized focus state and for any input with the specified color,
+// which defaults to the `$input-focus-border-color` variable.
+//
+// We highly encourage you to not customize the default value, but instead use
+// this to tweak colors on an as-needed basis. This aesthetic change is based on
+// WebKit's default styles, but applicable to a wider range of browsers. Its
+// usability and accessibility should be taken into account with any change.
+//
+// Example usage: change the default blue border and shadow to white for better
+// contrast against a dark gray background.
+@mixin form-control-focus($ignore-warning: false) {
+ &:focus {
+ color: $input-focus-color;
+ background-color: $input-focus-bg;
+ border-color: $input-focus-border-color;
+ outline: 0;
+ @if $enable-shadows {
+ @include box-shadow($input-box-shadow, $input-focus-box-shadow);
+ } @else {
+ // Avoid using mixin so we can pass custom focus shadow properly
+ box-shadow: $input-focus-box-shadow;
+ }
+ }
+ @include deprecate("The `form-control-focus()` mixin", "v4.4.0", "v5", $ignore-warning);
+}
+
+// This mixin uses an `if()` technique to be compatible with Dart Sass
+// See https://github.com/sass/sass/issues/1873#issuecomment-152293725 for more details
+@mixin form-validation-state-selector($state) {
+ @if ($state == "valid" or $state == "invalid") {
+ .was-validated #{if(&, "&", "")}:#{$state},
+ #{if(&, "&", "")}.is-#{$state} {
+ @content;
+ }
+ } @else {
+ #{if(&, "&", "")}.is-#{$state} {
+ @content;
+ }
+ }
+}
+
+@mixin form-validation-state($state, $color, $icon) {
+ .#{$state}-feedback {
+ display: none;
+ width: 100%;
+ margin-top: $form-feedback-margin-top;
+ @include font-size($form-feedback-font-size);
+ color: $color;
+ }
+
+ .#{$state}-tooltip {
+ position: absolute;
+ top: 100%;
+ left: 0;
+ z-index: 5;
+ display: none;
+ max-width: 100%; // Contain to parent when possible
+ padding: $form-feedback-tooltip-padding-y $form-feedback-tooltip-padding-x;
+ margin-top: .1rem;
+ @include font-size($form-feedback-tooltip-font-size);
+ line-height: $form-feedback-tooltip-line-height;
+ color: color-yiq($color);
+ background-color: rgba($color, $form-feedback-tooltip-opacity);
+ @include border-radius($form-feedback-tooltip-border-radius);
+
+ // See https://github.com/twbs/bootstrap/pull/31557
+ // Align tooltip to form elements
+ .form-row > .col > &,
+ .form-row > [class*="col-"] > & {
+ left: $form-grid-gutter-width * .5;
+ }
+ }
+
+ @include form-validation-state-selector($state) {
+ ~ .#{$state}-feedback,
+ ~ .#{$state}-tooltip {
+ display: block;
+ }
+ }
+
+ .form-control {
+ @include form-validation-state-selector($state) {
+ border-color: $color;
+
+ @if $enable-validation-icons {
+ padding-right: $input-height-inner !important; // stylelint-disable-line declaration-no-important
+ background-image: escape-svg($icon);
+ background-repeat: no-repeat;
+ background-position: right $input-height-inner-quarter center;
+ background-size: $input-height-inner-half $input-height-inner-half;
+ }
+
+ &:focus {
+ border-color: $color;
+ box-shadow: 0 0 0 $input-focus-width rgba($color, .25);
+ }
+ }
+ }
+
+ // stylelint-disable-next-line selector-no-qualifying-type
+ select.form-control {
+ @include form-validation-state-selector($state) {
+ @if $enable-validation-icons {
+ padding-right: $input-padding-x * 4 !important; // stylelint-disable-line declaration-no-important
+ background-position: right $input-padding-x * 2 center;
+ }
+ }
+ }
+
+ // stylelint-disable-next-line selector-no-qualifying-type
+ textarea.form-control {
+ @include form-validation-state-selector($state) {
+ @if $enable-validation-icons {
+ padding-right: $input-height-inner;
+ background-position: top $input-height-inner-quarter right $input-height-inner-quarter;
+ }
+ }
+ }
+
+ .custom-select {
+ @include form-validation-state-selector($state) {
+ border-color: $color;
+
+ @if $enable-validation-icons {
+ padding-right: $custom-select-feedback-icon-padding-right !important; // stylelint-disable-line declaration-no-important
+ background: $custom-select-background, $custom-select-bg escape-svg($icon) $custom-select-feedback-icon-position / $custom-select-feedback-icon-size no-repeat;
+ }
+
+ &:focus {
+ border-color: $color;
+ box-shadow: 0 0 0 $input-focus-width rgba($color, .25);
+ }
+ }
+ }
+
+ .form-check-input {
+ @include form-validation-state-selector($state) {
+ ~ .form-check-label {
+ color: $color;
+ }
+
+ ~ .#{$state}-feedback,
+ ~ .#{$state}-tooltip {
+ display: block;
+ }
+ }
+ }
+
+ .custom-control-input {
+ @include form-validation-state-selector($state) {
+ ~ .custom-control-label {
+ color: $color;
+
+ &::before {
+ border-color: $color;
+ }
+ }
+
+ &:checked {
+ ~ .custom-control-label::before {
+ border-color: lighten($color, 10%);
+ @include gradient-bg(lighten($color, 10%));
+ }
+ }
+
+ &:focus {
+ ~ .custom-control-label::before {
+ box-shadow: 0 0 0 $input-focus-width rgba($color, .25);
+ }
+
+ &:not(:checked) ~ .custom-control-label::before {
+ border-color: $color;
+ }
+ }
+ }
+ }
+
+ // custom file
+ .custom-file-input {
+ @include form-validation-state-selector($state) {
+ ~ .custom-file-label {
+ border-color: $color;
+ }
+
+ &:focus {
+ ~ .custom-file-label {
+ border-color: $color;
+ box-shadow: 0 0 0 $input-focus-width rgba($color, .25);
+ }
+ }
+ }
+ }
+}
diff --git a/_sass/node_modules/bootstrap/scss/mixins/_gradients.scss b/_sass/node_modules/bootstrap/scss/mixins/_gradients.scss
new file mode 100644
index 0000000000..88c4d64b7f
--- /dev/null
+++ b/_sass/node_modules/bootstrap/scss/mixins/_gradients.scss
@@ -0,0 +1,45 @@
+// Gradients
+
+@mixin gradient-bg($color) {
+ @if $enable-gradients {
+ background: $color linear-gradient(180deg, mix($body-bg, $color, 15%), $color) repeat-x;
+ } @else {
+ background-color: $color;
+ }
+}
+
+// Horizontal gradient, from left to right
+//
+// Creates two color stops, start and end, by specifying a color and position for each color stop.
+@mixin gradient-x($start-color: $gray-700, $end-color: $gray-800, $start-percent: 0%, $end-percent: 100%) {
+ background-image: linear-gradient(to right, $start-color $start-percent, $end-color $end-percent);
+ background-repeat: repeat-x;
+}
+
+// Vertical gradient, from top to bottom
+//
+// Creates two color stops, start and end, by specifying a color and position for each color stop.
+@mixin gradient-y($start-color: $gray-700, $end-color: $gray-800, $start-percent: 0%, $end-percent: 100%) {
+ background-image: linear-gradient(to bottom, $start-color $start-percent, $end-color $end-percent);
+ background-repeat: repeat-x;
+}
+
+@mixin gradient-directional($start-color: $gray-700, $end-color: $gray-800, $deg: 45deg) {
+ background-image: linear-gradient($deg, $start-color, $end-color);
+ background-repeat: repeat-x;
+}
+@mixin gradient-x-three-colors($start-color: $blue, $mid-color: $purple, $color-stop: 50%, $end-color: $red) {
+ background-image: linear-gradient(to right, $start-color, $mid-color $color-stop, $end-color);
+ background-repeat: no-repeat;
+}
+@mixin gradient-y-three-colors($start-color: $blue, $mid-color: $purple, $color-stop: 50%, $end-color: $red) {
+ background-image: linear-gradient($start-color, $mid-color $color-stop, $end-color);
+ background-repeat: no-repeat;
+}
+@mixin gradient-radial($inner-color: $gray-700, $outer-color: $gray-800) {
+ background-image: radial-gradient(circle, $inner-color, $outer-color);
+ background-repeat: no-repeat;
+}
+@mixin gradient-striped($color: rgba($white, .15), $angle: 45deg) {
+ background-image: linear-gradient($angle, $color 25%, transparent 25%, transparent 50%, $color 50%, $color 75%, transparent 75%, transparent);
+}
diff --git a/_sass/node_modules/bootstrap/scss/mixins/_grid-framework.scss b/_sass/node_modules/bootstrap/scss/mixins/_grid-framework.scss
new file mode 100644
index 0000000000..ef32917530
--- /dev/null
+++ b/_sass/node_modules/bootstrap/scss/mixins/_grid-framework.scss
@@ -0,0 +1,80 @@
+// Framework grid generation
+//
+// Used only by Bootstrap to generate the correct number of grid classes given
+// any value of `$grid-columns`.
+
+@mixin make-grid-columns($columns: $grid-columns, $gutter: $grid-gutter-width, $breakpoints: $grid-breakpoints) {
+ // Common properties for all breakpoints
+ %grid-column {
+ position: relative;
+ width: 100%;
+ padding-right: $gutter * .5;
+ padding-left: $gutter * .5;
+ }
+
+ @each $breakpoint in map-keys($breakpoints) {
+ $infix: breakpoint-infix($breakpoint, $breakpoints);
+
+ @if $columns > 0 {
+ // Allow columns to stretch full width below their breakpoints
+ @for $i from 1 through $columns {
+ .col#{$infix}-#{$i} {
+ @extend %grid-column;
+ }
+ }
+ }
+
+ .col#{$infix},
+ .col#{$infix}-auto {
+ @extend %grid-column;
+ }
+
+ @include media-breakpoint-up($breakpoint, $breakpoints) {
+ // Provide basic `.col-{bp}` classes for equal-width flexbox columns
+ .col#{$infix} {
+ flex-basis: 0;
+ flex-grow: 1;
+ max-width: 100%;
+ }
+
+ @if $grid-row-columns > 0 {
+ @for $i from 1 through $grid-row-columns {
+ .row-cols#{$infix}-#{$i} {
+ @include row-cols($i);
+ }
+ }
+ }
+
+ .col#{$infix}-auto {
+ @include make-col-auto();
+ }
+
+ @if $columns > 0 {
+ @for $i from 1 through $columns {
+ .col#{$infix}-#{$i} {
+ @include make-col($i, $columns);
+ }
+ }
+ }
+
+ .order#{$infix}-first { order: -1; }
+
+ .order#{$infix}-last { order: $columns + 1; }
+
+ @for $i from 0 through $columns {
+ .order#{$infix}-#{$i} { order: $i; }
+ }
+
+ @if $columns > 0 {
+ // `$columns - 1` because offsetting by the width of an entire row isn't possible
+ @for $i from 0 through ($columns - 1) {
+ @if not ($infix == "" and $i == 0) { // Avoid emitting useless .offset-0
+ .offset#{$infix}-#{$i} {
+ @include make-col-offset($i, $columns);
+ }
+ }
+ }
+ }
+ }
+ }
+}
diff --git a/_sass/node_modules/bootstrap/scss/mixins/_grid.scss b/_sass/node_modules/bootstrap/scss/mixins/_grid.scss
new file mode 100644
index 0000000000..0eb09910d1
--- /dev/null
+++ b/_sass/node_modules/bootstrap/scss/mixins/_grid.scss
@@ -0,0 +1,69 @@
+/// Grid system
+//
+// Generate semantic grid columns with these mixins.
+
+@mixin make-container($gutter: $grid-gutter-width) {
+ width: 100%;
+ padding-right: $gutter * .5;
+ padding-left: $gutter * .5;
+ margin-right: auto;
+ margin-left: auto;
+}
+
+@mixin make-row($gutter: $grid-gutter-width) {
+ display: flex;
+ flex-wrap: wrap;
+ margin-right: -$gutter * .5;
+ margin-left: -$gutter * .5;
+}
+
+// For each breakpoint, define the maximum width of the container in a media query
+@mixin make-container-max-widths($max-widths: $container-max-widths, $breakpoints: $grid-breakpoints) {
+ @each $breakpoint, $container-max-width in $max-widths {
+ @include media-breakpoint-up($breakpoint, $breakpoints) {
+ max-width: $container-max-width;
+ }
+ }
+ @include deprecate("The `make-container-max-widths` mixin", "v4.5.2", "v5");
+}
+
+@mixin make-col-ready($gutter: $grid-gutter-width) {
+ position: relative;
+ // Prevent columns from becoming too narrow when at smaller grid tiers by
+ // always setting `width: 100%;`. This works because we use `flex` values
+ // later on to override this initial width.
+ width: 100%;
+ padding-right: $gutter * .5;
+ padding-left: $gutter * .5;
+}
+
+@mixin make-col($size, $columns: $grid-columns) {
+ flex: 0 0 percentage(divide($size, $columns));
+ // Add a `max-width` to ensure content within each column does not blow out
+ // the width of the column. Applies to IE10+ and Firefox. Chrome and Safari
+ // do not appear to require this.
+ max-width: percentage(divide($size, $columns));
+}
+
+@mixin make-col-auto() {
+ flex: 0 0 auto;
+ width: auto;
+ max-width: 100%; // Reset earlier grid tiers
+}
+
+@mixin make-col-offset($size, $columns: $grid-columns) {
+ $num: divide($size, $columns);
+ margin-left: if($num == 0, 0, percentage($num));
+}
+
+// Row columns
+//
+// Specify on a parent element(e.g., .row) to force immediate children into NN
+// numberof columns. Supports wrapping to new lines, but does not do a Masonry
+// style grid.
+@mixin row-cols($count) {
+ > * {
+ flex: 0 0 divide(100%, $count);
+ max-width: divide(100%, $count);
+ }
+}
diff --git a/_sass/node_modules/bootstrap/scss/mixins/_hover.scss b/_sass/node_modules/bootstrap/scss/mixins/_hover.scss
new file mode 100644
index 0000000000..409f8244e1
--- /dev/null
+++ b/_sass/node_modules/bootstrap/scss/mixins/_hover.scss
@@ -0,0 +1,37 @@
+// Hover mixin and `$enable-hover-media-query` are deprecated.
+//
+// Originally added during our alphas and maintained during betas, this mixin was
+// designed to prevent `:hover` stickiness on iOS-an issue where hover styles
+// would persist after initial touch.
+//
+// For backward compatibility, we've kept these mixins and updated them to
+// always return their regular pseudo-classes instead of a shimmed media query.
+//
+// Issue: https://github.com/twbs/bootstrap/issues/25195
+
+@mixin hover() {
+ &:hover { @content; }
+}
+
+@mixin hover-focus() {
+ &:hover,
+ &:focus {
+ @content;
+ }
+}
+
+@mixin plain-hover-focus() {
+ &,
+ &:hover,
+ &:focus {
+ @content;
+ }
+}
+
+@mixin hover-focus-active() {
+ &:hover,
+ &:focus,
+ &:active {
+ @content;
+ }
+}
diff --git a/_sass/node_modules/bootstrap/scss/mixins/_image.scss b/_sass/node_modules/bootstrap/scss/mixins/_image.scss
new file mode 100644
index 0000000000..3aaa0d7046
--- /dev/null
+++ b/_sass/node_modules/bootstrap/scss/mixins/_image.scss
@@ -0,0 +1,36 @@
+// Image Mixins
+// - Responsive image
+// - Retina image
+
+
+// Responsive image
+//
+// Keep images from scaling beyond the width of their parents.
+
+@mixin img-fluid() {
+ // Part 1: Set a maximum relative to the parent
+ max-width: 100%;
+ // Part 2: Override the height to auto, otherwise images will be stretched
+ // when setting a width and height attribute on the img element.
+ height: auto;
+}
+
+
+// Retina image
+//
+// Short retina mixin for setting background-image and -size.
+
+@mixin img-retina($file-1x, $file-2x, $width-1x, $height-1x) {
+ background-image: url($file-1x);
+
+ // Autoprefixer takes care of adding -webkit-min-device-pixel-ratio and -o-min-device-pixel-ratio,
+ // but doesn't convert dppx=>dpi.
+ // There's no such thing as unprefixed min-device-pixel-ratio since it's nonstandard.
+ // Compatibility info: https://caniuse.com/css-media-resolution
+ @media only screen and (min-resolution: 192dpi), // IE9-11 don't support dppx
+ only screen and (min-resolution: 2dppx) { // Standardized
+ background-image: url($file-2x);
+ background-size: $width-1x $height-1x;
+ }
+ @include deprecate("`img-retina()`", "v4.3.0", "v5");
+}
diff --git a/_sass/node_modules/bootstrap/scss/mixins/_list-group.scss b/_sass/node_modules/bootstrap/scss/mixins/_list-group.scss
new file mode 100644
index 0000000000..0da3531561
--- /dev/null
+++ b/_sass/node_modules/bootstrap/scss/mixins/_list-group.scss
@@ -0,0 +1,21 @@
+// List Groups
+
+@mixin list-group-item-variant($state, $background, $color) {
+ .list-group-item-#{$state} {
+ color: $color;
+ background-color: $background;
+
+ &.list-group-item-action {
+ @include hover-focus() {
+ color: $color;
+ background-color: darken($background, 5%);
+ }
+
+ &.active {
+ color: $white;
+ background-color: $color;
+ border-color: $color;
+ }
+ }
+ }
+}
diff --git a/_sass/node_modules/bootstrap/scss/mixins/_lists.scss b/_sass/node_modules/bootstrap/scss/mixins/_lists.scss
new file mode 100644
index 0000000000..251cb07331
--- /dev/null
+++ b/_sass/node_modules/bootstrap/scss/mixins/_lists.scss
@@ -0,0 +1,7 @@
+// Lists
+
+// Unstyled keeps list items block level, just removes default browser padding and list-style
+@mixin list-unstyled() {
+ padding-left: 0;
+ list-style: none;
+}
diff --git a/_sass/node_modules/bootstrap/scss/mixins/_nav-divider.scss b/_sass/node_modules/bootstrap/scss/mixins/_nav-divider.scss
new file mode 100644
index 0000000000..3e0cceafef
--- /dev/null
+++ b/_sass/node_modules/bootstrap/scss/mixins/_nav-divider.scss
@@ -0,0 +1,11 @@
+// Horizontal dividers
+//
+// Dividers (basically an hr) within dropdowns and nav lists
+
+@mixin nav-divider($color: $nav-divider-color, $margin-y: $nav-divider-margin-y, $ignore-warning: false) {
+ height: 0;
+ margin: $margin-y 0;
+ overflow: hidden;
+ border-top: 1px solid $color;
+ @include deprecate("The `nav-divider()` mixin", "v4.4.0", "v5", $ignore-warning);
+}
diff --git a/_sass/node_modules/bootstrap/scss/mixins/_pagination.scss b/_sass/node_modules/bootstrap/scss/mixins/_pagination.scss
new file mode 100644
index 0000000000..af8e16d6a9
--- /dev/null
+++ b/_sass/node_modules/bootstrap/scss/mixins/_pagination.scss
@@ -0,0 +1,22 @@
+// Pagination
+
+@mixin pagination-size($padding-y, $padding-x, $font-size, $line-height, $border-radius) {
+ .page-link {
+ padding: $padding-y $padding-x;
+ @include font-size($font-size);
+ line-height: $line-height;
+ }
+
+ .page-item {
+ &:first-child {
+ .page-link {
+ @include border-left-radius($border-radius);
+ }
+ }
+ &:last-child {
+ .page-link {
+ @include border-right-radius($border-radius);
+ }
+ }
+ }
+}
diff --git a/_sass/node_modules/bootstrap/scss/mixins/_reset-text.scss b/_sass/node_modules/bootstrap/scss/mixins/_reset-text.scss
new file mode 100644
index 0000000000..8682533076
--- /dev/null
+++ b/_sass/node_modules/bootstrap/scss/mixins/_reset-text.scss
@@ -0,0 +1,17 @@
+@mixin reset-text() {
+ font-family: $font-family-base;
+ // We deliberately do NOT reset font-size or word-wrap.
+ font-style: normal;
+ font-weight: $font-weight-normal;
+ line-height: $line-height-base;
+ text-align: left; // Fallback for where `start` is not supported
+ text-align: start;
+ text-decoration: none;
+ text-shadow: none;
+ text-transform: none;
+ letter-spacing: normal;
+ word-break: normal;
+ white-space: normal;
+ word-spacing: normal;
+ line-break: auto;
+}
diff --git a/_sass/node_modules/bootstrap/scss/mixins/_resize.scss b/_sass/node_modules/bootstrap/scss/mixins/_resize.scss
new file mode 100644
index 0000000000..66f233a63c
--- /dev/null
+++ b/_sass/node_modules/bootstrap/scss/mixins/_resize.scss
@@ -0,0 +1,6 @@
+// Resize anything
+
+@mixin resizable($direction) {
+ overflow: auto; // Per CSS3 UI, `resize` only applies when `overflow` isn't `visible`
+ resize: $direction; // Options: horizontal, vertical, both
+}
diff --git a/_sass/node_modules/bootstrap/scss/mixins/_screen-reader.scss b/_sass/node_modules/bootstrap/scss/mixins/_screen-reader.scss
new file mode 100644
index 0000000000..70b677e3f4
--- /dev/null
+++ b/_sass/node_modules/bootstrap/scss/mixins/_screen-reader.scss
@@ -0,0 +1,34 @@
+// Only display content to screen readers
+//
+// See: https://www.a11yproject.com/posts/2013-01-11-how-to-hide-content/
+// See: https://kittygiraudel.com/2016/10/13/css-hide-and-seek/
+
+@mixin sr-only() {
+ position: absolute;
+ width: 1px;
+ height: 1px;
+ padding: 0;
+ margin: -1px; // Fix for https://github.com/twbs/bootstrap/issues/25686
+ overflow: hidden;
+ clip: rect(0, 0, 0, 0);
+ white-space: nowrap;
+ border: 0;
+}
+
+// Use in conjunction with .sr-only to only display content when it's focused.
+//
+// Useful for "Skip to main content" links; see https://www.w3.org/TR/2013/NOTE-WCAG20-TECHS-20130905/G1
+//
+// Credit: HTML5 Boilerplate
+
+@mixin sr-only-focusable() {
+ &:active,
+ &:focus {
+ position: static;
+ width: auto;
+ height: auto;
+ overflow: visible;
+ clip: auto;
+ white-space: normal;
+ }
+}
diff --git a/_sass/node_modules/bootstrap/scss/mixins/_size.scss b/_sass/node_modules/bootstrap/scss/mixins/_size.scss
new file mode 100644
index 0000000000..69e056d2c1
--- /dev/null
+++ b/_sass/node_modules/bootstrap/scss/mixins/_size.scss
@@ -0,0 +1,7 @@
+// Sizing shortcuts
+
+@mixin size($width, $height: $width) {
+ width: $width;
+ height: $height;
+ @include deprecate("`size()`", "v4.3.0", "v5");
+}
diff --git a/_sass/node_modules/bootstrap/scss/mixins/_table-row.scss b/_sass/node_modules/bootstrap/scss/mixins/_table-row.scss
new file mode 100644
index 0000000000..1ccde6b6c5
--- /dev/null
+++ b/_sass/node_modules/bootstrap/scss/mixins/_table-row.scss
@@ -0,0 +1,39 @@
+// Tables
+
+@mixin table-row-variant($state, $background, $border: null) {
+ // Exact selectors below required to override `.table-striped` and prevent
+ // inheritance to nested tables.
+ .table-#{$state} {
+ &,
+ > th,
+ > td {
+ background-color: $background;
+ }
+
+ @if $border != null {
+ th,
+ td,
+ thead th,
+ tbody + tbody {
+ border-color: $border;
+ }
+ }
+ }
+
+ // Hover states for `.table-hover`
+ // Note: this is not available for cells or rows within `thead` or `tfoot`.
+ .table-hover {
+ $hover-background: darken($background, 5%);
+
+ .table-#{$state} {
+ @include hover() {
+ background-color: $hover-background;
+
+ > td,
+ > th {
+ background-color: $hover-background;
+ }
+ }
+ }
+ }
+}
diff --git a/_sass/node_modules/bootstrap/scss/mixins/_text-emphasis.scss b/_sass/node_modules/bootstrap/scss/mixins/_text-emphasis.scss
new file mode 100644
index 0000000000..5eb8a55154
--- /dev/null
+++ b/_sass/node_modules/bootstrap/scss/mixins/_text-emphasis.scss
@@ -0,0 +1,17 @@
+// stylelint-disable declaration-no-important
+
+// Typography
+
+@mixin text-emphasis-variant($parent, $color, $ignore-warning: false) {
+ #{$parent} {
+ color: $color !important;
+ }
+ @if $emphasized-link-hover-darken-percentage != 0 {
+ a#{$parent} {
+ @include hover-focus() {
+ color: darken($color, $emphasized-link-hover-darken-percentage) !important;
+ }
+ }
+ }
+ @include deprecate("`text-emphasis-variant()`", "v4.4.0", "v5", $ignore-warning);
+}
diff --git a/_sass/node_modules/bootstrap/scss/mixins/_text-hide.scss b/_sass/node_modules/bootstrap/scss/mixins/_text-hide.scss
new file mode 100644
index 0000000000..3a923011ec
--- /dev/null
+++ b/_sass/node_modules/bootstrap/scss/mixins/_text-hide.scss
@@ -0,0 +1,11 @@
+// CSS image replacement
+@mixin text-hide($ignore-warning: false) {
+ // stylelint-disable-next-line font-family-no-missing-generic-family-keyword
+ font: 0/0 a;
+ color: transparent;
+ text-shadow: none;
+ background-color: transparent;
+ border: 0;
+
+ @include deprecate("`text-hide()`", "v4.1.0", "v5", $ignore-warning);
+}
diff --git a/_sass/node_modules/bootstrap/scss/mixins/_text-truncate.scss b/_sass/node_modules/bootstrap/scss/mixins/_text-truncate.scss
new file mode 100644
index 0000000000..3504bb1aa5
--- /dev/null
+++ b/_sass/node_modules/bootstrap/scss/mixins/_text-truncate.scss
@@ -0,0 +1,8 @@
+// Text truncate
+// Requires inline-block or block for proper styling
+
+@mixin text-truncate() {
+ overflow: hidden;
+ text-overflow: ellipsis;
+ white-space: nowrap;
+}
diff --git a/_sass/node_modules/bootstrap/scss/mixins/_transition.scss b/_sass/node_modules/bootstrap/scss/mixins/_transition.scss
new file mode 100644
index 0000000000..54870bf6a8
--- /dev/null
+++ b/_sass/node_modules/bootstrap/scss/mixins/_transition.scss
@@ -0,0 +1,26 @@
+// stylelint-disable property-disallowed-list
+@mixin transition($transition...) {
+ @if length($transition) == 0 {
+ $transition: $transition-base;
+ }
+
+ @if length($transition) > 1 {
+ @each $value in $transition {
+ @if $value == null or $value == none {
+ @warn "The keyword 'none' or 'null' must be used as a single argument.";
+ }
+ }
+ }
+
+ @if $enable-transitions {
+ @if nth($transition, 1) != null {
+ transition: $transition;
+ }
+
+ @if $enable-prefers-reduced-motion-media-query and nth($transition, 1) != null and nth($transition, 1) != none {
+ @media (prefers-reduced-motion: reduce) {
+ transition: none;
+ }
+ }
+ }
+}
diff --git a/_sass/node_modules/bootstrap/scss/mixins/_visibility.scss b/_sass/node_modules/bootstrap/scss/mixins/_visibility.scss
new file mode 100644
index 0000000000..f174673117
--- /dev/null
+++ b/_sass/node_modules/bootstrap/scss/mixins/_visibility.scss
@@ -0,0 +1,8 @@
+// stylelint-disable declaration-no-important
+
+// Visibility
+
+@mixin invisible($visibility) {
+ visibility: $visibility !important;
+ @include deprecate("`invisible()`", "v4.3.0", "v5");
+}
diff --git a/_sass/node_modules/bootstrap/scss/utilities/_align.scss b/_sass/node_modules/bootstrap/scss/utilities/_align.scss
new file mode 100644
index 0000000000..8b7df9f76c
--- /dev/null
+++ b/_sass/node_modules/bootstrap/scss/utilities/_align.scss
@@ -0,0 +1,8 @@
+// stylelint-disable declaration-no-important
+
+.align-baseline { vertical-align: baseline !important; } // Browser default
+.align-top { vertical-align: top !important; }
+.align-middle { vertical-align: middle !important; }
+.align-bottom { vertical-align: bottom !important; }
+.align-text-bottom { vertical-align: text-bottom !important; }
+.align-text-top { vertical-align: text-top !important; }
diff --git a/_sass/node_modules/bootstrap/scss/utilities/_background.scss b/_sass/node_modules/bootstrap/scss/utilities/_background.scss
new file mode 100644
index 0000000000..3accbc4fd4
--- /dev/null
+++ b/_sass/node_modules/bootstrap/scss/utilities/_background.scss
@@ -0,0 +1,19 @@
+// stylelint-disable declaration-no-important
+
+@each $color, $value in $theme-colors {
+ @include bg-variant(".bg-#{$color}", $value, true);
+}
+
+@if $enable-gradients {
+ @each $color, $value in $theme-colors {
+ @include bg-gradient-variant(".bg-gradient-#{$color}", $value, true);
+ }
+}
+
+.bg-white {
+ background-color: $white !important;
+}
+
+.bg-transparent {
+ background-color: transparent !important;
+}
diff --git a/_sass/node_modules/bootstrap/scss/utilities/_borders.scss b/_sass/node_modules/bootstrap/scss/utilities/_borders.scss
new file mode 100644
index 0000000000..205f3fc24e
--- /dev/null
+++ b/_sass/node_modules/bootstrap/scss/utilities/_borders.scss
@@ -0,0 +1,75 @@
+// stylelint-disable property-disallowed-list, declaration-no-important
+
+//
+// Border
+//
+
+.border { border: $border-width solid $border-color !important; }
+.border-top { border-top: $border-width solid $border-color !important; }
+.border-right { border-right: $border-width solid $border-color !important; }
+.border-bottom { border-bottom: $border-width solid $border-color !important; }
+.border-left { border-left: $border-width solid $border-color !important; }
+
+.border-0 { border: 0 !important; }
+.border-top-0 { border-top: 0 !important; }
+.border-right-0 { border-right: 0 !important; }
+.border-bottom-0 { border-bottom: 0 !important; }
+.border-left-0 { border-left: 0 !important; }
+
+@each $color, $value in $theme-colors {
+ .border-#{$color} {
+ border-color: $value !important;
+ }
+}
+
+.border-white {
+ border-color: $white !important;
+}
+
+//
+// Border-radius
+//
+
+.rounded-sm {
+ border-radius: $border-radius-sm !important;
+}
+
+.rounded {
+ border-radius: $border-radius !important;
+}
+
+.rounded-top {
+ border-top-left-radius: $border-radius !important;
+ border-top-right-radius: $border-radius !important;
+}
+
+.rounded-right {
+ border-top-right-radius: $border-radius !important;
+ border-bottom-right-radius: $border-radius !important;
+}
+
+.rounded-bottom {
+ border-bottom-right-radius: $border-radius !important;
+ border-bottom-left-radius: $border-radius !important;
+}
+
+.rounded-left {
+ border-top-left-radius: $border-radius !important;
+ border-bottom-left-radius: $border-radius !important;
+}
+
+.rounded-lg {
+ border-radius: $border-radius-lg !important;
+}
+
+.rounded-circle {
+ border-radius: 50% !important;
+}
+
+.rounded-pill {
+ border-radius: $rounded-pill !important;
+}
+
+.rounded-0 {
+ border-radius: 0 !important;
+}
diff --git a/_sass/node_modules/bootstrap/scss/utilities/_clearfix.scss b/_sass/node_modules/bootstrap/scss/utilities/_clearfix.scss
new file mode 100644
index 0000000000..e92522a94d
--- /dev/null
+++ b/_sass/node_modules/bootstrap/scss/utilities/_clearfix.scss
@@ -0,0 +1,3 @@
+.clearfix {
+ @include clearfix();
+}
diff --git a/_sass/node_modules/bootstrap/scss/utilities/_display.scss b/_sass/node_modules/bootstrap/scss/utilities/_display.scss
new file mode 100644
index 0000000000..130367998f
--- /dev/null
+++ b/_sass/node_modules/bootstrap/scss/utilities/_display.scss
@@ -0,0 +1,26 @@
+// stylelint-disable declaration-no-important
+
+//
+// Utilities for common `display` values
+//
+
+@each $breakpoint in map-keys($grid-breakpoints) {
+ @include media-breakpoint-up($breakpoint) {
+ $infix: breakpoint-infix($breakpoint, $grid-breakpoints);
+
+ @each $value in $displays {
+ .d#{$infix}-#{$value} { display: $value !important; }
+ }
+ }
+}
+
+
+//
+// Utilities for toggling `display` in print
+//
+
+@media print {
+ @each $value in $displays {
+ .d-print-#{$value} { display: $value !important; }
+ }
+}
diff --git a/_sass/node_modules/bootstrap/scss/utilities/_embed.scss b/_sass/node_modules/bootstrap/scss/utilities/_embed.scss
new file mode 100644
index 0000000000..e37465e408
--- /dev/null
+++ b/_sass/node_modules/bootstrap/scss/utilities/_embed.scss
@@ -0,0 +1,39 @@
+// Credit: Nicolas Gallagher and SUIT CSS.
+
+.embed-responsive {
+ position: relative;
+ display: block;
+ width: 100%;
+ padding: 0;
+ overflow: hidden;
+
+ &::before {
+ display: block;
+ content: "";
+ }
+
+ .embed-responsive-item,
+ iframe,
+ embed,
+ object,
+ video {
+ position: absolute;
+ top: 0;
+ bottom: 0;
+ left: 0;
+ width: 100%;
+ height: 100%;
+ border: 0;
+ }
+}
+
+@each $embed-responsive-aspect-ratio in $embed-responsive-aspect-ratios {
+ $embed-responsive-aspect-ratio-x: nth($embed-responsive-aspect-ratio, 1);
+ $embed-responsive-aspect-ratio-y: nth($embed-responsive-aspect-ratio, 2);
+
+ .embed-responsive-#{$embed-responsive-aspect-ratio-x}by#{$embed-responsive-aspect-ratio-y} {
+ &::before {
+ padding-top: percentage(divide($embed-responsive-aspect-ratio-y, $embed-responsive-aspect-ratio-x));
+ }
+ }
+}
diff --git a/_sass/node_modules/bootstrap/scss/utilities/_flex.scss b/_sass/node_modules/bootstrap/scss/utilities/_flex.scss
new file mode 100644
index 0000000000..3d4266e0d0
--- /dev/null
+++ b/_sass/node_modules/bootstrap/scss/utilities/_flex.scss
@@ -0,0 +1,51 @@
+// stylelint-disable declaration-no-important
+
+// Flex variation
+//
+// Custom styles for additional flex alignment options.
+
+@each $breakpoint in map-keys($grid-breakpoints) {
+ @include media-breakpoint-up($breakpoint) {
+ $infix: breakpoint-infix($breakpoint, $grid-breakpoints);
+
+ .flex#{$infix}-row { flex-direction: row !important; }
+ .flex#{$infix}-column { flex-direction: column !important; }
+ .flex#{$infix}-row-reverse { flex-direction: row-reverse !important; }
+ .flex#{$infix}-column-reverse { flex-direction: column-reverse !important; }
+
+ .flex#{$infix}-wrap { flex-wrap: wrap !important; }
+ .flex#{$infix}-nowrap { flex-wrap: nowrap !important; }
+ .flex#{$infix}-wrap-reverse { flex-wrap: wrap-reverse !important; }
+ .flex#{$infix}-fill { flex: 1 1 auto !important; }
+ .flex#{$infix}-grow-0 { flex-grow: 0 !important; }
+ .flex#{$infix}-grow-1 { flex-grow: 1 !important; }
+ .flex#{$infix}-shrink-0 { flex-shrink: 0 !important; }
+ .flex#{$infix}-shrink-1 { flex-shrink: 1 !important; }
+
+ .justify-content#{$infix}-start { justify-content: flex-start !important; }
+ .justify-content#{$infix}-end { justify-content: flex-end !important; }
+ .justify-content#{$infix}-center { justify-content: center !important; }
+ .justify-content#{$infix}-between { justify-content: space-between !important; }
+ .justify-content#{$infix}-around { justify-content: space-around !important; }
+
+ .align-items#{$infix}-start { align-items: flex-start !important; }
+ .align-items#{$infix}-end { align-items: flex-end !important; }
+ .align-items#{$infix}-center { align-items: center !important; }
+ .align-items#{$infix}-baseline { align-items: baseline !important; }
+ .align-items#{$infix}-stretch { align-items: stretch !important; }
+
+ .align-content#{$infix}-start { align-content: flex-start !important; }
+ .align-content#{$infix}-end { align-content: flex-end !important; }
+ .align-content#{$infix}-center { align-content: center !important; }
+ .align-content#{$infix}-between { align-content: space-between !important; }
+ .align-content#{$infix}-around { align-content: space-around !important; }
+ .align-content#{$infix}-stretch { align-content: stretch !important; }
+
+ .align-self#{$infix}-auto { align-self: auto !important; }
+ .align-self#{$infix}-start { align-self: flex-start !important; }
+ .align-self#{$infix}-end { align-self: flex-end !important; }
+ .align-self#{$infix}-center { align-self: center !important; }
+ .align-self#{$infix}-baseline { align-self: baseline !important; }
+ .align-self#{$infix}-stretch { align-self: stretch !important; }
+ }
+}
diff --git a/_sass/node_modules/bootstrap/scss/utilities/_float.scss b/_sass/node_modules/bootstrap/scss/utilities/_float.scss
new file mode 100644
index 0000000000..54250844ff
--- /dev/null
+++ b/_sass/node_modules/bootstrap/scss/utilities/_float.scss
@@ -0,0 +1,11 @@
+// stylelint-disable declaration-no-important
+
+@each $breakpoint in map-keys($grid-breakpoints) {
+ @include media-breakpoint-up($breakpoint) {
+ $infix: breakpoint-infix($breakpoint, $grid-breakpoints);
+
+ .float#{$infix}-left { float: left !important; }
+ .float#{$infix}-right { float: right !important; }
+ .float#{$infix}-none { float: none !important; }
+ }
+}
diff --git a/_sass/node_modules/bootstrap/scss/utilities/_interactions.scss b/_sass/node_modules/bootstrap/scss/utilities/_interactions.scss
new file mode 100644
index 0000000000..cc75fc21b7
--- /dev/null
+++ b/_sass/node_modules/bootstrap/scss/utilities/_interactions.scss
@@ -0,0 +1,5 @@
+// stylelint-disable declaration-no-important
+
+@each $value in $user-selects {
+ .user-select-#{$value} { user-select: $value !important; }
+}
diff --git a/_sass/node_modules/bootstrap/scss/utilities/_overflow.scss b/_sass/node_modules/bootstrap/scss/utilities/_overflow.scss
new file mode 100644
index 0000000000..8326c30641
--- /dev/null
+++ b/_sass/node_modules/bootstrap/scss/utilities/_overflow.scss
@@ -0,0 +1,5 @@
+// stylelint-disable declaration-no-important
+
+@each $value in $overflows {
+ .overflow-#{$value} { overflow: $value !important; }
+}
diff --git a/_sass/node_modules/bootstrap/scss/utilities/_position.scss b/_sass/node_modules/bootstrap/scss/utilities/_position.scss
new file mode 100644
index 0000000000..cdf6c115f3
--- /dev/null
+++ b/_sass/node_modules/bootstrap/scss/utilities/_position.scss
@@ -0,0 +1,32 @@
+// stylelint-disable declaration-no-important
+
+// Common values
+@each $position in $positions {
+ .position-#{$position} { position: $position !important; }
+}
+
+// Shorthand
+
+.fixed-top {
+ position: fixed;
+ top: 0;
+ right: 0;
+ left: 0;
+ z-index: $zindex-fixed;
+}
+
+.fixed-bottom {
+ position: fixed;
+ right: 0;
+ bottom: 0;
+ left: 0;
+ z-index: $zindex-fixed;
+}
+
+.sticky-top {
+ @supports (position: sticky) {
+ position: sticky;
+ top: 0;
+ z-index: $zindex-sticky;
+ }
+}
diff --git a/_sass/node_modules/bootstrap/scss/utilities/_screenreaders.scss b/_sass/node_modules/bootstrap/scss/utilities/_screenreaders.scss
new file mode 100644
index 0000000000..9f26fde035
--- /dev/null
+++ b/_sass/node_modules/bootstrap/scss/utilities/_screenreaders.scss
@@ -0,0 +1,11 @@
+//
+// Screenreaders
+//
+
+.sr-only {
+ @include sr-only();
+}
+
+.sr-only-focusable {
+ @include sr-only-focusable();
+}
diff --git a/_sass/node_modules/bootstrap/scss/utilities/_shadows.scss b/_sass/node_modules/bootstrap/scss/utilities/_shadows.scss
new file mode 100644
index 0000000000..f5d03fcd59
--- /dev/null
+++ b/_sass/node_modules/bootstrap/scss/utilities/_shadows.scss
@@ -0,0 +1,6 @@
+// stylelint-disable declaration-no-important
+
+.shadow-sm { box-shadow: $box-shadow-sm !important; }
+.shadow { box-shadow: $box-shadow !important; }
+.shadow-lg { box-shadow: $box-shadow-lg !important; }
+.shadow-none { box-shadow: none !important; }
diff --git a/_sass/node_modules/bootstrap/scss/utilities/_sizing.scss b/_sass/node_modules/bootstrap/scss/utilities/_sizing.scss
new file mode 100644
index 0000000000..f376488022
--- /dev/null
+++ b/_sass/node_modules/bootstrap/scss/utilities/_sizing.scss
@@ -0,0 +1,20 @@
+// stylelint-disable declaration-no-important
+
+// Width and height
+
+@each $prop, $abbrev in (width: w, height: h) {
+ @each $size, $length in $sizes {
+ .#{$abbrev}-#{$size} { #{$prop}: $length !important; }
+ }
+}
+
+.mw-100 { max-width: 100% !important; }
+.mh-100 { max-height: 100% !important; }
+
+// Viewport additional helpers
+
+.min-vw-100 { min-width: 100vw !important; }
+.min-vh-100 { min-height: 100vh !important; }
+
+.vw-100 { width: 100vw !important; }
+.vh-100 { height: 100vh !important; }
diff --git a/_sass/node_modules/bootstrap/scss/utilities/_spacing.scss b/_sass/node_modules/bootstrap/scss/utilities/_spacing.scss
new file mode 100644
index 0000000000..3e98581a94
--- /dev/null
+++ b/_sass/node_modules/bootstrap/scss/utilities/_spacing.scss
@@ -0,0 +1,73 @@
+// stylelint-disable declaration-no-important
+
+// Margin and Padding
+
+@each $breakpoint in map-keys($grid-breakpoints) {
+ @include media-breakpoint-up($breakpoint) {
+ $infix: breakpoint-infix($breakpoint, $grid-breakpoints);
+
+ @each $prop, $abbrev in (margin: m, padding: p) {
+ @each $size, $length in $spacers {
+ .#{$abbrev}#{$infix}-#{$size} { #{$prop}: $length !important; }
+ .#{$abbrev}t#{$infix}-#{$size},
+ .#{$abbrev}y#{$infix}-#{$size} {
+ #{$prop}-top: $length !important;
+ }
+ .#{$abbrev}r#{$infix}-#{$size},
+ .#{$abbrev}x#{$infix}-#{$size} {
+ #{$prop}-right: $length !important;
+ }
+ .#{$abbrev}b#{$infix}-#{$size},
+ .#{$abbrev}y#{$infix}-#{$size} {
+ #{$prop}-bottom: $length !important;
+ }
+ .#{$abbrev}l#{$infix}-#{$size},
+ .#{$abbrev}x#{$infix}-#{$size} {
+ #{$prop}-left: $length !important;
+ }
+ }
+ }
+
+ // Negative margins (e.g., where `.mb-n1` is negative version of `.mb-1`)
+ @each $size, $length in $spacers {
+ @if "#{$size}" != "0" {
+ .m#{$infix}-n#{$size} { margin: -$length !important; }
+ .mt#{$infix}-n#{$size},
+ .my#{$infix}-n#{$size} {
+ margin-top: -$length !important;
+ }
+ .mr#{$infix}-n#{$size},
+ .mx#{$infix}-n#{$size} {
+ margin-right: -$length !important;
+ }
+ .mb#{$infix}-n#{$size},
+ .my#{$infix}-n#{$size} {
+ margin-bottom: -$length !important;
+ }
+ .ml#{$infix}-n#{$size},
+ .mx#{$infix}-n#{$size} {
+ margin-left: -$length !important;
+ }
+ }
+ }
+
+ // Some special margin utils
+ .m#{$infix}-auto { margin: auto !important; }
+ .mt#{$infix}-auto,
+ .my#{$infix}-auto {
+ margin-top: auto !important;
+ }
+ .mr#{$infix}-auto,
+ .mx#{$infix}-auto {
+ margin-right: auto !important;
+ }
+ .mb#{$infix}-auto,
+ .my#{$infix}-auto {
+ margin-bottom: auto !important;
+ }
+ .ml#{$infix}-auto,
+ .mx#{$infix}-auto {
+ margin-left: auto !important;
+ }
+ }
+}
diff --git a/_sass/node_modules/bootstrap/scss/utilities/_stretched-link.scss b/_sass/node_modules/bootstrap/scss/utilities/_stretched-link.scss
new file mode 100644
index 0000000000..fb5066bf55
--- /dev/null
+++ b/_sass/node_modules/bootstrap/scss/utilities/_stretched-link.scss
@@ -0,0 +1,19 @@
+//
+// Stretched link
+//
+
+.stretched-link {
+ &::after {
+ position: absolute;
+ top: 0;
+ right: 0;
+ bottom: 0;
+ left: 0;
+ z-index: 1;
+ // Just in case `pointer-events: none` is set on a parent
+ pointer-events: auto;
+ content: "";
+ // IE10 bugfix, see https://stackoverflow.com/questions/16947967/ie10-hover-pseudo-class-doesnt-work-without-background-color
+ background-color: rgba(0, 0, 0, 0);
+ }
+}
diff --git a/_sass/node_modules/bootstrap/scss/utilities/_text.scss b/_sass/node_modules/bootstrap/scss/utilities/_text.scss
new file mode 100644
index 0000000000..3a9f83edf0
--- /dev/null
+++ b/_sass/node_modules/bootstrap/scss/utilities/_text.scss
@@ -0,0 +1,72 @@
+// stylelint-disable declaration-no-important
+
+//
+// Text
+//
+
+.text-monospace { font-family: $font-family-monospace !important; }
+
+// Alignment
+
+.text-justify { text-align: justify !important; }
+.text-wrap { white-space: normal !important; }
+.text-nowrap { white-space: nowrap !important; }
+.text-truncate { @include text-truncate(); }
+
+// Responsive alignment
+
+@each $breakpoint in map-keys($grid-breakpoints) {
+ @include media-breakpoint-up($breakpoint) {
+ $infix: breakpoint-infix($breakpoint, $grid-breakpoints);
+
+ .text#{$infix}-left { text-align: left !important; }
+ .text#{$infix}-right { text-align: right !important; }
+ .text#{$infix}-center { text-align: center !important; }
+ }
+}
+
+// Transformation
+
+.text-lowercase { text-transform: lowercase !important; }
+.text-uppercase { text-transform: uppercase !important; }
+.text-capitalize { text-transform: capitalize !important; }
+
+// Weight and italics
+
+.font-weight-light { font-weight: $font-weight-light !important; }
+.font-weight-lighter { font-weight: $font-weight-lighter !important; }
+.font-weight-normal { font-weight: $font-weight-normal !important; }
+.font-weight-bold { font-weight: $font-weight-bold !important; }
+.font-weight-bolder { font-weight: $font-weight-bolder !important; }
+.font-italic { font-style: italic !important; }
+
+// Contextual colors
+
+.text-white { color: $white !important; }
+
+@each $color, $value in $theme-colors {
+ @include text-emphasis-variant(".text-#{$color}", $value, true);
+}
+
+.text-body { color: $body-color !important; }
+.text-muted { color: $text-muted !important; }
+
+.text-black-50 { color: rgba($black, .5) !important; }
+.text-white-50 { color: rgba($white, .5) !important; }
+
+// Misc
+
+.text-hide {
+ @include text-hide($ignore-warning: true);
+}
+
+.text-decoration-none { text-decoration: none !important; }
+
+.text-break {
+ word-break: break-word !important; // Deprecated, but avoids issues with flex containers
+ word-wrap: break-word !important; // Used instead of `overflow-wrap` for IE & Edge Legacy
+}
+
+// Reset
+
+.text-reset { color: inherit !important; }
diff --git a/_sass/node_modules/bootstrap/scss/utilities/_visibility.scss b/_sass/node_modules/bootstrap/scss/utilities/_visibility.scss
new file mode 100644
index 0000000000..7756c3bfac
--- /dev/null
+++ b/_sass/node_modules/bootstrap/scss/utilities/_visibility.scss
@@ -0,0 +1,13 @@
+// stylelint-disable declaration-no-important
+
+//
+// Visibility utilities
+//
+
+.visible {
+ visibility: visible !important;
+}
+
+.invisible {
+ visibility: hidden !important;
+}
diff --git a/_sass/node_modules/bootstrap/scss/vendor/_rfs.scss b/_sass/node_modules/bootstrap/scss/vendor/_rfs.scss
new file mode 100644
index 0000000000..e453f441ee
--- /dev/null
+++ b/_sass/node_modules/bootstrap/scss/vendor/_rfs.scss
@@ -0,0 +1,228 @@
+// stylelint-disable property-blacklist, scss/dollar-variable-default
+
+// SCSS RFS mixin
+//
+// Automated responsive font sizes
+//
+// Licensed under MIT (https://github.com/twbs/rfs/blob/v8.x/LICENSE)
+
+// Configuration
+
+// Base font size
+$rfs-base-font-size: 1.25rem !default;
+$rfs-font-size-unit: rem !default;
+
+@if $rfs-font-size-unit != rem and $rfs-font-size-unit != px {
+ @error "`#{$rfs-font-size-unit}` is not a valid unit for $rfs-font-size-unit. Use `px` or `rem`.";
+}
+
+// Breakpoint at where font-size starts decreasing if screen width is smaller
+$rfs-breakpoint: 1200px !default;
+$rfs-breakpoint-unit: px !default;
+
+@if $rfs-breakpoint-unit != px and $rfs-breakpoint-unit != em and $rfs-breakpoint-unit != rem {
+ @error "`#{$rfs-breakpoint-unit}` is not a valid unit for $rfs-breakpoint-unit. Use `px`, `em` or `rem`.";
+}
+
+// Resize font size based on screen height and width
+$rfs-two-dimensional: false !default;
+
+// Factor of decrease
+$rfs-factor: 10 !default;
+
+@if type-of($rfs-factor) != "number" or $rfs-factor <= 1 {
+ @error "`#{$rfs-factor}` is not a valid $rfs-factor, it must be greater than 1.";
+}
+
+// Generate enable or disable classes. Possibilities: false, "enable" or "disable"
+$rfs-class: false !default;
+
+// 1 rem = $rfs-rem-value px
+$rfs-rem-value: 16 !default;
+
+// Safari iframe resize bug: https://github.com/twbs/rfs/issues/14
+$rfs-safari-iframe-resize-bug-fix: false !default;
+
+// Disable RFS by setting $enable-responsive-font-sizes to false
+$enable-responsive-font-sizes: true !default;
+
+// Cache $rfs-base-font-size unit
+$rfs-base-font-size-unit: unit($rfs-base-font-size);
+
+@function divide($dividend, $divisor, $precision: 10) {
+ $sign: if($dividend > 0 and $divisor > 0 or $dividend < 0 and $divisor < 0, 1, -1);
+ $dividend: abs($dividend);
+ $divisor: abs($divisor);
+ @if $dividend == 0 {
+ @return 0;
+ }
+ @if $divisor == 0 {
+ @error "Cannot divide by 0";
+ }
+ $remainder: $dividend;
+ $result: 0;
+ $factor: 10;
+ @while ($remainder > 0 and $precision >= 0) {
+ $quotient: 0;
+ @while ($remainder >= $divisor) {
+ $remainder: $remainder - $divisor;
+ $quotient: $quotient + 1;
+ }
+ $result: $result * 10 + $quotient;
+ $factor: $factor * .1;
+ $remainder: $remainder * 10;
+ $precision: $precision - 1;
+ @if ($precision < 0 and $remainder >= $divisor * 5) {
+ $result: $result + 1;
+ }
+ }
+ $result: $result * $factor * $sign;
+ $dividend-unit: unit($dividend);
+ $divisor-unit: unit($divisor);
+ $unit-map: (
+ "px": 1px,
+ "rem": 1rem,
+ "em": 1em,
+ "%": 1%
+ );
+ @if ($dividend-unit != $divisor-unit and map-has-key($unit-map, $dividend-unit)) {
+ $result: $result * map-get($unit-map, $dividend-unit);
+ }
+ @return $result;
+}
+
+// Remove px-unit from $rfs-base-font-size for calculations
+@if $rfs-base-font-size-unit == "px" {
+ $rfs-base-font-size: divide($rfs-base-font-size, $rfs-base-font-size * 0 + 1);
+}
+@else if $rfs-base-font-size-unit == "rem" {
+ $rfs-base-font-size: divide($rfs-base-font-size, divide($rfs-base-font-size * 0 + 1, $rfs-rem-value));
+}
+
+// Cache $rfs-breakpoint unit to prevent multiple calls
+$rfs-breakpoint-unit-cache: unit($rfs-breakpoint);
+
+// Remove unit from $rfs-breakpoint for calculations
+@if $rfs-breakpoint-unit-cache == "px" {
+ $rfs-breakpoint: divide($rfs-breakpoint, $rfs-breakpoint * 0 + 1);
+}
+@else if $rfs-breakpoint-unit-cache == "rem" or $rfs-breakpoint-unit-cache == "em" {
+ $rfs-breakpoint: divide($rfs-breakpoint, divide($rfs-breakpoint * 0 + 1, $rfs-rem-value));
+}
+
+// Internal mixin that adds disable classes to the selector if needed.
+@mixin _rfs-disable-class {
+ @if $rfs-class == "disable" {
+ // Adding an extra class increases specificity, which prevents the media query to override the font size
+ &,
+ .disable-responsive-font-size &,
+ &.disable-responsive-font-size {
+ @content;
+ }
+ }
+ @else {
+ @content;
+ }
+}
+
+// Internal mixin that adds enable classes to the selector if needed.
+@mixin _rfs-enable-class {
+ @if $rfs-class == "enable" {
+ .enable-responsive-font-size &,
+ &.enable-responsive-font-size {
+ @content;
+ }
+ }
+ @else {
+ @content;
+ }
+}
+
+// Internal mixin used to determine which media query needs to be used
+@mixin _rfs-media-query($mq-value) {
+ @if $rfs-two-dimensional {
+ @media (max-width: #{$mq-value}), (max-height: #{$mq-value}) {
+ @content;
+ }
+ }
+ @else {
+ @media (max-width: #{$mq-value}) {
+ @content;
+ }
+ }
+}
+
+// Responsive font size mixin
+@mixin rfs($fs, $important: false) {
+ // Cache $fs unit
+ $fs-unit: if(type-of($fs) == "number", unit($fs), false);
+
+ // Add !important suffix if needed
+ $rfs-suffix: if($important, " !important", "");
+
+ // If $fs isn't a number (like inherit) or $fs has a unit (not px or rem, like 1.5em) or $ is 0, just print the value
+ @if not $fs-unit or $fs-unit != "" and $fs-unit != "px" and $fs-unit != "rem" or $fs == 0 {
+ font-size: #{$fs}#{$rfs-suffix};
+ }
+ @else {
+ // Remove unit from $fs for calculations
+ @if $fs-unit == "px" {
+ $fs: divide($fs, $fs * 0 + 1);
+ }
+ @else if $fs-unit == "rem" {
+ $fs: divide($fs, divide($fs * 0 + 1, $rfs-rem-value));
+ }
+
+ // Set default font size
+ $rfs-static: if($rfs-font-size-unit == rem, #{divide($fs, $rfs-rem-value)}rem, #{$fs}px);
+
+ // Only add the media query if the font size is bigger than the minimum font size
+ @if $fs <= $rfs-base-font-size or not $enable-responsive-font-sizes {
+ font-size: #{$rfs-static}#{$rfs-suffix};
+ }
+ @else {
+ // Calculate the minimum font size for $fs
+ $fs-min: $rfs-base-font-size + divide($fs - $rfs-base-font-size, $rfs-factor);
+
+ // Calculate difference between $fs and the minimum font size
+ $fs-diff: $fs - $fs-min;
+
+ // Base font-size formatting
+ $min-width: if($rfs-font-size-unit == rem, #{divide($fs-min, $rfs-rem-value)}rem, #{$fs-min}px);
+
+ // Use `vmin` if two-dimensional is enabled
+ $variable-unit: if($rfs-two-dimensional, vmin, vw);
+
+ // Calculate the variable width between 0 and $rfs-breakpoint
+ $variable-width: #{divide($fs-diff * 100, $rfs-breakpoint)}#{$variable-unit};
+
+ // Set the calculated font-size
+ $rfs-fluid: calc(#{$min-width} + #{$variable-width}) #{$rfs-suffix};
+
+ // Breakpoint formatting
+ $mq-value: if($rfs-breakpoint-unit == px, #{$rfs-breakpoint}px, #{divide($rfs-breakpoint, $rfs-rem-value)}#{$rfs-breakpoint-unit});
+
+ @include _rfs-disable-class {
+ font-size: #{$rfs-static}#{$rfs-suffix};
+ }
+
+ @include _rfs-media-query($mq-value) {
+ @include _rfs-enable-class {
+ font-size: $rfs-fluid;
+ }
+
+ // Include safari iframe resize fix if needed
+ min-width: if($rfs-safari-iframe-resize-bug-fix, (0 * 1vw), null);
+ }
+ }
+ }
+}
+
+// The font-size & responsive-font-size mixins use RFS to rescale the font size
+@mixin font-size($fs, $important: false) {
+ @include rfs($fs, $important);
+}
+
+@mixin responsive-font-size($fs, $important: false) {
+ @include rfs($fs, $important);
+}
diff --git a/_sass/node_modules/bourbon/core/_bourbon.scss b/_sass/node_modules/bourbon/core/_bourbon.scss
new file mode 100644
index 0000000000..c36979356c
--- /dev/null
+++ b/_sass/node_modules/bourbon/core/_bourbon.scss
@@ -0,0 +1,54 @@
+// Bourbon 7.3.0
+// https://www.bourbon.io/
+// Copyright 2011-2020 thoughtbot, inc.
+// MIT License
+
+@import "bourbon/helpers/buttons-list";
+@import "bourbon/helpers/scales";
+@import "bourbon/helpers/text-inputs-list";
+
+@import "bourbon/settings/settings";
+
+@import "bourbon/validators/contains";
+@import "bourbon/validators/contains-falsy";
+@import "bourbon/validators/is-color";
+@import "bourbon/validators/is-length";
+@import "bourbon/validators/is-number";
+@import "bourbon/validators/is-size";
+
+@import "bourbon/utilities/assign-inputs";
+@import "bourbon/utilities/compact-shorthand";
+@import "bourbon/utilities/directional-property";
+@import "bourbon/utilities/fetch-bourbon-setting";
+@import "bourbon/utilities/font-source-declaration";
+@import "bourbon/utilities/gamma";
+@import "bourbon/utilities/lightness";
+@import "bourbon/utilities/contrast-ratio";
+@import "bourbon/utilities/unpack-shorthand";
+
+@import "bourbon/library/border-color";
+@import "bourbon/library/border-radius";
+@import "bourbon/library/border-style";
+@import "bourbon/library/border-width";
+@import "bourbon/library/buttons";
+@import "bourbon/library/clearfix";
+@import "bourbon/library/contrast-switch";
+@import "bourbon/library/ellipsis";
+@import "bourbon/library/font-face";
+@import "bourbon/library/font-stacks";
+@import "bourbon/library/hide-text";
+@import "bourbon/library/hide-visually";
+@import "bourbon/library/margin";
+@import "bourbon/library/modular-scale";
+@import "bourbon/library/overflow-wrap";
+@import "bourbon/library/padding";
+@import "bourbon/library/position";
+@import "bourbon/library/prefixer";
+@import "bourbon/library/shade";
+@import "bourbon/library/size";
+@import "bourbon/library/strip-unit";
+@import "bourbon/library/text-inputs";
+@import "bourbon/library/timing-functions";
+@import "bourbon/library/tint";
+@import "bourbon/library/triangle";
+@import "bourbon/library/value-prefixer";
diff --git a/_sass/node_modules/bourbon/core/bourbon/helpers/_buttons-list.scss b/_sass/node_modules/bourbon/core/bourbon/helpers/_buttons-list.scss
new file mode 100644
index 0000000000..2e845f762f
--- /dev/null
+++ b/_sass/node_modules/bourbon/core/bourbon/helpers/_buttons-list.scss
@@ -0,0 +1,14 @@
+@charset "UTF-8";
+
+/// A list of all HTML button elements.
+///
+/// @type list
+///
+/// @access private
+
+$_buttons-list: (
+ "button",
+ "[type='button']",
+ "[type='reset']",
+ "[type='submit']",
+);
diff --git a/_sass/node_modules/bourbon/core/bourbon/helpers/_scales.scss b/_sass/node_modules/bourbon/core/bourbon/helpers/_scales.scss
new file mode 100644
index 0000000000..178174a387
--- /dev/null
+++ b/_sass/node_modules/bourbon/core/bourbon/helpers/_scales.scss
@@ -0,0 +1,27 @@
+@charset "UTF-8";
+
+////
+/// Pre-defined scales for use with the `modular-scale` function.
+///
+/// @type number (unitless)
+///
+/// @see {function} modular-scale
+////
+
+$minor-second: 1.067;
+$major-second: 1.125;
+$minor-third: 1.2;
+$major-third: 1.25;
+$perfect-fourth: 1.333;
+$augmented-fourth: 1.414;
+$perfect-fifth: 1.5;
+$minor-sixth: 1.6;
+$golden: 1.618;
+$major-sixth: 1.667;
+$minor-seventh: 1.778;
+$major-seventh: 1.875;
+$octave: 2;
+$major-tenth: 2.5;
+$major-eleventh: 2.667;
+$major-twelfth: 3;
+$double-octave: 4;
diff --git a/_sass/node_modules/bourbon/core/bourbon/helpers/_text-inputs-list.scss b/_sass/node_modules/bourbon/core/bourbon/helpers/_text-inputs-list.scss
new file mode 100644
index 0000000000..479326ad87
--- /dev/null
+++ b/_sass/node_modules/bourbon/core/bourbon/helpers/_text-inputs-list.scss
@@ -0,0 +1,26 @@
+@charset "UTF-8";
+
+/// A list of all _text-based_ HTML inputs.
+///
+/// @type list
+///
+/// @access private
+
+$_text-inputs-list: (
+ "[type='color']",
+ "[type='date']",
+ "[type='datetime']",
+ "[type='datetime-local']",
+ "[type='email']",
+ "[type='month']",
+ "[type='number']",
+ "[type='password']",
+ "[type='search']",
+ "[type='tel']",
+ "[type='text']",
+ "[type='time']",
+ "[type='url']",
+ "[type='week']",
+ "input:not([type])",
+ "textarea",
+);
diff --git a/_sass/node_modules/bourbon/core/bourbon/library/_border-color.scss b/_sass/node_modules/bourbon/core/bourbon/library/_border-color.scss
new file mode 100644
index 0000000000..de25d17a78
--- /dev/null
+++ b/_sass/node_modules/bourbon/core/bourbon/library/_border-color.scss
@@ -0,0 +1,26 @@
+@charset "UTF-8";
+
+/// Provides a concise, one-line method for setting `border-color` on specific
+/// edges of a box. Use a `null` value to âskipâ edges of the box with standard
+/// CSS shorthand.
+///
+/// @argument {list} $values
+/// List of colors; accepts CSS shorthand.
+///
+/// @example scss
+/// .element {
+/// @include border-color(#a60b55 #76cd9c null #e8ae1a);
+/// }
+///
+/// // CSS Output
+/// .element {
+/// border-left-color: #e8ae1a;
+/// border-right-color: #76cd9c;
+/// border-top-color: #a60b55;
+/// }
+///
+/// @require {mixin} _directional-property
+
+@mixin border-color($values) {
+ @include _directional-property(border, color, $values);
+}
diff --git a/_sass/node_modules/bourbon/core/bourbon/library/_border-radius.scss b/_sass/node_modules/bourbon/core/bourbon/library/_border-radius.scss
new file mode 100644
index 0000000000..3fce348b68
--- /dev/null
+++ b/_sass/node_modules/bourbon/core/bourbon/library/_border-radius.scss
@@ -0,0 +1,85 @@
+@charset "UTF-8";
+
+/// Provides a concise, one-line method for setting `border-radius` on both the
+/// top-left and top-right of a box.
+///
+/// @argument {number (with unit)} $radii
+///
+/// @example scss
+/// .element {
+/// @include border-top-radius(4px);
+/// }
+///
+/// // CSS Output
+/// .element {
+/// border-top-left-radius: 4px;
+/// border-top-right-radius: 4px;
+/// }
+
+@mixin border-top-radius($radii) {
+ border-top-left-radius: $radii;
+ border-top-right-radius: $radii;
+}
+
+/// Provides a concise, one-line method for setting `border-radius` on both the
+/// top-right and bottom-right of a box.
+///
+/// @argument {number (with unit)} $radii
+///
+/// @example scss
+/// .element {
+/// @include border-right-radius(3px);
+/// }
+///
+/// // CSS Output
+/// .element {
+/// border-bottom-right-radius: 3px;
+/// border-top-right-radius: 3px;
+/// }
+
+@mixin border-right-radius($radii) {
+ border-bottom-right-radius: $radii;
+ border-top-right-radius: $radii;
+}
+
+/// Provides a concise, one-line method for setting `border-radius` on both the
+/// bottom-left and bottom-right of a box.
+///
+/// @argument {number (with unit)} $radii
+///
+/// @example scss
+/// .element {
+/// @include border-bottom-radius(2px);
+/// }
+///
+/// // CSS Output
+/// .element {
+/// border-bottom-left-radius: 2px;
+/// border-bottom-right-radius: 2px;
+/// }
+
+@mixin border-bottom-radius($radii) {
+ border-bottom-left-radius: $radii;
+ border-bottom-right-radius: $radii;
+}
+
+/// Provides a concise, one-line method for setting `border-radius` on both the
+/// top-left and bottom-left of a box.
+///
+/// @argument {number (with unit)} $radii
+///
+/// @example scss
+/// .element {
+/// @include border-left-radius(1px);
+/// }
+///
+/// // CSS Output
+/// .element {
+/// border-bottom-left-radius: 1px;
+/// border-top-left-radius: 1px;
+/// }
+
+@mixin border-left-radius($radii) {
+ border-bottom-left-radius: $radii;
+ border-top-left-radius: $radii;
+}
diff --git a/_sass/node_modules/bourbon/core/bourbon/library/_border-style.scss b/_sass/node_modules/bourbon/core/bourbon/library/_border-style.scss
new file mode 100644
index 0000000000..222f2740c4
--- /dev/null
+++ b/_sass/node_modules/bourbon/core/bourbon/library/_border-style.scss
@@ -0,0 +1,25 @@
+@charset "UTF-8";
+
+/// Provides a concise, one-line method for setting `border-style` on specific
+/// edges of a box. Use a `null` value to âskipâ edges of the box with standard
+/// CSS shorthand.
+///
+/// @argument {list} $values
+/// List of border styles; accepts CSS shorthand.
+///
+/// @example scss
+/// .element {
+/// @include border-style(dashed null solid);
+/// }
+///
+/// // CSS Output
+/// .element {
+/// border-bottom-style: solid;
+/// border-top-style: dashed;
+/// }
+///
+/// @require {mixin} _directional-property
+
+@mixin border-style($values) {
+ @include _directional-property(border, style, $values);
+}
diff --git a/_sass/node_modules/bourbon/core/bourbon/library/_border-width.scss b/_sass/node_modules/bourbon/core/bourbon/library/_border-width.scss
new file mode 100644
index 0000000000..a64e4b8869
--- /dev/null
+++ b/_sass/node_modules/bourbon/core/bourbon/library/_border-width.scss
@@ -0,0 +1,25 @@
+@charset "UTF-8";
+
+/// Provides a concise, one-line method for setting `border-width` on specific
+/// edges of a box. Use a `null` value to âskipâ edges of the box with standard
+/// CSS shorthand.
+///
+/// @argument {list} $values
+/// List of border widths; accepts CSS shorthand.
+///
+/// @example scss
+/// .element {
+/// @include border-width(1em null 20px);
+/// }
+///
+/// // CSS Output
+/// .element {
+/// border-bottom-width: 20px;
+/// border-top-width: 1em;
+/// }
+///
+/// @require {mixin} _directional-property
+
+@mixin border-width($values) {
+ @include _directional-property(border, width, $values);
+}
diff --git a/_sass/node_modules/bourbon/core/bourbon/library/_buttons.scss b/_sass/node_modules/bourbon/core/bourbon/library/_buttons.scss
new file mode 100644
index 0000000000..a03485dbcd
--- /dev/null
+++ b/_sass/node_modules/bourbon/core/bourbon/library/_buttons.scss
@@ -0,0 +1,84 @@
+@charset "UTF-8";
+
+////
+/// @type list
+///
+/// @require {function} _assign-inputs
+///
+/// @require {variable} $_buttons-list
+////
+
+/// A list of all HTML button elements. Please note that you must interpolate
+/// the variable (`#{}`) to use it as a selector.
+///
+/// @example scss
+/// #{$all-buttons} {
+/// background-color: #f00;
+/// }
+///
+/// // CSS Output
+/// button,
+/// [type='button'],
+/// [type='reset'],
+/// [type='submit'] {
+/// background-color: #f00;
+/// }
+
+$all-buttons: _assign-inputs($_buttons-list);
+
+/// A list of all HTML button elements with the `:active` pseudo-class applied.
+/// Please note that you must interpolate the variable (`#{}`) to use it as a
+/// selector.
+///
+/// @example scss
+/// #{$all-buttons-active} {
+/// background-color: #00f;
+/// }
+///
+/// // CSS Output
+/// button:active,
+/// [type='button']:active,
+/// [type='reset']:active,
+/// [type='submit']:active {
+/// background-color: #00f;
+/// }
+
+$all-buttons-active: _assign-inputs($_buttons-list, active);
+
+/// A list of all HTML button elements with the `:focus` pseudo-class applied.
+/// Please note that you must interpolate the variable (`#{}`) to use it as a
+/// selector.
+///
+/// @example scss
+/// #{$all-buttons-focus} {
+/// background-color: #0f0;
+/// }
+///
+/// // CSS Output
+/// button:focus,
+/// [type='button']:focus,
+/// [type='reset']:focus,
+/// [type='submit']:focus {
+/// background-color: #0f0;
+/// }
+
+$all-buttons-focus: _assign-inputs($_buttons-list, focus);
+
+/// A list of all HTML button elements with the `:hover` pseudo-class applied.
+/// Please note that you must interpolate the variable (`#{}`) to use it as a
+/// selector.
+///
+/// @example scss
+/// #{$all-buttons-hover} {
+/// background-color: #0f0;
+/// }
+///
+/// // CSS Output
+/// button:hover,
+/// [type='button']:hover,
+/// [type='reset']:hover,
+/// [type='submit']:hover {
+/// background-color: #0f0;
+/// }
+
+$all-buttons-hover: _assign-inputs($_buttons-list, hover);
diff --git a/_sass/node_modules/bourbon/core/bourbon/library/_clearfix.scss b/_sass/node_modules/bourbon/core/bourbon/library/_clearfix.scss
new file mode 100644
index 0000000000..d8ccc42114
--- /dev/null
+++ b/_sass/node_modules/bourbon/core/bourbon/library/_clearfix.scss
@@ -0,0 +1,25 @@
+@charset "UTF-8";
+
+/// Provides an easy way to include a clearfix for containing floats.
+///
+/// @link https://goo.gl/yP5hiZ
+///
+/// @example scss
+/// .element {
+/// @include clearfix;
+/// }
+///
+/// // CSS Output
+/// .element::after {
+/// clear: both;
+/// content: "";
+/// display: block;
+/// }
+
+@mixin clearfix {
+ &::after {
+ clear: both;
+ content: "";
+ display: block;
+ }
+}
diff --git a/_sass/node_modules/bourbon/core/bourbon/library/_contrast-switch.scss b/_sass/node_modules/bourbon/core/bourbon/library/_contrast-switch.scss
new file mode 100644
index 0000000000..4545be319e
--- /dev/null
+++ b/_sass/node_modules/bourbon/core/bourbon/library/_contrast-switch.scss
@@ -0,0 +1,81 @@
+@charset "UTF-8";
+
+/// Switches between two colors based on the contrast to another color. Itâs
+/// like a [ternary operator] for color contrast and can be useful for building
+/// a button system.
+///
+/// The calculation of the contrast ratio is based on the [WCAG 2.0
+/// specification]. However, we cannot guarantee full compliance, though all of
+/// our manual testing passed.
+///
+/// [ternary operator]: https://goo.gl/ccfLqi
+/// [WCAG 2.0 specification]: https://goo.gl/zhQuYA
+///
+/// @argument {color} $base-color
+/// The color to evaluate lightness against.
+///
+/// @argument {color} $dark-color [#000]
+/// The color to be output when `$base-color` is light. Can also be set
+/// globally using the `contrast-switch-dark-color` key in the
+/// Bourbon settings.
+///
+/// @argument {color} $light-color [#fff]
+/// The color to be output when `$base-color` is dark. Can also be set
+/// globally using the `contrast-switch-light-color` key in the
+/// Bourbon settings.
+///
+/// @return {color}
+///
+/// @example scss
+/// .element {
+/// color: contrast-switch(#bae6e6);
+/// }
+///
+/// // CSS Output
+/// .element {
+/// color: #000;
+/// }
+///
+/// @example scss
+/// .element {
+/// $button-color: #2d72d9;
+/// background-color: $button-color;
+/// color: contrast-switch($button-color, #222, #eee);
+/// }
+///
+/// // CSS Output
+/// .element {
+/// background-color: #2d72d9;
+/// color: #eee;
+/// }
+///
+/// @require {function} _fetch-bourbon-setting
+///
+/// @require {function} _is-color
+///
+/// @require {function} _contrast-ratio
+///
+/// @since 5.0.0
+
+@function contrast-switch(
+ $base-color,
+ $dark-color: _fetch-bourbon-setting("contrast-switch-dark-color"),
+ $light-color: _fetch-bourbon-setting("contrast-switch-light-color")
+) {
+ @if not _is-color($base-color) {
+ @error "`#{$base-color}` is not a valid color for the `$base-color` " +
+ "argument in the `contrast-switch` function.";
+ } @else if not _is-color($dark-color) {
+ @error "`#{$dark-color}` is not a valid color for the `$dark-color` " +
+ "argument in the `contrast-switch` function.";
+ } @else if not _is-color($light-color) {
+ @error "`#{$light-color}` is not a valid color for the `$light-color` " +
+ "argument in the `contrast-switch` function.";
+ } @else {
+ $-contrast-to-dark: _contrast-ratio($base-color, $dark-color);
+ $-contrast-to-light: _contrast-ratio($base-color, $light-color);
+ $-prefer-dark: $-contrast-to-dark >= $-contrast-to-light;
+
+ @return if($-prefer-dark, $dark-color, $light-color);
+ }
+}
diff --git a/_sass/node_modules/bourbon/core/bourbon/library/_ellipsis.scss b/_sass/node_modules/bourbon/core/bourbon/library/_ellipsis.scss
new file mode 100644
index 0000000000..6d3e5c63d5
--- /dev/null
+++ b/_sass/node_modules/bourbon/core/bourbon/library/_ellipsis.scss
@@ -0,0 +1,36 @@
+@charset "UTF-8";
+
+/// Truncates text and adds an ellipsis to represent overflow.
+///
+/// @argument {number} $width [100%]
+/// The `max-width` for the string to respect before being truncated.
+///
+/// @argument {string} $display [inline-block]
+/// Sets the display-value of the element.
+///
+/// @example scss
+/// .element {
+/// @include ellipsis;
+/// }
+///
+/// // CSS Output
+/// .element {
+/// display: inline-block;
+/// max-width: 100%;
+/// overflow: hidden;
+/// text-overflow: ellipsis;
+/// white-space: nowrap;
+/// word-wrap: normal;
+/// }
+
+@mixin ellipsis(
+ $width: 100%,
+ $display: inline-block
+) {
+ display: $display;
+ max-width: $width;
+ overflow: hidden;
+ text-overflow: ellipsis;
+ white-space: nowrap;
+ word-wrap: normal;
+}
diff --git a/_sass/node_modules/bourbon/core/bourbon/library/_font-face.scss b/_sass/node_modules/bourbon/core/bourbon/library/_font-face.scss
new file mode 100644
index 0000000000..8aab1dc287
--- /dev/null
+++ b/_sass/node_modules/bourbon/core/bourbon/library/_font-face.scss
@@ -0,0 +1,65 @@
+@charset "UTF-8";
+
+/// Generates an `@font-face` declaration. You can choose the specific file
+/// formats you need to output; the mixin supports `woff2`
+/// and `woff`. The mixin also supports usage with the Rails Asset Pipeline,
+/// which you can enable per use, or globally in the `$bourbon()` settings.
+///
+/// @argument {string} $font-family
+///
+/// @argument {string} $file-path
+///
+/// @argument {string | list} $file-formats [("woff2", "woff")]
+/// List of the font file formats to include. Can also be set globally using
+/// the `global-font-file-formats` key in the Bourbon settings.
+///
+/// @argument {boolean} $asset-pipeline [false]
+/// Set to `true` if youâre using the Rails Asset Pipeline (place the fonts
+/// in `app/assets/fonts/`). Can also be set globally using the
+/// `rails-asset-pipeline` key in the Bourbon settings.
+///
+/// @content
+/// Any additional CSS properties that are included in the `@include`
+/// directive will be output within the `@font-face` declaration, e.g. you can
+/// pass in `font-weight`, `font-style` and/or `unicode-range`.
+///
+/// @example scss
+/// @include font-face(
+/// "source-sans-pro",
+/// "fonts/source-sans-pro-regular",
+/// ("woff2", "woff")
+/// ) {
+/// font-style: normal;
+/// font-weight: 400;
+/// }
+///
+/// // CSS Output
+/// @font-face {
+/// font-family: "source-sans-pro";
+/// src: url("fonts/source-sans-pro-regular.woff2") format("woff2"),
+/// url("fonts/source-sans-pro-regular.woff") format("woff");
+/// font-style: normal;
+/// font-weight: 400;
+/// }
+///
+/// @require {function} _font-source-declaration
+///
+/// @require {function} _fetch-bourbon-setting
+
+@mixin font-face(
+ $font-family,
+ $file-path,
+ $file-formats: _fetch-bourbon-setting("global-font-file-formats"),
+ $asset-pipeline: _fetch-bourbon-setting("rails-asset-pipeline")
+) {
+ @font-face {
+ font-family: $font-family;
+ src: _font-source-declaration(
+ $font-family,
+ $file-path,
+ $asset-pipeline,
+ $file-formats
+ );
+ @content;
+ }
+}
diff --git a/_sass/node_modules/bourbon/core/bourbon/library/_font-stacks.scss b/_sass/node_modules/bourbon/core/bourbon/library/_font-stacks.scss
new file mode 100644
index 0000000000..e1676ba191
--- /dev/null
+++ b/_sass/node_modules/bourbon/core/bourbon/library/_font-stacks.scss
@@ -0,0 +1,248 @@
+@charset "UTF-8";
+
+/// A variable that outputs a Helvetica font stack.
+///
+/// @link https://goo.gl/uSJvZe
+///
+/// @type list
+///
+/// @example scss
+/// .element {
+/// font-family: $font-stack-helvetica;
+/// }
+///
+/// // CSS Output
+/// .element {
+/// font-family: "Helvetica Neue", "Helvetica", "Arial", sans-serif;
+/// }
+
+$font-stack-helvetica: (
+ "Helvetica Neue",
+ "Helvetica",
+ "Arial",
+ sans-serif,
+);
+
+/// A variable that outputs a Lucida Grande font stack.
+///
+/// @link https://goo.gl/R5UyYE
+///
+/// @type list
+///
+/// @example scss
+/// .element {
+/// font-family: $font-stack-lucida-grande;
+/// }
+///
+/// // CSS Output
+/// .element {
+/// font-family: "Lucida Grande", "Lucida Sans Unicode", "Geneva", "Verdana", sans-serif;
+/// }
+
+$font-stack-lucida-grande: (
+ "Lucida Grande",
+ "Lucida Sans Unicode",
+ "Geneva",
+ "Verdana",
+ sans-serif,
+);
+
+/// A variable that outputs a Verdana font stack.
+///
+/// @link https://goo.gl/yGXWSS
+///
+/// @type list
+///
+/// @example scss
+/// .element {
+/// font-family: $font-stack-verdana;
+/// }
+///
+/// // CSS Output
+/// .element {
+/// font-family: "Verdana", "Geneva", sans-serif;
+/// }
+
+$font-stack-verdana: (
+ "Verdana",
+ "Geneva",
+ sans-serif,
+);
+
+/// A variable that outputs a system font stack.
+///
+/// @type list
+///
+/// @example scss
+/// .element {
+/// font-family: $font-stack-system;
+/// }
+///
+/// // CSS Output
+/// .element {
+/// font-family: system-ui, -apple-system, BlinkMacSystemFont, "Avenir Next", "Avenir", "Segoe UI", "Lucida Grande", "Helvetica Neue", "Helvetica", "Fira Sans", "Roboto", "Noto", "Droid Sans", "Cantarell", "Oxygen", "Ubuntu", "Franklin Gothic Medium", "Century Gothic", "Liberation Sans", sans-serif;
+/// }
+
+$font-stack-system: (
+ system-ui,
+ -apple-system,
+ BlinkMacSystemFont,
+ "Avenir Next",
+ "Avenir",
+ "Segoe UI",
+ "Lucida Grande",
+ "Helvetica Neue",
+ "Helvetica",
+ "Fira Sans",
+ "Roboto",
+ "Noto",
+ "Droid Sans",
+ "Cantarell",
+ "Oxygen",
+ "Ubuntu",
+ "Franklin Gothic Medium",
+ "Century Gothic",
+ "Liberation Sans",
+ sans-serif,
+);
+
+/// A variable that outputs a Garamond font stack.
+///
+/// @link https://goo.gl/QQFEkV
+///
+/// @type list
+///
+/// @example scss
+/// .element {
+/// font-family: $font-stack-garamond;
+/// }
+///
+/// // CSS Output
+/// .element {
+/// font-family: "Garamond", "Baskerville", "Baskerville Old Face", "Hoefler Text", "Times New Roman", serif;
+/// }
+
+$font-stack-garamond: (
+ "Garamond",
+ "Baskerville",
+ "Baskerville Old Face",
+ "Hoefler Text",
+ "Times New Roman",
+ serif,
+);
+
+/// A variable that outputs a Georgia font stack.
+///
+/// @link https://goo.gl/wtzVPy
+///
+/// @type list
+///
+/// @example scss
+/// .element {
+/// font-family: $font-stack-georgia;
+/// }
+///
+/// // CSS Output
+/// .element {
+/// font-family: "Georgia", "Times", "Times New Roman", serif;
+/// }
+
+$font-stack-georgia: (
+ "Georgia",
+ "Times",
+ "Times New Roman",
+ serif,
+);
+
+/// A variable that outputs a Hoefler Text font stack.
+///
+/// @link https://goo.gl/n7U7zx
+///
+/// @type list
+///
+/// @example scss
+/// .element {
+/// font-family: $font-stack-hoefler-text;
+/// }
+///
+/// // CSS Output
+/// .element {
+/// font-family: "Hoefler Text", "Baskerville Old Face", "Garamond", "Times New Roman", serif;
+/// }
+
+$font-stack-hoefler-text: (
+ "Hoefler Text",
+ "Baskerville Old Face",
+ "Garamond",
+ "Times New Roman",
+ serif,
+);
+
+/// A variable that outputs a Consolas font stack.
+///
+/// @link https://goo.gl/iKrtqv
+///
+/// @type list
+///
+/// @example scss
+/// .element {
+/// font-family: $font-stack-consolas;
+/// }
+///
+/// // CSS Output
+/// .element {
+/// font-family: "Consolas", "monaco", monospace;
+/// }
+
+$font-stack-consolas: (
+ "Consolas",
+ "monaco",
+ monospace,
+);
+
+/// A variable that outputs a Courier New font stack.
+///
+/// @link https://goo.gl/bHfWMP
+///
+/// @type list
+///
+/// @example scss
+/// .element {
+/// font-family: $font-stack-courier-new;
+/// }
+///
+/// // CSS Output
+/// .element {
+/// font-family: "Courier New", "Courier", "Lucida Sans Typewriter", "Lucida Typewriter", monospace;
+/// }
+
+$font-stack-courier-new: (
+ "Courier New",
+ "Courier",
+ "Lucida Sans Typewriter",
+ "Lucida Typewriter",
+ monospace,
+);
+
+/// A variable that outputs a Monaco font stack.
+///
+/// @link https://goo.gl/9PgKDO
+///
+/// @type list
+///
+/// @example scss
+/// .element {
+/// font-family: $font-stack-monaco;
+/// }
+///
+/// // CSS Output
+/// .element {
+/// font-family: "Monaco", "Consolas", "Lucida Console", monospace;
+/// }
+
+$font-stack-monaco: (
+ "Monaco",
+ "Consolas",
+ "Lucida Console",
+ monospace,
+);
diff --git a/_sass/node_modules/bourbon/core/bourbon/library/_hide-text.scss b/_sass/node_modules/bourbon/core/bourbon/library/_hide-text.scss
new file mode 100644
index 0000000000..e9ee0f929b
--- /dev/null
+++ b/_sass/node_modules/bourbon/core/bourbon/library/_hide-text.scss
@@ -0,0 +1,24 @@
+@charset "UTF-8";
+
+/// Hides the text in an element, commonly used to show an image instead. Some
+/// elements will need block-level styles applied.
+///
+/// @link https://goo.gl/EvLRIu
+///
+/// @example scss
+/// .element {
+/// @include hide-text;
+/// }
+///
+/// // CSS Output
+/// .element {
+/// overflow: hidden;
+/// text-indent: 101%;
+/// white-space: nowrap;
+/// }
+
+@mixin hide-text {
+ overflow: hidden;
+ text-indent: 101%;
+ white-space: nowrap;
+}
diff --git a/_sass/node_modules/bourbon/core/bourbon/library/_hide-visually.scss b/_sass/node_modules/bourbon/core/bourbon/library/_hide-visually.scss
new file mode 100644
index 0000000000..4d092c70b6
--- /dev/null
+++ b/_sass/node_modules/bourbon/core/bourbon/library/_hide-visually.scss
@@ -0,0 +1,70 @@
+@charset "UTF-8";
+
+/// Hides an element visually while still allowing the content to be accessible
+/// to assistive technology, e.g. screen readers. Passing `unhide` will reverse
+/// the affects of the hiding, which is handy for showing the element on focus,
+/// for example.
+///
+/// @link https://goo.gl/Vf1TGn
+///
+/// @argument {string} $toggle [hide]
+/// Accepts `hide` or `unhide`. `unhide` reverses the affects of `hide`.
+///
+/// @example scss
+/// .element {
+/// @include hide-visually;
+///
+/// &:active,
+/// &:focus {
+/// @include hide-visually("unhide");
+/// }
+/// }
+///
+/// // CSS Output
+/// .element {
+/// border: 0;
+/// clip: rect(1px, 1px, 1px, 1px);
+/// clip-path: inset(100%);
+/// height: 1px;
+/// overflow: hidden;
+/// padding: 0;
+/// position: absolute;
+/// width: 1px;
+/// }
+///
+/// .hide-visually:active,
+/// .hide-visually:focus {
+/// clip: auto;
+/// clip-path: none;
+/// height: auto;
+/// overflow: visible;
+/// position: static;
+/// width: auto;
+/// }
+///
+/// @since 5.0.0
+
+@mixin hide-visually($toggle: "hide") {
+ @if not index("hide" "unhide", $toggle) {
+ @error "`#{$toggle}` is not a valid value for the `$toggle` argument in " +
+ "the `hide-visually` mixin. Must be either `hide` or `unhide`.";
+ } @else if $toggle == "hide" {
+ border: 0;
+ clip: rect(1px, 1px, 1px, 1px);
+ clip-path: inset(100%);
+ height: 1px;
+ overflow: hidden;
+ padding: 0;
+ position: absolute;
+ white-space: nowrap;
+ width: 1px;
+ } @else if $toggle == "unhide" {
+ clip: auto;
+ clip-path: none;
+ height: auto;
+ overflow: visible;
+ position: static;
+ white-space: inherit;
+ width: auto;
+ }
+}
diff --git a/_sass/node_modules/bourbon/core/bourbon/library/_margin.scss b/_sass/node_modules/bourbon/core/bourbon/library/_margin.scss
new file mode 100644
index 0000000000..29fa7abbb8
--- /dev/null
+++ b/_sass/node_modules/bourbon/core/bourbon/library/_margin.scss
@@ -0,0 +1,37 @@
+@charset "UTF-8";
+
+/// Provides a concise, one-line method for setting `margin` on specific edges
+/// of a box. Use a `null` value to âskipâ edges of the box with standard
+/// CSS shorthand.
+///
+/// @argument {list} $values
+/// List of margin values; accepts CSS shorthand.
+///
+/// @example scss
+/// .element {
+/// @include margin(null auto);
+/// }
+///
+/// // CSS Output
+/// .element {
+/// margin-left: auto;
+/// margin-right: auto;
+/// }
+///
+/// @example scss
+/// .element {
+/// @include margin(10px 3em 20vh null);
+/// }
+///
+/// // CSS Output
+/// .element {
+/// margin-bottom: 20vh;
+/// margin-right: 3em;
+/// margin-top: 10px;
+/// }
+///
+/// @require {mixin} _directional-property
+
+@mixin margin($values) {
+ @include _directional-property(margin, null, $values);
+}
diff --git a/_sass/node_modules/bourbon/core/bourbon/library/_modular-scale.scss b/_sass/node_modules/bourbon/core/bourbon/library/_modular-scale.scss
new file mode 100644
index 0000000000..81f2ab9a0c
--- /dev/null
+++ b/_sass/node_modules/bourbon/core/bourbon/library/_modular-scale.scss
@@ -0,0 +1,120 @@
+@charset "UTF-8";
+
+/// Increments up or down a defined scale and returns an adjusted value. This
+/// helps establish consistent measurements and spacial relationships throughout
+/// your project. We provide a list of commonly used scales as
+/// [pre-defined variables][scales].
+///
+/// [scales]: https://github.com/thoughtbot/bourbon/blob/master/core/bourbon/helpers/_scales.scss
+///
+/// @argument {number (unitless)} $increment
+/// How many steps to increment up or down the scale.
+///
+/// @argument {number (with unit) | list} $value [1em]
+/// The base value the scale starts at. Can also be set globally using the
+/// `modular-scale-base` key in the Bourbon settings.
+///
+/// @argument {number (unitless)} $ratio [1.25]
+/// The ratio the scale is built on. Can also be set globally using the
+/// `modular-scale-ratio` key in the Bourbon settings.
+///
+/// @return {number (with unit)}
+///
+/// @example scss
+/// .element {
+/// font-size: modular-scale(2);
+/// }
+///
+/// // CSS Output
+/// .element {
+/// font-size: 1.5625em;
+/// }
+///
+/// @example scss
+/// .element {
+/// margin-right: modular-scale(3, 2em);
+/// }
+///
+/// // CSS Output
+/// .element {
+/// margin-right: 3.90625em;
+/// }
+///
+/// @example scss
+/// .element {
+/// font-size: modular-scale(3, 1em 1.6em, $major-seventh);
+/// }
+///
+/// // CSS Output
+/// .element {
+/// font-size: 3em;
+/// }
+///
+/// @example scss
+/// // Globally change the base ratio
+/// $bourbon: (
+/// "modular-scale-ratio": 1.2,
+/// );
+///
+/// .element {
+/// font-size: modular-scale(3);
+/// }
+///
+/// // CSS Output
+/// .element {
+/// font-size: 1.728em;
+/// }
+///
+/// @require {function} _fetch-bourbon-setting
+
+@function modular-scale(
+ $increment,
+ $value: _fetch-bourbon-setting("modular-scale-base"),
+ $ratio: _fetch-bourbon-setting("modular-scale-ratio")
+) {
+ $v1: nth($value, 1);
+ $v2: nth($value, length($value));
+ $value: $v1;
+
+ // scale $v2 to just above $v1
+ @while $v2 > $v1 {
+ $v2: ($v2 / $ratio); // will be off-by-1
+ }
+ @while $v2 < $v1 {
+ $v2: ($v2 * $ratio); // will fix off-by-1
+ }
+
+ // check AFTER scaling $v2 to prevent double-counting corner-case
+ $double-stranded: $v2 > $v1;
+
+ @if $increment > 0 {
+ @for $i from 1 through $increment {
+ @if $double-stranded and ($v1 * $ratio) > $v2 {
+ $value: $v2;
+ $v2: ($v2 * $ratio);
+ } @else {
+ $v1: ($v1 * $ratio);
+ $value: $v1;
+ }
+ }
+ }
+
+ @if $increment < 0 {
+ // adjust $v2 to just below $v1
+ @if $double-stranded {
+ $v2: ($v2 / $ratio);
+ }
+
+ @for $i from $increment through -1 {
+ @if $double-stranded and ($v1 / $ratio) < $v2 {
+ $value: $v2;
+ $v2: ($v2 / $ratio);
+ } @else {
+ $v1: ($v1 / $ratio);
+ $value: $v1;
+ }
+ }
+ }
+
+ @return $value;
+}
diff --git a/_sass/node_modules/bourbon/core/bourbon/library/_overflow-wrap.scss b/_sass/node_modules/bourbon/core/bourbon/library/_overflow-wrap.scss
new file mode 100644
index 0000000000..6a4d148f47
--- /dev/null
+++ b/_sass/node_modules/bourbon/core/bourbon/library/_overflow-wrap.scss
@@ -0,0 +1,25 @@
+@charset "UTF-8";
+
+/// Outputs the `overflow-wrap` property and its legacy name `word-wrap` to
+/// support browsers that do not yet use `overflow-wrap`.
+///
+/// @argument {string} $wrap [break-word]
+/// Accepted CSS values are `normal`, `break-word`, `inherit`, `initial`,
+/// or `unset`.
+///
+/// @example scss
+/// .wrapper {
+/// @include overflow-wrap;
+/// }
+///
+/// // CSS Output
+/// .wrapper {
+/// word-wrap: break-word;
+/// overflow-wrap: break-word;
+/// }
+
+@mixin overflow-wrap($wrap: break-word) {
+ word-wrap: $wrap;
+ // stylelint-disable-next-line order/properties-alphabetical-order
+ overflow-wrap: $wrap;
+}
diff --git a/_sass/node_modules/bourbon/core/bourbon/library/_padding.scss b/_sass/node_modules/bourbon/core/bourbon/library/_padding.scss
new file mode 100644
index 0000000000..7d401bb7d4
--- /dev/null
+++ b/_sass/node_modules/bourbon/core/bourbon/library/_padding.scss
@@ -0,0 +1,36 @@
+@charset "UTF-8";
+
+/// Provides a concise method for targeting `padding` on specific sides of a
+/// box. Use a `null` value to âskipâ a side.
+///
+/// @argument {list} $values
+/// List of padding values; accepts CSS shorthand.
+///
+/// @example scss
+/// .element-one {
+/// @include padding(null 1rem);
+/// }
+///
+/// // CSS Output
+/// .element-one {
+/// padding-left: 1rem;
+/// padding-right: 1rem;
+/// }
+///
+/// @example scss
+/// .element-two {
+/// @include padding(10vh null 10px 5%);
+/// }
+///
+/// // CSS Output
+/// .element-two {
+/// padding-bottom: 10px;
+/// padding-left: 5%;
+/// padding-top: 10vh;
+/// }
+///
+/// @require {mixin} _directional-property
+
+@mixin padding($values) {
+ @include _directional-property(padding, null, $values);
+}
diff --git a/_sass/node_modules/bourbon/core/bourbon/library/_position.scss b/_sass/node_modules/bourbon/core/bourbon/library/_position.scss
new file mode 100644
index 0000000000..3161757c19
--- /dev/null
+++ b/_sass/node_modules/bourbon/core/bourbon/library/_position.scss
@@ -0,0 +1,62 @@
+@charset "UTF-8";
+
+/// Provides a concise, one-line method for setting an elementâs positioning
+/// properties: `position`, `top`, `right`, `bottom` and `left`. Use a `null`
+/// value to âskipâ an edge of the box.
+///
+/// @argument {string} $position
+/// A CSS position value.
+///
+/// @argument {list} $box-edge-values
+/// List of lengths; accepts CSS shorthand.
+///
+/// @example scss
+/// .element {
+/// @include position(relative, 0 null null 10em);
+/// }
+///
+/// // CSS Output
+/// .element {
+/// left: 10em;
+/// position: relative;
+/// top: 0;
+/// }
+///
+/// @example scss
+/// .element {
+/// @include position(absolute, 0);
+/// }
+///
+/// // CSS Output
+/// .element {
+/// position: absolute;
+/// top: 0;
+/// right: 0;
+/// bottom: 0;
+/// left: 0;
+/// }
+///
+/// @require {function} _is-length
+///
+/// @require {function} _unpack-shorthand
+
+@mixin position(
+ $position,
+ $box-edge-values
+) {
+ $box-edge-values: _unpack-shorthand($box-edge-values);
+ $offsets: (
+ "top": nth($box-edge-values, 1),
+ "right": nth($box-edge-values, 2),
+ "bottom": nth($box-edge-values, 3),
+ "left": nth($box-edge-values, 4),
+ );
+
+ position: $position;
+
+ @each $offset, $value in $offsets {
+ @if _is-length($value) {
+ #{$offset}: $value;
+ }
+ }
+}
diff --git a/_sass/node_modules/bourbon/core/bourbon/library/_prefixer.scss b/_sass/node_modules/bourbon/core/bourbon/library/_prefixer.scss
new file mode 100644
index 0000000000..ad28e5a5f0
--- /dev/null
+++ b/_sass/node_modules/bourbon/core/bourbon/library/_prefixer.scss
@@ -0,0 +1,37 @@
+@charset "UTF-8";
+
+/// Generates vendor prefixes.
+///
+/// @argument {string} $property
+/// Property to prefix.
+///
+/// @argument {string} $value
+/// Value to use.
+///
+/// @argument {list} $prefixes
+/// Vendor prefixes to output.
+///
+/// @example scss
+/// .element {
+/// @include prefixer(appearance, none, ("webkit", "moz"));
+/// }
+///
+/// // CSS Output
+/// .element {
+/// -webkit-appearance: none;
+/// -moz-appearance: none;
+/// appearance: none;
+/// }
+///
+/// @author Hugo Giraudel
+
+@mixin prefixer(
+ $property,
+ $value,
+ $prefixes: ()
+) {
+ @each $prefix in $prefixes {
+ #{"-" + $prefix + "-" + $property}: $value;
+ }
+ #{$property}: $value;
+}
diff --git a/_sass/node_modules/bourbon/core/bourbon/library/_shade.scss b/_sass/node_modules/bourbon/core/bourbon/library/_shade.scss
new file mode 100644
index 0000000000..1e1ec7218c
--- /dev/null
+++ b/_sass/node_modules/bourbon/core/bourbon/library/_shade.scss
@@ -0,0 +1,32 @@
+@charset "UTF-8";
+
+/// Mixes a color with black.
+///
+/// @argument {color} $color
+///
+/// @argument {number (percentage)} $percent
+/// The amount of black to be mixed in.
+///
+/// @return {color}
+///
+/// @example scss
+/// .element {
+/// background-color: shade(#ffbb52, 60%);
+/// }
+///
+/// // CSS Output
+/// .element {
+/// background-color: #664a20;
+/// }
+
+@function shade(
+ $color,
+ $percent
+) {
+ @if not _is-color($color) {
+ @error "`#{$color}` is not a valid color for the `$color` argument in " +
+ "the `shade` mixin.";
+ } @else {
+ @return mix(#000, $color, $percent);
+ }
+}
diff --git a/_sass/node_modules/bourbon/core/bourbon/library/_size.scss b/_sass/node_modules/bourbon/core/bourbon/library/_size.scss
new file mode 100644
index 0000000000..c90f36ea0b
--- /dev/null
+++ b/_sass/node_modules/bourbon/core/bourbon/library/_size.scss
@@ -0,0 +1,50 @@
+@charset "UTF-8";
+
+/// Sets the `width` and `height` of the element in one statement.
+///
+/// @argument {number (with unit) | string} $width
+///
+/// @argument {number (with unit) | string} $height [$width]
+///
+/// @example scss
+/// .first-element {
+/// @include size(2em);
+/// }
+///
+/// // CSS Output
+/// .first-element {
+/// width: 2em;
+/// height: 2em;
+/// }
+///
+/// @example scss
+/// .second-element {
+/// @include size(auto, 10em);
+/// }
+///
+/// // CSS Output
+/// .second-element {
+/// width: auto;
+/// height: 10em;
+/// }
+///
+/// @require {function} _is-size
+
+@mixin size(
+ $width,
+ $height: $width
+) {
+ @if _is-size($height) {
+ height: $height;
+ } @else {
+ @error "`#{$height}` is not a valid length for the `$height` argument " +
+ "in the `size` mixin.";
+ }
+
+ @if _is-size($width) {
+ width: $width;
+ } @else {
+ @error "`#{$width}` is not a valid length for the `$width` argument " +
+ "in the `size` mixin.";
+ }
+}
diff --git a/_sass/node_modules/bourbon/core/bourbon/library/_strip-unit.scss b/_sass/node_modules/bourbon/core/bourbon/library/_strip-unit.scss
new file mode 100644
index 0000000000..f4f660a35b
--- /dev/null
+++ b/_sass/node_modules/bourbon/core/bourbon/library/_strip-unit.scss
@@ -0,0 +1,17 @@
+@charset "UTF-8";
+
+/// Strips the unit from a number.
+///
+/// @argument {number} $value
+///
+/// @return {number (unitless)}
+///
+/// @example scss
+/// $dimension: strip-unit(10em);
+///
+/// // Output
+/// $dimension: 10;
+
+@function strip-unit($value) {
+ @return ($value / ($value * 0 + 1));
+}
diff --git a/_sass/node_modules/bourbon/core/bourbon/library/_text-inputs.scss b/_sass/node_modules/bourbon/core/bourbon/library/_text-inputs.scss
new file mode 100644
index 0000000000..dfebb79d5f
--- /dev/null
+++ b/_sass/node_modules/bourbon/core/bourbon/library/_text-inputs.scss
@@ -0,0 +1,163 @@
+@charset "UTF-8";
+
+////
+/// @type list
+///
+/// @require {function} _assign-inputs
+///
+/// @require {variable} $_text-inputs-list
+////
+
+/// A list of all _text-based_ HTML inputs. Please note that you must
+/// interpolate the variable (`#{}`) to use it as a selector.
+///
+/// @example scss
+/// #{$all-text-inputs} {
+/// border: 1px solid #ccc;
+/// }
+///
+/// // CSS Output
+/// [type='color'],
+/// [type='date'],
+/// [type='datetime'],
+/// [type='datetime-local'],
+/// [type='email'],
+/// [type='month'],
+/// [type='number'],
+/// [type='password'],
+/// [type='search'],
+/// [type='tel'],
+/// [type='text'],
+/// [type='time'],
+/// [type='url'],
+/// [type='week'],
+/// input:not([type]),
+/// textarea {
+/// border: 1px solid #ccc;
+/// }
+
+$all-text-inputs: _assign-inputs($_text-inputs-list);
+
+/// A list of all _text-based_ HTML inputs with the `:active` pseudo-class
+/// applied. Please note that you must interpolate the variable (`#{}`) to use
+/// it as a selector.
+///
+/// @example scss
+/// #{$all-text-inputs-active} {
+/// border: 1px solid #aaa;
+/// }
+///
+/// // CSS Output
+/// [type='color']:active,
+/// [type='date']:active,
+/// [type='datetime']:active,
+/// [type='datetime-local']:active,
+/// [type='email']:active,
+/// [type='month']:active,
+/// [type='number']:active,
+/// [type='password']:active,
+/// [type='search']:active,
+/// [type='tel']:active,
+/// [type='text']:active,
+/// [type='time']:active,
+/// [type='url']:active,
+/// [type='week']:active,
+/// input:not([type]):active,
+/// textarea:active {
+/// border: 1px solid #aaa;
+/// }
+
+$all-text-inputs-active: _assign-inputs($_text-inputs-list, active);
+
+/// A list of all _text-based_ HTML inputs with the `:focus` pseudo-class
+/// applied. Please note that you must interpolate the variable (`#{}`) to use
+/// it as a selector.
+///
+/// @example scss
+/// #{$all-text-inputs-focus} {
+/// border: 1px solid #1565c0;
+/// }
+///
+/// // CSS Output
+/// [type='color']:focus,
+/// [type='date']:focus,
+/// [type='datetime']:focus,
+/// [type='datetime-local']:focus,
+/// [type='email']:focus,
+/// [type='month']:focus,
+/// [type='number']:focus,
+/// [type='password']:focus,
+/// [type='search']:focus,
+/// [type='tel']:focus,
+/// [type='text']:focus,
+/// [type='time']:focus,
+/// [type='url']:focus,
+/// [type='week']:focus,
+/// input:not([type]):focus,
+/// textarea:focus {
+/// border: 1px solid #1565c0;
+/// }
+
+$all-text-inputs-focus: _assign-inputs($_text-inputs-list, focus);
+
+/// A list of all _text-based_ HTML inputs with the `:hover` pseudo-class
+/// applied. Please note that you must interpolate the variable (`#{}`) to use
+/// it as a selector.
+///
+/// @example scss
+/// #{$all-text-inputs-hover} {
+/// border: 1px solid #aaa;
+/// }
+///
+/// // CSS Output
+/// [type='color']:hover,
+/// [type='date']:hover,
+/// [type='datetime']:hover,
+/// [type='datetime-local']:hover,
+/// [type='email']:hover,
+/// [type='month']:hover,
+/// [type='number']:hover,
+/// [type='password']:hover,
+/// [type='search']:hover,
+/// [type='tel']:hover,
+/// [type='text']:hover,
+/// [type='time']:hover,
+/// [type='url']:hover,
+/// [type='week']:hover,
+/// input:not([type]):hover,
+/// textarea:hover {
+/// border: 1px solid #aaa;
+/// }
+
+$all-text-inputs-hover: _assign-inputs($_text-inputs-list, hover);
+
+/// A list of all _text-based_ HTML inputs with the `:invalid` pseudo-class
+/// applied. Please note that you must interpolate the variable (`#{}`) to use
+/// it as a selector.
+///
+/// @example scss
+/// #{$all-text-inputs-invalid} {
+/// border: 1px solid #00f;
+/// }
+///
+/// // CSS Output
+/// [type='color']:invalid,
+/// [type='date']:invalid,
+/// [type='datetime']:invalid,
+/// [type='datetime-local']:invalid,
+/// [type='email']:invalid,
+/// [type='month']:invalid,
+/// [type='number']:invalid,
+/// [type='password']:invalid,
+/// [type='search']:invalid,
+/// [type='tel']:invalid,
+/// [type='text']:invalid,
+/// [type='time']:invalid,
+/// [type='url']:invalid,
+/// [type='week']:invalid,
+/// input:not([type]):invalid,
+/// textarea:invalid {
+/// border: 1px solid #00f;
+/// }
+
+$all-text-inputs-invalid: _assign-inputs($_text-inputs-list, invalid);
diff --git a/_sass/node_modules/bourbon/core/bourbon/library/_timing-functions.scss b/_sass/node_modules/bourbon/core/bourbon/library/_timing-functions.scss
new file mode 100644
index 0000000000..19814162fc
--- /dev/null
+++ b/_sass/node_modules/bourbon/core/bourbon/library/_timing-functions.scss
@@ -0,0 +1,36 @@
+@charset "UTF-8";
+
+////
+/// CSS cubic-bezier timing functions.
+///
+/// @link https://goo.gl/p8u6SK
+///
+/// @type string
+////
+
+$ease-in-quad: cubic-bezier(0.55, 0.085, 0.68, 0.53);
+$ease-in-cubic: cubic-bezier(0.55, 0.055, 0.675, 0.19);
+$ease-in-quart: cubic-bezier(0.895, 0.03, 0.685, 0.22);
+$ease-in-quint: cubic-bezier(0.755, 0.05, 0.855, 0.06);
+$ease-in-sine: cubic-bezier(0.47, 0, 0.745, 0.715);
+$ease-in-expo: cubic-bezier(0.95, 0.05, 0.795, 0.035);
+$ease-in-circ: cubic-bezier(0.6, 0.04, 0.98, 0.335);
+$ease-in-back: cubic-bezier(0.6, -0.28, 0.735, 0.045);
+
+$ease-out-quad: cubic-bezier(0.25, 0.46, 0.45, 0.94);
+$ease-out-cubic: cubic-bezier(0.215, 0.61, 0.355, 1);
+$ease-out-quart: cubic-bezier(0.165, 0.84, 0.44, 1);
+$ease-out-quint: cubic-bezier(0.23, 1, 0.32, 1);
+$ease-out-sine: cubic-bezier(0.39, 0.575, 0.565, 1);
+$ease-out-expo: cubic-bezier(0.19, 1, 0.22, 1);
+$ease-out-circ: cubic-bezier(0.075, 0.82, 0.165, 1);
+$ease-out-back: cubic-bezier(0.175, 0.885, 0.32, 1.275);
+
+$ease-in-out-quad: cubic-bezier(0.455, 0.03, 0.515, 0.955);
+$ease-in-out-cubic: cubic-bezier(0.645, 0.045, 0.355, 1);
+$ease-in-out-quart: cubic-bezier(0.77, 0, 0.175, 1);
+$ease-in-out-quint: cubic-bezier(0.86, 0, 0.07, 1);
+$ease-in-out-sine: cubic-bezier(0.445, 0.05, 0.55, 0.95);
+$ease-in-out-expo: cubic-bezier(1, 0, 0, 1);
+$ease-in-out-circ: cubic-bezier(0.785, 0.135, 0.15, 0.86);
+$ease-in-out-back: cubic-bezier(0.68, -0.55, 0.265, 1.55);
diff --git a/_sass/node_modules/bourbon/core/bourbon/library/_tint.scss b/_sass/node_modules/bourbon/core/bourbon/library/_tint.scss
new file mode 100644
index 0000000000..c9ef892914
--- /dev/null
+++ b/_sass/node_modules/bourbon/core/bourbon/library/_tint.scss
@@ -0,0 +1,32 @@
+@charset "UTF-8";
+
+/// Mixes a color with white.
+///
+/// @argument {color} $color
+///
+/// @argument {number (percentage)} $percent
+/// The amount of white to be mixed in.
+///
+/// @return {color}
+///
+/// @example scss
+/// .element {
+/// background-color: tint(#6ecaa6, 40%);
+/// }
+///
+/// // CSS Output
+/// .element {
+/// background-color: #a8dfc9;
+/// }
+
+@function tint(
+ $color,
+ $percent
+) {
+ @if not _is-color($color) {
+ @error "`#{$color}` is not a valid color for the `$color` argument in " +
+ "the `tint` mixin.";
+ } @else {
+ @return mix(#fff, $color, $percent);
+ }
+}
diff --git a/_sass/node_modules/bourbon/core/bourbon/library/_triangle.scss b/_sass/node_modules/bourbon/core/bourbon/library/_triangle.scss
new file mode 100644
index 0000000000..6ed32a1c38
--- /dev/null
+++ b/_sass/node_modules/bourbon/core/bourbon/library/_triangle.scss
@@ -0,0 +1,82 @@
+@charset "UTF-8";
+
+/// Generates a triangle pointing in a specified direction.
+///
+/// @argument {string} $direction
+/// The direction the triangle should point. Accepts `up`, `up-right`,
+/// `right`, `down-right`, `down`, `down-left`, `left` or `up-left`.
+///
+/// @argument {number (with unit)} $width
+/// Width of the triangle.
+///
+/// @argument {number (with unit)} $height
+/// Height of the triangle.
+///
+/// @argument {color} $color
+/// Color of the triangle.
+///
+/// @example scss
+/// .element {
+/// &::before {
+/// @include triangle("up", 2rem, 1rem, #b25c9c);
+/// content: "";
+/// }
+/// }
+///
+/// // CSS Output
+/// .element::before {
+/// border-style: solid;
+/// height: 0;
+/// width: 0;
+/// border-color: transparent transparent #b25c9c;
+/// border-width: 0 1rem 1rem;
+/// content: "";
+/// }
+
+@mixin triangle(
+ $direction,
+ $width,
+ $height,
+ $color
+) {
+ @if not index(
+ "up" "up-right" "right" "down-right" "down" "down-left" "left" "up-left",
+ $direction
+ ) {
+ @error "Direction must be `up`, `up-right`, `right`, `down-right`, " +
+ "`down`, `down-left`, `left` or `up-left`.";
+ } @else if not _is-color($color) {
+ @error "`#{$color}` is not a valid color for the `$color` argument in " +
+ "the `triangle` mixin.";
+ } @else {
+ border-style: solid;
+ height: 0;
+ width: 0;
+
+ @if $direction == "up" {
+ border-color: transparent transparent $color;
+ border-width: 0 ($width / 2) $height;
+ } @else if $direction == "up-right" {
+ border-color: transparent $color transparent transparent;
+ border-width: 0 $width $width 0;
+ } @else if $direction == "right" {
+ border-color: transparent transparent transparent $color;
+ border-width: ($height / 2) 0 ($height / 2) $width;
+ } @else if $direction == "down-right" {
+ border-color: transparent transparent $color;
+ border-width: 0 0 $width $width;
+ } @else if $direction == "down" {
+ border-color: $color transparent transparent;
+ border-width: $height ($width / 2) 0;
+ } @else if $direction == "down-left" {
+ border-color: transparent transparent transparent $color;
+ border-width: $width 0 0 $width;
+ } @else if $direction == "left" {
+ border-color: transparent $color transparent transparent;
+ border-width: ($height / 2) $width ($height / 2) 0;
+ } @else if $direction == "up-left" {
+ border-color: $color transparent transparent;
+ border-width: $width $width 0 0;
+ }
+ }
+}
diff --git a/_sass/node_modules/bourbon/core/bourbon/library/_value-prefixer.scss b/_sass/node_modules/bourbon/core/bourbon/library/_value-prefixer.scss
new file mode 100644
index 0000000000..6eb886732a
--- /dev/null
+++ b/_sass/node_modules/bourbon/core/bourbon/library/_value-prefixer.scss
@@ -0,0 +1,37 @@
+@charset "UTF-8";
+
+/// Generates vendor prefixes for values.
+///
+/// @argument {string} $property
+/// Property to use.
+///
+/// @argument {string} $value
+/// Value to prefix.
+///
+/// @argument {list} $prefixes
+/// Vendor prefixes to output.
+///
+/// @example scss
+/// .element {
+/// @include value-prefixer(cursor, grab, ("webkit", "moz"));
+/// }
+///
+/// // CSS Output
+/// .element {
+/// cursor: -webkit-grab;
+/// cursor: -moz-grab;
+/// cursor: grab;
+/// }
+///
+/// @author Matthew Tobiasz
+
+@mixin value-prefixer(
+ $property,
+ $value,
+ $prefixes: ()
+) {
+ @each $prefix in $prefixes {
+ #{$property}: #{"-" + $prefix + "-" + $value};
+ }
+ #{$property}: $value;
+}
diff --git a/_sass/node_modules/bourbon/core/bourbon/settings/_settings.scss b/_sass/node_modules/bourbon/core/bourbon/settings/_settings.scss
new file mode 100644
index 0000000000..44c41c7b73
--- /dev/null
+++ b/_sass/node_modules/bourbon/core/bourbon/settings/_settings.scss
@@ -0,0 +1,75 @@
+@charset "UTF-8";
+
+/// Default global Bourbon settings. Values in this map are overwritten by any
+/// values set in the `$bourbon` map.
+///
+/// @type map
+///
+/// @property {color} contrast-switch-dark-color [#000]
+/// Global dark color for the `contrast-switch` function.
+///
+/// @property {color} contrast-switch-light-color [#fff]
+/// Global light color for the `contrast-switch` function.
+///
+/// @property {list} global-font-file-formats [("woff2", "woff")]
+/// Global font file formats for the `font-face` mixin.
+///
+/// @property {number (with unit)} modular-scale-base [1em]
+/// Global base value for the `modular-scale` function.
+///
+/// @property {number (unitless)} modular-scale-ratio [$major-third (1.25)]
+/// Global base ratio for the `modular-scale` function.
+///
+/// @property {boolean} rails-asset-pipeline [false]
+/// Set this to `true` when using the Rails Asset Pipeline and Bourbon will
+/// write asset paths using
+/// [sass-railsâ asset helpers](https://github.com/rails/sass-rails#asset-helpers).
+///
+/// @access private
+
+$_bourbon-defaults: (
+ "contrast-switch-dark-color": #000,
+ "contrast-switch-light-color": #fff,
+ "global-font-file-formats": ("woff2", "woff"),
+ "modular-scale-base": 1em,
+ "modular-scale-ratio": $major-third,
+ "rails-asset-pipeline": false,
+);
+
+/// Global Bourbon settings.
+///
+/// @name Settings
+///
+/// @type map
+///
+/// @property {color} contrast-switch-dark-color [#000]
+/// Global dark color for the `contrast-switch` function.
+///
+/// @property {color} contrast-switch-light-color [#fff]
+/// Global light color for the `contrast-switch` function.
+///
+/// @property {list} global-font-file-formats [("woff2", "woff")]
+/// Global font file formats for the `font-face` mixin.
+///
+/// @property {number (with unit)} modular-scale-base [1em]
+/// Global base value for the `modular-scale` function.
+///
+/// @property {number (unitless)} modular-scale-ratio [$major-third (1.25)]
+/// Global base ratio for the `modular-scale` function.
+///
+/// @property {boolean} rails-asset-pipeline [false]
+/// Set this to `true` when using the Rails Asset Pipeline and Bourbon will
+/// write asset paths using
+/// [sass-railsâ asset helpers](https://github.com/rails/sass-rails#asset-helpers).
+///
+/// @example scss
+/// $bourbon: (
+/// "contrast-switch-dark-color": #000,
+/// "contrast-switch-light-color": #fff,
+/// "global-font-file-formats": ("woff2", "woff"),
+/// "modular-scale-base": 1em,
+/// "modular-scale-ratio": $major-third,
+/// "rails-asset-pipeline": false,
+/// );
+
+$bourbon: () !default;
diff --git a/_sass/node_modules/bourbon/core/bourbon/utilities/_assign-inputs.scss b/_sass/node_modules/bourbon/core/bourbon/utilities/_assign-inputs.scss
new file mode 100644
index 0000000000..e37455373f
--- /dev/null
+++ b/_sass/node_modules/bourbon/core/bourbon/utilities/_assign-inputs.scss
@@ -0,0 +1,28 @@
+@charset "UTF-8";
+
+/// Append pseudo-classes to a selector(s).
+///
+/// @argument {list | string} $inputs
+/// A selector, or list of selectors, to apply the pseudo-class to.
+///
+/// @argument {pseudo-class} $pseudo [null]
+/// The pseudo-class to be appended.
+///
+/// @return {list}
+///
+/// @access private
+
+@function _assign-inputs(
+ $inputs,
+ $pseudo: null
+) {
+ $list: ();
+
+ @each $input in $inputs {
+ $input: unquote($input);
+ $input: if($pseudo, $input + ":" + $pseudo, $input);
+ $list: append($list, $input, comma);
+ }
+
+ @return $list;
+}
diff --git a/_sass/node_modules/bourbon/core/bourbon/utilities/_compact-shorthand.scss b/_sass/node_modules/bourbon/core/bourbon/utilities/_compact-shorthand.scss
new file mode 100644
index 0000000000..98a98dba1c
--- /dev/null
+++ b/_sass/node_modules/bourbon/core/bourbon/utilities/_compact-shorthand.scss
@@ -0,0 +1,42 @@
+@charset "UTF-8";
+
+/// Transforms shorthand to its shortest possible form.
+///
+/// @argument {list} $values
+/// List of directional values.
+///
+/// @example scss
+/// $values: _compact-shorthand(10px 20px 10px 20px);
+///
+/// // Output
+/// $values: 10px 20px;
+///
+/// @return {list}
+///
+/// @access private
+
+@function _compact-shorthand($values) {
+ $output: null;
+
+ $a: nth($values, 1);
+ $b: if(length($values) < 2, $a, nth($values, 2));
+ $c: if(length($values) < 3, $a, nth($values, 3));
+ $d: if(length($values) < 2, $a, nth($values, if(length($values) < 4, 2, 4)));
+
+ @if $a == 0 { $a: 0; }
+ @if $b == 0 { $b: 0; }
+ @if $c == 0 { $c: 0; }
+ @if $d == 0 { $d: 0; }
+
+ @if $a == $b and $a == $c and $a == $d {
+ $output: $a;
+ } @else if $a == $c and $b == $d {
+ $output: $a $b;
+ } @else if $b == $d {
+ $output: $a $b $c;
+ } @else {
+ $output: $a $b $c $d;
+ }
+
+ @return $output;
+}
diff --git a/_sass/node_modules/bourbon/core/bourbon/utilities/_contrast-ratio.scss b/_sass/node_modules/bourbon/core/bourbon/utilities/_contrast-ratio.scss
new file mode 100644
index 0000000000..1ba65ce152
--- /dev/null
+++ b/_sass/node_modules/bourbon/core/bourbon/utilities/_contrast-ratio.scss
@@ -0,0 +1,31 @@
+@charset "UTF-8";
+
+/// Programatically determines the contrast ratio between two colors.
+///
+/// Note that the alpha channel is ignored.
+///
+/// @link https://goo.gl/54htLV
+///
+/// @argument {color (hex)} $color-1
+///
+/// @argument {color (hex)} $color-2
+///
+/// @return {number (1-21)}
+///
+/// @example scss
+/// _contrast-ratio(black, white)
+///
+/// @require {function} _lightness
+///
+/// @access private
+
+@function _contrast-ratio($color-1, $color-2) {
+ $-local-lightness-1: _lightness($color-1) + 0.05;
+ $-local-lightness-2: _lightness($color-2) + 0.05;
+
+ @if $-local-lightness-1 > $-local-lightness-2 {
+ @return $-local-lightness-1 / $-local-lightness-2;
+ } @else {
+ @return $-local-lightness-2 / $-local-lightness-1;
+ }
+}
diff --git a/_sass/node_modules/bourbon/core/bourbon/utilities/_directional-property.scss b/_sass/node_modules/bourbon/core/bourbon/utilities/_directional-property.scss
new file mode 100644
index 0000000000..7f715d79f7
--- /dev/null
+++ b/_sass/node_modules/bourbon/core/bourbon/utilities/_directional-property.scss
@@ -0,0 +1,68 @@
+@charset "UTF-8";
+
+/// Builds directional properties by parsing CSS shorthand values. For example,
+/// a value of `10px null` will output top and bottom directional properties,
+/// but the `null` skips left and right from being output.
+///
+/// @argument {string} $property
+/// Base property.
+///
+/// @argument {string} $suffix
+/// Suffix to append. Use `null` to omit.
+///
+/// @argument {list} $values
+/// List of values to set for the property.
+///
+/// @example scss
+/// .element {
+/// @include _directional-property(border, width, null 5px);
+/// }
+///
+/// // CSS Output
+/// .element {
+/// border-right-width: 5px;
+/// border-left-width: 5px;
+/// }
+///
+/// @require {function} _compact-shorthand
+///
+/// @require {function} _contains-falsy
+///
+/// @access private
+
+@mixin _directional-property(
+ $property,
+ $suffix,
+ $values
+) {
+ $top: $property + "-top" + if($suffix, "-#{$suffix}", "");
+ $bottom: $property + "-bottom" + if($suffix, "-#{$suffix}", "");
+ $left: $property + "-left" + if($suffix, "-#{$suffix}", "");
+ $right: $property + "-right" + if($suffix, "-#{$suffix}", "");
+ $all: $property + if($suffix, "-#{$suffix}", "");
+
+ $values: _compact-shorthand($values);
+
+ @if _contains-falsy($values) {
+ @if nth($values, 1) { #{$top}: nth($values, 1); }
+
+ @if length($values) == 1 {
+ @if nth($values, 1) { #{$right}: nth($values, 1); }
+ } @else {
+ @if nth($values, 2) { #{$right}: nth($values, 2); }
+ }
+
+ @if length($values) == 2 {
+ @if nth($values, 1) { #{$bottom}: nth($values, 1); }
+ @if nth($values, 2) { #{$left}: nth($values, 2); }
+ } @else if length($values) == 3 {
+ @if nth($values, 3) { #{$bottom}: nth($values, 3); }
+ @if nth($values, 2) { #{$left}: nth($values, 2); }
+ } @else if length($values) == 4 {
+ @if nth($values, 3) { #{$bottom}: nth($values, 3); }
+ @if nth($values, 4) { #{$left}: nth($values, 4); }
+ }
+ } @else {
+ #{$all}: $values;
+ }
+}
diff --git a/_sass/node_modules/bourbon/core/bourbon/utilities/_fetch-bourbon-setting.scss b/_sass/node_modules/bourbon/core/bourbon/utilities/_fetch-bourbon-setting.scss
new file mode 100644
index 0000000000..b6e4366c13
--- /dev/null
+++ b/_sass/node_modules/bourbon/core/bourbon/utilities/_fetch-bourbon-setting.scss
@@ -0,0 +1,16 @@
+@charset "UTF-8";
+
+/// Return a Bourbon setting.
+///
+/// @argument {string} $setting
+///
+/// @return {boolean | color | list | number | string}
+///
+/// @example scss
+/// _fetch-bourbon-setting(rails-asset-pipeline)
+///
+/// @access private
+
+@function _fetch-bourbon-setting($setting) {
+ @return map-get(map-merge($_bourbon-defaults, $bourbon), $setting);
+}
diff --git a/_sass/node_modules/bourbon/core/bourbon/utilities/_font-source-declaration.scss b/_sass/node_modules/bourbon/core/bourbon/utilities/_font-source-declaration.scss
new file mode 100644
index 0000000000..f2447aa3ad
--- /dev/null
+++ b/_sass/node_modules/bourbon/core/bourbon/utilities/_font-source-declaration.scss
@@ -0,0 +1,52 @@
+@charset "UTF-8";
+
+/// Builds the `src` list for an `@font-face` declaration.
+///
+/// @link https://goo.gl/Ru1bKP
+///
+/// @argument {string} $font-family
+///
+/// @argument {string} $file-path
+///
+/// @argument {boolean} $asset-pipeline
+///
+/// @argument {list} $file-formats
+///
+/// @return {list}
+///
+/// @require {function} _contains
+///
+/// @access private
+
+@function _font-source-declaration(
+ $font-family,
+ $file-path,
+ $asset-pipeline,
+ $file-formats
+) {
+ $src: ();
+
+ $formats-map: (
+ "woff2": "#{$file-path}.woff2" format("woff2"),
+ "woff": "#{$file-path}.woff" format("woff"),
+ );
+
+ @each $format in $file-formats {
+ @if _contains(map-keys($formats-map), $format) {
+ $value: map-get($formats-map, $format);
+ $file-path: nth($value, 1);
+ $font-format: nth($value, 2);
+
+ @if $asset-pipeline == true {
+ $src: append($src, font-url($file-path) $font-format, comma);
+ } @else {
+ $src: append($src, url($file-path) $font-format, comma);
+ }
+ } @else {
+ @error "`#{$file-formats}` contains an unsupported font file format. " +
+ "Must be `woff` and/or `woff2`.";
+ }
+ }
+
+ @return $src;
+}
diff --git a/_sass/node_modules/bourbon/core/bourbon/utilities/_gamma.scss b/_sass/node_modules/bourbon/core/bourbon/utilities/_gamma.scss
new file mode 100644
index 0000000000..3e5145b127
--- /dev/null
+++ b/_sass/node_modules/bourbon/core/bourbon/utilities/_gamma.scss
@@ -0,0 +1,24 @@
+@charset "UTF-8";
+
+/// Performs gamma correction on a single color channel.
+///
+/// Note that the calculation is approximate if a `pow()` is not available.
+///
+/// @argument {number (0-1)} $channel
+///
+/// @return {number (0-1)}
+///
+/// @access private
+
+@function _gamma($channel) {
+ @if $channel < 0.03928 {
+ @return $channel / 12.92;
+ } @else {
+ $c: ($channel + 0.055) / 1.055;
+ @if function-exists("pow") {
+ @return pow($c, 2.4);
+ } @else {
+ @return 0.56 * $c * $c * $c + 0.44 * $c * $c;
+ }
+ }
+}
diff --git a/_sass/node_modules/bourbon/core/bourbon/utilities/_lightness.scss b/_sass/node_modules/bourbon/core/bourbon/utilities/_lightness.scss
new file mode 100644
index 0000000000..a2929044ba
--- /dev/null
+++ b/_sass/node_modules/bourbon/core/bourbon/utilities/_lightness.scss
@@ -0,0 +1,24 @@
+@charset "UTF-8";
+
+/// Programatically determines the lightness of a color.
+///
+/// @argument {color (hex)} $hex-color
+///
+/// @return {number (0-1)}
+///
+/// @example scss
+/// _lightness($color)
+///
+/// @access private
+
+@function _lightness($hex-color) {
+ $-local-red-raw: red(rgba($hex-color, 1));
+ $-local-green-raw: green(rgba($hex-color, 1));
+ $-local-blue-raw: blue(rgba($hex-color, 1));
+
+ $-local-red: _gamma($-local-red-raw / 255);
+ $-local-green: _gamma($-local-green-raw / 255);
+ $-local-blue: _gamma($-local-blue-raw / 255);
+
+ @return $-local-red * 0.2126 + $-local-green * 0.7152 + $-local-blue * 0.0722;
+}
diff --git a/_sass/node_modules/bourbon/core/bourbon/utilities/_unpack-shorthand.scss b/_sass/node_modules/bourbon/core/bourbon/utilities/_unpack-shorthand.scss
new file mode 100644
index 0000000000..5d39a713c2
--- /dev/null
+++ b/_sass/node_modules/bourbon/core/bourbon/utilities/_unpack-shorthand.scss
@@ -0,0 +1,29 @@
+@charset "UTF-8";
+
+/// Transforms shorthand that can range from 1-to-4 values to be 4 values.
+///
+/// @argument {list} $shorthand
+///
+/// @example scss
+/// .element {
+/// margin: _unpack-shorthand(1em 2em);
+/// }
+///
+/// // CSS Output
+/// .element {
+/// margin: 1em 2em 1em 2em;
+/// }
+///
+/// @access private
+
+@function _unpack-shorthand($shorthand) {
+ @if length($shorthand) == 1 {
+ @return nth($shorthand, 1) nth($shorthand, 1) nth($shorthand, 1) nth($shorthand, 1);
+ } @else if length($shorthand) == 2 {
+ @return nth($shorthand, 1) nth($shorthand, 2) nth($shorthand, 1) nth($shorthand, 2);
+ } @else if length($shorthand) == 3 {
+ @return nth($shorthand, 1) nth($shorthand, 2) nth($shorthand, 3) nth($shorthand, 2);
+ } @else {
+ @return $shorthand;
+ }
+}
diff --git a/_sass/node_modules/bourbon/core/bourbon/validators/_contains-falsy.scss b/_sass/node_modules/bourbon/core/bourbon/validators/_contains-falsy.scss
new file mode 100644
index 0000000000..4501e588ae
--- /dev/null
+++ b/_sass/node_modules/bourbon/core/bourbon/validators/_contains-falsy.scss
@@ -0,0 +1,20 @@
+@charset "UTF-8";
+
+/// Checks if a list does not contain any values.
+///
+/// @argument {list} $list
+/// The list to check against.
+///
+/// @return {boolean}
+///
+/// @access private
+
+@function _contains-falsy($list) {
+ @each $item in $list {
+ @if not $item {
+ @return true;
+ }
+ }
+
+ @return false;
+}
diff --git a/_sass/node_modules/bourbon/core/bourbon/validators/_contains.scss b/_sass/node_modules/bourbon/core/bourbon/validators/_contains.scss
new file mode 100644
index 0000000000..97910a1b17
--- /dev/null
+++ b/_sass/node_modules/bourbon/core/bourbon/validators/_contains.scss
@@ -0,0 +1,26 @@
+@charset "UTF-8";
+
+/// Checks if a list contains a value(s).
+///
+/// @argument {list} $list
+/// The list to check against.
+///
+/// @argument {list} $values
+/// A single value or list of values to check for.
+///
+/// @return {boolean}
+///
+/// @access private
+
+@function _contains(
+ $list,
+ $values...
+) {
+ @each $value in $values {
+ @if type-of(index($list, $value)) != "number" {
+ @return false;
+ }
+ }
+
+ @return true;
+}
diff --git a/_sass/node_modules/bourbon/core/bourbon/validators/_is-color.scss b/_sass/node_modules/bourbon/core/bourbon/validators/_is-color.scss
new file mode 100644
index 0000000000..fa40e74f69
--- /dev/null
+++ b/_sass/node_modules/bourbon/core/bourbon/validators/_is-color.scss
@@ -0,0 +1,13 @@
+@charset "UTF-8";
+
+/// Checks for a valid CSS color.
+///
+/// @argument {string} $color
+///
+/// @return {boolean}
+///
+/// @access private
+
+@function _is-color($color) {
+ @return (type-of($color) == color) or ($color == "currentColor");
+}
diff --git a/_sass/node_modules/bourbon/core/bourbon/validators/_is-length.scss b/_sass/node_modules/bourbon/core/bourbon/validators/_is-length.scss
new file mode 100644
index 0000000000..bfc3964303
--- /dev/null
+++ b/_sass/node_modules/bourbon/core/bourbon/validators/_is-length.scss
@@ -0,0 +1,20 @@
+@charset "UTF-8";
+
+/// Checks for a valid CSS length.
+///
+/// @argument {string} $value
+///
+/// @return {boolean}
+///
+/// @access private
+
+@function _is-length($value) {
+ @return type-of($value) != "null"
+ and (
+ str-slice($value + "", 1, 4) == "calc"
+ or str-slice($value + "", 1, 3) == "var"
+ or str-slice($value + "", 1, 3) == "env"
+ or index(auto inherit initial 0, $value)
+ or (type-of($value) == "number" and not(unitless($value)))
+ );
+}
diff --git a/_sass/node_modules/bourbon/core/bourbon/validators/_is-number.scss b/_sass/node_modules/bourbon/core/bourbon/validators/_is-number.scss
new file mode 100644
index 0000000000..36fa0864f1
--- /dev/null
+++ b/_sass/node_modules/bourbon/core/bourbon/validators/_is-number.scss
@@ -0,0 +1,15 @@
+@charset "UTF-8";
+
+/// Checks for a valid number.
+///
+/// @argument {number} $value
+///
+/// @require {function} _contains
+///
+/// @return {boolean}
+///
+/// @access private
+
+@function _is-number($value) {
+ @return _contains("0" "1" "2" "3" "4" "5" "6" "7" "8" "9" 0 1 2 3 4 5 6 7 8 9, $value);
+}
diff --git a/_sass/node_modules/bourbon/core/bourbon/validators/_is-size.scss b/_sass/node_modules/bourbon/core/bourbon/validators/_is-size.scss
new file mode 100644
index 0000000000..54edcb55c9
--- /dev/null
+++ b/_sass/node_modules/bourbon/core/bourbon/validators/_is-size.scss
@@ -0,0 +1,18 @@
+@charset "UTF-8";
+
+/// Checks for a valid CSS size.
+///
+/// @argument {string} $value
+///
+/// @return {boolean}
+///
+/// @require {function} _contains
+///
+/// @require {function} _is-length
+///
+/// @access private
+
+@function _is-size($value) {
+ @return _is-length($value)
+ or _contains("fill" "fit-content" "min-content" "max-content", $value);
+}
diff --git a/_sass/node_modules/include-media/dist/_include-media.scss b/_sass/node_modules/include-media/dist/_include-media.scss
new file mode 100644
index 0000000000..58a7002386
--- /dev/null
+++ b/_sass/node_modules/include-media/dist/_include-media.scss
@@ -0,0 +1,565 @@
+@charset "UTF-8";
+
+// _ _ _ _ _
+// (_) | | | | | (_)
+// _ _ __ ___| |_ _ __| | ___ _ __ ___ ___ __| |_ __ _
+// | | '_ \ / __| | | | |/ _` |/ _ \ | '_ ` _ \ / _ \/ _` | |/ _` |
+// | | | | | (__| | |_| | (_| | __/ | | | | | | __/ (_| | | (_| |
+// |_|_| |_|\___|_|\__,_|\__,_|\___| |_| |_| |_|\___|\__,_|_|\__,_|
+//
+// Simple, elegant and maintainable media queries in Sass
+// v1.4.9
+//
+// https://eduardoboucas.github.io/include-media
+//
+// Authors: Eduardo Boucas (@eduardoboucas)
+// Kitty Giraudel (@kittygiraudel)
+//
+// This project is licensed under the terms of the MIT license
+////
+/// include-media library public configuration
+/// @author Eduardo Boucas
+/// @access public
+////
+
+
+///
+/// Creates a list of global breakpoints
+///
+/// @example scss - Creates a single breakpoint with the label `phone`
+/// $breakpoints: ('phone': 320px);
+///
+$breakpoints: (
+ 'phone': 320px,
+ 'tablet': 768px,
+ 'desktop': 1024px
+) !default;
+
+
+///
+/// Creates a list of static expressions or media types
+///
+/// @example scss - Creates a single media type (screen)
+/// $media-expressions: ('screen': 'screen');
+///
+/// @example scss - Creates a static expression with logical disjunction (OR operator)
+/// $media-expressions: (
+/// 'retina2x': '(-webkit-min-device-pixel-ratio: 2), (min-resolution: 192dpi)'
+/// );
+///
+$media-expressions: (
+ 'screen': 'screen',
+ 'print': 'print',
+ 'handheld': 'handheld',
+ 'landscape': '(orientation: landscape)',
+ 'portrait': '(orientation: portrait)',
+ 'retina2x': '(-webkit-min-device-pixel-ratio: 2), (min-resolution: 192dpi), (min-resolution: 2dppx)',
+ 'retina3x': '(-webkit-min-device-pixel-ratio: 3), (min-resolution: 350dpi), (min-resolution: 3dppx)'
+) !default;
+
+
+///
+/// Defines a number to be added or subtracted from each unit when declaring breakpoints with exclusive intervals
+///
+/// @example scss - Interval for pixels is defined as `1` by default
+/// @include media('>128px') {}
+///
+/// /* Generates: */
+/// @media (min-width: 129px) {}
+///
+/// @example scss - Interval for ems is defined as `0.01` by default
+/// @include media('>20em') {}
+///
+/// /* Generates: */
+/// @media (min-width: 20.01em) {}
+///
+/// @example scss - Interval for rems is defined as `0.1` by default, to be used with `font-size: 62.5%;`
+/// @include media('>2.0rem') {}
+///
+/// /* Generates: */
+/// @media (min-width: 2.1rem) {}
+///
+$unit-intervals: (
+ 'px': 1,
+ 'em': 0.01,
+ 'rem': 0.1,
+ '': 0
+) !default;
+
+///
+/// Defines whether support for media queries is available, useful for creating separate stylesheets
+/// for browsers that don't support media queries.
+///
+/// @example scss - Disables support for media queries
+/// $im-media-support: false;
+/// @include media('>=tablet') {
+/// .foo {
+/// color: tomato;
+/// }
+/// }
+///
+/// /* Generates: */
+/// .foo {
+/// color: tomato;
+/// }
+///
+$im-media-support: true !default;
+
+///
+/// Selects which breakpoint to emulate when support for media queries is disabled. Media queries that start at or
+/// intercept the breakpoint will be displayed, any others will be ignored.
+///
+/// @example scss - This media query will show because it intercepts the static breakpoint
+/// $im-media-support: false;
+/// $im-no-media-breakpoint: 'desktop';
+/// @include media('>=tablet') {
+/// .foo {
+/// color: tomato;
+/// }
+/// }
+///
+/// /* Generates: */
+/// .foo {
+/// color: tomato;
+/// }
+///
+/// @example scss - This media query will NOT show because it does not intercept the desktop breakpoint
+/// $im-media-support: false;
+/// $im-no-media-breakpoint: 'tablet';
+/// @include media('>=desktop') {
+/// .foo {
+/// color: tomato;
+/// }
+/// }
+///
+/// /* No output */
+///
+$im-no-media-breakpoint: 'desktop' !default;
+
+///
+/// Selects which media expressions are allowed in an expression for it to be used when media queries
+/// are not supported.
+///
+/// @example scss - This media query will show because it intercepts the static breakpoint and contains only accepted media expressions
+/// $im-media-support: false;
+/// $im-no-media-breakpoint: 'desktop';
+/// $im-no-media-expressions: ('screen');
+/// @include media('>=tablet', 'screen') {
+/// .foo {
+/// color: tomato;
+/// }
+/// }
+///
+/// /* Generates: */
+/// .foo {
+/// color: tomato;
+/// }
+///
+/// @example scss - This media query will NOT show because it intercepts the static breakpoint but contains a media expression that is not accepted
+/// $im-media-support: false;
+/// $im-no-media-breakpoint: 'desktop';
+/// $im-no-media-expressions: ('screen');
+/// @include media('>=tablet', 'retina2x') {
+/// .foo {
+/// color: tomato;
+/// }
+/// }
+///
+/// /* No output */
+///
+$im-no-media-expressions: ('screen', 'portrait', 'landscape') !default;
+
+////
+/// Cross-engine logging engine
+/// @author Kitty Giraudel
+/// @access private
+////
+
+
+///
+/// Log a message either with `@error` if supported
+/// else with `@warn`, using `feature-exists('at-error')`
+/// to detect support.
+///
+/// @param {String} $message - Message to log
+///
+@function im-log($message) {
+ @if feature-exists('at-error') {
+ @error $message;
+ } @else {
+ @warn $message;
+ $_: noop();
+ }
+
+ @return $message;
+}
+
+
+///
+/// Wrapper mixin for the log function so it can be used with a more friendly
+/// API than `@if im-log('..') {}` or `$_: im-log('..')`. Basically, use the function
+/// within functions because it is not possible to include a mixin in a function
+/// and use the mixin everywhere else because it's much more elegant.
+///
+/// @param {String} $message - Message to log
+///
+@mixin log($message) {
+ @if im-log($message) {}
+}
+
+
+///
+/// Function with no `@return` called next to `@warn` in Sass 3.3
+/// to trigger a compiling error and stop the process.
+///
+@function noop() {}
+
+///
+/// Determines whether a list of conditions is intercepted by the static breakpoint.
+///
+/// @param {Arglist} $conditions - Media query conditions
+///
+/// @return {Boolean} - Returns true if the conditions are intercepted by the static breakpoint
+///
+@function im-intercepts-static-breakpoint($conditions...) {
+ $no-media-breakpoint-value: map-get($breakpoints, $im-no-media-breakpoint);
+
+ @if not $no-media-breakpoint-value {
+ @if im-log('`#{$im-no-media-breakpoint}` is not a valid breakpoint.') {}
+ }
+
+ @each $condition in $conditions {
+ @if not map-has-key($media-expressions, $condition) {
+ $operator: get-expression-operator($condition);
+ $prefix: get-expression-prefix($operator);
+ $value: get-expression-value($condition, $operator);
+
+ @if ($prefix == 'max' and $value <= $no-media-breakpoint-value) or
+ ($prefix == 'min' and $value > $no-media-breakpoint-value) {
+ @return false;
+ }
+ } @else if not index($im-no-media-expressions, $condition) {
+ @return false;
+ }
+ }
+
+ @return true;
+}
+
+////
+/// Parsing engine
+/// @author Kitty Giraudel
+/// @access private
+////
+
+
+///
+/// Get operator of an expression
+///
+/// @param {String} $expression - Expression to extract operator from
+///
+/// @return {String} - Any of `>=`, `>`, `<=`, `<`, `âĽ`, `â¤`
+///
+@function get-expression-operator($expression) {
+ @each $operator in ('>=', '>', '<=', '<', 'âĽ', 'â¤') {
+ @if str-index($expression, $operator) {
+ @return $operator;
+ }
+ }
+
+ // It is not possible to include a mixin inside a function, so we have to
+ // rely on the `im-log(..)` function rather than the `log(..)` mixin. Because
+ // functions cannot be called anywhere in Sass, we need to hack the call in
+ // a dummy variable, such as `$_`. If anybody ever raise a scoping issue with
+ // Sass 3.3, change this line in `@if im-log(..) {}` instead.
+ $_: im-log('No operator found in `#{$expression}`.');
+}
+
+
+///
+/// Get dimension of an expression, based on a found operator
+///
+/// @param {String} $expression - Expression to extract dimension from
+/// @param {String} $operator - Operator from `$expression`
+///
+/// @return {String} - `width` or `height` (or potentially anything else)
+///
+@function get-expression-dimension($expression, $operator) {
+ $operator-index: str-index($expression, $operator);
+ $parsed-dimension: str-slice($expression, 0, $operator-index - 1);
+ $dimension: 'width';
+
+ @if str-length($parsed-dimension) > 0 {
+ $dimension: $parsed-dimension;
+ }
+
+ @return $dimension;
+}
+
+
+///
+/// Get dimension prefix based on an operator
+///
+/// @param {String} $operator - Operator
+///
+/// @return {String} - `min` or `max`
+///
+@function get-expression-prefix($operator) {
+ @return if(index(('<', '<=', 'â¤'), $operator), 'max', 'min');
+}
+
+
+///
+/// Get value of an expression, based on a found operator
+///
+/// @param {String} $expression - Expression to extract value from
+/// @param {String} $operator - Operator from `$expression`
+///
+/// @return {Number} - A numeric value
+///
+@function get-expression-value($expression, $operator) {
+ $operator-index: str-index($expression, $operator);
+ $value: str-slice($expression, $operator-index + str-length($operator));
+
+ @if map-has-key($breakpoints, $value) {
+ $value: map-get($breakpoints, $value);
+ } @else {
+ $value: to-number($value);
+ }
+
+ $interval: map-get($unit-intervals, unit($value));
+
+ @if not $interval {
+ // It is not possible to include a mixin inside a function, so we have to
+ // rely on the `im-log(..)` function rather than the `log(..)` mixin. Because
+ // functions cannot be called anywhere in Sass, we need to hack the call in
+ // a dummy variable, such as `$_`. If anybody ever raise a scoping issue with
+ // Sass 3.3, change this line in `@if im-log(..) {}` instead.
+ $_: im-log('Unknown unit `#{unit($value)}`.');
+ }
+
+ @if $operator == '>' {
+ $value: $value + $interval;
+ } @else if $operator == '<' {
+ $value: $value - $interval;
+ }
+
+ @return $value;
+}
+
+
+///
+/// Parse an expression to return a valid media-query expression
+///
+/// @param {String} $expression - Expression to parse
+///
+/// @return {String} - Valid media query
+///
+@function parse-expression($expression) {
+ // If it is part of $media-expressions, it has no operator
+ // then there is no need to go any further, just return the value
+ @if map-has-key($media-expressions, $expression) {
+ @return map-get($media-expressions, $expression);
+ }
+
+ $operator: get-expression-operator($expression);
+ $dimension: get-expression-dimension($expression, $operator);
+ $prefix: get-expression-prefix($operator);
+ $value: get-expression-value($expression, $operator);
+
+ @return '(#{$prefix}-#{$dimension}: #{$value})';
+}
+
+///
+/// Slice `$list` between `$start` and `$end` indexes
+///
+/// @access private
+///
+/// @param {List} $list - List to slice
+/// @param {Number} $start [1] - Start index
+/// @param {Number} $end [length($list)] - End index
+///
+/// @return {List} Sliced list
+///
+@function slice($list, $start: 1, $end: length($list)) {
+ @if length($list) < 1 or $start > $end {
+ @return ();
+ }
+
+ $result: ();
+
+ @for $i from $start through $end {
+ $result: append($result, nth($list, $i));
+ }
+
+ @return $result;
+}
+
+////
+/// String to number converter
+/// @author Kitty Giraudel
+/// @access private
+////
+
+
+///
+/// Casts a string into a number
+///
+/// @param {String | Number} $value - Value to be parsed
+///
+/// @return {Number}
+///
+@function to-number($value) {
+ @if type-of($value) == 'number' {
+ @return $value;
+ } @else if type-of($value) != 'string' {
+ $_: im-log('Value for `to-number` should be a number or a string.');
+ }
+
+ $first-character: str-slice($value, 1, 1);
+ $result: 0;
+ $digits: 0;
+ $minus: ($first-character == '-');
+ $numbers: ('0': 0, '1': 1, '2': 2, '3': 3, '4': 4, '5': 5, '6': 6, '7': 7, '8': 8, '9': 9);
+
+ // Remove +/- sign if present at first character
+ @if ($first-character == '+' or $first-character == '-') {
+ $value: str-slice($value, 2);
+ }
+
+ @for $i from 1 through str-length($value) {
+ $character: str-slice($value, $i, $i);
+
+ @if not (index(map-keys($numbers), $character) or $character == '.') {
+ @return to-length(if($minus, -$result, $result), str-slice($value, $i))
+ }
+
+ @if $character == '.' {
+ $digits: 1;
+ } @else if $digits == 0 {
+ $result: $result * 10 + map-get($numbers, $character);
+ } @else {
+ $digits: $digits * 10;
+ $result: $result + map-get($numbers, $character) / $digits;
+ }
+ }
+
+ @return if($minus, -$result, $result);
+}
+
+
+///
+/// Add `$unit` to `$value`
+///
+/// @param {Number} $value - Value to add unit to
+/// @param {String} $unit - String representation of the unit
+///
+/// @return {Number} - `$value` expressed in `$unit`
+///
+@function to-length($value, $unit) {
+ $units: ('px': 1px, 'cm': 1cm, 'mm': 1mm, '%': 1%, 'ch': 1ch, 'pc': 1pc, 'in': 1in, 'em': 1em, 'rem': 1rem, 'pt': 1pt, 'ex': 1ex, 'vw': 1vw, 'vh': 1vh, 'vmin': 1vmin, 'vmax': 1vmax);
+
+ @if not index(map-keys($units), $unit) {
+ $_: im-log('Invalid unit `#{$unit}`.');
+ }
+
+ @return $value * map-get($units, $unit);
+}
+
+///
+/// This mixin aims at redefining the configuration just for the scope of
+/// the call. It is helpful when having a component needing an extended
+/// configuration such as custom breakpoints (referred to as tweakpoints)
+/// for instance.
+///
+/// @author Kitty Giraudel
+///
+/// @param {Map} $tweakpoints [()] - Map of tweakpoints to be merged with `$breakpoints`
+/// @param {Map} $tweak-media-expressions [()] - Map of tweaked media expressions to be merged with `$media-expression`
+///
+/// @example scss - Extend the global breakpoints with a tweakpoint
+/// @include media-context(('custom': 678px)) {
+/// .foo {
+/// @include media('>phone', '<=custom') {
+/// // ...
+/// }
+/// }
+/// }
+///
+/// @example scss - Extend the global media expressions with a custom one
+/// @include media-context($tweak-media-expressions: ('all': 'all')) {
+/// .foo {
+/// @include media('all', '>phone') {
+/// // ...
+/// }
+/// }
+/// }
+///
+/// @example scss - Extend both configuration maps
+/// @include media-context(('custom': 678px), ('all': 'all')) {
+/// .foo {
+/// @include media('all', '>phone', '<=custom') {
+/// // ...
+/// }
+/// }
+/// }
+///
+@mixin media-context($tweakpoints: (), $tweak-media-expressions: ()) {
+ // Save global configuration
+ $global-breakpoints: $breakpoints;
+ $global-media-expressions: $media-expressions;
+
+ // Update global configuration
+ $breakpoints: map-merge($breakpoints, $tweakpoints) !global;
+ $media-expressions: map-merge($media-expressions, $tweak-media-expressions) !global;
+
+ @content;
+
+ // Restore global configuration
+ $breakpoints: $global-breakpoints !global;
+ $media-expressions: $global-media-expressions !global;
+}
+
+////
+/// include-media public exposed API
+/// @author Eduardo Boucas
+/// @access public
+////
+
+
+///
+/// Generates a media query based on a list of conditions
+///
+/// @param {Arglist} $conditions - Media query conditions
+///
+/// @example scss - With a single set breakpoint
+/// @include media('>phone') { }
+///
+/// @example scss - With two set breakpoints
+/// @include media('>phone', '<=tablet') { }
+///
+/// @example scss - With custom values
+/// @include media('>=358px', '<850px') { }
+///
+/// @example scss - With set breakpoints with custom values
+/// @include media('>desktop', '<=1350px') { }
+///
+/// @example scss - With a static expression
+/// @include media('retina2x') { }
+///
+/// @example scss - Mixing everything
+/// @include media('>=350px', '
0) {
+ @media #{unquote(parse-expression(nth($conditions, 1)))} {
+ // Recursive call
+ @include media(slice($conditions, 2)...) {
+ @content;
+ }
+ }
+ }
+}
diff --git a/_sass/node_modules/include-media/src/_config.scss b/_sass/node_modules/include-media/src/_config.scss
new file mode 100644
index 0000000000..b55fd0362d
--- /dev/null
+++ b/_sass/node_modules/include-media/src/_config.scss
@@ -0,0 +1,152 @@
+////
+/// include-media library public configuration
+/// @author Eduardo Boucas
+/// @access public
+////
+
+
+///
+/// Creates a list of global breakpoints
+///
+/// @example scss - Creates a single breakpoint with the label `phone`
+/// $breakpoints: ('phone': 320px);
+///
+$breakpoints: (
+ 'phone': 320px,
+ 'tablet': 768px,
+ 'desktop': 1024px
+) !default;
+
+
+///
+/// Creates a list of static expressions or media types
+///
+/// @example scss - Creates a single media type (screen)
+/// $media-expressions: ('screen': 'screen');
+///
+/// @example scss - Creates a static expression with logical disjunction (OR operator)
+/// $media-expressions: (
+/// 'retina2x': '(-webkit-min-device-pixel-ratio: 2), (min-resolution: 192dpi)'
+/// );
+///
+$media-expressions: (
+ 'screen': 'screen',
+ 'print': 'print',
+ 'handheld': 'handheld',
+ 'landscape': '(orientation: landscape)',
+ 'portrait': '(orientation: portrait)',
+ 'retina2x': '(-webkit-min-device-pixel-ratio: 2), (min-resolution: 192dpi), (min-resolution: 2dppx)',
+ 'retina3x': '(-webkit-min-device-pixel-ratio: 3), (min-resolution: 350dpi), (min-resolution: 3dppx)'
+) !default;
+
+
+///
+/// Defines a number to be added or subtracted from each unit when declaring breakpoints with exclusive intervals
+///
+/// @example scss - Interval for pixels is defined as `1` by default
+/// @include media('>128px') {}
+///
+/// /* Generates: */
+/// @media (min-width: 129px) {}
+///
+/// @example scss - Interval for ems is defined as `0.01` by default
+/// @include media('>20em') {}
+///
+/// /* Generates: */
+/// @media (min-width: 20.01em) {}
+///
+/// @example scss - Interval for rems is defined as `0.1` by default, to be used with `font-size: 62.5%;`
+/// @include media('>2.0rem') {}
+///
+/// /* Generates: */
+/// @media (min-width: 2.1rem) {}
+///
+$unit-intervals: (
+ 'px': 1,
+ 'em': 0.01,
+ 'rem': 0.1,
+ '': 0
+) !default;
+
+///
+/// Defines whether support for media queries is available, useful for creating separate stylesheets
+/// for browsers that don't support media queries.
+///
+/// @example scss - Disables support for media queries
+/// $im-media-support: false;
+/// @include media('>=tablet') {
+/// .foo {
+/// color: tomato;
+/// }
+/// }
+///
+/// /* Generates: */
+/// .foo {
+/// color: tomato;
+/// }
+///
+$im-media-support: true !default;
+
+///
+/// Selects which breakpoint to emulate when support for media queries is disabled. Media queries that start at or
+/// intercept the breakpoint will be displayed, any others will be ignored.
+///
+/// @example scss - This media query will show because it intercepts the static breakpoint
+/// $im-media-support: false;
+/// $im-no-media-breakpoint: 'desktop';
+/// @include media('>=tablet') {
+/// .foo {
+/// color: tomato;
+/// }
+/// }
+///
+/// /* Generates: */
+/// .foo {
+/// color: tomato;
+/// }
+///
+/// @example scss - This media query will NOT show because it does not intercept the desktop breakpoint
+/// $im-media-support: false;
+/// $im-no-media-breakpoint: 'tablet';
+/// @include media('>=desktop') {
+/// .foo {
+/// color: tomato;
+/// }
+/// }
+///
+/// /* No output */
+///
+$im-no-media-breakpoint: 'desktop' !default;
+
+///
+/// Selects which media expressions are allowed in an expression for it to be used when media queries
+/// are not supported.
+///
+/// @example scss - This media query will show because it intercepts the static breakpoint and contains only accepted media expressions
+/// $im-media-support: false;
+/// $im-no-media-breakpoint: 'desktop';
+/// $im-no-media-expressions: ('screen');
+/// @include media('>=tablet', 'screen') {
+/// .foo {
+/// color: tomato;
+/// }
+/// }
+///
+/// /* Generates: */
+/// .foo {
+/// color: tomato;
+/// }
+///
+/// @example scss - This media query will NOT show because it intercepts the static breakpoint but contains a media expression that is not accepted
+/// $im-media-support: false;
+/// $im-no-media-breakpoint: 'desktop';
+/// $im-no-media-expressions: ('screen');
+/// @include media('>=tablet', 'retina2x') {
+/// .foo {
+/// color: tomato;
+/// }
+/// }
+///
+/// /* No output */
+///
+$im-no-media-expressions: ('screen', 'portrait', 'landscape') !default;
diff --git a/_sass/node_modules/include-media/src/_media.scss b/_sass/node_modules/include-media/src/_media.scss
new file mode 100644
index 0000000000..0edce929ed
--- /dev/null
+++ b/_sass/node_modules/include-media/src/_media.scss
@@ -0,0 +1,43 @@
+////
+/// include-media public exposed API
+/// @author Eduardo Boucas
+/// @access public
+////
+
+
+///
+/// Generates a media query based on a list of conditions
+///
+/// @param {Arglist} $conditions - Media query conditions
+///
+/// @example scss - With a single set breakpoint
+/// @include media('>phone') { }
+///
+/// @example scss - With two set breakpoints
+/// @include media('>phone', '<=tablet') { }
+///
+/// @example scss - With custom values
+/// @include media('>=358px', '<850px') { }
+///
+/// @example scss - With set breakpoints with custom values
+/// @include media('>desktop', '<=1350px') { }
+///
+/// @example scss - With a static expression
+/// @include media('retina2x') { }
+///
+/// @example scss - Mixing everything
+/// @include media('>=350px', ' 0) {
+ @media #{unquote(parse-expression(nth($conditions, 1)))} {
+ // Recursive call
+ @include media(slice($conditions, 2)...) {
+ @content;
+ }
+ }
+ }
+}
diff --git a/_sass/node_modules/include-media/src/helpers/_logger.scss b/_sass/node_modules/include-media/src/helpers/_logger.scss
new file mode 100644
index 0000000000..3f24eccd91
--- /dev/null
+++ b/_sass/node_modules/include-media/src/helpers/_logger.scss
@@ -0,0 +1,44 @@
+////
+/// Cross-engine logging engine
+/// @author Kitty Giraudel
+/// @access private
+////
+
+
+///
+/// Log a message either with `@error` if supported
+/// else with `@warn`, using `feature-exists('at-error')`
+/// to detect support.
+///
+/// @param {String} $message - Message to log
+///
+@function im-log($message) {
+ @if feature-exists('at-error') {
+ @error $message;
+ } @else {
+ @warn $message;
+ $_: noop();
+ }
+
+ @return $message;
+}
+
+
+///
+/// Wrapper mixin for the log function so it can be used with a more friendly
+/// API than `@if im-log('..') {}` or `$_: im-log('..')`. Basically, use the function
+/// within functions because it is not possible to include a mixin in a function
+/// and use the mixin everywhere else because it's much more elegant.
+///
+/// @param {String} $message - Message to log
+///
+@mixin log($message) {
+ @if im-log($message) {}
+}
+
+
+///
+/// Function with no `@return` called next to `@warn` in Sass 3.3
+/// to trigger a compiling error and stop the process.
+///
+@function noop() {}
diff --git a/_sass/node_modules/include-media/src/helpers/_no-media.scss b/_sass/node_modules/include-media/src/helpers/_no-media.scss
new file mode 100644
index 0000000000..b393d839d2
--- /dev/null
+++ b/_sass/node_modules/include-media/src/helpers/_no-media.scss
@@ -0,0 +1,31 @@
+///
+/// Determines whether a list of conditions is intercepted by the static breakpoint.
+///
+/// @param {Arglist} $conditions - Media query conditions
+///
+/// @return {Boolean} - Returns true if the conditions are intercepted by the static breakpoint
+///
+@function im-intercepts-static-breakpoint($conditions...) {
+ $no-media-breakpoint-value: map-get($breakpoints, $im-no-media-breakpoint);
+
+ @if not $no-media-breakpoint-value {
+ @if im-log('`#{$im-no-media-breakpoint}` is not a valid breakpoint.') {}
+ }
+
+ @each $condition in $conditions {
+ @if not map-has-key($media-expressions, $condition) {
+ $operator: get-expression-operator($condition);
+ $prefix: get-expression-prefix($operator);
+ $value: get-expression-value($condition, $operator);
+
+ @if ($prefix == 'max' and $value <= $no-media-breakpoint-value) or
+ ($prefix == 'min' and $value > $no-media-breakpoint-value) {
+ @return false;
+ }
+ } @else if not index($im-no-media-expressions, $condition) {
+ @return false;
+ }
+ }
+
+ @return true;
+}
diff --git a/_sass/node_modules/include-media/src/helpers/_parser.scss b/_sass/node_modules/include-media/src/helpers/_parser.scss
new file mode 100644
index 0000000000..8985a7c20b
--- /dev/null
+++ b/_sass/node_modules/include-media/src/helpers/_parser.scss
@@ -0,0 +1,123 @@
+////
+/// Parsing engine
+/// @author Kitty Giraudel
+/// @access private
+////
+
+
+///
+/// Get operator of an expression
+///
+/// @param {String} $expression - Expression to extract operator from
+///
+/// @return {String} - Any of `>=`, `>`, `<=`, `<`, `âĽ`, `â¤`
+///
+@function get-expression-operator($expression) {
+ @each $operator in ('>=', '>', '<=', '<', 'âĽ', 'â¤') {
+ @if str-index($expression, $operator) {
+ @return $operator;
+ }
+ }
+
+ // It is not possible to include a mixin inside a function, so we have to
+ // rely on the `im-log(..)` function rather than the `log(..)` mixin. Because
+ // functions cannot be called anywhere in Sass, we need to hack the call in
+ // a dummy variable, such as `$_`. If anybody ever raise a scoping issue with
+ // Sass 3.3, change this line in `@if im-log(..) {}` instead.
+ $_: im-log('No operator found in `#{$expression}`.');
+}
+
+
+///
+/// Get dimension of an expression, based on a found operator
+///
+/// @param {String} $expression - Expression to extract dimension from
+/// @param {String} $operator - Operator from `$expression`
+///
+/// @return {String} - `width` or `height` (or potentially anything else)
+///
+@function get-expression-dimension($expression, $operator) {
+ $operator-index: str-index($expression, $operator);
+ $parsed-dimension: str-slice($expression, 0, $operator-index - 1);
+ $dimension: 'width';
+
+ @if str-length($parsed-dimension) > 0 {
+ $dimension: $parsed-dimension;
+ }
+
+ @return $dimension;
+}
+
+
+///
+/// Get dimension prefix based on an operator
+///
+/// @param {String} $operator - Operator
+///
+/// @return {String} - `min` or `max`
+///
+@function get-expression-prefix($operator) {
+ @return if(index(('<', '<=', 'â¤'), $operator), 'max', 'min');
+}
+
+
+///
+/// Get value of an expression, based on a found operator
+///
+/// @param {String} $expression - Expression to extract value from
+/// @param {String} $operator - Operator from `$expression`
+///
+/// @return {Number} - A numeric value
+///
+@function get-expression-value($expression, $operator) {
+ $operator-index: str-index($expression, $operator);
+ $value: str-slice($expression, $operator-index + str-length($operator));
+
+ @if map-has-key($breakpoints, $value) {
+ $value: map-get($breakpoints, $value);
+ } @else {
+ $value: to-number($value);
+ }
+
+ $interval: map-get($unit-intervals, unit($value));
+
+ @if not $interval {
+ // It is not possible to include a mixin inside a function, so we have to
+ // rely on the `im-log(..)` function rather than the `log(..)` mixin. Because
+ // functions cannot be called anywhere in Sass, we need to hack the call in
+ // a dummy variable, such as `$_`. If anybody ever raise a scoping issue with
+ // Sass 3.3, change this line in `@if im-log(..) {}` instead.
+ $_: im-log('Unknown unit `#{unit($value)}`.');
+ }
+
+ @if $operator == '>' {
+ $value: $value + $interval;
+ } @else if $operator == '<' {
+ $value: $value - $interval;
+ }
+
+ @return $value;
+}
+
+
+///
+/// Parse an expression to return a valid media-query expression
+///
+/// @param {String} $expression - Expression to parse
+///
+/// @return {String} - Valid media query
+///
+@function parse-expression($expression) {
+ // If it is part of $media-expressions, it has no operator
+ // then there is no need to go any further, just return the value
+ @if map-has-key($media-expressions, $expression) {
+ @return map-get($media-expressions, $expression);
+ }
+
+ $operator: get-expression-operator($expression);
+ $dimension: get-expression-dimension($expression, $operator);
+ $prefix: get-expression-prefix($operator);
+ $value: get-expression-value($expression, $operator);
+
+ @return '(#{$prefix}-#{$dimension}: #{$value})';
+}
diff --git a/_sass/node_modules/include-media/src/helpers/_slice.scss b/_sass/node_modules/include-media/src/helpers/_slice.scss
new file mode 100644
index 0000000000..123b65f557
--- /dev/null
+++ b/_sass/node_modules/include-media/src/helpers/_slice.scss
@@ -0,0 +1,24 @@
+///
+/// Slice `$list` between `$start` and `$end` indexes
+///
+/// @access private
+///
+/// @param {List} $list - List to slice
+/// @param {Number} $start [1] - Start index
+/// @param {Number} $end [length($list)] - End index
+///
+/// @return {List} Sliced list
+///
+@function slice($list, $start: 1, $end: length($list)) {
+ @if length($list) < 1 or $start > $end {
+ @return ();
+ }
+
+ $result: ();
+
+ @for $i from $start through $end {
+ $result: append($result, nth($list, $i));
+ }
+
+ @return $result;
+}
diff --git a/_sass/node_modules/include-media/src/helpers/_to-number.scss b/_sass/node_modules/include-media/src/helpers/_to-number.scss
new file mode 100644
index 0000000000..8230fcc2f1
--- /dev/null
+++ b/_sass/node_modules/include-media/src/helpers/_to-number.scss
@@ -0,0 +1,70 @@
+////
+/// String to number converter
+/// @author Kitty Giraudel
+/// @access private
+////
+
+
+///
+/// Casts a string into a number
+///
+/// @param {String | Number} $value - Value to be parsed
+///
+/// @return {Number}
+///
+@function to-number($value) {
+ @if type-of($value) == 'number' {
+ @return $value;
+ } @else if type-of($value) != 'string' {
+ $_: im-log('Value for `to-number` should be a number or a string.');
+ }
+
+ $first-character: str-slice($value, 1, 1);
+ $result: 0;
+ $digits: 0;
+ $minus: ($first-character == '-');
+ $numbers: ('0': 0, '1': 1, '2': 2, '3': 3, '4': 4, '5': 5, '6': 6, '7': 7, '8': 8, '9': 9);
+
+ // Remove +/- sign if present at first character
+ @if ($first-character == '+' or $first-character == '-') {
+ $value: str-slice($value, 2);
+ }
+
+ @for $i from 1 through str-length($value) {
+ $character: str-slice($value, $i, $i);
+
+ @if not (index(map-keys($numbers), $character) or $character == '.') {
+ @return to-length(if($minus, -$result, $result), str-slice($value, $i))
+ }
+
+ @if $character == '.' {
+ $digits: 1;
+ } @else if $digits == 0 {
+ $result: $result * 10 + map-get($numbers, $character);
+ } @else {
+ $digits: $digits * 10;
+ $result: $result + map-get($numbers, $character) / $digits;
+ }
+ }
+
+ @return if($minus, -$result, $result);
+}
+
+
+///
+/// Add `$unit` to `$value`
+///
+/// @param {Number} $value - Value to add unit to
+/// @param {String} $unit - String representation of the unit
+///
+/// @return {Number} - `$value` expressed in `$unit`
+///
+@function to-length($value, $unit) {
+ $units: ('px': 1px, 'cm': 1cm, 'mm': 1mm, '%': 1%, 'ch': 1ch, 'pc': 1pc, 'in': 1in, 'em': 1em, 'rem': 1rem, 'pt': 1pt, 'ex': 1ex, 'vw': 1vw, 'vh': 1vh, 'vmin': 1vmin, 'vmax': 1vmax);
+
+ @if not index(map-keys($units), $unit) {
+ $_: im-log('Invalid unit `#{$unit}`.');
+ }
+
+ @return $value * map-get($units, $unit);
+}
diff --git a/_sass/node_modules/include-media/src/plugins/_tweakpoints.scss b/_sass/node_modules/include-media/src/plugins/_tweakpoints.scss
new file mode 100644
index 0000000000..a6ef3b8e44
--- /dev/null
+++ b/_sass/node_modules/include-media/src/plugins/_tweakpoints.scss
@@ -0,0 +1,53 @@
+///
+/// This mixin aims at redefining the configuration just for the scope of
+/// the call. It is helpful when having a component needing an extended
+/// configuration such as custom breakpoints (referred to as tweakpoints)
+/// for instance.
+///
+/// @author Kitty Giraudel
+///
+/// @param {Map} $tweakpoints [()] - Map of tweakpoints to be merged with `$breakpoints`
+/// @param {Map} $tweak-media-expressions [()] - Map of tweaked media expressions to be merged with `$media-expression`
+///
+/// @example scss - Extend the global breakpoints with a tweakpoint
+/// @include media-context(('custom': 678px)) {
+/// .foo {
+/// @include media('>phone', '<=custom') {
+/// // ...
+/// }
+/// }
+/// }
+///
+/// @example scss - Extend the global media expressions with a custom one
+/// @include media-context($tweak-media-expressions: ('all': 'all')) {
+/// .foo {
+/// @include media('all', '>phone') {
+/// // ...
+/// }
+/// }
+/// }
+///
+/// @example scss - Extend both configuration maps
+/// @include media-context(('custom': 678px), ('all': 'all')) {
+/// .foo {
+/// @include media('all', '>phone', '<=custom') {
+/// // ...
+/// }
+/// }
+/// }
+///
+@mixin media-context($tweakpoints: (), $tweak-media-expressions: ()) {
+ // Save global configuration
+ $global-breakpoints: $breakpoints;
+ $global-media-expressions: $media-expressions;
+
+ // Update global configuration
+ $breakpoints: map-merge($breakpoints, $tweakpoints) !global;
+ $media-expressions: map-merge($media-expressions, $tweak-media-expressions) !global;
+
+ @content;
+
+ // Restore global configuration
+ $breakpoints: $global-breakpoints !global;
+ $media-expressions: $global-media-expressions !global;
+}
diff --git a/_sass/node_modules/include-media/tests/helpers/_SassyTester.scss b/_sass/node_modules/include-media/tests/helpers/_SassyTester.scss
new file mode 100644
index 0000000000..b2e8d50308
--- /dev/null
+++ b/_sass/node_modules/include-media/tests/helpers/_SassyTester.scss
@@ -0,0 +1,120 @@
+/// Test `$function` with `$spec` test suite
+///
+/// @author Kitty Giraudel
+///
+/// @param {String} $function - Name of function to test
+/// @param {Map} $spec - Test suite to run `$function` against
+///
+/// @return {Map}
+/// * `function`: `$function`
+/// * `length`: the length of `$tests`
+/// * `pass`: number of passing tests out of `length`
+/// * `fail`: number of failing tests out of `length`
+/// * `tests`: list of maps containing:
+/// * `input`: test input (key from `$tests`)
+/// * `expected`: expected result from `input`
+/// * `actual`: actual result from `input`
+/// * `pass`: whether the test passed or not
+/// * `fail`: whether the test failed or not
+///
+/// @example scss - Testing of a `double` function
+/// @function double($value) { @return $value * 2 }
+///
+/// $test: test('double', (
+/// 1: 2,
+/// 2: 4,
+/// 3: 6,
+/// 4: 8,
+/// ));
+///
+/// @example scss - Result of `double` tests
+/// (
+/// 'function': 'double',
+/// 'length': 4,
+/// 'pass': 4,
+/// 'fail': 0,
+/// 'tests': ( ... ),
+/// )
+///
+/// @example scss - `tests` value from result of `double` tests
+/// (
+/// (
+/// 'input': 1,
+/// 'expected': 2,
+/// 'actual': 2,
+/// 'pass': true,
+/// 'fail': false,
+/// ),
+/// // ...
+/// )
+@function test($function, $spec) {
+ $passing-tests: 0;
+ $tests: ();
+
+ @each $arguments, $expected-result in $spec {
+ $actual-result: call($function, $arguments...);
+ $passed: $actual-result == $expected-result;
+
+ $tests: append($tests, (
+ 'input': $arguments,
+ 'expected': $expected-result,
+ 'actual': $actual-result,
+ 'pass': $passed,
+ 'fail': not $passed,
+ ), 'comma');
+
+ @if $passed {
+ $passing-tests: $passing-tests + 1;
+ }
+ }
+
+ @return (
+ 'function': $function,
+ 'length': length($tests),
+ 'tests': $tests,
+ 'pass': $passing-tests,
+ 'fail': length($tests) - $passing-tests,
+ );
+}
+
+/// Mixin decorating the result of `test(..)` function to throw it as an error
+///
+/// @author Kitty Giraudel
+///
+/// @param {Map} $data - Return of `test(..)` function
+///
+/// @example scss - Printing the result of `double` function test
+/// @include run(test('double', $tests-double));
+///
+/// @example scss - Result of `double` function test
+/// Started tests for function `double`
+/// ----------
+/// Test 1 out of 4... â
+/// Test 2 out of 4... â
+/// Test 3 out of 4... â
+/// Test 4 out of 4... â
+/// ----------
+/// Finished: 0 test(s) failing out of 4
+@mixin run($data) {
+ $output: '';
+ $length: map-get($data, 'length');
+ $tests: map-get($data, 'tests');
+
+ @each $test in $tests {
+ $output: $output
+ + 'Test #{index($tests, $test)} out of #{$length}... '
+ + if(map-get($test, 'pass'), 'â', 'â\a Expected : `#{map-get($test, "expected")}`\a Actual : `#{map-get($test, "actual")}`') + '\a ';
+ }
+
+ $message: 'Started tests for function `#{map-get($data, "function")}`\a '
+ + '----------\a '
+ + $output + '\a '
+ + '----------\a '
+ + 'Finished: #{map-get($data, "fail")} test(s) failing out of #{$length}';
+
+ @if map-get($data, "fail") > 0 {
+ @error $message;
+ } @else {
+ @warn $message;
+ }
+}
diff --git a/_sass/node_modules/include-media/tests/index.scss b/_sass/node_modules/include-media/tests/index.scss
new file mode 100644
index 0000000000..dd50753425
--- /dev/null
+++ b/_sass/node_modules/include-media/tests/index.scss
@@ -0,0 +1,2 @@
+@import 'parse-expression';
+@import 'to-number';
diff --git a/_sass/node_modules/include-media/tests/parse-expression.scss b/_sass/node_modules/include-media/tests/parse-expression.scss
new file mode 100644
index 0000000000..d59c4366df
--- /dev/null
+++ b/_sass/node_modules/include-media/tests/parse-expression.scss
@@ -0,0 +1,27 @@
+@import '../dist/include-media';
+@import 'helpers/SassyTester';
+
+$tests-parse-expression: map-merge($media-expressions, (
+ '>phone': '(min-width: 321px)',
+ '=phone': '(min-width: 320px)',
+ 'âĽphone': '(min-width: 320px)',
+ '<=phone': '(max-width: 320px)',
+ 'â¤phone': '(max-width: 320px)',
+
+ '>tablet': '(min-width: 769px)',
+ '=tablet': '(min-width: 768px)',
+ 'âĽtablet': '(min-width: 768px)',
+ '<=tablet': '(max-width: 768px)',
+ 'â¤tablet': '(max-width: 768px)',
+
+ '>desktop': '(min-width: 1025px)',
+ '=desktop': '(min-width: 1024px)',
+ 'âĽdesktop': '(min-width: 1024px)',
+ '<=desktop': '(max-width: 1024px)',
+ 'â¤desktop': '(max-width: 1024px)'
+));
+
+@include run(test('parse-expression', $tests-parse-expression));
diff --git a/_sass/node_modules/include-media/tests/to-number.scss b/_sass/node_modules/include-media/tests/to-number.scss
new file mode 100644
index 0000000000..ab0e718c60
--- /dev/null
+++ b/_sass/node_modules/include-media/tests/to-number.scss
@@ -0,0 +1,19 @@
+@import '../dist/include-media';
+@import 'helpers/SassyTester';
+
+$tests-to-number: ();
+
+@for $i from 1 through 10 {
+ $tests-to-number: map-merge($tests-to-number, (
+ '#{$i}': $i,
+ '#{-$i}': -$i,
+ '#{$i / 10}': ($i / 10),
+ '#{$i / 100}': ($i / 100),
+ '#{$i}px': $i * 1px,
+ '#{$i}em': $i * 1em,
+ '#{$i}rem': $i * 1rem,
+ '#{-$i}px': -$i * 1px,
+ ));
+}
+
+@include run(test('to-number', $tests-to-number));
diff --git a/_sass/pages/_404.scss b/_sass/pages/_404.scss
new file mode 100644
index 0000000000..69c315b63d
--- /dev/null
+++ b/_sass/pages/_404.scss
@@ -0,0 +1,13 @@
+.error404 {
+ width:100%;
+ height: 100%;
+ text-align: center;
+}
+
+.error404 h1 {
+ color: #FF0000;
+ font-size: 60px;
+ font-weight: bold;
+}
+
+
diff --git a/_assets/sass/pages/_home.scss b/_sass/pages/_home.scss
similarity index 100%
rename from _assets/sass/pages/_home.scss
rename to _sass/pages/_home.scss
diff --git a/_assets/sass/vendor/_awesomplete.scss b/_sass/vendor/_awesomplete.scss
similarity index 86%
rename from _assets/sass/vendor/_awesomplete.scss
rename to _sass/vendor/_awesomplete.scss
index c4983e5ea6..369f86d77e 100644
--- a/_assets/sass/vendor/_awesomplete.scss
+++ b/_sass/vendor/_awesomplete.scss
@@ -1,5 +1,4 @@
-@import '../../node_modules/awesomplete/awesomplete.base.css';
-
+@import '../node_modules/awesomplete/awesomplete.base';
.awesomplete {
> ul {
background: #333;
diff --git a/_sass/vendor/_bootstrap.scss b/_sass/vendor/_bootstrap.scss
new file mode 100644
index 0000000000..6b50366753
--- /dev/null
+++ b/_sass/vendor/_bootstrap.scss
@@ -0,0 +1,17 @@
+@import "../node_modules/bootstrap/scss/functions";
+@import "../node_modules/bootstrap/scss/variables";
+@import "../node_modules/bootstrap/scss/mixins";
+
+@import "../node_modules/bootstrap/scss/reboot";
+@import "../node_modules/bootstrap/scss/grid";
+@import "../node_modules/bootstrap/scss/buttons";
+@import "../node_modules/bootstrap/scss/transitions";
+@import "../node_modules/bootstrap/scss/dropdown";
+@import "../node_modules/bootstrap/scss/navbar";
+@import "../node_modules/bootstrap/scss/nav";
+@import "../node_modules/bootstrap/scss/tables";
+@import "../node_modules/bootstrap/scss/card";
+@import "../node_modules/bootstrap/scss/code";
+@import "../node_modules/bootstrap/scss/alert";
+@import "../node_modules/bootstrap/scss/modal";
+@import "../node_modules/bootstrap/scss/utilities";
diff --git a/_sass/vendor/_bourbon.scss b/_sass/vendor/_bourbon.scss
new file mode 100644
index 0000000000..179ab1c60a
--- /dev/null
+++ b/_sass/vendor/_bourbon.scss
@@ -0,0 +1,2 @@
+@import '../node_modules/bourbon/core/bourbon';
+
diff --git a/_sass/vendor/_include-media.scss b/_sass/vendor/_include-media.scss
new file mode 100644
index 0000000000..d59781b5b2
--- /dev/null
+++ b/_sass/vendor/_include-media.scss
@@ -0,0 +1,2 @@
+@import '../node_modules/include-media/dist/include-media';
+
diff --git a/about.md b/about.md
index 41ffdebd5f..3f7d94426e 100644
--- a/about.md
+++ b/about.md
@@ -12,7 +12,7 @@ sidebarType: 0
@@ -37,7 +37,7 @@ Publishers had been experiencing the same challenges when implementing header bi
Header bidding empowers publishers to run unbiased auctions across demand sources, thereby increasing competition and bid density. It is in both publishers and demand partnersâ best interests to keep header bidding an open, unbiased ecosystem. Companies attempting to control header bidding tech are incentivized to prioritize their own demand for a higher margin. By keeping the code open source with community participation and moving toward community ownership, we work to ensure the header bidding auction logic is unbiased.
-Many publishers and demand partners have joined this effort to keep header bidding tech open and unbiased. The below contributing demand partners are currently maintaining their integrations with prebid.js: Yieldbot, AppNexus, AOL, OpenX, Sovrn. More are joining.
+Many publishers and demand partners have joined this effort to keep header bidding tech open and unbiased.
diff --git a/addme.md b/addme.md
index 658cb73366..0bc2d262e5 100644
--- a/addme.md
+++ b/addme.md
@@ -11,9 +11,9 @@ isNavParent: true
-#Best Practices
+# Best Practices
-#### Best Practices Listserv
+## Best Practices Listserv
Stay informed of publisher best practices for header bidding and the latest for prebid.js.
@@ -23,68 +23,64 @@ Stay informed of publisher best practices for header bidding and the latest for
- Join Best Practices Group
-
+ Join Best Practices Group
+
-
-
-#Contact Companies
-
+# Contact Companies
-#### Share your company
+## Share your company
-If you are a publisher that'd like to be contacted by bidders, or if you're a bidder and want to share more about yourself, use the below form. Note that the information you entered here will be shared in this page after your approval.
+If you are a publisher that'd like to be contacted by bidders, or if you're a bidder and want to share more about yourself, use the below form. Note that the information you entered here will be shared in this page after your approval.
@@ -93,7 +89,6 @@ If you are a publisher that'd like to be contacted by bidders, or if you're a bi
If you'd like to edit existing entries, email support@prebid.org.
-
### "Bidder" Companies
If you'd like to edit existing entries, email support@prebid.org.
diff --git a/adops/ad-server-integration.md b/adops/ad-server-integration.md
new file mode 100644
index 0000000000..00d8fe0782
--- /dev/null
+++ b/adops/ad-server-integration.md
@@ -0,0 +1,65 @@
+---
+layout: page_v2
+title: Ad Server Integration
+head_title: Ad Server Integration
+sidebarType: 3
+sbUUID: 3.2
+---
+
+# Ad Server Integration
+
+{: .no_toc }
+
+- TOC
+{: toc }
+
+Before you start your Prebid implementation, you need to have signed on with an ad server. As an independent header bidding solution, Prebid was designed to work with any ad server. One step in determining how your integration is going to work is exploring the type of support your ad server has for header bidding and how youâre going to use it. Weâre not able to provide details on all ad servers, but we can give you some general information on the most popular ad servers and those the Prebid community has documented.
+
+Note that not many ad servers currently have native support for header bidding. This is a reminder to check with your ad server to see what they support directly before you move forward.
+
+{: .alert.alert-success :}
+If you want to include information about a particular ad server not documented here, create a PR in our [Github repo](https://github.com/prebid/prebid.github.io).
+
+## Google Ad Manager
+
+Google Ad Manager (GAM) is currently the most-used ad server. Google is beta testing header bidding support in yield groups, a technology to help publishers manage external integrations. Because header bidding often involved the creation of hundreds or even thousands of line items, yield groups could be a useful option. Here are some things to consider when deciding whether to use GAM yield groups with Prebid:
+
+- As of this writing, the feature was still in beta testing.
+- You must have a GAM premium GAM account to use yield groups.
+- The following use cases currently donât work with yield groups: Native, video, AMP, Post-Bid. Google is open to feedback from the community about these scenarios.
+- The Prebid Universal Creative is not utilized. Google has ported some portions of the PUC to an internal creative.
+- Not all Prebid bid adapters are supported.
+- Aliases are not currently supported, but Google may eventually support aliases that are commonly used. There may also be future updates to support custom aliases.
+- Google Publisher Toolkit (GPT) determines bid values using Prebid.js events.
+- The yield group should win when the adjusted bid price is higher than the header bidding price bucket, which should typically occur if the publisher is rounding bids down, as is the Prebid default.
+- While we havenât seen any detailed performance testing, we hope that the improved auction dynamics from no longer using price bucketing will have beneficial effects on auction outcomes.
+
+For step-by-step instructions on using GAM, see the [Google Ad Manager Step by Step](/adops/step-by-step.html).
+
+## Other Ad Servers
+
+We donât currently have details on specific header bidding support in other ad servers. But practically speaking, these are the requirements to integrate Prebid into an ad server:
+
+- The ability to pass key-value pairs into the ad call.
+
+ {: .alert.alert-info :}
+ See the [getAdserverTargeting function](/dev-docs/publisher-api-reference/getAdserverTargeting.html) for engineering instructions on creating whatever format is required.
+- The ability to bulk create orders, line items, and creatives (or the equivalent). Since there can be hundreds - or even thousands - of objects to create, it's uncommon for people to create their ad server objects one-by-one.
+- The ability to create hundreds or thousands of objects without exceeding ad server limits.
+
+For step-by-step instructions on using some of the other ad servers, see the following documentation:
+
+- [Xandr Monetize Ad Server](/adops/setting-up-prebid-with-the-appnexus-ad-server.html)
+- [Smart Ad Server](/adops/setting-up-prebidjs-with-Smart-Ad-Server.html)
+- [FreeWheel](/adops/setting-up-prebid-video-in-freewheel.html)
+
+## Next Step
+
+[Send All Bids vs Top Price](/adops/send-all-vs-top-price.html)
+
+## Further Reader
+
+- [Planning Guide](/adops/adops-planning-guide.html)
+- [Key Values for Ad Ops](/adops/key-values.html)
+- [Prebid Universal Creative](/overview/prebid-universal-creative.html)
+- [Deals in Prebid](/adops/deals.html)
diff --git a/adops/adops-general-sbs.md b/adops/adops-general-sbs.md
new file mode 100644
index 0000000000..7a1b506366
--- /dev/null
+++ b/adops/adops-general-sbs.md
@@ -0,0 +1,176 @@
+---
+layout: page_v2
+title: General Ad Server Prebid Setup
+head_title: General Ad Server Prebid Setup
+description: General step-by-step instructions for setting up line items for Prebid within an ad server.
+#note the sidebar type needs to reflect the section this file is displayed in. See _data/sidenav.yml for the side nav categories.
+sidebarType: 3
+---
+
+# General Ad Server Prebid Setup
+
+{: .no_toc }
+
+* TOC
+{: toc }
+
+## Overview
+
+Prebid.org provides step-by-step instructions for manually configuring Prebid in the following ad servers:
+
+* [Google Ad Manager](/adops/step-by-step.html)
+* [Xandr Monetize Ad Server](/adops/setting-up-prebid-with-the-appnexus-ad-server.html)
+* [Freewheel](/adops/setting-up-prebid-video-in-freewheel.html)
+* [Smart Ad Server](/adops/setting-up-prebidjs-with-Smart-Ad-Server.html)
+
+If youâre using a different ad server, you can use the general instructions provided here and adapt them to your ad server.
+
+{: .alert.alert-info :}
+Prebid.org documentation is open source, so if you would like to add instructions for your ad server, create a PR in our [Github repository](https://github.com/prebid/prebid.github.io).
+
+## Getting Started
+
+{: .alert.alert-info :}
+We recommend reviewing the [Ad Ops Planning Guide](/adops/adops-planning-guide.html) before adding items to your ad server.
+
+At a high level, configuring an ad server to work with Prebid involves creating a set of always-on objects in your ad server that listen for bids and, when chosen, return the appropriate ad creative that will render the ad for the winning bid.
+
+For the purposes of this discussion, weâre going to refer to the elements in your ad server that contain the details of the bid, such as the price, priority, and media format, as âline items.â Line Items live in a container that weâll refer to as an "order". These elements may have different names in your ad server.
+
+### Create Advertisers and Orders
+
+Ad servers typically work in a hierarchical structure, with advertisers containing orders, which in turn contain line items. You need to have your advertisers and orders set up before you can start creating line items and creatives. The advertisers you create for Prebid will typically depend on whether youâre sending all bids or only the top price bid to the ad server.
+
+* Send Top Bid: Create one general Prebid advertiser
+* Send All Bids: Create one Prebid advertiser per bidder where orders are organized by bidder, with one or more orders containing line items targeted towards a single bidder.
+
+### Create Native Template
+
+If youâre working with native inventory, youâll most likely need to have your native template created and stored before you begin creating your line item. Follow your ad serverâs instructions for setting up native creative templates.
+
+### Create Keys
+
+When you create your line item, youâll be targeting key-value pairs that are being sent with the ad request to the ad server. You may need to predefine these keys and values before targeting them in your line items.
+
+See [Key Values](/adops/key-values.html) for information on the keys youâll need.
+
+## Set Up Your Line Items
+
+The exact order of the following steps will differ depending on your ad server.
+
+### General Settings
+
+1. Enter a name for your line item. Suggested format: Prebid â format - bidder â price bucket. For example, `Prebid â banner - BidderA â 1.50`.
+2. Set the priority of your line item to whatever you think is appropriate. Typically Prebid line items are prioritized below direct-sold but above house/remnant.
+3. Enter the sizes of your creatives:
+ * Banner/Outstream/AMP/Video: Select the sizes of all ad slots included in the Prebid process.
+ * Native: Select a native template.
+4. Long-Form (OTT) Video only:
+If youâre using competitive exclusions, fill in the associated field with the appropriate value. Youâll need to include this value when you set your targeting for the `hb_pb_cat_dur` key. See [Targeting](#targeting) below for more information.
+5. Set your line item to start immediately, with no end date.
+6. Set the price of your line item to one of your price buckets. (Youâll duplicate the line item and change this value for each additional price bucket.)
+7. Set the targeting for your line item as discussed in the next section.
+
+### Targeting
+
+Youâll need to apply custom targeting specific to the Prebid values that are passed in with the ad request.
+
+{: .alert.alert-info :}
+These instructions assume youâre sending all bids to the ad server (the default). If youâre sending only the top price bid, your targeting keys will not include the bidder code. For example, rather than targeting price buckets with `hb_pb_BidderA`, youâll target `hb_pb`. See [Send All Bids vs Top Price](/adops/send-all-vs-top-price.html) for more information.
+
+Target the price bucket key: `hb_pb_BIDDERCODE` (where BIDDERCODE is the actual code for your bidder, such as BidderA) with the value of the price bucket you entered as the price for this line item.
+
+The following additional keys must be added for the corresponding formats:
+
+**Banner/Outstream/Native:**
+
+You can use the same line item for banner, outstream, and/or native creatives. If your ad slot could be filled by two or more of these formats, you should include the hb_format_BIDDERCODE key with values specifying all expected formats.
+
+{: .alert.alert-warning :}
+If you combine native with another format in a single line item, youâll need to add creative-level targeting to designate which creatives target which format. If your ad server doesn't support creative-level targeting, you may need to break out a separate set of line items.
+
+**In-Player and Outstream Video:**
+
+Both in-player (instream) and outstream video ads receive the `hb_format_BIDDERCODE=video` key-value pair, so targeting on that key alone is not enough to choose the correct line items. If you're running both in-player and outstream video ads, they will most likely be separate line items, so you will need to target outstream line items to a âdisplayâ inventory type, or perhaps separate them by adunits.
+
+**Long-Form (OTT) Video:**
+
+For long-form video the custom key `hb_pb_cat_dur_BIDDERCODE` is required. The value of this key breaks down like this:
+
+* _pb represents the price bucket. This is the currency amount entered as the line item price.
+* _cat indicates the competitive exclusion industry code. (For engineering information, refer to the [Category Translation module](/dev-docs/modules/categoryTranslation.html)). This is the value entered as the competitive exclusion. If you are not using competitive exclusion, you can omit this portion of the value.
+* _dur is the length of the video in seconds. This is the value youâll enter as the maximum duration of the video.
+
+For example, for a line item with a $10.00 CPM as the price, a competitive exclusion of ânewsâ, and 30s entered for the video duration, you would enter the following in the custom key-value field: `hb_pb_cat_dur_BIDDERCODE = 10.00_news_30s`. If youâre not using competitive exclusion, you can have a value such as this: `hb_pb_cat_dur_BIDDERCODE = 10.00_30s`.
+
+{: .alert.alert-info :}
+For deals, the price bucket portion of this value will contain the dealID if deals are prioritized. See [Getting Started with Long Form Video](/prebid-video/video-long-form.html#configuration) for more information.
+
+{: .alert.alert-info :}
+Engineers will need to include the [Adpod module](/dev-docs/modules/adpod.html) and the [Category Translation module](/dev-docs/modules/categoryTranslation.html) in Prebid.js to implement long-form video bidding.
+
+### Creative-level Targeting
+
+If your ad server supports targeting creatives within the line item, it could come in handy. For example, if youâre going to use a single line item for multiple formats, or if you have multiple video cache locations, youâd need to set additional targeting thatâs specific to the creative rather than at the line item level.
+
+### Save the Line Item
+
+Youâve now added all fields required for targeting Prebid line items. You can add any other line item options you would normally use, such as additional targeting for geography. When youâve filled in all the appropriate fields, save your line item.
+
+## Create Your Creatives
+
+The process of creating your creatives will differ based on the type of creative.
+
+In general, you can interpret the instructions for setting up creatives in Google Ad Manager with some modifications; specifically, to the MACROs used in the ad tag. (See below for details.) Refer to the following for GAM documentation:
+
+* [GAM Creative Setup: Banner/Outstream/AMP](/adops/gam-creative-banner-sbs.html)
+* [GAM Creative Setup: Native](/adops/gam-native.html)
+* [GAM Creative Setup: Video](/adops/setting-up-prebid-video-in-dfp.html)
+
+We recommend using the [Prebid Universal Creative](/overview/prebid-universal-creative.html) and targeting an ad unit size of 1x1.
+
+If youâre working with banner or outstream creatives, the HTML youâll enter in the creatives will be similar to the following (utilizing whatever macro format is supported by your ad server):
+
+```html
+
+
+```
+
+{: .alert.alert-warning :}
+
+* Replace `%%MACRO%%` with the appropriate macro for your ad server. (Refer to your ad serverâs documentation or consult with a representative for specific details regarding the proper macros and how to use them.)
+* Replace BIDDERCODE with the appropriate code for the bidder your line item is targeting. For example, if youâre targeting BidderA, the macro variable for adId might look like `ucTagData.adId = "%%PATTERN:hb_adid_BidderA%%";`.
+* If you're hosting your own Prebid Universal Creative, make sure it's version 1.15 or later, or replace `%%PATTERN:hb_format%%.js` with `creative.js`.
+
+The example above uses the jsdelvr CDN as the domain from which the creative will serve. However, you may obtain the creative from a managed service or host it yourself. You might need to edit the creative and make adjustments to your creative settings depending on the CDN you're using.
+
+## Additional Steps
+
+The final steps in configuring Prebid on your ad server are to do the following:
+
+1. Duplicate your creatives as needed. If youâre using the Prebid Universal Creative, the body of your creatives for each format will be the same. Duplicate and rename the creative to create as many as youâll need to attach to the line item.
+2. Associate the creatives with the line item.
+3. Duplicate the line item. Youâll need one line item per price bucket. If youâre sending all bids, youâll need one line item per price bucket and per bidder. For each line item you duplicate, edit the line item to have the correct name, price bucket, and bidder code.
+
+## Further Reading
+
+* [Ad Ops Planning Guide](/adops/adops-planning-guide.html)
+* [Ad Ops and Prebid Overview](/adops/before-you-start.html)
+
\ No newline at end of file
diff --git a/adops/adops-overview-video.md b/adops/adops-overview-video.md
new file mode 100644
index 0000000000..2fa112ddd7
--- /dev/null
+++ b/adops/adops-overview-video.md
@@ -0,0 +1,157 @@
+---
+layout: page_v2
+title: Video Intro to Prebid AdOps
+description: A video overview of Prebid AdOps
+sidebarType: 3
+---
+
+# Video Overview of Prebid and Ad Operations
+
+An overview of the process of planning a Prebid integration for ad operations.
+
+{% include vimeo-iframe.html id="891677441" title="Prebid Ad Operations Planning" %}
+
+
+Further Content:
+
+- [Intro to Header Bidding](/overview/intro-to-header-bidding.html)
+- [Header Bidding with Prebid](/overview/intro.html#header-bidding-with-prebid)
+- [AdOps Planning Guide](/adops/adops-planning-guide.html)
+- [Creative Considerations](/adops/creative-considerations.html)
+- [Deals in Prebid](/adops/deals.html)
+- [Prebid Managed Services](https://prebid.org/managed-services/)
+
+Related Videos:
+
+- [Introduction to Prebid.js](/prebid/prebidjs-video.html)
+- [Prebid.js Impression Flow](/prebid/prebidjs-flow-video.html)
+- [Components of Prebid.js](/prebid/prebidjs-components-video.html)
+- [All Videos](/overview/all-videos.html)
+
+## Transcript
+
+### Introduction
+
+This video is a guide for Ad Ops professionals on planning an integration of Prebid.js with their primary ad server.
+
+A Prebid ad server setup can be complex, and every publisherâs approach is different. Setting up an ad server to use Prebid can be a large project, so itâs a good idea to make a plan before setting things up.
+
+This video will give an overview of 8 subjects to consider during your planning phase. The topics are:
+
+- Ad Server Integration Type
+- Bid Transparency
+- Price Granularity
+- Line Item Settings
+- Creatives
+- Key-Value Pairs
+- Deals
+
+This video and the help documents at docs.prebid.org will guide you through each of the topics. Check the video description for a link to the help documentation.
+
+### Objectives
+
+Before we get into the topics, letâs take a step back and talk about what weâre trying to achieve.
+
+An ideal Prebid integration maximizes yield and transparency while keeping complexity in check.
+
+Maximizing yield means generating the most advertising revenue possible by creating a competitive auction for every impression and maximizing the delivery of high-value demand sources such as private marketplace deals. To maximize transparency is to reveal as much about the auction as possible in reporting. Rich reporting allows you to maximize yield and troubleshoot issues more effectively.
+
+The ad stack should also be easy and inexpensive to set up, operate, and maintain. A complex setup is more prone to errors, requires more resources to run, and is more likely to bump up against ad server limits such as the maximum ad request character length or the maximum number of line items.
+
+### Topic 1: Ad Server Integration Type
+Next, weâll give an overview of each topic. For more information on each subject, check out the help documentation at docs.prebid.org.
+
+The first topic is Ad Server Integration Type. This stage is about evaluating the capabilities of your ad server to support header bidding.
+
+Header biddingâs power lies in its ability to value each impression individually. This means that for each available impression, Prebid needs to tell the ad server the price that header bidding buyers are willing to pay.
+
+Despite header biddingâs wide adoption online, ad servers have been slow to develop mechanisms for header bidding to submit dynamic prices at the impression level. The Prebid community has worked around the lack of options by making creative use of the ad serverâs line item key-value targeting features.
+
+These techniques are tried and true: they power header bidding on the worldâs biggest websites. But they also require ad ops teams to create large numbers of line items. Ideally, all ad servers would provide powerful dedicated support for header bidding, because this would deliver the best results for publishers. Some ad servers such as Google Ad Manager are beginning to test dedicated header bidding integration in a limited fashion. These experiments are promising, but are generally still too limited for most publishers. As a result, most Prebid publishers still use a traditional line-item-based integration method. As you start the planning process, check to see what your ad servers latest header bidding integration features are
+
+The rest of this video will assume that youâre using a traditional line item setup. Techniques designed to improve the yield and transparency of your header bidding often require you to create more line items.
+
+A typical Prebid.js integration can include thousands of ad server line items, and once the line items are set up, theyâll run for as long as they meet your header bidding needs.
+
+One goal of this planning process is determining how to satisfy your yield and reporting needs while keeping your line item count in check
+
+### Topic 2: Bid Transparency
+
+The next topic, Bid Transparency, illustrates the trade off between transparency and line item count.
+
+Most Prebid auctions will collect bids from multiple bidders, but it doesnât have to send all of the bids to the ad server. Instead, it can send only the highest-priced bid.
+
+The Send All Bids option allows you to use ad server reporting to analyze Prebid auctions in more detail, but this extra power comes at the cost of larger ad server requests, more ad server line items, and more complexity inside the ad server.
+
+Note that using send top bid does not limit your ability to give special priority to bids with deal IDs. Weâll touch upon this special case later on.
+
+### Topic 3: Price Granularity
+
+Next comes Price Granularity.
+
+This is the setting in Prebid.js that defines the rounding of header bidding bids to match the line items set up in the ad server. For example, using a price granularity of $0.10 means that a bid price of $1.26 will be considered by the ad serverâs decisioning algorithm to have a price of $1.20.
+
+Price Granularity does not affect the price that buyers pay for the ads they serve through header bidding, but does affect how header bidding bids compete with other demand sources.
+
+Using high price granularity with many tiers helps to drive yield by valuing header bidding bids accurately. When price granularity is low, the ad server will more often misjudge the value of header bidding bids, which degrades yield.
+
+However, higher price granularity also means more line items, which may be limited by operations resources or by limits imposed by your ad server provider.
+
+To give you a sense for how your Prebid choices affect line item counts, letâs run through some examples. Using Prebidâs high price granularity setting, which sets a $0.01 price tier increment from $0 to $20, will result in about 2,000 line items with a Send Top Bid setting. Using Send All Bids means multiplying 2,000 by the number of bidders. In this example, weâll assume there are 10 bidders. Using Prebidâs low setting, which is $0.50 tier increment between $0 and $5, results in just 10 line items with Send Top Price and 100 line items with Send All Bids.
+
+Eliminating trade off between yield and line item count is one key way in which direct ad server integrations for header bidding could improve performance for publishers. Consider talking about this with your ad server provider.
+
+### Topic 4: Line Item Settings
+
+Bid Transparency and Price Granularity are the two factors that have the most impact on your line item count. Once youâve made these decisions, youâll need to decide next how to name and group your line items.
+
+Each organization will have their own practices around order naming, line item naming, advertisers, and other ad server settings. Publishers that use the Send All Bids option in Prebid.js will sometimes create separate Orders for each bidder, and many publishers use a separate set of line items to be able to give a special price granularity to high-CPM formats like video.
+
+For practical tips on Prebid.js line item setup, check out the Line Item Creation document at docs.prebid.org.
+
+### Topic 5: Creatives
+
+Next, letâs talk creatives.
+
+Creatives are Javascript tags that are linked to ad server line items. When the ad server selects a Prebid line item, it triggers the creative to render the winning Prebid ad.
+
+Many Prebid integrations use the Prebid Universal Creative or âPUCâ, which is a one-size-fits all solution for rendering every ad format other than VAST video. The PUC is the easiest way to get set up with an ad server creative.
+
+Most publishers use the PUC, but you could develop a custom solution too. Some advanced publishers choose to use custom rendering solutions to gain small improvements in ad rendering performance.
+
+The Creative Considerations page at docs.prebid.org includes more information about the PUC, along with many more tips and best practices on creative setup for Prebid.
+
+### Topic 6: Key-Value Pairs
+
+The next subject is Key-Value Pairs.
+
+With a line item-based header bidding setup, Prebid.js communicates bid prices and other information to the ad server using key-value pairs that are appended to the ad server request URL.
+
+Key-value pairs are used to signify the bid prices of Prebid bidders, but thatâs not all. Deal IDs, ad size, ad format information, and much more can be transmitted to the ad server.
+
+Itâs important to know which key values will be used to pass Prebid data into your ad server, because key values supply the data that you need to target header bidding line items and report on header bidding activity with ad server reports. Sometimes, key value pairs are also necessary for the proper rendering of ads, particularly with the native and video ad formats. Because of this, itâs critically important that the engineering team in charge of Prebid integration are in close communication with the ad operations team.
+
+Hereâs a list of some of the key-value pairs that Prebid.js is able to append to ad server requests.
+
+You may want to augment or restrict the information that Prebid.js sends to your ad server. For example, if your site already uses key-value pairs to deliver large amounts of contextual page information to the ad server, then you may need to restrict Prebid.js key-value pairs to control the size of your ad server requests. The Prebid.js configuration allows you to add, remove, or modify key-value pairs to meet your needs.
+
+### Topic 7: Deals
+
+In our final topic, weâll explain how to think about working with Private Marketplace Deals in your ad server setup for Prebid.
+
+Deals help publishers drive revenue by developing strategic relationships with buyers.
+
+You can control deal delivery by creating line items targeted to specific deal IDs. This allows you to fine-tune the priority of deal bids relative to other bids and can improve deal reporting. There are options in both Prebid.js and Prebid Server to include or prioritize deal bids. Check the links below this video for more information.
+
+### Line Item Implementation
+
+Once youâve made a decision about how you will organize your line item setup, youâll need to think about how youâll implement it.
+
+Ad ops teams can create header bidding line items manually in the ad serverâs UI, but most teams use automated solutions.
+Prebidâs Line Item Manager is an open-source command line tool that automates the creation and configuration of Prebid line items in Google Ad Manager.
+
+Some publishers also choose to develop their own line item managers.
+
+Prebid Managed Service providers also offer robust line item managers along with Prebid hosting, configuration, and optimization services.
+
+For information about the Prebid Line Item Manager and Prebid Managed Services, visit the links in the description below.
diff --git a/adops/adops-planning-guide.md b/adops/adops-planning-guide.md
new file mode 100644
index 0000000000..3213832502
--- /dev/null
+++ b/adops/adops-planning-guide.md
@@ -0,0 +1,80 @@
+---
+layout: page_v2
+title: Ad Operations Planning
+head_title: Ad Operations Planning
+sidebarType: 3
+sbUUID: 3.2
+---
+
+# Ad Ops Planning Guide
+{: .no_toc }
+
+- TOC
+{: toc }
+
+There are several decisions you need to make as youâre planning out your Prebid implementation. The following diagram guides you through these decisions. Click on the boxes to navigate to detailed information about each one. (See below for an overview of these options.)
+
+
+
+
+
+
+
+
+
+
+
+
+
+{: .alert.alert-success :}
+As you go through the steps, we recommend that you document all your decisions. Many of the decisions will need to be made only once when you first set up Prebid, so good documentation will help you and future users understand the decisions and why they were made.
+
+## AdOps Video Overview
+
+An overview of the process of planning a Prebid integration for ad operations.
+
+{% include vimeo-iframe.html id="891677441" title="Prebid Ad Operations Planning" %}
+
+Notes:
+
+- [Creative Considerations](/adops/creative-considerations.html)
+- [Deals in Prebid](/adops/deals.html)
+- [Transcript of this video overview](/adops/adops-overview-video.html)
+
+## Planning Process
+
+Weâve presented the decision steps in what we believe is a logical order, but you can go in any order that makes sense to you and your implementation. Here is a brief overview of each step so you can decide where to start.
+
+[Ad Server Integration](/adops/ad-server-integration.html): Determine what type of support your ad server has for header bidding and whether you want to add that into your configuration.
+
+[Send All Bids vs Top Price](/adops/send-all-vs-top-price.html): You can choose to send all bids that are received from header bidding demand partners, or send only the top bid. Learn the advantages and disadvantages of each.
+
+[Line Item Creation](/adops/line-item-creation.html): Here we provide you with some general recommendations and requirements for setting up your line items.
+
+[Price Granularity](/adops/price-granularity.html): The granularity you want in your line item pricing is dependent on your goals, your workload, and more. Learn how to balance everything to get the outcomes you want.
+
+[Creative Considerations](/adops/creative-considerations.html): Do you want to work with one universal creative, or have many different creatives? Should you use SafeFrames? These and other questions related to working with creatives are addressed here.
+
+Some additional resources that might be helpful as you work through your setup include:
+
+[Key Values for Ad Ops](/adops/key-values.html): Your line item setup is dependent on the key-value pairs the ad server receives in the ad request. Learn what key-value pairs are and how theyâre used by Prebid, and the coordination required between ads op and engineering to ensure information gets to and from the ad server correctly.
+
+[Prebid Universal Creative](/overview/prebid-universal-creative.html): Simplify your line item setup with the Prebid Universal Creative.
+
+[Deals in Prebid](/adops/deals.html): You can negotiate deals with header bidding demand partners and have them compete with ad server inventory. Youâll need to create additional line items to support these deals. This document explains how to set up Prebid to make that happen.
+
+## Terminology
+
+Throughout this planning guide, we use the following terms to describe elements within the ad server. These terms may vary among different ad servers.
+
+**Order**: A container used to group line items that share similar properties. Orders contain information that applies to all line items attached to that order. Prebid integrations are typically set up with at least one order per bidder.
+
+**Line Item**: Line items contain the details of each bid, such as price, priority, and media format. Each line item has at least one creative attached.
+
+**Creative**: A creative is the ad that will be displayed in the ad slot if the associated line item wins the auction. In Prebid, creatives are entered in the ad server as an ad tag (or script) with directions to the actual media that will be displayed.
+
+**Key Value Pair (KVP)**: Additional parameters sent to the ad server to provide additional targeting or reporting information. Prebid sends keys with associated values that enable the ad server to match a line item to the bid and display the winning creative. A key value pair for a Prebid parameter can include things like the bid price or the name of the bidder. See [Key Values](/adops/key-values.html) for more information.
+
+## Next Step
+
+- [Ad Server Integration](/adops/ad-server-integration.html)
diff --git a/adops/before-you-start.md b/adops/before-you-start.md
index c00642c581..23b075abe2 100644
--- a/adops/before-you-start.md
+++ b/adops/before-you-start.md
@@ -6,126 +6,27 @@ sidebarType: 3
sbUUID: 3.2
---
-
-
# Ad Ops and Prebid
-{: .no_toc }
-
-Prebid products are designed to integrate with the ad ops line item configuration on the publisher's selected ad server. Whether using Prebid.js, Prebid Server or Prebid Mobile, bid targeting parameters are passed to the ad server. The ad server then attempts to match the targeting parameters to a preset line item. If successful, that line item is compared to other line items and if the Prebid bid wins the auction, the creative is returned to the web page or app for display.
-
-{% capture importantNote %}
-This page assumes you have read [Getting Started with Prebid.js](/overview/getting-started.html), though it applies to Prebid SDK and Server as well.
-{% endcapture %}
-
-{% include alerts/alert_important.html content=importantNote %}
-
-* TOC
-{: toc }
-
-## Supported ad servers
-
-The table below lists ad servers supported by Prebid and provides links to step by step documentation for the configurations those ad servers support.
-
-{: .table .table-bordered .table-striped }
-| Server | Page |
-|--------------+-----------------------------------------------------------------------------------------------------------------------------------------|
-| **Google Ad Manager** | [Step by step guide to Google Ad Manager setup](/adops/step-by-step.html) |
-| | [Send all bids to the ad server](/adops/send-all-bids-adops.html) |
-| | [Setting up Prebid for AMP in Google Ad Manager](/adops/setting-up-prebid-for-amp-in-dfp.html) |
-| | [Setting up Prebid Video in Google Ad Manager](/adops/setting-up-prebid-video-in-dfp.html) |
-| | [Setting up Prebid Native in Google Ad Manager](/adops/gam-native.html) |
-| **AppNexus** | [Setting up Prebid with the AppNexus Publisher Ad Server](/adops/setting-up-prebid-with-the-appnexus-ad-server.html) |
-| **Smart Ad Server** | [Setting up Prebid.js with Smart Ad Server](/adops/setting-up-prebidjs-with-Smart-Ad-Server.html) |
-| **FreeWheel** | [FreeWheel Guide for Premium Long-Form Video](/adops/setting-up-prebid-video-in-freewheel.html) |
-
-## Decide on price bucket granularity
-
-On a publisher's selected server the ad ops team will need to setup line items. These line items provide targeting information for the ad server, to include the CPM per impression. Prebid will pass in a bid's targeting parameters via key-values. The ad server will read these incoming targeting parameters and search through the line items for a match.
-
-Example:
-
-* Prebid.js is going to call your bidders for their price, then pass it into your ad server on the query-string. You want to target this bid price with a line item that earns you the same amount if it serves.
-
-* If you had 1-line item for every bid at a penny granularity of $0.01, $0.02, $0.03, ..., 1.23, ..., $4.56 you'd need 1,000 line items just to represent bids from $0-$10. We call this the âExactâ granularity option.
-
-* Creating 1,000 line items can be a hassle, so publishers typically use price buckets to represent price ranges that matter. For example, you could group bids into 10 cent increments, so bids of $1.06 or $1.02 would be rounded down into a single price bucket of $1.00.
-
-Our recommendation is to start with $1 or 10 cent granularity until you're more comfortable with Prebid.js. At $1, you only need to setup 10-20 line items â easy. When you're ready, get more granular with the price buckets to improve yield.
-
-{% capture dfpNote %}
-
-[Google Ad Manager has a limit](https://support.google.com/admanager/answer/1628457?hl=en#Trafficking) of 450 line items per order, which includes archived line items. If you are designing your own granularity setup, make sure you do not exceed that amount. Refer to our recommended pre-configured granularities in Prebid's API reference under the [Set Config Price Granularity instructions](/dev-docs/publisher-api-reference/setConfig.html#setConfig-Price-Granularity).
-{% endcapture %}
-
-{% include alerts/alert_note.html content= dfpNote %}
+{: .no_toc }
-## One set of line items for all bidders vs. a set of line items for each bidder
-
-### One set of line items for all bidders
-
-One set of line items for all bidders is the recommended way of setting up your line items. Choose this option if you prefer an easier, low-maintenance setup:
-
-- It's quicker and easier to setup, because you only have to create one set of line items.
-- It's easier to maintain because adding more bidders requires no change to your line item setup.
-- It's less error-prone because you only need to maintain 3 keywords:
-
-{% include default-keyword-targeting.md %}
-
-
-{% capture successNote %}
-For instructions on setting up pre-bid with one set of line items for all bidders, see [Send Top Bid to Ad Server - Step by Step guide to Google Ad Manager setup](/adops/step-by-step.html).
-{% endcapture %}
-
-{% include alerts/alert_tip.html content=successNote %}
-
-
-### One set of line items for each bidder
-
-Choose one set of line items for each bidder if you:
-
-- Have to rely on line item reporting (not query string reporting) to get winning bid by bidder analytics
- - With one set of line items for all bidders, Prebid.js only sends the highest bid to the ad server (the decision logic of choosing the highest bid can be customized by you). This is sufficient if the winning bids matter the most to you. For example, a bidder bidding 100% of time but losing in every auction still has a fill rate of 0%. However, if having access to all bid information is important to you, use one set of line items for each bidder.
-
-- Require bid landscape data for header bidding partners
- - With one set of line items for all bidders, Prebid.js sends the bidder information (Which bidder has the highest price) via a keyword `bidder=bidder_name`. To run a report to attribute winning bids to bidders, you will need to rely on your ad server's keyword reports. Google Ad Manager supports this, but some ad servers do not. Google Ad Manager does not support running reports for more than 2 keywords. Therefore, if you have existing reports that already rely on keywords, and you want to add a winning bid by bidder dimension, use one set of line items for each bidder.
-
-- Requires setting more keyword targeting within your ad server. The table below lists the required and optional keys for targeting with each of your header bidder partners.
-
-{% include send-all-bids-keyword-targeting.md %}
-
-{% capture successNote %}
-For instructions on setting up pre-bid with one set of line items for each bidder, see [Send all bids to the ad server - Ad Ops setup](/adops/send-all-bids-adops.html).
-{% endcapture %}
-
-{% include alerts/alert_tip.html content=successNote %}
-
-## Safeframes
-
-[SafeFrames are defined by the IAB](https://www.iab.com/guidelines/safeframe/) as a "managed API-enabled iframe that opens a line of communication between the publisher page and the iframe-contained ad creative."
-
-When setting up line items in your ad server, you'll need to consider whether to make the creatives safeframes or not. In general, for standard banner and native, safeframes are a good idea. Certain special mediatypes cannot use safeframes.
+Ad Operations (Ad Ops) are the people who work directly with the ad server software to create, analyze, and update ad campaigns. In companies that use automated processes rather than working directly in the ad server UI, people in Ad Ops define the inputs to the automation that ensure campaigns run as expected. Whatever your actual job title or exact job description, when we refer to âAd Opsâ weâre talking about the non-engineering tasks involved in running and managing ad campaigns.
-### Bidders known to be incompatible with safeframes
+## Ad Ops Role in Prebid
-{% assign bidder_pages = site.pages | where: "layout", "bidder" | where: "safeframes_ok", false %}
-
-{% for page in bidder_pages %}
-{{ page.title }}
-{% endfor %}
-
+To understand your role in implementing Prebid, you need to understand how header bidding works. You can get a general overview in our [Introduction to Header Bidding](/overview/intro-to-header-bidding.html) and [Introduction to Prebid](/overview/intro.html). But weâre going to provide a few more details here.
-There may be others, please check with bidders directly if you have questions about their support.
+Header bidding is a process for collecting bids for an ad slot before the ad server is called. Those bids and their related targeting information are consolidated and sent along with the ad request to the ad server.
-## Work together with your dev team
+When the ad request arrives at the ad server, the ad server reads the targeting information and looks for matching line items. This is where ad ops comes in. You need to ensure that those line items exist and are configured correctly. In order to do that, there are a number of decisions you need to make before you begin your ad server setup. Our [Ad Ops Planning](/adops/adops-planning-guide.html) guide will lead you through these decisions.
-Implementing header bidding requires much more collaboration with your dev team than normal Ad Ops setup. For example:
+After youâve completed your planning, move on to the appropriate setup documentation for your ad server.
-> Setting up price granularity requires you and the dev team working together to ensure the price buckets match. We have seen cases when the code on page sends $0.10 increments, while the line item setup expects $0.50 increments. This results in the ad server not catching 80% of the bids.
+- [Google Ad Manager](/adops/step-by-step.html)
+- [Xandr Monetize Ad Server](/adops/setting-up-prebid-with-the-appnexus-ad-server.html)
+- [Smart Ad Server](/adops/setting-up-prebidjs-with-Smart-Ad-Server.html)
+- [FreeWheel](/adops/setting-up-prebid-video-in-freewheel.html)
-## Related Topics
+## Next Step
-- [Getting Started with Prebid.js](/overview/getting-started.html): How Prebid.js works at a high level.
-- [Prebid.js and Ad Server Key Values](/features/adServerKvps.html)
-- [What is Prebid?](/overview/intro.html): Overview and history of header bidding and Prebid.js.
-+ [Docs by Format](/dev-docs/docs-by-format.html): Engineering and ad ops docs arranged by ad format (video, native, etc.).
+Read the [Ad Ops Planning](/adops/adops-planning-guide.html) guide.
diff --git a/adops/creative-considerations.md b/adops/creative-considerations.md
new file mode 100644
index 0000000000..396f19feaa
--- /dev/null
+++ b/adops/creative-considerations.md
@@ -0,0 +1,139 @@
+---
+layout: page_v2
+title: Creative Considerations
+head_title: Creative Considerations
+sidebarType: 3
+sbUUID: 3.2
+---
+
+# Creative Considerations
+
+{: .no_toc }
+
+- TOC
+{: toc }
+
+Some of the major decisions you need to make as youâre setting up your campaigns have to do with creatives. This document will provide information to help you make those decisions.
+
+{: .alert.alert-info :}
+Throughout this discussion weâre assuming youâve chosen to use the Prebid Universal Creative (PUC). See [Prebid Universal Creative](#prebid-universal-creative) below for advantages and disadvantages of this approach. For more information on the PUC as well as alternatives, see the [Prebid Universal Creative Overview](/overview/prebid-universal-creative.html).
+
+## Creatives Overview
+
+When you set up a line item for a campaign in your ad server, you have to add images or ad tags that will be displayed for that campaign. Header bidding line items have a particular kind of ad tag.
+
+The Prebid ad tag is entered into creatives on the ad server in the form of a script that will enable Prebid to find the bid that goes with a winning line item. Depending on your ad server, youâll have to declare your creative as a Third Party creative (Google Ad Manager), or set it to use HTML, or some other means of entering an ad tag (the Prebid script) rather than an image.
+
+## Prebid Universal Creative
+
+The first decision youâll need to make when it comes to creatives (with the exception of VAST video) is whether you want to use the Prebid Universal Creative (PUC). The PUC is a collection of rendering routines that can pull a particular ad ID from the Prebid cache and do the right thing to display it. You can find full details about the PUC in the [Prebid Universal Creative Overview](/overview/prebid-universal-creative.html). For now weâll focus on the advantages and disadvantages to using the PUC.
+
+The big advantage to using the PUC is that itâs the simplest approach to configuring Prebid in your ad server. It provides a robust mechanism that can be used across several formats, platforms, devices, and ad servers.
+
+The primary disadvantage to using the PUC is that it takes an extra fetch to load the PUC file vs doing everything inline to the creative. Also, loading a âuniversalâ creative means that more bytes are loaded than are actually necessary for the display of a single creative. This all leads to a slight performance penalty.
+
+Youâll need to determine whether the ease of implementation is worth the small performance penalty.
+
+## Prebid.js dynamic creatives
+
+If you have line items that target only browsers running Prebid.js, you can use [dynamic creatives](/adops/js-dynamic-creative.html) to avoid the PUC performance penalty but keep the same ease of setup and maintenance. The disadvantage of this approach is that it does not support platforms that do not run Prebid.js, such as AMP or mobile apps.
+
+## Where to Host the PUC
+
+If you choose to use the Prebid Universal Creative, you'll need to decide where to load it from:
+
+1. Prebid hosts an always-up-to-date copy of the PUC at `https://cdn.jsdelivr.net/npm/prebid-universal-creative@latest/dist/*`. The upside of this location is that it's automatically updated so it contains new features automatically.
+1. You can host the PUC at your own location. The upside of this option is that you can control when upgrades happen.
+1. You can copy the body of the PUC into your ad server creative directly. This eliminates a browser fetch, but could make upgrades more difficult.
+
+## Creative Naming
+
+You can name your creatives whatever makes sense to your organization. We recommend names in the following format: Prebid - Type - Size - N. For example, a banner creative using the PUC would be `Prebid - banner - 1x1 - 1`.
+
+## Creative Modes
+
+No matter what type of media youâre working with, you need to decide how youâre going to represent the size options in the ad server. There are three creative size modes:
+
+- Creatives are all sized 1x1
+- Creatives are sized their actual size
+- Line items are targeted per size
+
+### All Creatives 1x1
+
+If you select this mode, in the ad server youâll set the size of all your Prebid creatives to 1x1. The creatives will then be resized based on the value supplied by the demand partner in the hb_size key. This is the simplest option to implement and requires the fewest number of creatives to be created.
+
+If youâre working with Google Ad Manager (GAM) we recommend you create one general 1x1 creative, then duplicate it to attach 3 - 5 identical creatives to each line item. The reason for this is that GAM doesnât make a distinction between creatives with images attached and creatives with a script that could be used to retrieve one of many different images. It treats every creative as an individual image, and allows each one to be served to only one ad unit per page.
+
+For Prebid line items, this means that if your page has multiple ad slots that fit the same line item targeting, GAM would allow only one of them to display the creative, not realizing that one creative could point to different images. Attaching multiple identical creatives to each line item ensures that creatives from a line item matching the targeting on multiple ad slots can serve on the same page.
+
+For example, say you're using "low" granularity, which means that one line item covers bids from $1.00 to $1.49. If you have three creatives associated with that line item, the page could not display anymore than three Prebid bids in that price range. If you have infinite scroll pages, you'll have to consider the tradeoff for how many copies of creatives you want to have.
+
+### Creative Actual Size
+
+With this mode, you set specific sizes on the creatives. This mode allows for more precise reporting if youâre interested in knowing the exact sizes of creatives being served from Prebid. As with the 1x1 option, we recommend you create 3 - 5 duplicate creatives of each size. The downside is that this requires a lot of creatives per line item. If you specify 20 sizes, you would need as many as 100 duplicate creatives.
+
+### One Line Item Per Size
+
+We recommend against using this mode, but are aware some publishers use it for reporting purposes. With this mode, you would target your line item based on the value of the hb_size key. This would require you to create one line item for every size, for every bidder, for every price. The number of line items required could get extremely large. Hereâs an example (see [Price Granularity](/adops/price-granularity.html) for more details):
+
+- Bidders: 10
+- Price Increment: 0.10
+- Price Cap: 20
+- Sizes: 5
+- Send all bids
+
+This scenario would require you to create 10,000 line items (10 x 200 x 5). If you were to use either 1x1 mode or creative-level sizing you would need only 2,000 line items.
+
+## Banner and Outstream Creatives
+
+As we mentioned, each creative requires an ad tag script that will call the [Prebid Universal Creative](/overview/prebid-universal-creative.html) to display the correct image.
+
+One decision you'll want to make is which version of the PUC you want to use. Prebid hosts a copy, which you're free to use. But some publishers might want to use their own copy of the PUC so as to have greater control over the upgrade windows.
+
+{: .alert.alert-info :}
+Engineers can find the PUC code in the [Prebid Github repository](https://github.com/prebid/prebid-universal-creative).
+
+## Native
+
+Native ads require close collaboration between web designers, engineering, and ad ops. The primary decision to be made that affects ad ops is where to store the rendering template. Your options are:
+
+- The ad server
+- The page's Prebid.js adunit
+- An external script
+
+If you already have templates stored in your ad server for some native ads, it might make sense to also store the templates for Prebid there and keep everything together and consistent. This also gives ad ops control over when templates change.
+
+The second two options require engineering to make any changes when template updates are required. Because native ad formatting is tied to the look of the site, these options could fit in with normal site maintenance.
+
+Each option requires a different PUC ad tag to be used in the associated creatives, so be sure to get the correct script (and CSS file) from the engineers.
+
+{: .alert.alert-info :}
+Engineering details outlining each template storage option can be found in the [Prebid.js Native Implementation Guide](/prebid/native-implementation.html).
+
+## VAST Video
+
+VAST video (instream and long-form video) does not use the PUC. Instead, video bids provide VAST that Prebid caches to obtain a cache ID that can be retrieved with a URL. The cache ID is passed as a key value to the ad server. (See [Video Overview](/prebid-video/video-overview.html) for details.)
+
+When youâre running campaigns with video creatives, the primary decision you need to make is where to cache your video bids. Youâll enter this location in the creative you add to the line item. The cache location is typically independent of the bidders. The most common cache location is
. See [Setting Up Video In GAM](/adops/setting-up-prebid-video-in-dfp.html) for detailed instructions on configuring a video creative in GAM.
+
+## SafeFrames
+
+Another decision you need to make with regards to banner and native creatives is whether to run them in SafeFrames. A SafeFrame is defined by the IAB as âa managed API-enabled iframe that opens a line of communication between the publisher page and the iframe-contained ad creative.â SafeFrames provide an added layer of security by separating the ad from your web page.
+
+We recommend using SafeFrames for banner and native creatives, but there are some things to keep in mind if you do this. For example:
+
+- Some creatives, such as richmedia formats, canât render in SafeFrames.
+- Some bidders do not support the use of SafeFrames.
+
+If you don't trust all your bidders to provide creatives that can safely run inside of SafeFrames, then you'll want to consider using [Send All Bids](/adops/send-all-vs-top-price.html) (the default), which will enable you to allow some bidders to use SafeFrames and some not.
+
+[Prebid documentation for each bidder](/dev-docs/bidders.html) provides information on whether the bidder supports SafeFrames.
+
+Be sure to check with bidders directly if you have questions about their SafeFrame support.
+
+## Related Reading
+
+- [Planning Guide](/adops/adops-planning-guide.html)
+- [Key Values for Ad Ops](/adops/key-values.html)
+- [Prebid Universal Creative](/overview/prebid-universal-creative.html)
+- [Deals in Prebid](/adops/deals.html)
diff --git a/adops/deals.md b/adops/deals.md
index f2c838e137..b38c9034a8 100644
--- a/adops/deals.md
+++ b/adops/deals.md
@@ -1,135 +1,61 @@
---
layout: page_v2
-title: Enable Deals
-head_title: Enable Deals in Prebid for Header Bidding
-description: Enable Deals in Prebid for Header Bidding Analysis.
-pid: 4
-
+title: Deals in Prebid
+head_title: Deals in Prebid
sidebarType: 3
+sbUUID: 3.2
---
-# Enable Deals in Prebid
-{:.no_toc}
-
-In order to enable deals for prebid, the ad ops setup is slightly different from the standard header bidding setup. Specifically:
-
-+ From the ad ops side, you'll create separate orders and line items that target the deal ID key-values. These line items will be at different (probably higher) priorities than your standard header bidding line items.
+# Deals in Prebid
-+ From the dev side, if your page is using the standard prebid.js key-values, no change or work is required.
-
-{: .bg-info :}
-In this example we will use the Google Ad Manager setup to illustrate, but the steps are basically the same for any ad server.
+{: .no_toc }
* TOC
-{:toc}
-
-### Step 1: Understand Key-values
-
-Whenever a bidder responds with a bid containing a deal ID, Prebid.js will generate and attach deal-related key-values to the ad server call in the format: `hb_deal_BIDDERCODE = DEAL_ID`.
-
-For example, given the submitted bids, prices, and deals shown here:
-
-```
-bid 1: Bidder = Rubicon, CPM = 1.50, Deal ID = RBC_123
-bid 2: Bidder = AppNexus, CPM = 1.20, Deal ID = APN_456
-```
-
-The key-values attached to the ad server call (that the line items will target) will be:
-
-```
-hb_pb_rubicon = 1.50
-hb_deal_rubicon = RBC_123
-hb_pb_appnexus = 1.20
-hb_deal_appnexus = APN_456
-// hb_adid, hb_size, and hb_adid omitted
-```
-
-{% capture noteAlert %}
-We recommend confirming with your development team that the page is set up to send all deal targeting to the ad server. There are two ways to do this:
-- Set the `enableSendAllBids` to **true**.
-- Set `enableSendAllBids` to **false** and `alwaysIncludeDeals` to **true**. This option will minimize the number of targeting variables sent to the ad server.
-See the [enableSendAllBids](/dev-docs/publisher-api-reference/setConfig.html#setConfig-Send-All-Bids) documentation for details.
-{% endcapture %}
-
-{% include alerts/alert_note.html content=noteAlert %}
-
-
-
-### Step 2: Create Key-values
-
-For each header bidding partner you work with, create a keyword in the format of `hb_deal_BIDDERCODE`, e.g., `hb_deal_pubmatic`. For more examples of the keyword format, see the [API Reference for `pbjs.getAdserverTargeting`](/dev-docs/publisher-api-reference/getAdserverTargeting.html).
-
-
-
-![Inventory Sizes]({{ site.github.url }}/assets/images/demo-setup/deals/key-val.png){: .pb-lg-img :}
-
-
-
-### Step 3: Create Line Items for Deals
-
-In Google Ad Manager, create a new line item.
-
-Enter all the **Inventory sizes** for your deal (or deals):
-
-![Inventory Sizes]({{ site.github.url }}/assets/images/demo-setup/inventory-sizes.png){: .pb-md-img :}
+{: toc }
-
+In the same way that you can negotiate deals with advertisers in your ad server, you can also set up deals with your header bidding partners. When you do that, there are just a few things to keep in mind to ensure those deals get sent to the ad server and your line items are prepared to receive them.
-Set the **priority** to the level you prefer.
+## Send Deal to Ad Server
-![Inventory Sizes]({{ site.github.url }}/assets/images/demo-setup/deals/deal-priority.png){: .pb-lg-img :}
+In [Send All Bids vs Top Price](/adops/send-all-vs-top-price.html) we described those two options for sending bids to the ad server. There is also a third option created specifically for deals: Send top price and deals.
-
+### Deals with Send All Bids
-Set **Display Creatives** to *One or More* since we'll have one or more creatives attached to this line item.
+If you send all bids to the ad server, deals will be sent along with the rest of the bids. If you want your deals to be prioritized over the rest of the bids, be sure to inform the software engineers so they can configure Prebid for this scenario.
-Set **Rotate Creatives** to *Evenly*.
+{: .alert.alert-info :}
+See [Configure Send Bids Control](/dev-docs/publisher-api-reference/setConfig.html#configure-send-bids-control) for engineering instructions on this configuration.
-![Display and Rotation]({{ site.github.url }}/assets/images/demo-setup/display-and-rotation.png){: .pb-md-img :}
+### Deals with Send Top Price
-
+If you decide to send only the top price bid, the deal might not be the top price, in which case it would not be sent and the ad server would never see it. To ensure deals make it to the ad server, the software engineers need to know that deal bids should be included along with the top priced bid. They can then configure Prebid to send both the top price and any deals that come through.
-Then you'll need to target the **inventory** that you want to this deal to run on.
+{: .alert.alert-info :}
+See the [Send All Bids engineering reference](/dev-docs/publisher-api-reference/setConfig.html#setConfig-Send-All-Bids) for engineering instructions on sending deals along with the top bid.
-
+## Deal Line Item Details
-**Use Key-values targeting to target deal ID(s)**
+In [Line Item Creation](/adops/line-item-creation.html) we talked about some requirements and recommendations for setting up line items for Prebid. You can follow most of those settings for deals, with the modifications outlined here.
-There are two ways to target deal IDs using *Key-values* targeting:
+### Deal Key Value Pairs
-1. If you would like the deals to have the same priority and target the same inventory, you can include multiple deal IDs (as shown below).
-2. Otherwise, you must create a separate line item for each deal ID you want to target.
+From the ad server side, you need to create special line items for each deal. This is done through a key-value pair. (See [Key Values](/adops/key-values.html) for details on how key value pairs work.)
-![Inventory Sizes]({{ site.github.url }}/assets/images/demo-setup/deals/targeting.png){: .pb-lg-img :}
+For each header bidding partner you negotiate deals with, create a keyword in the format hb_deal_BIDDERCODE, e.g., hb_deal_BidderA. Then when you create the line item for the deal, add in that code with the associated deal ID. For example, hb_deal_BidderA=BDA_123.
-
+{: .alert.alert-info :}
+The actual value of the deal ID (BDA_123 in this example) will be obtained from the demand partner.
-### Step 4: Attach Creatives to Line Items
+### Start and End Dates
-Like all line items, those that represent deals need to be associated with creatives that pass the correct adid back to Prebid.js for display.
+Prebid line items normally start immediately with no end date; the line item exists to receive a bid at any time, whenever it gets sent to the ad server. Because deals are negotiated with the demand partner, deals will have date ranges in accordance with the agreement.
-e.g. if the line item is targeted to `hb_deal_pubmatic`, then the creative needs to send `hb_adid_pubmatic` in the creative. Like this:
+### Priority
-
-
+## Further Reader
-If however, the line item is targeted to `hb_deal` (without a bidder code),
-then the simplified creative setup in the [step-by-step instructions](/adops/step-by-step.html#step-2-add-a-creative) will be fine.
+* [Planning Guide](/adops/adops-planning-guide.html)
+* [Key Values for Ad Ops](/adops/key-values.html)
+* [Prebid Universal Creative](/overview/prebid-universal-creative.html)
diff --git a/adops/gam-creative-banner-sbs.md b/adops/gam-creative-banner-sbs.md
new file mode 100644
index 0000000000..3fc6d0b04e
--- /dev/null
+++ b/adops/gam-creative-banner-sbs.md
@@ -0,0 +1,122 @@
+---
+layout: page_v2
+title: GAM Step by Step - Banner/Outstream/AMP Creatives
+head_title: GAM Step by Step - Banner/Outstream/AMP Creatives
+description: Set up banner and outstream creatives for Prebid in Google Ad Manager.
+pid: 2
+sidebarType: 3
+---
+
+
+# GAM Step by Step - Banner/Outstream/AMP Creatives
+
+This page walks you through the steps required to create banner and outstream creatives to attach to your Prebid line items in Google Ad Manager (GAM).
+
+{: .alert.alert-success :}
+For complete instructions on setting up Prebid line items in Google Ad Manager, see [Google Ad Manager with Prebid Step by Step](/adops/step-by-step.html).
+
+1. In GAM, select **Delivery** > **Creatives**.
+2. Under the **Display creatives** tab, click **New Creative**.
+3. Select your advertiser, then click **Third party**.
+4. Enter a **Name** for your creative. For example, `Prebid â banner â 1x1 - 1`.
+5. Enter a **Target ad unit size** of `1x1`. This allows the creative to serve on all inventory sizes.
+
+{: .alert.alert-warning :}
+These instructions assume you're using the Prebid Universal Creative (PUC) after v1.15 that supports the separate `banner.js` file. See the [Prebid Universal Creative](/overview/prebid-universal-creative.html) documentation for alternate approaches.
+
+{: .alert.alert-danger :}
+**AMP**: If you choose to bypass the PUC for AMP, Prebid Server analytics will not work.
+
+{:start="6"}
+6. Select **Standard** as the **Code type**.
+
+{: .alert.alert-info :}
+**AMP**: If you are using AMP, you should still select **Standard** as the code type. The âAMPâ option is for AMPHTML hosted by a 3rd party.
+
+{:start="7"}
+7. Enter one of the scripts shown below, depending on whether Prebid is configured to send all bids or only the top price bid.
+
+**Send All Bids Configuration**
+
+{: .alert.alert-warning :}
+Be sure to replace BIDDERCODE with the appropriate bidder. For example, if the bidder code is `PBbidder`, the `adid` would be `%%PATTERN:hb_adid_PBbidder%%`.
+
+```html
+
+
+```
+
+{: .alert.alert-info :}
+Note: the `mobileResize` parameter is a workaround to a bug in the Google Mobile Ads SDK. The Prebid SDK uses the existence of the "hb_size" string that's provided in %%PATTERN:TARGETINGMAP%%, but this bidder-specific version of the creative doesn't utilize the TARGETINGMAP, so the value is added here. The important part is the value that contains `hb_size:`.
+
+{: .alert.alert-danger :}
+Warning: Be sure none of the attribute names are longer than 20 characters. See [Send All Bids Key Value Pairs](/adops/send-all-vs-top-price.html#key-value-pairs) for more information.
+
+**Send Top Price Bid Configuration**
+
+In top-price mode, you can make use of the GAM `TARGETINGMAP` feature instead of listing out each attribute.
+
+```html
+
+
+```
+
+{:start="8"}
+8. Select whether to **Serve into a SafeFrame**. See [Creative Considerations](/adops/creative-considerations.html) for more on using SafeFrames.
+
+{: .alert.alert-info :}
+**AMP**: For AMP, you must select **Serve into a SafeFrame**.
+
+Your creative settings will look something like this. In this example we're assuming a Send All Bids configuration, and weâve replaced BIDDERCODE with the code for our bidder, PBbidder. (Notice that some of the key names have been truncated to adhere to the GAM 20-character key length limit.)
+
+![Banner creative settings](/assets/images/ad-ops/gam-sbs/banner-creative-settings.png)
+
+{: .alert.alert-info :}
+Note: You can ignore the âSorry, we donât recognize this tagâ warning. GAM doesnât have built-in macros for Prebid and so doesnât recognize them. The ad tag will still work correctly.
+
+{:start="9"}
+9. If you're using jsdelivr, set your **Associated ad technology provider**:
+
+{% include /adops/adops-creative-declaration.html %}
+
+{:start="10"}
+10. Click **Save and preview**.
+
+## Further Reading
+
+* [Google Ad Manager with Prebid Step by Step](/adops/step-by-step.html)
+* [Send All Bids vs Top Price](/adops/send-all-vs-top-price.html)
+* [Prebid Universal Creatives](/overview/prebid-universal-creative.html)
+* [Creative Considerations](/adops/creative-considerations.html)
+* [Ad Ops Planning Guide](/adops/adops-planning-guide.html)
diff --git a/adops/gam-hbt-step-by-step.md b/adops/gam-hbt-step-by-step.md
new file mode 100644
index 0000000000..0ab5fbdaa7
--- /dev/null
+++ b/adops/gam-hbt-step-by-step.md
@@ -0,0 +1,84 @@
+---
+layout: page_v2
+title: Header Bidding Trafficking with Prebid Step by Step
+head_title: Header Bidding Trafficking with Prebid Step by Step
+description: Step-by-step instructions for setting up Header Bidding Trafficking in GAM for Prebid.
+#note the sidebar type needs to reflect the section this file is displayed in. See _data/sidenav.yml for the side nav categories.
+sidebarType: 3
+---
+
+# Header Bidding Trafficking with Prebid Step by Step
+{: .no_toc }
+
+- TOC
+{: toc }
+
+Publishers new to header bidding can use this guide to set up header bidding trafficking for Prebid in Google Ad Manager. Unlike a line item setup, header bidding trafficking provides publishers with precise bid prices to compete in the auction and no need for header bidding creatives. It also provides unified reporting, and a straightforward workflow. These instructions describe only the specific settings required for header bidding trafficking; they are not intended to be comprehensive instructions that replace or duplicate the GAM documentation.
+
+- If you prefer to use line items to manage your header bidding setup, visit [Line item setup](/adops/step-by-step.html).
+- For how to migrate from line items to header bidding trafficking, visit [Header bidding trafficking](https://support.google.com/admanager/answer/12273163) and the corresponding [FAQ](https://support.google.com/admanager/answer/12270263). These instructions also describe how to run an experiment to show potential revenue uplift from migrating to header bidding trafficking from a line item setup.
+
+## Prerequisites
+
+Before you begin, we recommend you read through our [Planning Guide](/adops/adops-planning-guide.html) to make sure you know what your configuration is going to look like and youâve thoroughly documented your decisions.
+
+## Requirements
+
+To use header bidding trafficking, you must:
+
+- Be on Google Ad Manager 360.
+- Use a "[standard implementation](https://support.google.com/admanager/answer/12270263?sjid=14160336224257855972-NA#standard&zippy=%2Cwhats-a-standard-implementation-of-the-prebid-wrapper)" of Prebid.js.
+- Use Google Publisher Tag (GPT) on your website.
+
+Note: You don't have to set up any line items, including price priority line items, to use header bidding trafficking.
+
+### Tagging
+First, configure Prebid.js to collect bids from your selected bidders and pass those bids onto Ad Manager. For details on tagging changes, visit [Getting Started for Developers](/dev-docs/getting-started.html).
+
+## Enable Header Bidding for you Ad Manager Network
+
+1. Sign in to Google Ad Manager.
+2. Click *Delivery*, then *Bidders*.
+3. Click the *Header bidding* tab.
+4. Click *Get started* to enable Prebid trafficking for the network, if itâs not already enabled.
+
+![Get Started with Prebid](/assets/images/ad-ops/gam-hbt-sbs/hbt-start.png)
+
+{:start="5"}
+5. Review each detected bidder.
+
+![Review Bidders](/assets/images/ad-ops/gam-hbt-sbs/hbt-bidders.png)
+
+For each bidder, there are three configuration options:
+
+- *Enable SafeFrame*: When enabled, ads returned by the bidder will render inside of a SafeFrame. Bidders may vary in their compatibility with SafeFrame.
+- *Enable optimized Private Auction deals*: When enabled, bids that include a deal ID will enter the auction at the optimized Private Auction [priority](https://support.google.com/admanager/answer/10863708). If disabled, such bids will continue to work with any relevant line items in your network.
+- *Allow ads on child-directed requests*: When enabled, the associated bidderâs ads may show on inventory that is classified in Ad Manager as child-directed.
+
+{:start="6"}
+6. Click *Continue*.
+7. Select *Run Prebid on entire network*
+
+![Run Prebid](/assets/images/ad-ops/gam-hbt-sbs/hbt-run-prebid.png)
+
+{:start="8"}
+8. Click *Finish*. Your Ad Manager UI should look like this, with your own bidders and specified configuration settings listed.
+
+![Finished](/assets/images/ad-ops/gam-hbt-sbs/hbt-setup-finished.png)
+
+## Header bidding reporting
+
+Historical reporting in Ad Manager helps you understand how header bidding is performing.
+
+- Use the Bidder dimension to see performance by exchange. In Data Transfer files, this is called Buyer Network.
+- Add the Demand Channel dimension to see whether buyers accessed your inventory through header bidding (the Demand Channel dimension has a value of âHeader biddingâ). This is called Product in Data Transfer files.
+
+## Using protections with header bidding
+
+To exclude the header bidders from the auction:
+
+- Create an [inventory exclusion protection](https://support.google.com/admanager/answer/9376326).
+- Select the header bidding demand source and appropriate targeting.
+- To exclude certain formats from Header Bidding Trafficking, you can create an
+ inventory exclusion that targets the relevant hb_format key-value. Header
+ Bidding Trafficking supports display and outstream video, but not native ads.
diff --git a/adops/gam-native.md b/adops/gam-native.md
index f8e81e65cd..c3ab7c68f5 100644
--- a/adops/gam-native.md
+++ b/adops/gam-native.md
@@ -1,90 +1,93 @@
---
layout: page_v2
-title: Setting up Prebid Native in Google Ad Manager
-head_title: Setting up Prebid Native in Google Ad Manager
-description: Setting up Prebid Native in Google Ad Manager
+title: GAM Step by Step - Native Creatives
+head_title: GAM Step by Step - Native Creatives
+description: Set up native creatives for Prebid in Google Ad Manager.
sidebarType: 3
---
-# Setting up Prebid Native in Google Ad Manager
-{: .no_toc}
-
-This page describes how to set up native creatives in Google Ad Manager for use with Prebid.js.
+# GAM Step by Step - Native Creatives
-For more information about Google Ad Manager native ad setup, see the [Google Ad Manager native ads documentation](https://support.google.com/admanager/answer/6366845).
-
-{% capture version2 %}
-This document replaces the [original documentation](/adops/setting-up-prebid-native-in-dfp.html) that described how to set up Prebid.js native for GAM. That documentation is still valid, but the approach described here is better in every way, so we recommend that all new and revised implementations follow this approach. Here are the key differences between the original approach and the preferred approach described in this document:
-{::nomarkdown}
-
-The macro format is different: instead of using AdServer-defined macros, Prebid.js now has its own macro format.
- Targeting variables aren't sent from Prebid.js to the AdServer. Rather, they're queried at display time.
- A different rendering library is used.
-
-{:/}
-{% endcapture %}
-{% include alerts/alert_important.html content=version2 %}
+{: .no_toc}
* TOC
{:toc}
-{: .alert.alert-info :}
-Manually configuring GAM for Prebid can be a fair amount of work.
-Consider using our official command line tool, [Prebid Line Item Manager](/tools/line-item-manager.html), to create the setup. Using this tool may save you time and help you avoid mistakes.
+This page walks you through the steps required to create a native ad template and a native creative to attach to your Prebid line items in Google Ad Manager (GAM).
+{: .alert.alert-success :}
+For complete instructions on setting up Prebid line items in Google Ad Manager, see [Google Ad Manager with Prebid Step by Step](/adops/step-by-step.html).
-## 1. Create a native ad
+For more information about Google Ad Manager native ad setup, see the [Google Ad Manager native ads](https://support.google.com/admanager/answer/6366845) documentation.
-From Google Ad Manager, select **Delivery > Native**. Click **Create Native Ad**.
+## Create a Native Ad
-![native delivery](/assets/images/ad-ops/dfp-native/create_prebid_native.png){: .pb-md-img :}
+1. In GAM, select **Delivery** > **Native**.
+2. Click **New native ad** and select **Single ad**.
-Select the **HTML & CSS editor** option.
+{: .alert.alert-info :}
+For information on the Multiplex ad option, see the [Traffic Multiplex ads](https://support.google.com/admanager/answer/9428537) GAM documentation.
-![HTML editor option](/assets/images/ad-ops/dfp-native/prebid_native_html_option.png){: .pb-md-img :}
+{:start="3"}
+3. Under **HTML & CSS editor**, click **Select**. This will slide out the **New native style** window.
-## 2. Define settings for native format
+### Define Settings for Native Format
-For **Ad size** you can select a specific size for the ad unit or specify the "fluid" size. In this case we'll go with **Fluid**.
+1. Under **Ad size** you can select a specific size for the ad unit or specify the "fluid" size. In this case we'll go with **Fluid**.
+2. Under **Custom format**, select **New format**. (If youâve already created an ad unit with the format you want, you can select **Existing format** and select the format to apply to this ad unit.)
+3. Enter a **Format name**, such as `pb-native-fluid`.
+4. Click **Add variable**. This will slide out the **New variable** window.
-Under **Custom format**, select **New format**. (If youâve already created an ad unit with the format you want, you can select Existing format and select the format to apply to this ad unit.)
+Every format needs at least one variable. Don't worry, you can add more later. GAM requires at least one variable in order to move on to the next step.
-Every format needs at least one "variable". In this example we've added **title** as a variable. Don't worry, you can add more later. Or not. Either way, GAM requires at least one variable in order to move on to the next step.
+{:start="5"}
+5. Type in a **Variable name**. In this example, we've used the name `title`.
+6. Click **OK**.
-![native adunit settings](/assets/images/ad-ops/dfp-native/gam-native-format.png){: .pb-md-img :}
+![Native adunit settings](/assets/images/ad-ops/gam-sbs/gam-native-format.png){: .pb-md-img :}
-When done, click **Continue**.
+{:start="7"}
+7.Click **Continue**.
-## 3. Style your native ad
+### Style Your Native Ad
-Next, add the HTML and CSS to define your native ad template. To allow for trackers, titles, images, and other assets within a Prebid native creative template, youâll need to include a CDN-hosted script in the HTML.
+1. The first step in styling your native ad is to add the HTML and CSS to define your native ad template. To allow for trackers, titles, images, and other assets within a Prebid native creative template, youâll need to include a CDN-hosted script in the HTML.
-![native ad styling](/assets/images/ad-ops/dfp-native/gam-native-template.png){: .pb-xlg-img :}
+![native ad styling](/assets/images/ad-ops/gam-sbs/gam-native-template.png){: .pb-xlg-img :}
{: .alert.alert-warning :}
Any link that needs to fire a click tracker must include `class='pb-click'`.
If this creative is served, it will fire impression trackers on load. Clicking the link will fire the click tracker and the link will work as normal, in this case going to the `hb_native_linkurl` destination.
-The creative template HTML will depend on which of the three scenarios you're implementing, as described in the [Native Implementation Guide](/prebid/native-implementation.html). You can choose to manage the native template:
+The creative template HTML will depend on which of the three scenarios you're implementing. You can choose to manage the native template:
+
+* in GAM ([Managing the Native Template in GAM](#managing-the-native-template-in-gam) below)
+* in the Prebid.js AdUnit ([Managing the Native Template Outside of GAM](#managing-the-native-template-outside-of-gam) below)
+* in a separate JavaScript file ([Managing the Native Template Outside of GAM](#managing-the-native-template-outside-of-gam) below)
-- in GAM ([section 3.1](/adops/gam-native.html#31-managing-the-native-template-in-gam) below)
-- in the Prebid.js AdUnit ([section 3.2](/adops/gam-native.html#32-managing-the-native-template-outside-of-gam) below)
-- in a separate JavaScript file ([section 3.2](/adops/gam-native.html#32-managing-the-native-template-outside-of-gam) below)
+{: .alert.alert-info :}
+For engineering instructions, see [Native Implementation Guide](/prebid/native-implementation.html).
+
+{:start="2"}
+2. After entering your HTML and CSS per the approriate instructions below, click **Continue**.
+3. Add any targeting you want to apply and click **Save and activate** (or **Save** if you're not yet ready to activate your template.)
+4. Provide a **Name** for your native style and click **Save**.
-### 3.1. Managing the native template in GAM
+#### Managing the Native Template in GAM
There are three key aspects of the native template:
-1. Build the creative with special Prebid.js macros, e.g. `##hb_native_assetname##`. See the appendix for an exhaustive list of assets and macros. Note that macros can be placed in the body (HTML) and/or head (CSS) of the native creative.
-2. Load the Prebid.js native rendering code. You may utilize the jsdelivr version of native-render.js or host your own copy. If you use the version hosted on jsdelivr, make sure to declare jsdelivr as an ad technology provider in GAM. Admin â EU User Consent â Declare ad technology providers
+1. Build the creative with special Prebid.js macros, e.g. `##hb_native_assetname##`. Note that macros can be placed in the body (HTML) and/or head (CSS) of the native creative.
+2. Load the Prebid.js native rendering code. You can utilize the jsdelivr version of native.js or host your own copy. If you use the version hosted on jsdelivr, make sure to declare jsdelivr as an ad technology provider in GAM. (Go to **Privacy & messaging** and click the Settings icon under **GDPR**. Under **Review your ad partners** click into **Commonly used ad partners**.) See Step 6 under [Create a New Native Creative](#create-a-new-native-creative) below.
3. Invoke the Prebid.js native rendering function with an object containing the following attributes:
- - adid - used to identify which Prebid.js creative holds the appropriate native assets
- - pubUrl - the URL of the page, which is needed for the HTML postmessage call
- - requestAllAssets - tells the renderer to get all the native assets from Prebid.js.
+ * adid - Used to identify which Prebid.js creative holds the appropriate native assets.
+ * pubUrl - The URL of the page, which is needed for the HTML postmessage call.
+ * requestAllAssets - Tells the renderer to get all the native assets from Prebid.js.
Example creative HTML:
-```
+
+```html
-
+
```
{: .alert.alert-warning :}
-When using `Send All Bids` you should update `pbNativeTagData.adId = "%%PATTERN:hb_adid_biddercode%%";` for each bidderâs creative
+When using Send All Bids, use `pbNativeTagData.adId = "%%PATTERN:hb_adid_BIDDERCODE%%";` rather than `pbNativeTagData.adId = "%%PATTERN:hb_adid%%";` for each bidderâs creative, replacing `BIDDERCODE` with the actual bidder code, such as `%%PATTERN:hb_adid_BidderA%%`.
Example CSS:
-```
+
+```css
.sponsored-post {
background-color: #fffdeb;
font-family: sans-serif;
@@ -156,71 +160,104 @@ p {
}
```
-### 3.2. Managing the native template outside of GAM
+#### Managing the Native Template Outside of GAM
The GAM creative is identical whether the template is defined in the AdUnit or the external render JavaScript. There are two key aspects of the native creative in this scenario:
-1. Load the Prebid.js native rendering code. You may utilize the jsdelivr version of native-render.js or host your own copy. If you use the version hosted on jsdelivr, make sure to declare jsdelivr as an ad technology provider in GAM. Admin â EU User Consent â Declare ad technology providers
+1. Load the Prebid.js native rendering code. You may utilize the jsdelivr version of native.js or host your own copy. If you use the version hosted on jsdelivr, make sure to declare jsdelivr as an ad technology provider in GAM. Admin â EU User Consent â Declare ad technology providers.
2. Invoke the Prebid.js native rendering function with an object containing the following attributes:
- - adid - used to identify which Prebid.js creative holds the appropriate native assets
- - pubUrl - the URL of the page, which is needed for the HTML postmessage call
- - requestAllAssets - tells the renderer to get all the native assets from Prebid.js.
+ * adid - Used to identify which Prebid.js creative holds the appropriate native assets.
+ * pubUrl - The URL of the page, which is needed for the HTML postmessage call.
+ * requestAllAssets - Tells the renderer to get all the native assets from Prebid.js.
Example creative HTML:
-```
-
+
+```html
+
```
{: .alert.alert-warning :}
-When using `Send All Bids` you should update `pbNativeTagData.adId = "%%PATTERN:hb_adid_biddercode%%";` for each bidderâs creative
+When using Send All Bids, use `ucTagData.adId = "%%PATTERN:hb_adid_BIDDERCODE%%";` rather than `ucTagData.adId = "%%PATTERN:hb_adid%%";` for each bidderâs creative, replacing `BIDDERCODE` with the actual bidder code, such as `%%PATTERN:hb_adid_BidderA%%`.
-The example CSS in section 3.1 applies here as well.
+The example CSS in the previous section applies here as well.
+## Create a New Native Creative
-## 4. Create new native order and line items
+Now that you've defined your native template you can create your native creatives.
-1. Create a new order as usual.
-2. Create a new line item as usual, selecting Ad type "Display".
-3. Add your native format in the "Expected creatives" section.
+1. Select **Display** > **Creatives** and click **New creative**.
+2. Select your advertiser.
+3. Under **Native Format** select the native template you just created and click **Continue**.
-
-![create a native order and line item](/assets/images/ad-ops/dfp-native/gam-line-item.png){: .pb-md-img :}
+![Native Format](/assets/images/ad-ops/gam-sbs/native-format.png){: .pb-md-img :}
{:start="4"}
-4. For targeting, set inventory targeting and key-value targeting on `hb_pb` or `hb_pb_BIDDER` corresponding to the line itemâs CPM.
-5. Save the line item
+4. Under **Settings**, enter a **Name** for your creative.
+5. Enter any value into the **Click-through URL** field; this value will be overwritten by the native asset values. Also, if you operate in Europe and are using the jsdelivr-hosted native.js, make sure you set jsdelivr as your ad technology provider. (See Step 6 below.)
+![Native Creative](/assets/images/ad-ops/gam-sbs/gam-new-creative-part2.png){: .pb-md-img :}
-## 5. Create a new native creative
+{:start="6"}
+6. If you're using jsdelivr, set your **Associated ad technology provider**:
-1. After saving the line item, click on **Creatives** and then **New creative**.
+{% include /adops/adops-creative-declaration.html %}
-![create a new native creative](/assets/images/ad-ops/dfp-native/gam-new-creative.png){: .pb-md-img :}
+{:start="7"}
+7. Click **Save and preview**.
-{:start="2"}
-2. On the creative type screen choose **Native Format** and select the format you created above.
+### Create Mobile In-App Creative
-![Native Format](/assets/images/ad-ops/dfp-native/gam-creative-type.png){: .pb-md-img :}
+Use these instructions if you integrate In-App native ads on [iOS](/prebid-mobile/pbm-api/ios/ios-sdk-integration-gam-original-api.html#in-app-native) or [Android](/prebid-mobile/pbm-api/android/android-sdk-integration-gam-original-api.html#in-app-native). The difference is in choosing the GAM option for supporting Android & iOS app code.
-{:start="3"}
-3. Under **Settings**, enter a Name for your creative. Enter any value into the **Click-through URL** field; this value will be overwritten by the native asset values. Also, if you operate in Europe and are using the jsdelivr-hosted native-render.js, make sure you set jsdelivr as your ad technology provider.
+1. Sign in to Google Ad Manager.
+2. Create an ad unit with fluid ad size.
+3. Click `Delivery` and then `Native`
+4. Click `New native style`.
+5. Click `Android & iOS app code`.
+6. Name your new format.
+7. Choose `Add variable` and add the following variable names and placeholders as type `text`.
-![Native Creative](/assets/images/ad-ops/dfp-native/gam-new-creative-part2.png){: .pb-md-img :}
+{: .table .table-bordered .table-striped }
+| Variable Name | Placeholder | Type |
+|---------------------+-------------------------+------|
+| isPrebid | [%isPrebid%] | Text |
+| hb_cache_id_local | [%hb_cache_id_local%] | Text |
-{:start="4"}
-4. Click **Save**.
-5. Review the order, line item, and creative.
-6. Approve the order as needed.
+Make sure to indicate that the variables are required.
+
+{:start="8"}
+8. Hit "Save".
+9. Return to the home screen, click `Delivery > Creatives`, and create a creative with `Native Format`, choosing the format you created.
+10. Choose a creative name and other desired settings. In the user-defined variables you just created, set the following values:
+
+{: .table .table-bordered .table-striped }
+| Variable Name | Value |
+|---------------------+----------------------------------|
+| isPrebid | 1 |
+| hb_cache_id_local | %%PATTERN:hb_cache_id_local%% |
+
+{:start="11"}
+11. Create Prebid line items with price priority and a display ad type that is targeting `hb_pb key-values`. Associate the creative you added in steps 4 thru 8 (making sure to choose your native format as expected creatives on the line item) to the ad unit you created in the second step.
+
+## Attach the Creative to Your Line Item
+
+Follow the instructions in [Google Ad Manager with Prebid Step by Step](/adops/step-by-step.html#duplicate-creative) to duplicate your creative and attach it to your line item.
## Further Reading
-- [Prebid Native Format](/formats/native.html)
-- [Prebid Native Implementation Guide](/prebid/native-implementation.html)
+* [Google Ad Manager with Prebid Step by Step](/adops/step-by-step.html)
+* [Prebid Native Implementation Guide](/prebid/native-implementation.html)
+* [Send All Bids vs Top Price](/adops/send-all-vs-top-price.html)
+* [Prebid Universal Creatives](/overview/prebid-universal-creative.html)
+* [Creative Considerations](/adops/creative-considerations.html)
+* [Ad Ops Planning Guide](/adops/adops-planning-guide.html)
diff --git a/adops/js-dynamic-creative.md b/adops/js-dynamic-creative.md
new file mode 100644
index 0000000000..3eb5fc493a
--- /dev/null
+++ b/adops/js-dynamic-creative.md
@@ -0,0 +1,45 @@
+---
+layout: page_v2
+title: Prebid.js dynamic creatives
+head_title: Prebid.js dynamic creatives
+sidebarType: 3
+---
+
+# Prebid.js dynamic creatives
+{:.no_toc}
+
+- TOC
+{: toc}
+
+## Overview
+
+For line items that target browsers only, you may use Prebid.js dynamic creatives as an alternative to [Prebid Universal Creative](/overview/prebid-universal-creative.html). The former provides slightly better performance and ease of use, but relies on Prebid.js, meaning that it does not support non-JS use cases (such as mobile apps or AMP).
+
+## Comparison vs PUC for Prebid.js
+
+A creative set up to use Prebid Universal Creative:
+
+- loads a separate script, typically from a CDN; the script contains various rendering routines, including some specific to Prebid.js;
+- if the script determines that the ad render was initiated by Prebid.js, it retrieves from it information about the winning bid and renders it;
+- requires different setups for different use cases (such as banner vs native).
+
+A Prebid.js dynamic creative:
+
+- does not load any additional script - it's instead set up with a small block of inline Javascript;
+- it expects to always find Prebid.js, retrieving from it information about the winning bid _and_ the rendering logic to use for it;
+- uses the same setup for all cases - but does not work when the render is not initiated by Prebid.js.
+
+## How to use
+
+{: .alert.alert-warning :}
+Dynamic creatives require Prebid.js version 8.36 or higher.
+
+Set up the creative following [this example](https://github.com/prebid/Prebid.js/blob/master/integrationExamples/gpt/x-domain/creative.html). If you are not using GAM, replace the macros in the second `script` tag with appropriate equivalents.
+
+To render native ads, you also need to include the [nativeRendering](/dev-docs/modules/nativeRendering.html) module in your Prebid.js bundle.
+
+## Further reading
+
+- [Creative Considerations](/adops/creative-considerations.md)
+- [Prebid Universal Creative](/overview/prebid-universal-creative.html)
+- [Native rendering module](/dev-docs/modules/nativeRendering.html)
diff --git a/adops/key-values.md b/adops/key-values.md
new file mode 100644
index 0000000000..6c2f77d784
--- /dev/null
+++ b/adops/key-values.md
@@ -0,0 +1,108 @@
+---
+layout: page_v2
+title: Key Values
+head_title: Key Values
+sidebarType: 3
+sbUUID: 3.2
+---
+
+# Key Values
+
+{: .no_toc }
+
+- TOC
+{: toc }
+
+Prebid uses key-value pairs to pass bid information to the ad server. This puts key values at the core of how Prebid works. Without key values, Prebid would have no way of communicating with ad servers, and therefore no way to make header bidding part of the auction. This document explains how bid information is sent to the ad server, what information is sent, and options for modifying the amount and types of information that is sent.
+
+## Sending Bids to the Ad Server
+
+Prebid sends information to the ad server about the bids it receives by creating a query string of key-value pairs (KVPs) and attaching it to the ad request that is sent to the ad server. A portion of that query string might look something like this:
+
+`?hb_pb=1.50&hb_adid=234234&hb_bidder=bidderA`
+
+In this example, hb_pb is the bid price bucket (1.50), hb_adid is an identifier for the specific bid (234234), and hb_bidder is the name of the bidding SSP or exchange (bidderA). In order for a bid that comes from the header bidding process to compete with bids on the ad server, you must have line items set up with key values that match the KVPs in the query string.
+
+## Prebid Keys
+
+This table lists the keys that can be sent from Prebid to the ad server. Depending on the media type, most of these keys are sent by default.
+
+{: .alert.alert-info :}
+You can work with your engineers to modify the default list. See [Restricting Data Sent to the Ad Server](#restricting-data-sent-to-the-ad-server) below for more information.
+
+{: .table .table-bordered .table-striped }
+| Key | Usage | Scenario | Description | Example Value |
+| --- | ----- | -------- | ----------- | ------------- |
+| hb_pb | targeting | All | The bid price bucket (adjusted for price granularity). | 2.10 |
+| hb_adid | rendering | All | The ad ID. Used by the Prebid Universal Creative (PUC) ad server creative to render the winning Prebid ad. | 123456 |
+| hb_bidder | targeting and reporting | Could be used for creative-level targeting in video scenarios; reporting for all scenarios | The bidder code. Used for logging and reporting to learn which bidder has higher fill rate/CPM. | BidderA |
+| hb_size | rendering | Banner, native, outstream. Not used for video. | The size used for resizing the iframe for the winning creative. | 300x250 |
+| hb_format | targeting and reporting | Needed only if there's a different set of line items for different media types | Used when creating a separate set of line items for banner vs video | video |
+| hb_deal | targeting | All | Target private marketplace deals | 7777777 |
+| hb_uuid | rendering | Video only | Carries the cache retrieval ID for VAST video creatives | 1111-2222-3333-4444 |
+| hb_cache_id | rendering | Banner, native, outstream; mobile app only | Carries the cache retrieval ID for mobile bids | 2222-3333-4444-5555 |
+| hb_cache_host | rendering | Banner, native, outstream; mobile app only | The host where the cached creative lives | `"https://mycachehost.example.com"` |
+| hb_cache_path | rendering | Banner, native, outstream; mobile app only | The web path where the cached creative lives | /cache |
+| hb_source | reporting | Server-to-server testing | Used to report the A/B test results for client- vs server-side performance. | s2s |
+| hb_adomain | reporting and special | All | Used to report on VAST errors, set floors on certain buyers, monitor volume from a buyer, or track down bad creatives | example.com |
+
+When youâre sending the [Top Price Bid](/adops/send-all-vs-top-price.html) to the ad server, the preceding keys are the only keys that will be sent. If youâre [Sending All Bids](/adops/send-all-vs-top-price.html), the preceding keys will be sent, plus the same set of keys specific to each bidder, with the bidder name appended. For example, if you receive bids from BidderA and BidderB, the keys hb_pb, hb_pb_BidderA, and hb_pb_BidderB will all be sent to the ad server with the values provided by the associated bidders. (Even in that scenario, the "winning" keys [hb_pb, etc.] will still have the values for the top bid.)
+
+## Key Value Pair Usage
+
+KVPs sent from Prebid are used in the ad server for a variety of purposes: targeting, reporting, creative rendering, and to supply additional information.
+
+### Targeting
+
+Targeting KVPs are used to pick out which line items match the request, or possibly which creative within a line item should be used. They will need to be entered in the line items you create to capture the bids coming in from Prebid. These key values can also be used in reports.
+
+{: .alert.alert-success :}
+It's also possible to use regular ad server targeting values on header bidding line items. For example, if you want to have different price granularities in one country, you could create multiple sets of line items differentiated by country.
+
+### Reporting
+
+Some publishers rely on ad server KVPs for important business reporting. Reporting on the Prebid keys can help you determine the performance of your header bidding partners and your overall Prebid configuration. Key values that are for reporting only are not entered in line items. Depending on your ad server, reporting keys might need to be created in the ad server in order to be used in reporting.
+
+### Rendering
+
+These values are needed for rendering the creative properly when the Prebid line item is chosen.
+
+### Special Usage
+
+The hb_adomain key was created to provide additional information about a bid or to help with troubleshooting. See [setConfig](/dev-docs/publisher-api-reference/setConfig.html#details-on-the-allowtargetingkeys-setting) for engineering information on using the hb_adomain key.
+
+## Restricting Data Sent to the Ad Server
+
+When Prebid creates the query string that is sent to the ad server, it includes a default set of keys (along with the associated values provided by the demand partners). However, you might not need or want all the default values, or maybe you need additional values. Because of this, Prebid provides tools that allow for modifications to the amount of data sent to the ad server.
+
+Youâll need to determine which keys you want sent and then work with your engineers to ensure the keys that are sent match those youâre expecting. Some things to consider:
+
+How much information do you need and want?
+Does your ad server have restrictions on the amount of data it can receive?
+
+### Key Values in Your Configuration
+
+The information you need and want are entirely dependent on your configuration and usage requirements. Maybe not all the reporting keys are useful to you, in which case you can omit some or all of those keys. Making sure the keys you need match the keys that are sent to the ad server will help ensure the targeting and reporting youâve set up on your ad server work correctly.
+
+### Query String Restrictions
+
+Some ad servers restrict the number of characters theyâll accept on the query string. When you use [Send All Bids](/adops/send-all-vs-top-price.html), the number of key value pairs sent to the ad server can be very large, depending on the number of bidders and ad slots.This large number of key value pairs can make for a very long query string.
+
+If the query string has too many characters, an ad server with restrictions could simply truncate the string to the length it will accept. This could prevent bids from being received, or could truncate a bidderâs key values to the point where they wonât match any line items. Fortunately, Prebid can be configured to deal with this issue.
+
+In addition to being able to specify which keys to send, Prebid can also be configured to limit the length of the query string that will be appended to the ad request. Prebid will prioritize the bids to ensure top bids and deals are included, along with all of their associated key value pairs.
+
+{: .alert.alert-info :}
+For details on how Prebid prioritizes bids based on query string length, see âDetails on the auctionKeyMaxChars settingâ under [Configure Targeting Controls](/dev-docs/publisher-api-reference/setConfig.html#setConfig-targetingControls).
+
+Reducing the number of default keys sent and limiting the number of bidders will reduce the length of the query string. Work with your engineers to evaluate the typical length of your query strings and make modifications as necessary to achieve the best results for your organization.
+
+{: .alert.alert-info :}
+For engineering information on configuration options, see [Prebid.js Controls](/features/adServerKvps.html#controls). In particular, note the following:
+ [Configure Targeting Controls](/dev-docs/publisher-api-reference/setConfig.html#setConfig-targetingControls).
+
+## Further Reader
+
+- [Planning Guide](/adops/adops-planning-guide.html)
+- [Prebid Universal Creative](/overview/prebid-universal-creative.html)
+- [Deals in Prebid](/adops/deals.html)
diff --git a/adops/line-item-creation.md b/adops/line-item-creation.md
new file mode 100644
index 0000000000..51abec0d1e
--- /dev/null
+++ b/adops/line-item-creation.md
@@ -0,0 +1,176 @@
+---
+layout: page_v2
+title: Line Item Creation
+head_title: Line Item Creation
+sidebarType: 3
+sbUUID: 3.2
+---
+
+# Line Item Creation
+
+{: .no_toc }
+
+- TOC
+{: toc }
+
+The settings you apply when creating line items to capture bids coming in from the header bidding process are typically different from those you apply when creating line items for house ads. This document will walk you through some of the differences, and outline requirements and recommendations for creating line items to work with Prebid.
+
+{: .alert.alert-success :}
+Manually configuring ad server elements for Prebid can be a fair amount of work. If youâre using Google Ad Manager (GAM), consider using our official command line tool, [Prebid Line Item Manager](/tools/line-item-manager.html#prebid-line-item-manager.html), to create the setup. Using this tool may save you time and help you avoid mistakes.
+
+## Advertisers and Orders
+
+Line items (and creatives) must, at some level, be associated with advertisers. When you create line items to capture Prebid bids, you wonât know who the actual advertisers are. Instead you need to create generic advertisers in your ad server that are used for Prebid. For example, you can create an advertiser named âPrebid Advertiser.â Or if youâre using Send All Bids, you can create one advertiser per bidder, such as âPrebid BidderA,â âPrebid BidderB,â etc. You then associate your line items and creatives with those advertisers.
+
+Depending on your ad server, line items are typically grouped within orders under each advertiser.
+
+## Line Item Details
+
+You have many options for the way in which you set up your line items. The following are Prebid requirements, and also some recommendations, to ensure bids are captured correctly and to make keeping track of your header bidding line items easier.
+
+### At a Glance
+
+These tables show the Prebid line item recommendations and requirements. The following sections provide more details on each.
+
+**Required**
+
+{: .table .table-bordered .table-striped }
+| Detail | Requirement |
+| ------ | ----------- |
+| Line Item Type | Price Priority (depending on your ad server) |
+| Key Value Pricing | Include the number of decimal places that are defined in the price granularity precision. Normally this is two decimal places, e.g. hb_pb=0.50 or hb_pb=1.00 |
+
+**Recommended**
+
+{: .table .table-bordered .table-striped }
+| Detail | Recommendation |
+| ------ | -------------- |
+| Line Item Groups | Determine the number of containers you'll need to store the line items based on price granularity, number of bidders, and ad server restrictions. Name your group in the format Prebid, format, bidder name (for [Send All Bids](/adops/send-all-vs-top-price.html)), and unique number; for example, `Prebid - banner - BidderA - 1`. |
+| Line Item Name | Name each line item for the header bidding price bucket. Use the naming pattern Prebid, mediatype, bidder (for Send All Bids), and price bucket; for example, `Prebid - banner - BidderA - 1.50`. |
+| Creative Name | In the creative name, include Prebid, the media type and the size (if applicable), and a unique identifying number (if more than one creative of a given size is attached to the line item). If using Send All Bids, also include the bidder name; for example, `Prebid - banner - BidderA - 1x1 - 1`. |
+| Start and End Dates | Start immediately, no end date |
+| Priority | Above house ads but below directly sold ads |
+| Impression Goal | None |
+| Media Types | Group media types by price granularity. This typically means you can group banner, outstream video, and native together but video will be a separate set of line items. |
+
+### Line Item Type
+
+If your ad server supports it, you should set your line item type to Price Priority, which will let it compete with bids from other sources.
+
+### Key Value Pricing
+
+When you enter your key values for price, you must include the number of digits following the decimal point that are specified with your [price granularity](/adops/price-granularity.html). This is known as the precision value. For example, if Prebid is configured with a precision of two decimal places, then when you enter a value for the key hb_pb you must include two decimal places in your value: 0.50 or 1.00 rather than 0.5 or 1. If you donât include the correct number of decimal places, your line item will not match any header bidding values.
+
+For predefined Prebid price granularities the precision is 2; for custom price granularities this value can be defined in your Prebid configuration.
+
+{: .alert.alert-info :}
+Engineering instructions for setting the precision value can be found in [setConfig Price Granularity](/dev-docs/publisher-api-reference/setConfig.html#setConfig-Price-Granularity).
+
+See [Key Values](/adops/key-values.html) for general information about key value pairs.
+
+### Line Item Groups
+
+If you are [sending all bids](/adops/send-all-vs-top-price.html) to the ad server, youâll most likely want to group your line items by bidder. (In Google Ad Manager this means creating at least one set of orders per bidder, with that bidderâs line items attached to the order.) This allows each group to have a set of line items that use the same targeting keywords, all of which include the bidderâs name. For example, if you are working with BidderA, all line items within a group would use the key hb_pb_BidderA in the line itemâs key-value targeting, and hb_adid_BidderA in the attached creative.
+
+Depending on your ad server and the number of line items youâre creating, you might need more than one group per bidder. For example, suppose you need to create 2000 line items for one bidder. If GAM is your ad server, youâre allowed only 450 line items per order, so you will need five orders per bidder to store the 2000 line items, for a total of 25 orders.
+
+We recommend naming the group to include âPrebidâ, media type, the bidder name, and also a number or other identifier if you need more than one group per bidder. For example, `Prebid - banner - BidderA - 1`. For [Send Top Price Bid](/adops/send-all-vs-top-price.html) you can omit the bidder name: `Prebid - banner - 1`.
+
+### Line Item Name
+
+Because youâll be creating one line item per price within each [price bucket](/adops/price-granularity.html), itâs helpful to name your line items based on the price. It can also be helpful to include the mediatype, since different types of media could be priced the same. Some examples include `Prebid - banner - 1.00`, `Prebid - video - 1.50`, etc. If youâre [sending all bids](/adops/send-all-vs-top-price.html), include the bidder code: `Prebid - banner - BidderA - 1.00`, `Prebid - banner - BidderA - 1.50`.
+
+### Creative Name
+
+We recommend naming creatives to include the media type, size (where applicable), and a number if there is more than one. For example, `Prebid - banner - BidderA - 1x1 - 1`; `Prebid - video - BidderA - 1`.
+
+### Start and End Dates
+
+With header bidding, start and end dates of the actual ad campaigns are controlled by the header bidding demand partners. The demand partners check their inventory and bid for an ad slot based on campaigns running on their systems. The line items youâre creating are generic and immortal line items created to capture a bid from a campaign your demand partner will be running at some point in the future.
+
+What this means is that you typically donât want to include an end date in your line items. Your line item will always be active to read in bids coming from your demand partner.
+
+Set your start date to begin immediately.
+
+### Priority
+
+Unless youâre working with [deals](/adops/deals.html), bids received from header bidding will typically have a priority lower than directly sold ads but higher than any competing house ads.
+
+### Impression Goal
+
+We recommend you do not set an impression goal. Because these are general line items with (typically) no end date, thereâs no need to set a goal.
+
+### Media Types
+
+Prebid supports many media types, and you can set up a single line item with multiple types. The media types you choose can impact the way in which you decide to organize your line items.
+
+Grouping media types within line items is typically dictated by the pricing structure:
+
+- Banner, outstream video, and native generally run together because they have similar pricing expectations and therefore can share [price granularities](/adops/price-granularity.html).
+- Instream video is normally created as a separate set of line items because they are usually priced higher than other formats, often requiring custom price granularity.
+
+You must set a key value for each format used by an ad unit using the hb_format (or hb_format_BIDDER) key and setting its value to the appropriate format. For example, if the ad unit is set up as a banner ad, you would target hb_format=banner (along with the price, such as hb_pb=1.00). If your ad unit supports multiple types, set the key value to include all types: `hb_format` in `banner`,`native`.
+
+## Example Line Item Setup
+
+Here's an example that encapsulates a number of the key decisions outlined in this document. In this scenario, weâve made the following decisions:
+
+- Send Top Bid
+- Banner granularity: high
+- Video granularity: custom
+- Order naming pattern: Prebid - banner - N, Prebid - video - N
+- Line Item naming pattern: Prebid - banner - PRICE, Prebid - video - PRICE
+- Creative naming pattern: Prebid - banner - 1x1 - N, Prebid - video - N
+- Choosing to make three copies of each creative
+
+The granularity weâve chosen means weâll be creating 2000 line items for banner and 1000 line items for video. Those line items will be named as shown here:
+
+- Order: Prebid - banner - 1
+ - LI: Prebid - banner - 0.00 (If the bid is less than 1 penny, it rounds down to 0, but is still worth something)
+ - Creative: Prebid - banner - 1x1 - 1
+ - Creative: Prebid - banner - 1x1 - 2
+ - Creative: Prebid - banner - 1x1 - 3
+ - LI: Prebid - banner - 0.01
+ - ... creatives ...
+ - LI: Prebid - banner - 0.02
+ - LI: Prebid - banner - 0.03
+ - ...
+ - LI: Prebid - banner - 4.49
+- Order: Prebid - banner - 2
+ - LI: Prebid - banner - 4.50
+ - LI: Prebid - banner - 4.51
+ - LI: Prebid - banner - 4.52
+ - LI: Prebid - banner - 4.53
+ - ...
+ - LI: Prebid - banner - 09.49
+- ... other banner orders up to 20.00 ...
+
+- Order: Prebid - video - 1
+ - LI: Prebid - video - 0.00
+ - Creative: Prebid - video - 1
+ - Creative: Prebid - video - 2
+ - Creative: Prebid - video - 3
+ - LI: Prebid - video - 0.05
+ - LI: Prebid - video - 0.10
+ - ...
+- ...
+
+If we had chosen Send All Bids (the Prebid default), every element shown above would be recreated for each bidder, and each name would include the bidder name. For example:
+
+- Order: Prebid - banner - BidderA - 1
+ - LI: Prebid - banner - BidderA - 0.00
+ - Creative: Prebid - banner - BidderA - 1x1 - 1
+ - Creative: Prebid - banner - BidderA - 1x1 - 2
+ - Creative: Prebid - banner - BidderA - 1x1 - 3
+- ...
+
+## Next Step
+
+[Price Granularity](/adops/price-granularity.html)
+
+## Further Reader
+
+- [Planning Guide](/adops/adops-planning-guide.html)
+- [Key Values for Ad Ops](/adops/key-values.html)
+- [Prebid Universal Creative](/overview/prebid-universal-creative.html)
+- [Deals in Prebid](/adops/deals.html)
diff --git a/adops/mobile-rendering-admob-line-item-setup.md b/adops/mobile-rendering-admob-line-item-setup.md
new file mode 100644
index 0000000000..39db9166ad
--- /dev/null
+++ b/adops/mobile-rendering-admob-line-item-setup.md
@@ -0,0 +1,86 @@
+---
+
+layout: page_v2
+title: Prebid Mobile Rendering Modules
+description: Prebid Mobile Rendering Modules architecture
+sidebarType: 3
+
+---
+
+# AdMob Setup
+
+## Mediation Group Setup
+
+### Step 1: Create Mediation Group
+
+In your AdMob account go to `Mediation` and click on `Create Mediation Group`:
+
+
+
+Choose one of the ad formats:
+
+- Banner
+- Interstitial
+- Native Advanced
+- Rewarded interstitial
+
+Choose a platform - iOS or Android.
+
+Press `CONTINUE`. Then set the name for the mediation group and other properties:
+
+
+
+Press `ADD AD UNITS` and select the target items in the modal dialog:
+
+
+
+Press `DONE`. And move to the next step.
+
+### Step 2: Add Custom Events
+
+
+
+Now you have to add custom events for possible bid prices. Follow the [price granularity](/adops/price-granularity.html) guide to determine how many entries you need.
+
+Press `ADD CUSTOM EVENT`:
+
+
+
+Set the `Label` and `eCPM` for the custom event. Press `CONTINUE`.
+
+
+
+The fields in this dialog are critical for the proper integration:
+
+- `Class Name` is a name of respective adapter.
+ - Banner:
+ - iOS: `PrebidAdMobBannerAdapter`
+ - Android: `org.prebid.mobile.admob.PrebidBannerAdapter`
+ - Interstitial Display:
+ - iOS: `PrebidAdMobInterstitialAdapter`
+ - Android: `org.prebid.mobile.admob.PrebidInterstitialAdapter`
+ - Interstitial Video:
+ - iOS: `PrebidAdMobVideoInterstitialAdapter`
+ - Android: `org.prebid.mobile.admob.PrebidInterstitialAdapter`
+ - Rewarded:
+ - iOS: `PrebidAdMobRewardedVideoAdapter`
+ - Android: `org.prebid.mobile.admob.PrebidRewardedAdapter`
+ - Native:
+ - iOS: `PrebidAdMobNativeAdapter`
+ - Android: `org.prebid.mobile.admob.PrebidNativeAdapter`
+- `Parameter` is a keywords for the current ad source. **Important**: make sure that the price of the ad source is the same as the price in this keyword. For example:
+
+```json
+{"hb_pb":"0.10"}
+```
+
+Prebid SDK will compare the keywords in the winning bids with keywords provided in the `Parameter` fields.
+
+{: .alert.alert-warning :}
+The adapter will render the winning bid only if the bid's targeting keywords contain `all` keywords from the Parameter field.
+
+Press `DONE` and repeat the adding of the custom events for all needed prices.
+
+
+
+Once you add all needed custom events - press `DONE`. The Mediation Group is ready to serve the prebid demand to your app.
diff --git a/adops/mobile-rendering-gam-line-item-setup.md b/adops/mobile-rendering-gam-line-item-setup.md
new file mode 100644
index 0000000000..f9d35b6da5
--- /dev/null
+++ b/adops/mobile-rendering-gam-line-item-setup.md
@@ -0,0 +1,204 @@
+---
+
+layout: page_v2
+title: Prebid Mobile Rendering GAM Line Item Setup
+description: Prebid Mobile Rendering Modules GAM line item setup
+sidebarType: 3
+
+---
+
+# Google Ad Manager Setup
+
+## Step 1: Create New Order
+
+
+
+## Step 2: Create Line Item
+
+To integrate the Prebid demand you have to create a Line Items with a specific price and targeting keywords.
+
+> Even though a Line Item can be named in any way, we strongly recommend to use the price or targeting keyword in the name. It will help to navigate through hundreds of them.
+
+### Select Type
+
+Create a Line Item depending on the type of expected creative kind:
+
+* **Display** - for the Banner, HTML Interstitial
+* **Video and Audio** - for the Video Interstitial, Rewarded Video, and Outstream Video ads.
+
+
+
+Set sizes respectively to expected creatives.
+
+### Select Price
+
+The Line Item price should be chosen according to the price granularity policy.
+
+
+
+### Set Targeting Keywords
+
+The **Custom targeting** property should contain a special keyword with the price of winning bid. The same as a Rate of the Line Item.
+
+
+
+## Step 3: Prepare Prebid Creative
+
+### Display Banner, Video Banner, Display Interstitial, Video Interstitial
+
+The Prebid SDK integrates with GAM basing on [App Events](https://developers.google.com/ad-manager/mobile-ads-sdk/android/banner#app_events) feature, almost for all ad formats. That means that creative should contain a special tag that will be processed by Prebid's GAM Event Handlers.
+
+If GAM Event Handler receives the `PrebidAppEvent` event it will render the winning bid. Otherwise the control will be passed to the GAM Ad View and it will render the received creative.
+
+``` html
+
+
+```
+
+
+
+### Rewarded Video
+
+Prebid rendering for Rewarded video ads is based on the [OnAdMetadataChangedListener](https://developers.google.com/android/reference/com/google/android/gms/ads/rewarded/OnAdMetadataChangedListener). So you need to set up a special VAST tag in the creative.
+
+``` js
+https://cdn.jsdelivr.net/npm/prebid-universal-creative/dist/prebid-mobile-rewarded-vast.xml
+```
+
+
+
+If GAM Event Handler receives the tag's info it will render the winning bid. Otherwise the control will be passed to the GAM Ad View and it will render the received creative.
+
+
diff --git a/adops/mobile-rendering-max-line-item-setup.md b/adops/mobile-rendering-max-line-item-setup.md
new file mode 100644
index 0000000000..4c7786b848
--- /dev/null
+++ b/adops/mobile-rendering-max-line-item-setup.md
@@ -0,0 +1,45 @@
+---
+
+layout: page_v2
+title: Prebid Mobile Rendering Modules
+description: Prebid Mobile Rendering Modules architecture
+sidebarType: 3
+
+---
+
+# AppLovin MAX Setup
+
+## Custom Network Setup
+
+In your MAX account go to `Mediation` -> `Manage` -> `Networks` and click `Click here to add a Custom Network`. Then create an **SDK** custom network with the following adapter names:
+
+
+
+iOS adapter:
+
+```noformat
+PrebidMAXMediationAdapter
+```
+
+Android Adapter:
+
+```noformat
+com.applovin.mediation.adapters.PrebidMaxMediationAdapter
+```
+
+## Add Placements
+
+Now you have to add placements for Prebid Custom Network into the respective ad unit's waterfall.
+
+Create or choose an existing Ad Unit. Go the the `Custom Networks & Deals` section. Chose the Prebid's custom network that you created at the previous step. Change the status to active and add placements following the [price granularity](/adops/price-granularity.html) guide to determine how many entries you need.
+
+
+
+Make sure that the `Custom Parameters` field contain expecting targetting keywords of the winning bid:
+
+```json
+{"hb_pb":"0.10"}
+```
+
+{: .alert.alert-warning :}
+The adapter will render the winning bid only if the bid's targeting keywords contain `all` keywords from the `Custom Parameters` field.
diff --git a/adops/overview b/adops/overview
deleted file mode 100644
index f782148079..0000000000
--- a/adops/overview
+++ /dev/null
@@ -1,5 +0,0 @@
----
-layout: page_v2
-title: Ad Operations | Overview
-sidebarType: 3
----
\ No newline at end of file
diff --git a/adops/price-granularity.md b/adops/price-granularity.md
new file mode 100644
index 0000000000..c0c3c9a681
--- /dev/null
+++ b/adops/price-granularity.md
@@ -0,0 +1,173 @@
+---
+layout: page_v2
+title: Price Granularity
+head_title: Price Granularity
+sidebarType: 3
+sbUUID: 3.2
+---
+
+# Price Granularity
+
+{: .no_toc }
+
+- TOC
+{: toc }
+
+Price granularity is a way to quantize bids so that you don't need to make an infinite number of line items. It allows you to balance the work of creating line items with the desire to optimize revenue from your header bidding partners. This document will explain price granularity in detail and why itâs necessary, and provide you with the information you need to make the best decisions for your Prebid implementation.
+
+## Price Granularity Explained
+
+When your ad server looks to fill an ad request, it takes many things into consideration. Broken down to its simplest form, we can say that the highest price that matches the targeting will win the auction for the ad slot. In a non-header bidding scenario, when you set up line items for your advertisers in your ad server, you specify the amount of money the advertiser is willing to spend for a particular ad unit based on whether it matches the targeting. For example, an advertiser might be willing to pay 1.52 CPM for an ad unit that targets people aged 18 - 25 who live in the U.S. So you set up your line item for that advertiser with a rate of 1.52 CPM.
+
+With header bidding, you have bids coming in from outside the ad server, so you donât have any price information until the actual bid is passed into the ad server. Instead, it works like this:
+
+- Prebid contacts your demand partners, who find advertisers running campaigns that match the available contextual and user information.
+- The demand partners send in their top bid or bids for the ad slot.
+- Those bids are then sent to your ad server.
+
+With this process, you donât know in advance what price your demand partnerâs advertisers were willing to pay. So how do you know what price to target in your line items? Do you have to create a line item for every possible price that could come in? Given the fact that open market bids can be fractions of units (so a bid of 0.255 is acceptable), the number of line items you would have to create to cover every possibility is almost infinite.
+
+This is where price granularities come in. Price granularities allow you to group bids into âprice buckets.â These buckets give you a definitive set of bid prices to target, and therefore a definitive set of line items to create.
+
+## Components of Price Granularity
+
+In Prebid, there are four components to price granularity.
+
+**Price increments**: The increments between prices youâll be targeting in your line items. For example, if you choose .10 increments, you will create line items with prices of 0.00, 0.10, 0.20, 0.30, etc. Prebid comes with built-in options for .10 and .50 increments, and also allows you to define your own.
+
+**Price cap**: The maximum price allowed within a set of price increments. For example, if you choose an increment of .50 and a cap of 5.00, your line item pricing will range from 0.00 through 5.00 at .50 increments: 0.00, 0.50, 1.00, 1.50âŚ5.00.
+
+**Price range**: An increment/price cap within a price granularity. You can have multiple price ranges within one price granularity, which allows you to specify different increments at different CPM values. For example, you might want a smaller increment (such as .10) for CPMs under 10, and larger increments (such as .50) for any CPM over 10.
+
+**Price bucket**: The actual price targeted in the line item. (Note the name of the key that is passed in with the bid price, hb_pb, stands for header bidding price bucket.) For example, if youâre using 0.50 increments and you have one bidder who bids 1.45 and another who bids 1.20, both will be rounded down and placed into the 1.00 price bucket. (See the next section for a description of Rounding.)
+
+## Rounding
+
+Bids received from your Prebid demand partners are rounded down according to your price granularity. If your granularity is .50, a bid of 2.95 will be rounded down to 2.50. Consider the following scenario:
+
+- Price granularity is set to .50
+- BidderA submits a bid for 2.75.
+- BidderB submits a bid for 2.55.
+
+In this case, BidderA is the top bid at 2.75. If only the top bid is sent to the ad server, BidderA will be rounded down to 2.50 and sent. If all bids are sent, BidderA would still be the top bid, but both BidderA and BidderB bids will be rounded down to 2.50 and sent to the ad server. After reaching the ad server, both bids could lose to an ad server bidder that bid 2.51, even though both BidderA and BidderB initially bid higher than that.
+
+{: .alert.alert-warning :}
+**Important**: Rounding does not impact the price paid, only the auction on the ad server. For example, if your bid for 2.75 is rounded down to 2.50 and wins on the ad server at 2.50, you will be paid 2.75.
+
+Bids also round down to reflect the top price in your granularity definition. If your price cap is 5.00 and you receive a bid of 20.00, that bid will be rounded down to 5.00. This is important to keep in mind for [video inventory](#video-price-granularity), which often sells for higher prices than other media types.
+
+{: .alert.alert-success :}
+You might have noticed earlier that we gave examples of price buckets of 0.00. This is necessary because it captures bids that are less than the increment value, but are still valid bids. For example, if you have 0.10 granularity and a bid price of 0.02, that gets rounded down to 0.00. Even with a 0.01 granularity, there can be fractional bids, so a bid price of 0.005 would still have value but get rounded down to 0.00. It's not going to compete very well, but if the hb_pb=0.00 line item is chosen, the bidder will still pay their bid price of 0.005.
+
+This rounding might initially sound like a bad idea. Youâre obviously losing revenue when a lower bid price wins over a higher price, right? But there are advantages to using price granularities and price caps, which weâll discuss below in âPros and Cons.â
+
+## Prebid Default Price Granularities
+
+Prebid provides several default price granularity options. Work with your software engineers to ensure the Prebid implementation is configured to match your line item setup.
+
+### Currency Considerations
+
+Before we get into the details of Prebidâs price granularity options we need to talk about different currencies. Prebidâs built-in granularity options were designed to represent typical bid prices in 2016 if your currency was USD, EUR, GBP, CAD, AUD, or other currency of similar value. So when you read the values below, think about whether your normal bid prices fall into these ranges.
+
+If youâre working with currencies, such as JPY, INR, and CZK, that donât fit into the predefined price granularities, you may need to define custom price buckets (explained below). See [Currency Module](/dev-docs/modules/currency.html) for more information and additional options for working with these currencies. Specifically note the granularity multiplier option, which lets you "scale up" the standard buckets to make sense for your currency.
+
+### Built-In Price Granularity Options
+
+{: .table .table-bordered .table-striped }
+| Granularity | Increment | Cap | Number of Line Items Required per Bidder |
+| ----------- | --------- | --- | ---------------------------------------- |
+| low | 0.50 | 5.00 | 11 |
+| medium | 0.10 | 20.00 | 201 |
+| high | 0.01 | 20.00 | 2001 |
+| auto | Sliding scale | Sliding scale | See [Auto](#auto) |
+| dense | Sliding scale | Sliding scale | See [Dense](#dense) |
+| custom | Custom sliding scale | Custom sliding scale | Dependent on scale |
+
+#### Auto
+
+The auto option contains a series of predefined buckets. Any bid over the cap falls into the next highest bucket.
+
+{: .table .table-bordered .table-striped }
+| Increment | Cap | Number of Line Items Required per Bidder |
+| --------- | --- | ---------------------------------------- |
+| 0.05 | 5.00 | 101 |
+| 0.10 | 10.00 | 50 |
+| 0.50 | 20.00 | 20 |
+| Any bid > 20.00 | 20.00 | n/a |
+| | | Total: 171 |
+
+#### Dense
+
+Dense provides a sliding scale similar to auto, but with smaller granularity. Any bid over the cap falls into the next highest bucket.
+
+{: .table .table-bordered .table-striped }
+| Increment | Cap | Number of Line Items Required per Bidder |
+| --------- | --- | ---------------------------------------- |
+| 0.01 | 3.00 | 301 |
+| 0.05 | 8.00 | 100 |
+| 0.50 | 20.00 | 24 |
+| Any bid over 20.00 | 20.00 | n/a |
+| | | Total: 425 |
+
+#### Custom
+
+Custom buckets allow you to set your own price granularity. In determining what that granularity should be, we recommend analyzing your average bid prices from SSPs and placing them into a histogram. The price cap should be around your 95th-percentile bid, and there should be finer-grained buckets where more popular bid values are clustered. Note that if you use a [price floor](/dev-docs/modules/floors.html#price-floors-module), you shouldn't need fine-grained buckets below that floor.
+
+After youâve determined what youâd like your granularity and caps to be, work with your software engineers to ensure the Prebid configuration matches your line item setup.
+
+## Pros and Cons
+
+As we mentioned earlier, you need to create a line item for every price that could come in from your header bidding demand partners. Without price buckets this could result in an almost infinite number of line items. Instead, youâll need to weigh the pros and cons of high vs low granularity, and possibly adjust your granularities as you analyze the results of your Prebid implementation.
+
+The following examples give a general idea of the pros and cons of high and low granularity.
+
+### Example: High Price Granularity
+
+- 10 bidders
+- Cap 20.00
+- Increment .01
+- Send top price: Minimum 2,000 line items
+- Send all bids: Minimum 20,000 line items
+
+**Pro**: At .01 increments, there will be minimal price rounding (up to the price cap). All bids will compete at (or very near) the price the demand partner is willing to pay, maximizing revenue.
+
+**Con**: You have to create a lot of line items. The numbers shown above increase dramatically as you increase your price cap and your number of bidders. If you send all bids and add five more bidders, suddenly you need 10,000 more line items.
+
+### Example: Low Price Granularity
+
+- 10 bidders
+- Cap 5.00
+- Increment 1.00
+- Send top price: Minimum 5 line items
+- Send all bids: Minimum 50 line items
+
+**Pro**: Setting up your line items is a relatively quick process because you wonât need very many. Youâre also less likely to run into volume limits your ad server might impose on numbers of line items.
+
+**Con**: Prices received from demand partners will be rounded down, so you could be losing money. A bid of 2.95 would be rounded down to 2.00, and lose to an ad server bid of 2.05. Youâd be losing almost a dollar CPM.
+
+The following diagram, based on the high and low granularity scenarios with ten bidders we described above, illustrates just how quickly your line item count can grow.
+
+![Line Items Required per Price Granularity](/assets/images/ad-ops/planning/pg-line-items-required.png){: .center-image :}
+
+### Balanced Price Granularity
+
+Taking the pros and cons into consideration, youâll want to balance your price granularity in a way that makes sense for your configuration. We recommend starting with the predefined Prebid price bucket that makes the most sense based on bids you expect, then adjusting as needed as you evaluate the results. The exceptions to this would be in the case of video (see below), and when youâre working with currencies that donât fit well into the predefined values. In both these cases we recommend custom price granularities.
+
+## Video Price Granularity
+
+The predefined price granularities in Prebid max out with price caps of 20.00. However, video inventory is often valued much higher. You donât want to have a 20.00 price cap in place for inventory for which youâre expecting to receive 50.00 or more. For video inventory, we recommend you create custom price granularities. Determine the granularity and caps for your video inventory, and work with your software engineers to ensure they configure Prebid with custom price buckets to match your line items.
+
+## Mobile Price Granularity
+
+Weâve mentioned that you need to work with your software engineers to ensure the price buckets in the Prebid configuration match the line items youâre setting up in the ad server. However, if youâre setting up line items for advertising in a mobile app, your software engineers will be working with the Prebid Mobile SDK, which does not have price granularity controls; price buckets for mobile are set in Prebid Server. In this case youâll need to work with your managed service provider to ensure price buckets are set up to match your line items. Note that from the ad server side, line item setup for price buckets is the same whether youâre working with mobile or web.
+
+## Next Step
+
+[Creative Considerations](/adops/creative-considerations)
+
+## Further Reader
+
+- [Planning Guide](/adops/adops-planning-guide.html)
+- [Key Values for Ad Ops](/adops/key-values.html)
+- [Prebid Universal Creative](/overview/prebid-universal-creative.html)
+- [Deals in Prebid](/adops/deals.html)
diff --git a/adops/send-all-bids-adops.md b/adops/send-all-bids-adops.md
deleted file mode 100644
index 19129ea43a..0000000000
--- a/adops/send-all-bids-adops.md
+++ /dev/null
@@ -1,243 +0,0 @@
----
-layout: page_v2
-title: Send All Bids to the Ad Server
-head_title: Send All Bids to the Ad Server
-description: Send all bids to the ad server for reporting and data analysis.
-pid: 2
-sidebarType: 3
----
-
-
-# Send all bids to the ad server - Ad Ops setup
-{: .no_toc }
-
-This page shows how to set up your ad server so that you can send all bids and report on them.
-
-* TOC
-{: toc }
-
-## Overview
-
-As a publisher, you may want to have your ad server see **all** header bidding bids (instead of seeing only the winning bids in each auction). Reasons you might want this behavior include:
-
-+ You want your ad server to see all header bidding bids so that your ad server can report on bid prices instead of only winning prices.
-
-+ You have a contractual agreement with your header bidding partner.
-
-{: .alert.alert-success :}
-See the [Publisher API Reference](/dev-docs/publisher-api-reference/setConfig.html#setConfig-Send-All-Bids) for more details.
-
-
-If you decide to send all bids to the ad sever, your developers have the option of explicitly adding `enableSendAllBids: true` to `pbjs.setConfig()`. However, since the default value is `true` this addition is not strictly necessary. For details, see the [Publisher API Reference](/dev-docs/publisher-api-reference/setConfig.html#setConfig-Send-All-Bids).
-
-From the ad ops side, you can choose to set up one order per bidder, which allows for each order to have a set of line items using targeting keywords that include the bidder's name. For example, if you are working with [Rubicon](/dev-docs/bidders.html#rubicon), you would use `hb_pb_rubicon` in your line item's key-value targeting, and `hb_adid_rubicon` in the creative.
-
-{% include send-all-bids-keyword-targeting.md %}
-
-{: .alert.alert-info :}
-Manually configuring GAM for Prebid can be a fair amount of work.
-Consider using our official command line tool, [Prebid Line Item Manager](/tools/line-item-manager.html), to create the setup. Using this tool may save you time and help you avoid mistakes.
-
-## Step 1. Add an order
-
-In Google Ad Manager, create a new order for one of the header bidding partners. Each header bidding partner should have its own Google Ad Manager order. Repeat this step and the following when you are adding a new header bidding partner.
-
-
-## Step 2. Add a line item
-
-In Google Ad Manager, create a new order with a $0.50 line item.
-
-Enter all of the inventory sizes that your website has.
-
-![Inventory Sizes]({{ site.github.url }}/assets/images/demo-setup/inventory-sizes.png){: .pb-md-img :}
-
-Because header bidding partners return prices, set the Line Item **Type** to **Price priority** to enable them to compete on price.
-
-![Price Priority]({{ site.github.url }}/assets/images/demo-setup/price-priority.png){: .pb-sm-img :}
-
-
-
-Set the **Rate** to $0.50 so that this line item will compete with your other demand sources at $0.50 ECPM.
-
-![Rate]({{ site.github.url }}/assets/images/demo-setup/rate.png){: .pb-sm-img :}
-
-
-
-Set **Display Creatives** to *One or More* since we'll have one or more creatives attached to this line item.
-
-Set **Rotate Creatives** to *Evenly*.
-
-![Display and Rotation]({{ site.github.url }}/assets/images/demo-setup/display-and-rotation.png){: .pb-md-img :}
-
-Choose the inventory that you want to run header bidding on.
-
-This line item will target the bids in the range from $0.50 to $1.00 from the bidder you specify by targeting the keyword `hb_pb_BIDDERCODE` set to `0.50` in the **Key-values** section. For example, if this order and line item is for the bidder AppNexus, the keyword would be `hb_pb_appnexus`. The `BIDDERCODE` for other bidders can be found [here]({{site.baseurl}}/dev-docs/bidders.html).
-
-**You must enter the value to two decimal places, e.g., `1.50`. If you don't use two decimal places, header bidding will not work.**
-
-![Key-values]({{ site.github.url }}/assets/images/demo-setup/send-all-bids/key-values.png){: .pb-md-img :}
-
-## Step 3. Add a Creative
-
-Next, add a creative to this $0.50 line item; we will duplicate the creative later.
-
-- Choose the same advertiser we've assigned the line item to.
-- Set it to be a **Third party** creative.
-- Make sure the creative size is set to 1x1. This allows the creative to serve on all inventory sizes. When associating with the line item, just change the creative filter setting to show all creatives instead of 'Inventory filtered based on size'.
-- The **"Serve into a Safeframe"** box can be **UNCHECKED** or **CHECKED** (Prebid universal creative is SafeFrame compatible).
-- Copy this creative code snippet for each bidder and paste it into the **Code snippet** box, replacing BIDDERCODE with the current bidder name.
-
-```
-
-
-```
-
-{% capture noteAlert %}
-Replace the *BIDDERCODE* placeholders in the above template with the appropriate bidder your line item is targeting. For example, if you're targeting the bidder *appnexus*, the macro variable for `adId` would look like `ucTagData.adId = "%%PATTERN:hb_adid_appnexus%%";`. IMPORTANT: Make sure that none of the values are
-longer than 20 characters. e.g. you'll need to truncate hb_cache_host_triplelift to hb_cache_host_triple. GAM doesn't support attributes longer than 20 chars, so all Prebid software truncates attributes to that length.
-{% endcapture %}
-
-{% include alerts/alert_note.html content=noteAlert %}
-
-![New creative]({{ site.github.url }}/assets/images/demo-setup/new-creative.png){: .pb-lg-img :}
-
-**Prebid universal creative code for other ad servers**
-
-If you're using an ad server other than Google Ad Manager, your code snippet will look similar to one of the following:
-
-For Mopub:
-
-
-
-
-{% capture noteAlert %}
-See note above in regards to replacing *BIDDERCODE* placeholders.
-{% endcapture %}
-
-{% include alerts/alert_note.html content=noteAlert %}
-
-{% include adops/adops-creative-declaration.html %}
-
-For other ad servers:
-
-
-
-
-Replace `MACRO` with the appropriate macro for the ad server. (Refer to your ad server's documentation or consult with a representative for specific details regarding the proper macros and how to use them.)
-
-{% capture noteAlert %}
-See note above in regards to replacing *BIDDERCODE* placeholders.
-{% endcapture %}
-
-{% include alerts/alert_note.html content=noteAlert %}
-
-## Step 4. Attach the Creative to the Line Item
-
-Next, let's attach the creative to the $0.50 line item you just created. Click into the Line Item, then the **Creatives** tab.
-
-There will be yellow box showing each ad spot that you haven't uploaded creatives for yet. Since you've already made the creatives, click the **use existing creatives** next to each size.
-
-![Use existing creatives list]({{ site.github.url }}/assets/images/demo-setup/use-existing-creatives-01.png)
-
-In the pop-up dialog that appears, click **Show All** to remove the default size filters and see the 1x1 creatives. Include the prebid creative and click **Save**.
-
-![Use existing creatives dialog]({{ site.github.url }}/assets/images/demo-setup/use-existing-creatives-02.png)
-
-Back in the line item, go into the **Creatives** tab again, and click into the creative you just added.
-
-Then, in the creative's **Settings** tab, enable the **Size overrides** field and set all your line item's potential sizes.
-
-Save the creative and go back to the line item.
-
-## Step 5. Duplicate Creatives
-
-Google Ad Manager has a constraint that one creative can be served to at most one ad unit in a page under GPT's single request mode.
-
-Let's say your page has 4 ad slots. We need to have at least 4 creatives attached to the line item in case more than 2 bids are within the $0.50 range.
-
-Therefore, we need to duplicate our Prebid creative 4 times.
-
-Once that's done, we have a fully functioning line item with 4 creatives attached that can potentially fill 4 ad slots of varying sizes during a single pageview.
-
-## Step 6. Duplicate Line Items
-
-Now let's duplicate our line item for bids above $0.50.
-
-In the Prebid order page, copy the line item with shared creatives.
-
-This way you only have 4 creatives to maintain, and any updates to those creatives are applied to all pre-bid line items.
-
-For example, we can duplicate 3 more line items:
-
-- $1.00
-- $1.50
-- $2.00
-
-Let's go into each of them to update some settings. For each duplicated line item:
-
-1. Change the name to reflect the price, e.g., "Prebid\_BIDDERCODE\_1.00", "Prebid\_BIDDERCODE\_1.50"
-
-2. Change the **Rate** to match the new price of the line item.
-
-3. In **Key-values**, make sure to target `hb_pb_BIDDERCODE` at the new price, e.g., $1.00. Again, be sure to use 2 decimal places.
-
-4. (Optional) Set the start time to *Immediate* so you don't have to wait.
-
-Repeat for your other line items until you have the pricing granularity level you want.
-
-## Step 7. Create Orders for your other bidder partners
-
-Once you've created line items for `BIDDERCODE` targeting all the price buckets you want, start creating orders for each of your remaining bidder partners using the steps above.
diff --git a/adops/send-all-vs-top-price.md b/adops/send-all-vs-top-price.md
new file mode 100644
index 0000000000..b8ef60ef08
--- /dev/null
+++ b/adops/send-all-vs-top-price.md
@@ -0,0 +1,147 @@
+---
+layout: page_v2
+title: Send All Bids vs Top Price
+head_title: Send All Bids vs Top Price
+sidebarType: 3
+sbUUID: 3.2
+---
+
+# Send All Bids vs Top Price
+
+{: .no_toc }
+
+- TOC
+{: toc }
+
+Prebid provides two options for the number of bids that will be sent to the ad server:
+
+- Send all bids to the ad server that are received from the header bidding demand partners. This is the default behavior in Prebid.
+- Send only the top bid from among all the demand partner responses.
+
+{: .alert.alert-info :}
+There is also a third option if youâre using deals. See [Deals in Prebid](/adops/deals.html) for more information.
+
+Hereâs a brief comparison chart showing the primary differences between these approaches.
+
+{: .table .table-bordered .table-striped }
+| | Send All Bids (Default) | Send Top Price Bid |
+| | ----------------------- | ------------------ |
+| Number of bids sent to the ad server | Sends all bids that are received before the timeout period has expired. | Sends one bid per ad request. Only the bid with the top price for each request is sent. |
+| Reporting | Gives your ad server the information to generate detailed reports on bids received from individual demand partners whether they are top bidders or not. | Your ad server can report only on bids it receives, so you wonât have visibility from within your ad server into bids from demand partners that were not top bidders. |
+| Line Items | Typically requires a large number of line items to capture individual bidder information. | You can set up line items that are independent of the bidder, resulting in far fewer line items. |
+| Key Value Pairs | Separate keys need to be defined for every bidder. | Only one set of keys needs to be defined. |
+| Data considerations | The amount of information that is being sent to the ad server can become very large. You may need to place limits on the number of bids or key values that are sent. | Youâre unlikely to run into any data issues when youâre sending information from only one bid. |
+
+## Send All Bids
+
+âSend all bids to the ad serverâ does exactly what it sounds like: every bid that comes in from demand partners before the specified timeout period will be sent to the ad server. (There are some limits, which weâll talk about in a moment.) **This is the default behavior in Prebid.**
+
+### Reporting
+
+You might be wondering why youâd want to send more than the top bid. After all, if a bid wasnât the top bid from the header bidding process, how could it possibly be the top bid after reaching the ad server?
+
+Realistically, it canât. The main reason for sending all bids to the ad server is for reporting and optimization. With all bids, your ad server has the information it needs to provide you with reports that can tell you who bid on your inventory and what the bid price was. This helps you to:
+
+- Evaluate the bid rate of your demand partners
+- Ensure contractual obligations with your demand partners are being met
+- Adjust your Prebid settings based on who is bidding and for how much
+- Evaluate the effectiveness of your current Prebid setup
+
+### Line Items
+
+When you send all bids, youâll want to create a set of line items for each of your bidders. Each line item within a set (or a Google Ad Manager order) will be targeted towards a different price bucket. (See [Price Granularity](/adops/price-granularity.html) for more information.) While this is an ideal scenario for reporting, it can create difficulties in setting up line items.
+
+For example, suppose you have the following line item setup:
+
+- 200 prices
+- 10 bidders
+
+This would require you to create 2000 line items (200 x 10). If, on the other hand, you didnât need to separate out your line items by bidder, you would reduce this number dramatically to 200 line items (200 x 1).
+
+{: .alert.alert-info :}
+The Send All Bids option also sends the top bid, so a hybrid scenario is possible where you need to create only one set of line items, but youâll use all other variables passed in for reporting.
+
+In addition, some ad servers limit the number of line items you can create. Check with your ad server to ensure you wonât be exceeding this number.
+
+### Key Value Pairs
+
+{: .alert.alert-info :}
+For an overview of key value targeting, see [Key Values](/adops/key-values.html).
+
+When you send all bids, youâll need to have a set of keys defined for each bidder. This requires the creation of a lot of keys. For example, one bid could include five or more key value pairs. If you have ten bidders, this would require creation of at least 50 unique keys.
+
+{: .alert.alert-info :}
+Because the number of key value pairs sent to the ad server can be very large, Prebid provides a number of ways to control this. See [Prebid.js Controls](/features/adServerKvps.html#controls) for engineering information on how to modify the amount of data being sent to the ad server.
+
+One thing to keep in mind is the length of your key values. When you create separate line items for each bidder, the keys you target will include the bidder name. For example, if youâre creating line items for BidderA, your key-value pairs will look something like this:
+
+hb_adid_BidderA=123456
+hb_pb_BidderA=2.10
+hb_size_BidderA=300x250
+
+Some ad servers have limits on key name length. In Google Ad Manager (GAM) the maximum length is 20 characters. GAM will truncate any key name longer than 20 characters. For example:
+
+- One of your bidders is named BidderWithLongNameABC
+- Prebid passes the creative size for this bidder in the key hb_size_BidderWithLongNameABC
+- GAM truncates this name to hb_size_BidderWithLo
+
+When you enter the key values into the line item, you must use the truncated name:
+
+hb_size_BidderWithLo=300x250
+
+If you forget about or are unaware of your ad serverâs truncation and include the full name, the line item targeting will not match.
+
+{: .alert.alert-success :}
+**Tip**: Prebid documentation lists the GAM truncated versions of ad server keys on each bidder parameter page. See [AndBeyondMedia](https://docs.prebid.org/dev-docs/bidders/andBeyondMedia.html) for an example.
+
+### Data Considerations
+
+Imagine youâre sending all bids to the ad server and you have the following scenario:
+
+- 15 bidders
+- 7 key value pairs (KVPs) per bidder
+- 25 characters per KVP
+
+You now have an ad request query string that is 2,625 characters long. There are many options for limiting the amount of data thatâs sent on the query string. See [Configure Targeting Controls](/dev-docs/publisher-api-reference/setConfig.html#setConfig-targetingControls) for engineering options on reducing the amount of data being sent to the ad server.
+
+## Send Top Price Bid
+
+âSend top price bidâ is the simpler of the two options. With this approach, the only bid sent to the ad server with each ad request is the bid with the highest price. If multiple bidders respond with the same price, the bid from among those bidders that was received first is sent to the ad server. Here are some things to consider when deciding whether to go with this option.
+
+### Reporting
+
+The ad server can report only on the information it receives. So if you send only one bid from the header bidding process, the ad server can include only that one bid in your reports. Send top bid is a good option if:
+
+- youâre interested in reporting only on overall Prebid fill rates and top bid prices.
+- you want to prioritize simplicity over detailed analysis of your header bidding results
+- you donât have any contractual obligations with demand partners that require more detailed reporting
+
+### Line Items
+
+If youâre sending only one bid with each ad request, thereâs no need to create separate line items for each bidder. You can create one line for each price and creative size. For example:
+
+- 200 prices
+- 1 bidder
+
+In this example you need to create only 200 line items (200 x 1).
+
+### Key Value Pairs
+
+When you send only the top price bid to the ad server, you need to create only one generic set of keys. This means youâll typically need to create five to ten keys to include in your line item targeting.
+
+Because the key names are the same no matter which bidderâs bid is sent to the ad server, key names will not include the name of the bidder. For example, the bid price will be sent in hb_pb rather than hb_pb_BidderName. This means youâre unlikely to have to worry about ad server limits on name lengths. See [Key Values](/adops/key-values.html) for details on setting key values in the ad server.
+
+### Data Considerations
+
+Send top bid sends the least amount of data possible to the ad server, and therefore has the least impact on client latency.
+
+## Next Step
+
+[Line Item Creation](/adops/line-item-creation.html)
+
+## Further Reader
+
+- [Planning Guide](/adops/adops-planning-guide.html)
+- [Key Values for Ad Ops](/adops/key-values.html)
+- [Prebid Universal Creative](/overview/prebid-universal-creative.html)
+- [Deals in Prebid](/adops/deals.html)
diff --git a/adops/setting-up-prebid-for-amp-in-dfp.md b/adops/setting-up-prebid-for-amp-in-dfp.md
deleted file mode 100644
index f3552c8658..0000000000
--- a/adops/setting-up-prebid-for-amp-in-dfp.md
+++ /dev/null
@@ -1,90 +0,0 @@
----
-layout: page_v2
-title: Setting up Prebid for AMP in Google Ad Manager
-head_title: Setting up Prebid for AMP in Google Ad Manager
-description: Setting up Prebid for AMP in Google Ad Manager
-sidebarType: 3
----
-
-
-
-# Setting up Prebid for AMP in Google Ad Manager
-{: .no_toc}
-
-This page describes how to set up a line item and creative to serve on AMP pages with Prebid.js.
-
-* TOC
-{:toc}
-
-{: .alert.alert-info :}
-Manually configuring GAM for Prebid can be a fair amount of work.
-Consider using our official command line tool, [Prebid Line Item Manager](/tools/line-item-manager.html), to create the setup. Using this tool may save you time and help you avoid mistakes.
-
-{: .alert.alert-success :}
-For engineering setup instructions, see [Show Prebid Ads on AMP Pages]({{site.github.url}}/dev-docs/show-prebid-ads-on-amp-pages.html).
-
-## Line Item Setup
-
-In addition to your other line item settings, you'll need the following:
-
-+ Enter the **Inventory Sizes** of the creatives you want the line item to use, e.g., *300x250*, *300x50*, etc.
-
-+ Set the **Type** to *Price Priority*
-
-+ Set **Display creatives** to *One or More*.
-
-+ Set **Rotate creatives** to *Evenly*.
-
-+ In the targeting section, select **Key-values** targeting. You'll need to coordinate with your development team on what key-values you want to target.
-
-Save your line item and add a creative.
-
-## Creative Setup
-
-On the new creative screen, select the **Third party** creative type.
-
-Ensure that the **Serve into a SafeFrame** box is checked.
-
-Enter the below code snippet in the **Code snippet** text area.
-
-{% capture sendAllBidsAlert %}
-If you're using the `Send All Bids` scenario (where every bidder has a separate
-order), the creative and targeting will be different from the example shown here. See [Send All Bids](/adops/send-all-bids-adops.html) for details.
-{% endcapture %}
-
-{% include alerts/alert_important.html content=sendAllBidsAlert %}
-
-{% highlight html %}
-
-
-
-{% endhighlight %}
-
-{: .alert.alert-success :}
-You can always get the latest version of the creative code from [the AMP example creative file in our GitHub repo](https://github.com/prebid/prebid-universal-creative/blob/master/template/amp/dfp-creative.html).
-
-{% include adops/adops-creative-declaration.html %}
-
-## Further Reading
-
-+ [Show Prebid Ads on AMP Pages]({{site.github.url}}/dev-docs/show-prebid-ads-on-amp-pages.html)
-+ [How Prebid on AMP Works]({{site.github.url}}/dev-docs/how-prebid-on-amp-works.html)
-
-
-
-
-
-[PBS]: {{site.baseurl}}/dev-docs/get-started-with-prebid-server.html
-[RTC-Overview]: https://github.com/ampproject/amphtml/blob/master/extensions/amp-a4a/rtc-documentation.md
diff --git a/adops/setting-up-prebid-multi-format-in-dfp.md b/adops/setting-up-prebid-multi-format-in-dfp.md
deleted file mode 100644
index bff3323bb0..0000000000
--- a/adops/setting-up-prebid-multi-format-in-dfp.md
+++ /dev/null
@@ -1,89 +0,0 @@
----
-layout: page_v2
-title: Setting up Prebid Multi-Format in Google Ad Manager
-head_title: Setting up Prebid Multi-Format in Google Ad Manager
-description: Setting up Prebid Multi-Format in Google Ad Manager
-pid: 3
-
-top_nav_section: adops
-nav_section: tutorials
-sidebarType: 3
----
-
-
-
-# Setting up Prebid Multi-Format in Google Ad Manager
-{: .no_toc}
-
-This page shows how to set up your ad server so that you can serve multi-format ads.
-
-Multi-Format ads allow you to declare multiple media types on a single ad unit. For example, you can set up one ad on the page that could show a banner, native, or outstream video ad, depending on which had the highest bid.
-
-{: .alert.alert-info :}
-For instructions on how to set up multi-format ads from the engineering side, see [Show Multi-Format Ads with Prebid.js]({{site.baseurl}}/dev-docs/show-multi-format-ads.html).
-
-* TOC
-{: toc }
-
-{: .alert.alert-info :}
-Manually configuring GAM for Prebid can be a fair amount of work.
-Consider using our official command line tool, [Prebid Line Item Manager](/tools/line-item-manager.html), to create the setup. Using this tool may save you time and help you avoid mistakes.
-
-## Step 1. Add an Ad Unit
-
-In Google Ad Manager, [create an ad unit](https://support.google.com/admanager/answer/177203).
-
-Decide what combination of formats will be permitted on the ad unit. This will determine what sizes you allow to serve. The ad unit's sizes must be configured properly to support the combination of formats that will be permitted.
-
-If your ad unit will support native ads, you may want to create a custom **Prebid Native Format** and at least one **Prebid Native Style**. Examples of each are given in [Setting up Prebid Native in Google Ad Manager][nativeAdSetup].
-
-## Step 2. Add an Order
-
-In Google Ad Manager, create a new order. This order will be associated with the multiple line items needed to run multi-format auctions.
-
-## Step 3. Add Line Items and Creatives for each Media Type
-
-Multi-format ad units which support native require at least two distinct sets of line items and creatives:
-
-+ One for [banners and/or outstream video][bannerAdSetup]. Banners and outstream videos will serve into a Google Ad Manager banner creative.
-
-+ One for [native][nativeAdSetup]. Native ads will serve into a native creative with native format and styles.
-
-### Banner/Outstream
-
-Follow the instructions for creating line items and creatives in [Send all bids to the ad server][bannerAdSetup], with the following changes:
-
-+ Add key-value targeting for **'hb_format' is ('banner' OR 'video')**
- + This will ensure that the appropriate ad server line item is activated for banner / outstream bids
- + For bidder-specific line items, specify `hb_format_{BIDDER_CODE}`, e.g., `hb_format_appnexus`
-
- ![Set hb_format to 'banner,video']({{site.baseurl}}/assets/images/ad-ops/multi-format/hb_format_video_banner.png)
-
-+ Make sure that you're targeting the right sizes for both banner ads and any outstream ads you want to serve in this slot, e.g.,
- + 1x1 for outstream (or whatever size you pass into Google Ad Manager as your outstream impression)
- + whatever banner sizes are valid for your site / use case
-
-### Native
-
-Follow the instructions for creating line items, creatives, custom native formats, and native styles in [Show Native Ads][nativeAdSetup], with the following changes:
-
-+ Add key-value targeting for **'hb_format' is 'native'**
-
- ![Set 'hb_format' to 'native']({{site.baseurl}}/assets/images/ad-ops/multi-format/hb_format_native.png)
-
-+ Make sure you're targeting the right sizes for the native ads you want to serve:
- + Fixed-size native, where you specify one or more absolute sizes
- + Fluid, which expands to fit whatever space it's put in
- + For more information on fluid vs. fixed, see [the Google Ad Manager docs](https://support.google.com/admanager/answer/6366914)
-
-## Related Topics
-
-+ [Show Multi-Format Ads with Prebid.js]({{site.baseurl}}/dev-docs/show-multi-format-ads.html) (Engineering setup)
-+ [Multi-Format Example]({{site.baseurl}}/dev-docs/examples/multi-format-example.html) (Example code)
-
-
-
-
-
-[bannerAdSetup]: /adops/send-all-bids-adops.html
-[nativeAdSetup]: /adops/gam-native.html
diff --git a/adops/setting-up-prebid-native-in-dfp.md b/adops/setting-up-prebid-native-in-dfp.md
deleted file mode 100644
index 6a04ee6dff..0000000000
--- a/adops/setting-up-prebid-native-in-dfp.md
+++ /dev/null
@@ -1,154 +0,0 @@
----
-layout: page_v2
-title: Setting up Prebid Native in Google Ad Manager (Alpha)
-head_title: Setting up Prebid Native in Google Ad Manager
-description: Setting up Prebid Native in Google Ad Manager
-pid: 3
-
-top_nav_section: adops
-nav_section: tutorials
-sidebarType: 3
----
-
-
-
-# Setting up Prebid Native in Google Ad Manager (Alpha)
-{: .no_toc}
-
-{% capture version1 %}
-The procedures in this document still work, but we strongly recommend
-using the improved [Guide for Setting up Prebid Native in GAM](/adops/gam-native.html).
-{% endcapture %}
-{% include alerts/alert_warning.html content=version1 %}
-
-This page describes how to set up native creatives in Google Ad Manager for use with Prebid.js.
-
-For more information about Google Ad Manager native ad setup, see the [Google Ad Manager native ads documentation](https://support.google.com/admanager/answer/6366845).
-
-* TOC
-{:toc}
-
-## 1. Create a native ad
-
-From Google Ad Manager, select **Delivery > Native**. Click **Create Native Ad**.
-
-![native delivery]({{site.github.url}}/assets/images/ad-ops/dfp-native/create_prebid_native.png){: .pb-md-img :}
-
-Select the **HTML & CSS editor** option.
-
-![HTML editor option]({{site.github.url}}/assets/images/ad-ops/dfp-native/prebid_native_html_option.png){: .pb-md-img :}
-
-## 2. Define ad settings
-
-For **Ad size** you can specify a specific size for the ad unit or specify the "fluid" size. In this case we'll go with **Fluid**.
-
-Select **New format** under **Custom format**. (If you've already created an ad unit with the format you want, you can select **Existing format** and select the format to apply to this ad unit.)
-
-![native adunit settings]({{site.github.url}}/assets/images/ad-ops/dfp-native/prebid_native_settings.png){: .pb-md-img :}
-
-## 3. Style your native ad
-
-You can add HTML and CSS to define your native ad template. To allow for native impression trackers, click trackers, and [automatic placeholder value replacement]({{site.github.url}}/dev-docs/show-native-ads.html#sending-asset-placeholders) within a Prebid native creative template, you'll need to include a CDN-hosted script in the HTML, as shown here (see Example HTML below for the full script):
-
-![native ad styling]({{site.github.url}}/assets/images/ad-ops/dfp-native/prebid_native_styling.png){: .pb-md-img :}
-
-{: .alert.alert-danger :}
-**Native impression and click tracking requirements**
-Any link that should fire a click tracker needs to include a `pbAdId` attribute set to `hb_adid`. This attribute is required because the script needs the bidId/adId, which can be filled in only by the targeting key on the ad server, not from within the script.
-
-If this creative is served, it will fire impression trackers on load. Clicking the link will fire the click tracker and the link will work as normal, in this case going to the `hb_native_linkurl` destination.
-
-Example HTML and CSS:
-
-{% highlight html %}
-
-
-
-
-
-{% endhighlight %}
-
-{% highlight css %}
-
-.sponsored-post {
- background-color: #fffdeb;
- font-family: sans-serif;
- padding: 10px 20px 10px 20px;
-}
-
-.content {
- overflow: hidden;
-}
-
-.thumbnail {
- width: 120px;
- height: 100px;
- float: left;
- margin: 0 20px 10px 0;
- background-image: url(%%PATTERN:hb_native_image%%);
- background-size: cover;
-}
-
-h1 {
- font-size: 18px;
- margin: 0;
-}
-
-a {
- color: #0086b3;
- text-decoration: none;
-}
-
-p {
- font-size: 16px;
- color: #444;
- margin: 10px 0 10px 0;
-}
-
-.attribution {
- color: #fff;
- font-size: 9px;
- font-weight: bold;
- display: inline-block;
- letter-spacing: 2px;
- background-color: #ffd724;
- border-radius: 2px;
- padding: 4px;
-}
-
-{% endhighlight %}
-
-## 4. Create new native order and line items
-
-1. Add the native format created in **Step 1** under **Inventory Sizes** (in this case, "Prebid Native Format")
-2. Be sure to set inventory targeting and key-value targeting on `hb_pb` corresponding to the line item's CPM.
-
-![create a native order and line item]({{site.github.url}}/assets/images/ad-ops/dfp-native/new-order-and-line-item.png){: .pb-md-img :}
-
-![add targeting]({{site.github.url}}/assets/images/ad-ops/dfp-native/add-targeting.png){: .pb-md-img :}
-
-## 5. Create a new native creative
-
-1. Be sure to select the format you created in **Step 1** (in this case, "Prebid Native Format")
-2. Under **Click-through URL**, add any value. This will be overwritten by Prebid.
-
-![create a new native creative]({{site.github.url}}/assets/images/ad-ops/dfp-native/new-creative.png){: .pb-md-img :}
-
-![creative click-through URL]({{site.github.url}}/assets/images/ad-ops/dfp-native/creative-click-through-url.png){: .pb-md-img :}
-
-## Related Topics
-
-+ [Show Native Ads with Prebid.js]({{site.github.url}}/dev-docs/show-native-ads.html) (Engineering setup instructions)
-+ [Step by Step Guide to Google Ad Manager Setup]({{site.github.url}}/adops/step-by-step.html) (Send top bid to ad server)
-+ [Send all bids to the ad server]({{site.github.url}}/adops/send-all-bids-adops.html)
diff --git a/adops/setting-up-prebid-ott-video-in-gam.md b/adops/setting-up-prebid-ott-video-in-gam.md
deleted file mode 100644
index 679aff9b1a..0000000000
--- a/adops/setting-up-prebid-ott-video-in-gam.md
+++ /dev/null
@@ -1,177 +0,0 @@
----
-layout: page_v2
-title: Setting up OTT Video in Google Ad Manager for Prebid
-head_title: Setting up OTT Video in Google Ad Manager for Prebid
-description: Setting up OTT Video in Google Ad Manager for Prebid
-sidebarType: 3
----
-
-# Setting up OTT Video in Google Ad Manager for Prebid
-
-POP delivers programmatic advertising to video publisherâs OTT inventory. Utilizing the open source Prebid header bidding technology, `POP` provides fill optimization and enables competitive separation within ad pods.
-
-{% include alerts/alert_note.html content="Competitive separation is the process of preventing ads from the same industry group from appearing either in the same ad pod or adjacent to each other in the same ad pod." %}
-
-## Configuring Google Ad Manager
-
-Configuring Google Ad Manager (GAM) for `POP` delivery follows the same Prebid configuration process for video with the additional requirements of adding a custom keyword for targeting and including the VAST URL for the video redirect.
-
-The process for bidding on long-form video with `POP` requires a GAM account with a `Network` that contains at least one `Advertiser`. If you do not have a GAM account, visit [Google](https://ads.google.com/home/tools/manager-accounts/). If a GAM account exists or has been created, log in.
-1. Log into your GAM account.
-2. Ensure a `Network` is set up. (For information on setting up a `Network` review this [Google support document.](https://support.google.com/admanager/answer/6013048?hl=en))
-3. Within the `Network`, select or add an `Advertiser`. The Ad Manager 360 screen will load.
-
-## Orders
-From the left navigation, under `Delivery`, select `Orders`.
-The `Orders` summary page will load.
-
-![Google Ad Manager Orders Summary]({{site.baseurl}}/assets/images/ad-ops/gam_pop/gam_orders.png){: .pb-lg-img :}
-
-
-This page will display any existing `Orders`. An `Order` is required to start an advertising campaign.
-
-To create a new `Order`, click the `New Order` button. The `New Order` screen will load.
-
-![Google Ad Manager New Orders]({{site.baseurl}}/assets/images/ad-ops/gam_pop/gam_new_orders.png){: .pb-lg-img :}
-
-Enter the following information:
-
-**Name**: An identifier for this ad campaign.
-**Advertiser**: The `Advertiser` of the campaign.
-**Trafficker**: The person responsible for uploading `Creatives` and for tracking the performance of the campaign.
-**Labels** (optional): Industry identifiers that enable `POP` to prevent ads in the same industry group from appearing either within or adjacent to each other in the ad pod. `Labels` entered in the `Order` section are available to all of its related `Line Items`.
-
-{% include alerts/alert_warning.html content="At this time POP only recognizes `Labels` entered in the `Line Item` section of GAM but not the `Order` section. POP will only read one label per `Line Item`, even though GAM accepts multiple entries. To target multiple `Labels` create additional `Line Items`, each targeting a specific label." %}
-**Teams** (optional): Groups of users that share access to the same advertisers, agencies, orders and line items.
-
-You can view additional optional entries by clicking on the `Optional` order fields toggle. Additional `Advertiser` and agency contact information can be entered in these fields. Refer to the GAM documentation for details on these entries.
-
-## Line items
-
-Once the `Order` information has been added scroll down to the `Line Item` entry form. The `Line Item` data controls when an ad will display and for how long, at the CPM or other pricing model, the size of the `Creative`, etc. The `Line Item` is separated into five sections; `Initial information`, `Creative forecasting defaults`, `Settings`, `Adjust delivery`, and `Add targeting`.
-
-### Initial information
-
-This section provides initial settings for a `Line Item`. Enter the following information:
-
-**Name**: An identifier for the `Line Item`.
-
-**Inventory sizes**: For `POP`, select `Video VAST`. Selecting this option will display the `Master` input section. This section is where the size of the `Creative`, accompanying creatives and additional targeting can be added.â¨To enter the size of the `Creative`, click in the first text field (with the movie clip icon), a drop down menu will display with options for standard video sizes along with the option to enter a custom video size.
-
-Information on the `Creative` targeting option can be found reviewed at [Google support:](https://support.google.com/admanager/answer/6222493?hl=en).
-
-![Google Ad Manager Video Size]({{site.baseurl}}/assets/images/ad-ops/gam_pop/gam_lineitem_video_size.png){: .pb-lg-img :}
-
-**Labels** (optional): Industry identifiers that enable `POP` to prevent ads in the same industry group from appearing either within or adjacent to each other in the ad pod. `Labels` entered in a Line Item are only applied to that `Line Item`.Â
-
-**Comments & Custom fields** (optional): These entries are provided to assist in reporting on the campaign. They have no affect on ad serving or delivery.
-
-### Creative forecasting defaults
-
-This section is only available when the `Video Vast` option of the `Inventory sizes` setting is selected. It allows you to enter the `Max duration` of the video creative. This value is used for forecasting purposes and will not affect delivery.
-
-![Google Ad Manager Creative Forecasting]({{site.baseurl}}/assets/images/ad-ops/gam_pop/gam_lineorder_creatingforecast.png){: .pb-lg-img :}
-
-### Settings
-
-In the `Settings` section you can enter information regarding the campaign, including start and end times, the desired rate, currency and revenue type. Please refer to [Google Ad Manager documentation](https://support.google.com/admanager/answer/82236?hl=en&ref_topic=7506394) for specific information regarding the settings for these fields.
-
-**Quantity**: The number of impressions, clicks or viewable impressions.
-
-**Rate**: The amount for either CPM or CPA (currency can be changed to dollars, euros, GBP, or Australian dollars).
-
-**Discount**: The amount the `Line Item` cost will be reduced. This value is only for reference and is not reflected in revenue reporting nor does it affect a `Line Itemâs` priority.
-
-![Google Ad Manager Line Item Settings]({{site.baseurl}}/assets/images/ad-ops/gam_pop/gam_lineitem_settings.png){: .pb-lg-img :}
-
-### Adjust delivery
-
-This section provides delivery and display options for the Creatives. Review the [Google Ad Manager documentation](https://support.google.com/admanager/answer/82236?hl=en&ref_topic=7506394) for specific details on these settings.
-
-**Deliver impressions**: Determines how the impressions will be delivered. Options are *Evenly*, *Frontloaded*, and *As fast as possible*.
-
-**Display companions**: Determines whether the creative will be delivered based on the delivery of companion creatives. Available options are *Optional*, *At least one*, and *All*.
-
-**Rotate creative sets**: How the creative sets will rotate the display of individual `Creatives`. Available options are: *Evenly*, *Optimized*, *Weighted* and *Sequential*.
-
-**Day and time**: The days of the week and times of the day the `Line Item` can be delivered.
-
-**Frequency**: Limits how often the `Line Item` can be delivered to one viewer.
-
-![Google Ad Manager Line Item Adjust Delivery]({{site.baseurl}}/assets/images/ad-ops/gam_pop/gam_lineitem_adjust.png){: .pb-lg-img :}
-
-### Add targeting
-
-The targeting sections enable you to set values to focus the targeting of your ad space to certain types of ads or audiences. This document outlines targeting of long-form video, for targeting of other `Creatives` review the [Google Ad Manager documentation](https://support.google.com/admanager/answer/82236?hl=en&ref_topic=7506394).
-
-**Video position**: This setting enables the placement of the `Creative` within the video. For example: pre-roll for the beginning of a video or post-roll for the end.
-
-**Inventory**: Select which inventory to include.
-
-**Key-values and Audience**: Enables the selection of an audience segment and age to target for the ad unit. Also allows for the inclusion of custom keywords.
-
-> For `POP` the custom `keyword hb_pb_cat_dur` is required. The value of this key can be visualized as `hb_pb_cat_dur = RATE_LABEL_DURATION` where:â¨
- **RATE**: The currency amount entered in the `Rate` field of the⨠`Settings` section.
- **LABEL**: The value of the label field in the `Line Item`.
- **DURATION**: The length of the video in seconds.
-
-{% include alerts/alert_tip.html content="For a `Line Item` with a $10.00 CPM entered in the `Rate` field, News entered in the `Label` field and 30s entered in the `Duration` field, you would enter the following in the `Custom key-value` field: `hb_pb_cat_dur = 10.00_news_30s`" %}
-
-**Geography**: The geographic location where the `Creative` will display.
-
-**Devices**: Settings for targeting browser, browser language, device, and operating system.
-
-**Connection**: Settings for targeting bandwidth, mobile carriers and domains.
-
-![Google Ad Manager Line Item Targeting]({{site.baseurl}}/assets/images/ad-ops/gam_pop/gam_lineitem_addtargeting.png){: .pb-lg-img :}
-
-## Creatives
-
-`Line Items` that have an `Inventory sizes` selection of `Standard` or `Master/Roadblock` have `Creatives` attached directly to them, those with `Video VAST` selections do not have `Creatives`. Instead they have `Creative Sets` associated with them. Each `Creative Set` contains a URL that points to the cached `VAST XML`. (This is because most video players can only work with a URL that returns `VAST XML`.)
-
-{% include alerts/alert_important.html content="Some bidders cache the `VAST XML` on the server side while others rely on Prebid.js to perform the caching" %}
-
-### Making a Creative Set
-
-To make a `Creative Set` click on the `Creative link` in the left navigation. This will display the `Creatives` section of Google Ad Manager with a default view of `All creatives`. Click the `Creative sets` link along the top navigation.
-
-This will display the `Creative Sets` listing. If there were previously created `Creative Sets` they can be viewed and opened from here.
-
-![Google Ad Manager Creatives]({{site.baseurl}}/assets/images/ad-ops/gam_pop/gam_creatives_top_nav.png){: .pb-lg-img :}
-
-Click the `New Creative Set` button. A popover will display. In the `Advertiser` field enter the name of the `Advertiser` this set is being created for. Select `Video VAST` and enter or select a video size in the input field with the movie clip icon. Click the `â¨Continue` button.
-
-A `Creative set` entry form will display. Enter a name for the set in the `Creative set` name field. Click the `Redirect` link in the `Select a creative set` type section.â¨
-
-![Google Ad Manager Creative Sets]({{site.baseurl}}/assets/images/ad-ops/gam_pop/gam_creatives_new_set.png){: .pb-lg-img :}
-
-The page will now display the `Redirect` form. Enter a name for the `Redirect` in the `Name` field. In the `VAST tag URL` field enter the cache location. For example:
-
-`https://prebid.adnxs.com/pbc/v1/cache?uuid=50.00_news_30s_%%PATTERN:hb_cache_id%%`
-
-![Google Ad Manager Creative Sets Redirect]({{site.baseurl}}/assets/images/ad-ops/gam_pop/gam_creatives_set_redirect.png){: .pb-lg-img :}
-
-Enter a time in seconds in the `Duration` field. This should match the duration entered in the value for the custom keyword `hb_pb_cat_dur` created earlier. There is no need to enter `Label` information, the label entered in the `Line Item` will be used. For the remainder of the entries refer to the [Google Ad Manager documentation](https://support.google.com/admanager/answer/1171783).
-
-Save the settings by clicking the `Save` button.
-
-## Attaching a Creative to a Line Item
-
-Once the `Creative Set` is saved the `Creative Set Preview` will display.
-
-![Google Ad Manager Creative Sets Redirect]({{site.baseurl}}/assets/images/ad-ops/gam_pop/gam_creative_set_addlineitem_select.png){: .pb-lg-img :}
-
-Click the `Attach Line Item` button. This will display the `Add line items` popover.
-Click on the `Line Items` option. `Line Items` that match the `Creative Set` size and type will be listed. Select the `Line Items` to attach to this `Creative Set`. When finished, click the `Include` button. The selected `Line Items` will now appear in the `Selected Items` list. Click the `Save` button to complete the process.
-
-The `Line Item` is now prepared for bidding on publisherâs inventory.
-
-![Google Ad Manager Creative Sets Redirect]({{site.baseurl}}/assets/images/ad-ops/gam_pop/gam_creative_set_lineitem.png){: .pb-lg-img :}
-
-
-## Further Reading
-[GAM Video Solutions advertising overview](https://support.google.com/admanager/answer/1711021?hl=en)
-[Traffic in-stream video redirects](
-https://support.google.com/dcm/answer/6286181?hl=en)
-[Media Planner for in-stream video creatives. A best practice guide:](https://support.google.com/dcm/answer/4348108)
-Setting up Prebid video in GAM
diff --git a/adops/setting-up-prebid-video-in-dfp.md b/adops/setting-up-prebid-video-in-dfp.md
index beb82e163e..13b3327fcf 100644
--- a/adops/setting-up-prebid-video-in-dfp.md
+++ b/adops/setting-up-prebid-video-in-dfp.md
@@ -1,10 +1,106 @@
---
layout: page_v2
-title: Setting up Prebid Video in Google Ad Manager
-head_title: Setting up Prebid Video in Google Ad Manager
-description: Setting up Prebid Video in Google Ad Manager
+title: GAM Step by Step - Video Creatives
+head_title: GAM Step by Step - Video Creatives
+description: Setting up in-player and long-form video for Prebid in Google Ad Manager
top_nav_section: adops
sidebarType: 3
---
-{% include adops/adops-gam-video-setup.html %}
+# GAM Step by Step - Video Creatives
+
+{: .no_toc }
+
+- TOC
+{:toc}
+
+This page walks you through the steps required to create in-player and long-form video creatives to attach to your Prebid line items in Google Ad Manager (GAM).
+
+{: .alert.alert-success :}
+For complete instructions on setting up Prebid line items in Google Ad Manager, see [Google Ad Manager with Prebid Step by Step](/adops/step-by-step.html).
+
+{: .alert.alert-info :}
+For engineering setup instructions, see [Show Video Ads with a Google Ad Manager Video Tag](/dev-docs/show-video-with-a-dfp-video-tag.html).
+
+Each VAST creative contains a URL that points to the cached VAST XML. (This is because most video players can only work with a URL that returns VAST XML.) When setting up video creatives, it's important to understand where the VAST XML is stored for each of your bidders. The most common place to store VAST XML is the AppNexus cache, but some bidders (such as RubiconProject and SpotX) use their own cache services. To support such bidders, see [Multiple Cache Locations](#multiple-cache-locations) below.
+
+## Single Cache Location
+
+All of your bidders may use the same VAST cache server in these scenarios:
+
+- Mobile SDK video interacts with Prebid Server which will be set up to cache VAST.
+- All of your Prebid.js bidders return VAST XML.
+- You utilize the Prebid.js [ignoreBidderCacheKey](/dev-docs/publisher-api-reference/setConfig.html#setConfig-vast-cache) option.
+
+In any of these cases, you only need to set up creatives pointing to the VAST cache:
+
+1. Select **Delivery** > **Creatives** and click the **VAST creatives** tab.
+2. Click **New creative**.
+3. In the **New VAST creative** screen, select your **Advertiser**, then select **Redirect**.
+4. Enter a **Name** for your creative.
+5. Set the **VAST tag URL** to the cache location.
+
+{: .alert.alert-info :}
+**Prebid Cache and the VAST creative URL warning**:
+Google Ad Manager will show you a warning stating that fetching VAST from the creative URL failed. This is expected, since the creative URL points to a server-side asset cache hosted by Prebid Server.
+
+**In Player Video Cache Location**
+
+If youâre using a Send Top Price Bid configuration, then the VAST URL will be the same for each bidder:
+
+`https://prebid.adnxs.com/pbc/v1/cache?uuid=%%PATTERN:hb_uuid%%`
+
+or
+
+`[other bidder cache location]`
+
+If youâre using Send All Bids, the VAST URL will include the bidder-specific targeting variable. Be sure to replace `BIDDERCODE` with the actual bidder code for your bidders:
+
+`https://prebid.adnxs.com/pbc/v1/cache?uuid=%%PATTERN:hb_uuid_BIDDERCODE%%`
+
+or
+
+`[other bidder cache location]`
+
+**Long-Form Video Cache Location**
+
+If your creative is for long-form (OTT) video, you must include a prefix in your VAST URL. For example (Send Top Price Bid):
+
+`https://prebid.adnxs.com/pbc/v1/cache?uuid=50.00_news_30s_%%PATTERN:hb_cache_id%%`
+
+or (Send All Bids):
+
+`https://prebid.adnxs.com/pbc/v1/cache?uuid=50.00_news_30s_%%PATTERN:hb_cache_id_BIDDERCODE%%`
+
+In these examples, the `uuid` is set to the value of the `hb_pb_cat_dur` key you target in your line item. This value consists of the price bucket, label (for competitive exculsions), and video duration. In this example we've specified a price bucket of `50.00`, a label of `news`, and a duration of `30s`. See [GAM with Prebid Step by Step](/adops/step-by-step.html#targeting) for more information.
+
+{:start="6"}
+6. Set the **Duration** to the max length of video ads you serve. Ads flowing through header bidding are going to differ in length, so if you don't know what the max length is, set it to `30`. If you're using long-form video, this value should match the duration you specified in your uuid targeting.
+
+The resulting creative should look something like the following:
+
+![GAM Video Creative Setup](/assets/images/ad-ops/gam-sbs/appnexus_vast_tag.png)
+
+{:start="7"}
+7. If you're using jsdelivr, set your **Associated ad technology provider**:
+
+{% include /adops/adops-creative-declaration.html %}
+
+{:start="8"}
+8. Click **Save and preview**.
+
+## Multiple Cache Locations
+
+If you're utilizing any bidders that cache their own VAST, you have two options:
+
+- If you're using Prebid.js 4.28 or later, your engineers can specify the [ignoreBidderCacheKey](/dev-docs/publisher-api-reference/setConfig.html#setConfig-vast-cache) option on `setConfig({cache})`. This will cause the browser to generate a VAST wrapper and cache it in your standard location. Then you can use the instructions above for "Single Cache Location". The tradeoff is that this approach requires the video player to unwrap one extra level of VAST.
+- Utilize creative-level targeting in the ad server. See [GAM with Prebid Step by Step](/adops/step-by-step.html#creative-level-targeting) for details. In this case, you'll target on the `hb_bidder` or `hb_bidder_BIDDERCODE` (replacing BIDDERCODE with the code for your bidder) key with a value of the bidder whose VAST is associated with that creative.
+
+## Further Reading
+
+- [Google Ad Manager with Prebid Step by Step](/adops/step-by-step.html)
+- [Show Video Ads with Google Ad Manager](/dev-docs/show-video-with-a-dfp-video-tag.html)
+- [Send All Bids vs Top Price](/adops/send-all-vs-top-price.html)
+- [Prebid Universal Creatives](/overview/prebid-universal-creative.html)
+- [Creative Considerations](/adops/creative-considerations.html)
+- [Ad Ops Planning Guide](/adops/adops-planning-guide.html)
diff --git a/adops/setting-up-prebid-video-in-freewheel.md b/adops/setting-up-prebid-video-in-freewheel.md
index 10218d9022..ad1a7ac7f4 100644
--- a/adops/setting-up-prebid-video-in-freewheel.md
+++ b/adops/setting-up-prebid-video-in-freewheel.md
@@ -3,15 +3,14 @@ layout: page_v2
title: Setting up Prebid Video in FreeWheel
head_title: Setting up Prebid Video in FreeWheel
description: Setting up Prebid Video in FreeWheel
-pid: 3
-
-top_nav_section: adops
-nav_section: tutorials
sidebarType: 3
---
# FreeWheel Guide for Premium Long-Form Video
+{: .alert.alert-warning :}
+This guide is not written, maintained, or endorsed by Freewheel. Freewheel recommends speaking to your account team before implementing any header-bidding setup to ensure full implications for direct-sold ad delivery, forecasting, and reporting is understood.
+
This page describes how to set up Campaigns for long form video using FreeWheel's ad server.
As with Google Ad Manager for digital ads, ad ops will need to configure their FreeWheel server account so that the server can provide the correct creatives for the video player. If you do not have an account visit [FreeWheel](https://www.freewheel.com/) to create one.
@@ -19,20 +18,22 @@ As with Google Ad Manager for digital ads, ad ops will need to configure their F
Once your account is set up log in to the FreeWheel site. You will be presented with a dashboard area. Click on either the Advertising button in the top navigation bar or the Campaign link in the main body.
## Campaigns
+
This will display the Campaign & IO screen. If you have not established any campaigns yet click the Add New Campaign link.
This will present the Add New Campaign screen.
- - Enter a name for the campaign
- - Add an external identifier (optional)
- - Select an Advertiser and Agency from the drop down menus.
- - Click the Create and Continue Editing button when finished.
+- Enter a name for the campaign
+- Add an external identifier (optional)
+- Select an Advertiser and Agency from the drop down menus.
+- Click the Create and Continue Editing button when finished.
You will be returned to the Campaign & IO screen and your new campaign should appear in the Campaign & IOs table. To begin your campaign you will need to create some insertion orders.
Click on the campaign name, which appears in the Campaign column. This will present the Insertion Orders screen.
## Insertion Orders
+
Click on the Add New IO link. This will present a pop over for adding a new Insertion Order.
Return to the Campaign & IOs screen and check the box in the first column of the row containing your I&O. Click the Load Placements button. This will reload the screen with the details of the Insertion Order you selected and the Placements for that Insertion Order.
@@ -43,14 +44,15 @@ If there are no Placements or you want to add a new one click on the Add New Pla
The FreeWheel module within Prebid sends key-value targeting pairs to the FreeWheel SDK, which then forwards them to the FreeWheel server. The FreeWheel server uses those targeting key-value pairs to select the correct creatives to return to Prebid. The key-value pairs are written as:
-
+```text
'hb_pb_cat_dur': â12.00_399_30s'
-
+```
The value is a concatenation of the CPM (12.00), the FreeWheel industry code (399) and the ad length in seconds (30s). The name of the Placement must be written in the same format:
-
+```text
12.00_399_30s
+```
Once you have created a Placement it will appear in the first row of the Placement table.
@@ -58,7 +60,7 @@ In the last column of each row is a magnifying glass icon. Clicking on that will
### Schedule and Budget
-The Schedule and Budget section enables an ad ops to schedule when the Placement will run, the price bucket and the budget type.
+The Schedule and Budget section enables an ad ops to schedule when the Placement will run, the price bucket and the budget type.
Following the naming convention for Placements, 12.00_399_30s, the first item in the name represents the CPM (12.00). Ensure that the Placement Price matches the CPM. From our example, this should be $12.00. To edit, click on the Price link.
@@ -73,22 +75,23 @@ The Delivery and Forecast section determines how frequently a Placement will app
- Do Not Allow to Repeat
### Exclusivity
-Exclusivity is the process of preventing ads from the same industry group from appearing either in the same ad pod or adjacent to each other in the same ad pod.
-Scroll to the Exclusivity section. Ensure that the Level of Exclusivity and Scope of Exclusivity is at the desired setting for this Placement. Also ensure that the industry displayed matches the industry identifier for this Placement. (399 portion of the 12:00_399_30s value). If not, click on the Exclusivity title. A pop over will display enabling you to change the Exclusivity parameters.
+Exclusivity is the process of preventing ads from the same industry group from appearing either in the same ad pod or adjacent to each other in the same ad pod.
+
+Scroll to the Exclusivity section. Ensure that the Level of Exclusivity and Scope of Exclusivity is at the desired setting for this Placement. Also ensure that the industry displayed matches the industry identifier for this Placement. (399 portion of the 12:00_399_30s value). If not, click on the Exclusivity title. A pop over will display enabling you to change the Exclusivity parameters.
-The Level of Exclusivity determines the range of ads that fall within the competitive separation rules. There are three options, available from the pop up at the top of the pop over. They are:
+The Level of Exclusivity determines the range of ads that fall within the competitive separation rules. There are three options, available from the pop up at the top of the pop over. They are:
- None: As it implies, none means there is no exclusivity.
- Full: No other industry ads will appear within the ad pod.
-- Custom: There is a custom exclusivity set up.
+- Custom: There is a custom exclusivity set up.
-Checking the box next to the industry name and clicking the Exclude button will add that industry to the list of industries excluded from appearing with this Placement. It is recommended that you exclude an industry if the Placement intends on delivering ads from that industry.
-The Scope of Exclusivity determines on what ad types the competitive separation will occur. There are three choices:
+Checking the box next to the industry name and clicking the Exclude button will add that industry to the list of industries excluded from appearing with this Placement. It is recommended that you exclude an industry if the Placement intends on delivering ads from that industry.
+The Scope of Exclusivity determines on what ad types the competitive separation will occur. There are three choices:
- All Ad Units: Exclusivity is applied to any ad.
-- Targeted Ads: Exclusivity is only applied to targeted ads.
- - Adjacent Ads: Exclusivity is only applied to ads appearing adjacent to this creative. .
+- Targeted Ads: Exclusivity is only applied to targeted ads.
+- Adjacent Ads: Exclusivity is only applied to ads appearing adjacent to this creative. .
### Custom Targeting
@@ -96,50 +99,61 @@ The Custom Targeting section is where a custom target will be set to match the k
### Industry
-The Industry section enables publishers to set the Industry Group associated with the Placement. Ensure that the Industry Group matches the FreeWheel industry identifier. If not, click on the Industry title, a pop over will display that will enable you to change the Industry Group. For each Placement there can only be one Industry Group.
+The Industry section enables publishers to set the Industry Group associated with the Placement. Ensure that the Industry Group matches the FreeWheel industry identifier. If not, click on the Industry title, a pop over will display that will enable you to change the Industry Group. For each Placement there can only be one Industry Group.
The Industry Group must match the Industry Group Identifier that is contained in the passed in key-value targeting pair. In our example case, that Industry Group Identifier is 399 (12.00_399_30s).
## Creatives
-Return to the Campaign & IO screen by clicking the Campaign button. Click the Creative button to the right of the Campaign button. This will display the Creative Library.
-Publishers must create one Creative for each ad duration they wish to support. For example, if a publisher will support 15s, 30s, and 60s durations, they will need three Creatives, regardless of how many Placements they have at that duration. If there are one hundred Placements with 30s durations, only one Creative targeting 30s duration is needed.
+Return to the Campaign & IO screen by clicking the Campaign button. Click the Creative button to the right of the Campaign button. This will display the Creative Library.
+
+Publishers must create one Creative for each ad duration they wish to support. For example, if a publisher will support 15s, 30s, and 60s durations, they will need three Creatives, regardless of how many Placements they have at that duration. If there are one hundred Placements with 30s durations, only one Creative targeting 30s duration is needed.
If there are no creatives in the library click the Add New Creative button. A pop over will display enabling you to add a new creative.
The new Creative will appear in the Creative Library. Click on the Creative name, a new screen will be displayed with information about that Creative.
### Duration
-Duration determines the length of the Creative. This value must match the duration portion of the key-value target passed into FreeWheel server. The 30s portion of our example (12:00_399_30s). If not, click on the Duration link. A pop over will display enabling you to enter the correct duration for this Creative.
+
+Duration determines the length of the Creative. This value must match the duration portion of the key-value target passed into FreeWheel server. The 30s portion of our example (12:00_399_30s). If not, click on the Duration link. A pop over will display enabling you to enter the correct duration for this Creative.
For each Placement duration you should have one Creative that matches. For example, if you had Placements with targeting values of 12:00_399_15s, 12:00_399_30s, and 12:00_399_45s, you should have three Creatives, one with a 15 second duration, another with a 30 second duration and a third one with a 45 second duration.
-Only one Creative is needed for each Placement duration. For example, if you had Placements with targeting values of 12:00_398_30s, 12:00_399_30s and 12:00_400_30s you would only need one Creative with a duration of 30 seconds.
+Only one Creative is needed for each Placement duration. For example, if you had Placements with targeting values of 12:00_398_30s, 12:00_399_30s and 12:00_400_30s you would only need one Creative with a duration of 30 seconds.
-### Creative URL
+### Creative URL
In order for FreeWheel SDK to send the correct Creative to the video player it needs to request the VAST XML stored in Prebid cache. The Creative URL has to point to the correct cache location.
To ensure the cache URL is correct there are two macros that dynamically populate the URL query. To confirm the dynamic URL is formatted correctly click on the URL link in the Detail field. A pop over will display with the dynamic URL.
-The scheme, host, and path should read as follows:
-https://prebid.adnxs.com/pbc/v1/cache
+The scheme, host, and path should point to your Prebid Server cache. For instance, if you
+utilize Xandr's AppNexus cache:
+
+```text
+https://prebid.adnxs.com/pbc/v1/cache
+```
-The query should have one key-value items:
+The query should have one key-value items:
+```text
uuid=#{ad.placement.name}_#{request.keyValue(âhb_cache_id")}
+```
-The first macro, #{ad.placement.name}, will format the Placement name. It will be the CPM_IndustryIdentfier_Duration format passed in from Prebid for targeting and the name used for the Placement. (12.00_399_30s)
+The first macro, `#{ad.placement.name}`, will format the Placement name. It will be the CPM_IndustryIdentfier_Duration format passed in from Prebid for targeting and the name used for the Placement. (12.00_399_30s)
-The second macro, #{request.keyValue(âhb_cache_idâ), formats the unique Prebid cached id.
+The second macro, `#{request.keyValue(âhb_cache_idâ)`, formats the unique Prebid cached id.
-In real-time, when the dynamic URL is formatted it will appear like:
+In real-time, when the dynamic URL is formatted it will appear like:
-https://prebid.adnxs.com/pbc/v1/cache?uuid=12.00_391_30s_6c422e51-46cf-4b0a-ae41-64c61c1ca125
+```text
+https://prebid.adnxs.com/pbc/v1/cache?uuid=12.00_391_30s_6c422e51-46cf-4b0a-ae41-64c61c1ca125
+```
In order for the above URL to format correctly ensure that the URL in the text box appears as:
-https://prebid.adnxs.com/pbc/v1/cache?uuid=#{ad.placement.name}_#{request.keyValue("hb_cache_id")}
-
-Your ad ops should now be completed and set up for premium long-form video.
+```text
+https://prebid.adnxs.com/pbc/v1/cache?uuid=#{ad.placement.name}_#{request.keyValue("hb_cache_id")}
+```
+Your ad ops should now be completed and set up for premium long-form video.
diff --git a/adops/setting-up-prebid-with-the-appnexus-ad-server.md b/adops/setting-up-prebid-with-the-appnexus-ad-server.md
index d6a92142bd..43aa5ca4c1 100644
--- a/adops/setting-up-prebid-with-the-appnexus-ad-server.md
+++ b/adops/setting-up-prebid-with-the-appnexus-ad-server.md
@@ -1,8 +1,8 @@
---
layout: page_v2
-title: Setting up Prebid with the Xandr Publisher Ad Server
-head_title: Setting up Prebid with the Xandr Publisher Ad Server
-description: Setting up Prebid with the Xandr Publisher Ad Server
+title: Setting up Prebid with the Microsoft Monetize Ad Server
+head_title: Setting up Prebid with the Microsoft Monetize Ad Server
+description: Setting up Prebid with the Microsoft Monetize Ad Server
pid: 3
top_nav_section: adops
@@ -10,32 +10,31 @@ nav_section: tutorials
sidebarType: 3
---
+# Setting up Prebid with the Microsoft Monetize Ad Server
-
-# Setting up Prebid with the Xandr Publisher Ad Server
{: .no_toc}
-This page describes how to set up the Xandr Publisher Ad Server to work with Prebid.js from an Ad Ops perspective.
+This page describes how to set up the Microsoft Monetize Ad Server to work with Prebid.js from an Ad Ops perspective.
-In some cases there are links to the [Xandr Help Center](https://monetize.xandr.com/docs/home) which require a customer login.
+In some cases there are links to the [Microsoft Help Center](https://docs.xandr.com/).
-Once the Ad Ops setup is complete, developers will need to add code to the page as shown in the example [Using Prebid.js with Xandr as your Ad Server]({{site.github.url}}/dev-docs/examples/use-prebid-with-appnexus-ad-server.html).
+Once the Ad Ops setup is complete, developers will need to add code to the page as shown in the example [Using Prebid.js with Microsoft Monetize as your Ad Server]({{site.github.url}}/dev-docs/examples/use-prebid-with-appnexus-ad-server.html).
{: .alert.alert-success :}
-**Xandr Publisher Ad Server Features**
-Note that the functionality described on this page uses some features that are only available in the Xandr Publisher Ad Server product, such as [key-value targeting](https://monetize.xandr.com/docs/key-value-targeting). For more information, contact your Xandr representative.
+**Microsoft Monetize Ad Server Features**
+Note that the functionality described on this page uses some features that are only available in the Microsoft Monetize Ad Server product. For more information, contact your Microsoft Monetize representative.
{: .alert.alert-info :}
-**Object Limits**
-Note that using Prebid with Xandr as your ad server may cause you to
-hit your Xandr [Object Limits](https://monetize.xandr.com/docs/viewing-your-object-limits).
+**Object Limits**
+Note that using Prebid with Microsoft Monetize as your Ad Server may cause you to
+hit your [Object Limits](https://docs.xandr.com/bundle/monetize_monetize-standard/page/topics/viewing-your-object-limits.html).
* TOC
{:toc}
## Step 1. Add Key-Values
-In the [key-value targeting](https://monetize.xandr.com/docs/key-value-targeting) in Console, set up the keys and values shown below. Keep in mind that all of the keys described below should use string values (**not** numeric).
+In the [key-value targeting](https://docs.xandr.com/bundle/monetize_monetize-standard/page/topics/key-value-targeting.html) in Monetize, set up the keys and values shown below. Keep in mind that all of the keys described below should use string values (**not** numeric).
If you are only sending the winning bid to the ad server, set up your keys like so:
@@ -54,31 +53,34 @@ Otherwise, if you are [sending all bids to the ad server](/dev-docs/publisher-ap
Depending on the price granularity you want, you may find one of the following CSV files helpful. Each file has the buckets for that granularity level predefined. You can avoid manually setting up key-value targeting by uploading the appropriate CSV file on the [key-values screen](https://docs.xandr.com/bundle/monetize_monetize-standard/page/topics/key-value-targeting.html):
-+ [10cent-prebid-buckets.csv]({{site.github.url}}/assets/csv/10cent-prebid-buckets.csv)
-+ [25cent-prebid-buckets.csv]({{site.github.url}}/assets/csv/25cent-prebid-buckets.csv)
-+ [dense-prebid-buckets.csv]({{site.github.url}}/assets/csv/dense-prebid-buckets.csv)
+* [10cent-prebid-buckets.csv]({{site.github.url}}/assets/csv/10cent-prebid-buckets.csv)
+* [25cent-prebid-buckets.csv]({{site.github.url}}/assets/csv/25cent-prebid-buckets.csv)
+* [dense-prebid-buckets.csv]({{site.github.url}}/assets/csv/dense-prebid-buckets.csv)
For more information about how to set up price bucket granularity in Prebid.js code, see the API documentation for [`pbjs.setPriceGranularity`](/dev-docs/publisher-api-reference/setConfig.html#setConfig-Price-Granularity).
{: .alert.alert-success :}
You can only report on price bucket values if you provide them in the Key-Value Targeting UI .
-## Step 2. Add Creatives
+## Step 2. Add Advertiser
-You'll need one creative per ad size you'd like to serve. You can re-use a creative across any number of line items and campaigns.
+Depending on whether you are sending all bids or sending top bid you will need to create an Advertiser per bidder e.g. *Rubicon - Prebid Advertiser* vs *Prebid Advertiser*
-Follow the creative setup instructions in [Add Creatives](https://docs.xandr.com/bundle/monetize_monetize-standard/page/topics/add-a-creative.html) with the following setting:
+Follow the advertiser setup instructions in [Create an Advertiser](https://docs.xandr.com/bundle/monetize_monetize-standard/page/topics/create-an-advertiser.html)
-- Select **Show Template Selector**.
+## Step 3. Add Creatives
-- Select a template with an HTML format.
+You'll need one creative per ad size you'd like to serve. You can re-use a creative across any number of line items, as long as the creative belongs to the same advertiser as the line item.
-- Paste the code snippet shown below into the code box.
+Follow the banner creative setup instructions in [Add Creatives](https://docs.xandr.com/bundle/monetize_monetize-standard/page/topics/add-a-creative.html), navigating the the Creative Manager and selecting the appropriate advertiser from the previous step, with the following setting:
-![New creative]({{ site.github.url }}/assets/images/ad-ops/appnexus-setup/prebid-creative-appnexus.png) {: .pb-lg-img :}
+* Paste the below universal creative code as the creative asset tag code.
+* Name the creative e.g. *Rubicon - Prebid Creative 300x250*.
+* Select the creative size e.g. *300x250*.
+* Self-Audit the creative and confirm compliance.
-{% highlight html %}
-
+```html
+
-{% endhighlight %}
+```
{: .alert.alert-warning :}
-**Creative Expiration**
-Note that creatives are automatically marked as inactive by the Xandr systems after 45 days of inactivity. This may happen to Prebid creatives since they are loaded relatively infrequently compared to other use cases. For help with mitigating this issue, please contact your Xandr representative.
+**Creative Expiration**
+Note that creatives are automatically marked as inactive by the Microsoft Monetize systems after 45 days of inactivity. This may happen to Prebid creatives since they are loaded relatively infrequently compared to other use cases. For help with mitigating this issue, please contact your Microsoft Monetize representative.
{: .alert.alert-warning :}
**SafeFrame**
-If you want your creative to serve into a SafeFrame, this will need to be enabled on the site-side of the Prebid.js implementation rather than as a setting in the ad server. A developer can learn how to enable this setting for the publisher by referencing [Using Prebid.js with Xandr Publisher Ad Server]({{site.github.url}}/dev-docs/examples/use-prebid-with-appnexus-ad-server.html). Additionally if the Xandr ad server tags are configured to use SafeFrames, you **will** need to use the above creative template to properly render the creative. Earlier versions of the Prebid.js creative template may not be fully SafeFrame compliant (if they are still in-use from older setups), so it is recommended to switch to the above template in this scenario.
+If you want your creative to serve into a SafeFrame, this will need to be enabled on the site-side of the Prebid.js implementation rather than as a setting in the ad server. A developer can learn how to enable this setting for the publisher by referencing [Using Prebid.js with Microsoft Monetize Ad Server]({{site.github.url}}/dev-docs/examples/use-prebid-with-appnexus-ad-server.html). Additionally if the Microsoft Monetize Ad Server tags are configured to use SafeFrames, you **will** need to use the above creative template to properly render the creative. Earlier versions of the Prebid.js creative template may not be fully SafeFrame compliant (if they are still in-use from older setups), so it is recommended to switch to the above template in this scenario.
+
+## Step 4. Set up Insertion Order
+
+You'll need to create an insertion order, belonging to your advertiser, for your line items.
+Follow the insertion order setup setup instructions in [Create a Seamless Insertion Order (IO)](https://docs.xandr.com/bundle/monetize_monetize-standard/page/topics/create-an-insertion-order.html), with the following settings:
-## Step 3. Set up Line Items
+* Choose a flexible budget type.
+* Set no end date.
-You'll need to create one line item for every price bucket you intend to serve.
+## Step 5. Set up Line Items
+
+You'll need to create one line item for every price bucket you intend to serve. These line items will need to be under the advertiser and insertion order in step 2 and 4.
For example, if you want to have $0.10 price granularity, you'll need 201 line items, one for each of your key-value targeting settings from Step 1.
-For each line item, follow the line item setup instructions in [Create a Line Item](https://docs.xandr.com/bundle/monetize_monetize-standard/page/topics/create-a-standard-line-item.html), with the following settings:
+For each line item, follow the line item setup setup instructions in [Create an Augmented Line Item (ALI)](https://docs.xandr.com/bundle/monetize_monetize-standard/page/topics/create-an-augmented-line-item-ali.html), with the following settings:
+
+* Set the **Name** e.g., *âŹ00.01 - Rubicon - Prebid Banner*.
-- Set the **Revenue Type** to *CPM*.
+* Set **Ad Type** Banner.
-- Set the **Revenue Value** to one of the price bucket key-values from Step 1, e.g., \$0.2.
+* Set the **Revenue Type** to *CPM*.
-- Under **Associated Creatives**, choose to manage creatives at the line item level.
+* Set the **Revenue Value** to one of the price bucket key-values from Step 1, e.g., *0.01*.
-- Associate as many creative sizes with the line item as you need. Set the **Creative Rotation** to *Even*.
+* Set the **Budget Setup** to *Unlimited Budget*.
-- In your line item's targeting settings, use the key-value that matches the line item's price bucket, e.g. (you set these up in Step 1).
+* Set the **End Date** sometime in the future e.g. *6/26/2033*.
-- Still in the targeting settings, target the custom category `prebid_enabled`. This will allow you to turn targeting on and off for a placement (or an entire placement group) by adding it to the custom category, which you'll do in one of the later steps. This is useful for troubleshooting.
+* Within **Inventory & Brand Safety Targeting** and for **Supply Source** select *Managed Inventory*.
-For more information about targeting custom content categories, see [Content Category Targeting](https://docs.xandr.com/bundle/monetize_monetize-standard/page/topics/content-category-targeting.html).
+* Set the **Line Item Priority** for more information on line item priority see [Bidding Priority](https://docs.xandr.com/bundle/monetize_monetize-standard/page/topics/bidding-priority.html)
-## Step 4. Set up Campaigns
+* Optional: Still in the targeting settings, target the custom category `prebid_enabled`. This will allow you to turn targeting on and off for a placement (or an entire placement group) by adding it to the custom category, which you'll do in one of the later steps. This is useful for troubleshooting. For more information about targeting custom content categories, see [Content Category Targeting](https://docs.xandr.com/bundle/monetize_monetize-standard/page/topics/content-category-targeting.html).
-For each line item, create one campaign to associate with it. The campaign should have an unlimited budget, start running right away, and run indefinitely.
+* In your line item's targeting settings, set the **Key/Value Targeting** to match the line item's price bucket/revenue value.
-You shouldn't have to do anything else. All other settings (such as budget and targeting) are inherited from the line item.
+* Under **Creatives**, associate as many creative sizes with the line item as you need. Set the **Creative Rotation** to *Evenly weight creatives*.
-For more information, see the full campaign setup instructions at [Create a Campaign](https://docs.xandr.com/bundle/monetize_monetize-standard/page/topics/create-a-campaign.html).
+* Scroll back up to **Budgeting & Scheduling** and select *No daily budget* within **Pacing** (this can only be selected when managed invenotry is targeted).
-## Step 5. Add the `prebid_enabled` Custom Category to Placements
+## Step 6. Add the `prebid_enabled` Custom Category to Placements (Optional)
-Make sure the placements you're using for Prebid are added to the following custom category: `prebid_enabled`.
+If while setting up line items, you set custom category targety to `prebid_enabled`, make sure the placements you're using for Prebid are added to the custom category `prebid_enabled`.
This will make sure these placements are targeted by the line items you just set up.
-It will also make it easy to turn the targeting on and off for a given placement (or placement group) by adding or removing it from the custom category. This can be very useful when troubleshooting.
+It will also make it easy to turn the targeting on and off for a given placement (or placement group) by adding or removing it from the custom category. This can be useful when troubleshooting.
## Related Topics
-+ [Getting Started with Prebid.js for Header Bidding]({{site.github.url}}/overview/getting-started.html)
-
-+ [Using Prebid.js with Xandr as your Ad Server]({{site.github.url}}/dev-docs/examples/use-prebid-with-appnexus-ad-server.html) (Developer example)
+* [Ad Ops and Prebid](/adops/before-you-start.html)
+* [Ad Ops Planning Guide](/adops/adops-planning-guide.html)
+* [Getting Started with Prebid.js for Developers](/dev-docs/getting-started.html)
+* [Using Prebid.js with Microsoft Monetize Ad Server](/dev-docs/examples/use-prebid-with-appnexus-ad-server.html)(Developer example)
diff --git a/adops/setting-up-prebidjs-with-Smart-Ad-Server.md b/adops/setting-up-prebidjs-with-Smart-Ad-Server.md
index 969d3af0f3..2dfc95c07a 100644
--- a/adops/setting-up-prebidjs-with-Smart-Ad-Server.md
+++ b/adops/setting-up-prebidjs-with-Smart-Ad-Server.md
@@ -9,24 +9,29 @@ sidebarType: 3
# Setting up Prebid.js with Smart Ad Server
+
## Introduction
+
This article describes the basic steps to set up Prebid.js with Smart Ad Server.
Comprehensive documentation is available in the article [Holistic+ Setup](https://support.smartadserver.com/s/article/Holistic-Setup) in Smart AdServerâs Help Center. This documentation may be more up to date than the explanations below.
-For some of the setup steps described below, you need to have a login to [Smart AdServerâs UI](https://manage.smartadserver.com/).
+For some of the setup steps described below, you need to have a login to [Smart AdServerâs UI](https://manage.smartadserver.com/).
## How it works
- - You implement the Prebid.js header bidding wrapper as well as Smart AdServerâs ad tags on your website.
- - The header auction winnerâs data (bidder name, CPM, currency) is passed with the ad call executed by Smart AdServerâs ad tag.
- - In Smart AdServerâs UI, you simply set up an RTB+ insertion in order to establish the competition between the header auction winner and Smart AdServerâs connected monetization partners (DSPs); there is no need to set up multiple line items, price buckets, keyword targeting etc.
- - At the same time, Smart AdServerâs holistic yield algorithm will make sure your direct (guaranteed) campaigns meet their targets.
- - Finally, the impression is given to the highest bid: (1) Smart AdServerâs own RTB+ (2) a direct campaign or (3) the header auction winner.
+- You implement the Prebid.js header bidding wrapper as well as Smart AdServerâs ad tags on your website.
+- The header auction winnerâs data (bidder name, CPM, currency) is passed with the ad call executed by Smart AdServerâs ad tag.
+- In Smart AdServerâs UI, you simply set up an RTB+ insertion in order to establish the competition between the header auction winner and Smart AdServerâs connected monetization partners (DSPs); there is no need to set up ultiple line items, price buckets, keyword targeting etc.
+- At the same time, Smart AdServerâs holistic yield algorithm will make sure your direct (guaranteed) campaigns meet their targets.
+- Finally, the impression is given to the highest bid: (1) Smart AdServerâs own RTB+ (2) a direct campaign or (3) the header auction winner.
## Setup
+
### Step 1 - Implement the wrapper
+
Proceed as follows:
+
- Go to the [Prebid.js download page](/download.html).
- Select the relevant **Bidder Adapter(s)**, an **Analytics Adapter** (optional) and **Module(s)** (optional).
- Download the code.
@@ -37,25 +42,31 @@ Proceed as follows:
This step is also documented [here](https://support.smartadserver.com/s/article/Holistic-Setup#implement-wrapper).
### Step 2 - Implement Smart AdServerâs tag
+
Smart AdServerâs OneCall tagging is strongly recommended. With OneCall, you can set header bidding data per `tagId`. The `tagId` is the Id of the container (``), where the ad will be displayed. The `tagId` format is `sas_
`. e.g. `sas_1234`.
Make sure you use Smart AdServerâs **new OneCall tagging**, which uses POST requests with all the necessary information in the request body; simply check if you see the `formats` array in your tag. If you see `formatId`, you are still dealing with an old tag - in this case, get back to your service contact at Smart AdServer.
-For samples of both the new and legacy OneCall as well as a full implementation example, read [here](https://support.smartadserver.com/s/article/Holistic-Setup#onecall).
+For samples of both the new and legacy OneCall as well as a full implementation example, read [here](https://support.smartadserver.com/s/article/Holistic-Setup#onecall).
**Additional resources**:
+
- [Implementation with Smart AdServerâs Standard Call tagging](https://support.smartadserver.com/s/article/Holistic-Setup#implement-smart-tag)
-- [Full tagging guide](https://support.smartadserver.com/s/article/Tagging-guide)
+- [Full tagging guide](https://support.smartadserver.com/s/article/Tagging-guide)
### Step 3 - Setup in Smart AdServerâs UI
+
Things to keep in mind for the Setup in [Smart AdServerâs UI](https://manage.smartadserver.com/):
+
- In the RTB+ insertion, you must enable the checkbox "Activate Holistic yield mode" in the "General settings" section of the insertion.
- RTB+ must be enabled and configured in the network global settings.
- The Holistic+ feature must be enabled on the network.
- You must use the official and Holistic RTB+ script templates in the insertions.
For more details, read [here](https://support.smartadserver.com/s/article/Holistic-Setup#setup-ui).
+
### Step 4 - Get reporting
+
Read these articles to learn more about the available header bidding reporting:
-- [Holistic Dashboard](https://support.smartadserver.com/s/article/Holistic-dashboard) - provides a fast and easy overview of basic metrics by delivery channel and RTB product.
+
- [Big Data Reports](https://support.smartadserver.com/s/article/Holistic-Setup#bdr) - provides full, in-depth reporting with header bidding related dimensions and metrics.
diff --git a/adops/step-by-step.md b/adops/step-by-step.md
index 9b1f650c73..0e85b68a8c 100644
--- a/adops/step-by-step.md
+++ b/adops/step-by-step.md
@@ -1,9 +1,219 @@
---
layout: page_v2
-title: Setup Line items For Google Ad Manager
-head_title: Step by step guide to Google Ad Manager Setup
-description: Setting up GAM for Prebid.js
+title: Google Ad Manager with Prebid Step by Step
+head_title: Google Ad Manager with Prebid Step by Step
+description: Step-by-step instructions for setting up line items in GAM for Prebid.
#note the sidebar type needs to reflect the section this file is displayed in. See _data/sidenav.yml for the side nav categories.
sidebarType: 3
---
-{% include /adops/adops-gam-setup.html %}
+
+# Google Ad Manager with Prebid Step by Step
+
+{: .no_toc }
+
+- TOC
+{: toc }
+
+This guide contains step-by-step instructions for manually setting up line items in Google Ad Manager (GAM) to work with Prebid. These instructions describe only the specific settings required for Prebid, they are not intended to be comprehensive instructions that replace or duplicate the [GAM documentation](https://support.google.com/admanager#topic=7505988).
+
+Because integrating with Prebid could mean having to create thousands of line items, most companies will automate these steps. Weâre showing them here so you can manually create the line items if you need or want to, and also to provide context for the automation.
+
+{: .alert.alert-success :}
+Prebid provides a script you can use to automate these steps: [Prebid Line Item Manager](/tools/line-item-manager.html).
+
+## Prerequisites
+
+Before you begin, we recommend you read through our [Planning Guide](/adops/adops-planning-guide.html) to make sure you know what your configuration is going to look like and youâve thoroughly documented your decisions.
+
+### Create Advertisers and Orders
+
+GAM works as a hierarchical structure, where line items are children of orders, and orders are children of advertisers. You must have your advertisers and orders set up before you can start creating line items and creatives. The advertisers you create for Prebid will typically depend on whether youâre sending all bids or only the top price bid to the ad server.
+
+- Send Top Bid: Create one general Prebid advertiser
+- Send All Bids: Create one Prebid advertiser per bidder where Orders are organized by bidder, with one or more orders containing line items targeted towards a single bidder.
+
+![Google Ad Manager hierarchy](/assets/images/ad-ops/gam-sbs/gam-hierarchy.png)
+
+### Create Native Template
+
+If youâre working with native inventory, you must have your native template created and stored before you begin creating your line item. See [GAM Step by Step - Native Creatives](/adops/gam-native.html).
+
+### Create Keys
+
+When you create your line item, youâll be targeting key-value pairs that are being sent with the ad request to the ad server. Any keys you target need to be defined in GAM before you can use them in your line items.
+
+To define new keys, in GAM go to **Inventory** > **Key-Values** and enter your Prebid-specific keys, e.g. `hb_pb`, `hb_adid`, `hb_size`, `hb_format`, etc.
+
+You can also define accepted values for the keys, but you donât need to. If you create Dynamic keys, values can be added when you set up your line item.
+
+{: .alert.alert-danger :}
+Keys in GAM have a maximum length of 20 characters; any keys passed to GAM longer than that will be truncated. This means that if Prebid passes in the key `hb_format_BidderWithALongName`, GAM will truncate it to `hb_format_BidderWith`. When you create your keys, you must use the truncated name.
+
+See [Key Values](/adops/key-values.html) for information on the keys you'll need.
+
+## Create a Line Item
+
+Open the order you want to associate the line item with and click **New line item**.
+
+### General Settings
+
+From the **Settings** tab, do the following:
+
+1. Select your **Ad type**:
+ - Banner/Outstream/Native/AMP: Click **Select display ad**.
+ - Video/Audio: Click **Select video or audio ad**.
+
+2. Enter the **Name** of your line item. Suggested format: Prebid â format - bidder â price bucket. For example, `Prebid â banner - BidderA - 1.50`.
+
+3. Set the **Line Item Type** to **Price priority (12)**. (This will most likely be higher for deals. See [Deals in Prebid](/adops/deals.html) for more information.)
+
+4. Enter your **Expected Creatives**:
+ - Banner/Outstream/AMP/Video: Select the sizes of all ad slots included in the Prebid process.
+ - Native: Select a native template. (See [GAM Step by Step - Native Creatives](/adops/gam-native.html) for instructions on creating native templates.)
+
+![New line item settings](/assets/images/ad-ops/gam-sbs/line-item-settings.png)
+
+{:start="5"}
+5. For Long-Form (OTT) Video: If you're using competitive exclusions, under **Additional settings** enter the value for competitive exclusions in the **Label** field. This value will be included in your targeting within the value for the `hb_pb_cat_dur` key. See [Targeting](#targeting) below for more information.
+6. Under **Delivery settings**:
+ - Set **Start time** to **Immediately**.
+ - Set **End time** to **Unlimited**.
+ - Set **Rate** to your [price bucket].
+ - Set **Goal** type to **None**.
+
+![Line item delivery settings](/assets/images/ad-ops/gam-sbs/delivery-settings.png)
+
+{:start="7"}
+7. Under **Adjust delivery**, set **Display creatives** to **One or more** and **Rotate creatives** to **Evenly**. You can leave the defaults for everything else.
+
+### Targeting
+
+Under **Add targeting**, expand **Custom targeting**.
+
+{: .alert.alert-info :}
+These instructions assume youâre sending all bids to the ad server (the default). If youâre sending only the top price bid, your targeting keys will not include the bidder code. For example, rather than targeting price buckets with `hb_pb_BidderA`, youâll target `hb_pb`. See [Send All Bids vs Top Price](/adops/send-all-vs-top-price.html) for more information.
+
+Select the price bucket key: **hb_pb_BIDDERCODE** (where BIDDERCODE is the actual code for your bidder, such as `hb_pb_BidderA`).
+
+Leave **is any of** and enter (or select) your price bucket.
+
+![Custom targeting on price bucket](/assets/images/ad-ops/gam-sbs/custom-targeting-pb.png)
+
+The following additional keys must be added for the corresponding formats:
+
+**Banner/Outstream/Native**:
+
+You can use the same line item for banner, outstream, and/or native creatives. If your ad slot could be filled by two or more of these formats, you must include the hb_format key with values specifying all expected formats. Select **hb_format_BIDDERCODE > is any of > video, banner, native**.
+
+![Custom targeting on format](/assets/images/ad-ops/gam-sbs/custom-targeting-format.png)
+
+{: .alert.alert-warning :}
+If you combine native with another format in a single line item, youâll need to add creative-level targeting to designate which creatives target which format. See [Creative-level Targeting](#creative-level-targeting) below.
+
+**In-Player and Outstream Video**:
+
+Both in-player (instream) and outstream video ads supply the `hb_format_BIDDERCODE=video` key-value pair, so targeting on that key alone is not enough to choose the correct line items. If you're running both instream and outstream video ads, they will most likely be separate line items, so you will need to target outstream line items to either "Inventory Type=display" or "Inventory in (list of GAM AdUnits)".
+
+**Long-Form (OTT) Video**:
+
+For long-form video the custom key **hb_pb_cat_dur_BIDDERCODE** is required. The value of this key breaks down like this:
+
+- *_pb* represents the price bucket. This is the currency amount entered in the **Rate** field of the **Settings** section.
+- *_cat* indicates the competitive exclusion industry code. (For engineering information, refer to the [Category Translation module](/dev-docs/modules/categoryTranslation.html)). This is the value entered in the **Label** field for the purpose of competitive exclusion. Having this value in the target helps GAM choose the line items that declare the competitive exclusion label. If you are not using competitive exclusion, you can omit this portion of the value.
+- *_dur* is the length of the video in seconds. This is the value listed in the **Max duration** field in the **Creative forecasting defaults** section. Having this value in the target helps GAM choose the line items whose creatives are set up with the right duration.
+
+For example, for a line item with a $10.00 CPM entered in the Rate field, a Label of ânewsâ, and 30s entered in the Duration field, you would enter the following in the Custom key-value field: `hb_pb_cat_dur_BIDDERCODE = 10.00_news_30s`. If youâre not using competitive exclusion, you can have a value such as this: `hb_pb_cat_dur_BIDDERCODE = 10.00_30s`.
+
+{: .alert.alert-info :}
+For deals, the Rate portion of this value will contain the dealID if deals are prioritized. See [Getting Started with Long Form Video](/prebid-video/video-long-form.html#configuration) for engineering information.
+
+{: .alert.alert-info :}
+Engineers will need to include the [Adpod module](/dev-docs/modules/adpod.html) and the [Category Translation module](/dev-docs/modules/categoryTranslation.html) in Prebid.js to implement long-form video bidding.
+
+### Creative-level Targeting
+
+In the **Expected Creatives** section, you can add targeting that applies to creatives rather than to the entire line item. For Prebid you might want to do this if youâre going to use a single line item for multiple formats, or if you have multiple video cache locations.
+
+To set creative-level targeting, do the following:
+
+1. In the line item's **Expected creatives** box, enter the creative size or sizes.
+2. Click **Show creative details** (for display) or **Expand all** (for video).
+3. In the first creative size box, under **Creative targeting** click **Add targeting** and select **Add new targeting**. This slides out the **Creative targeting** window.
+4. Expand **Custom targeting** and enter the appropriate key values.
+
+Repeat the preceding steps for each creative in the line item.
+
+### Save the Line Item
+
+Youâve now added all fields necessary for targeting Prebid line items. You can add any other line item options you would normally use, such as additional targeting for geography. When youâve filled in all the above fields, click **Save** to save your line item.
+
+## Create Creatives
+
+The process you use to create your creatives differs based on the media type. Follow the instructions for the appropriate media type:
+
+- [Banner/Outstream/AMP](/adops/gam-creative-banner-sbs.html)
+- [Native](/adops/gam-native.html)
+- [Video](/adops/setting-up-prebid-video-in-dfp.html)
+
+## Duplicate Creative
+
+After you've created your creatives, youâll need to associate a creative with each size in your line item. Even if youâve specified only one or two sizes, you might actually want more creatives than you have sizes. Because the creative body itself is identical no matter which size youâre associating it with, you can duplicate the creative so you have as many as you need.
+
+{: .alert.alert-info :}
+You need extra copies of the creative because GAM will display only one creative per line item per page. See [Creative Considerations](/adops/creative-considerations.html) for more information.
+
+1. Select **Delivery** > **Creatives**.
+2. Find the creative you want to duplicate and click the check mark to the left.
+3. At the top of the creatives list, click **Copy**. This will create a copy of your creative in the same location, with "(Copy)" appended to the name.
+4. Continue to click **Copy** to create as many creatives as youâll need for your line item.
+5. After youâve created the copies, click into each one and change the **Name**. If youâve followed our suggestions, you can name each one the same but append a subsequent number. For example, `Prebid â banner â 1x1 â 1`, `Prebid â banner â 1x1 â 2`, etc.
+
+![List of duplicated creatives](/assets/images/ad-ops/gam-sbs/duplicate-creatives.png)
+
+## Attach Creatives to Line Item
+
+Now we need to attach the creatives to your line item. Navigate to **Delivery** > **Line items** and select the line item you created earlier.
+
+Under the **Creatives** tab, youâll see a yellow box showing each size you entered for your line item that doesnât yet have a creative attached. For each size in the list, do the following:
+
+1. Click **Existing creative**. A message at the top of the screen will tell you that creatives have been filtered based on size. Click **Undo**.
+
+![Creative filter based on size](/assets/images/ad-ops/gam-sbs/creative-filter.png)
+
+{:start="2"}
+2. Click **Creatives**.
+3. Select one of the creatives you just created and click **Save**. (If you have more creatives than you do sizes, you can select multiple creatives before clicking Save.)
+
+![Select creatives to attach to line item](/assets/images/ad-ops/gam-sbs/select-creative.png)
+
+Repeat the preceding steps until all the sizes in your line item have creatives associated with them. When youâre done, the **Creatives** tab under your line item will show a list of all the associated creatives.
+
+## Duplicate Line Item
+
+Youâve now created a line item for one price bucket for a single bidder. Next you need to create line items for the rest of the price buckets for that bidder. The simplest way to do that (outside of automation) is to duplicate the line item you just created.
+
+1. From **Display** > **Line Items**, click the check box next to your line item.
+2. Select **Copy to** from the action bar that appears.
+3. In the **Copy line item** window, select **Copy and share creatives**, and copy to **Same order**.
+4. Input the number of copies you need to make to cover all price buckets for the bidder.
+5. Click **OK**.
+
+You now need to click into each line item to change the following values to reflect the new price bucket:
+
+- Rate
+- Name
+- hb_pb_BIDDERCODE key value
+- Long-form video only: hb_pb_cat_dur key value
+
+## Additional Bidders
+
+If youâre using a Send Top Price cofiguration, at this point youâre done. Congratulations!
+
+If youâre using a Send All Bids configuration, you need to repeat all the above steps for each of your bidders. You can copy one of the existing creatives and change the BIDDERCODE, and you can copy the existing line items and change the names, so you donât have to completely start from scratch.
+
+## Further Reading
+
+- [Prebid Ad Ops Planning Guide](/adops/adops-planning-guide.html)
+- [GAM Step by Step Creatives: Banner/Outstream/AMP](/adops/gam-creative-banner-sbs.html)
+- [GAM Step by Step Creatives: Native](/adops/gam-native.html)
+- [GAM Step by Step Creatives: Video](/adops/setting-up-prebid-video-in-dfp.html)
diff --git a/assets/css/main-bundle.css b/assets/css/main-bundle.css
deleted file mode 100644
index 390273a89b..0000000000
--- a/assets/css/main-bundle.css
+++ /dev/null
@@ -1 +0,0 @@
-.awesomplete [hidden]{display:none}.awesomplete .visually-hidden{position:absolute;clip:rect(0,0,0,0)}.awesomplete{display:inline-block;position:relative}.awesomplete>input{display:block}.awesomplete>ul{position:absolute;left:0;z-index:1;min-width:100%;box-sizing:border-box;list-style:none;padding:0;margin:0;background:#fff}.awesomplete>ul:empty{display:none}*,:after,:before{box-sizing:border-box}html{font-family:sans-serif;line-height:1.15;-webkit-text-size-adjust:100%;-webkit-tap-highlight-color:rgba(0,0,0,0)}article,aside,figcaption,figure,footer,header,hgroup,main,nav,section{display:block}body{margin:0;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,Noto Sans,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji;font-size:1rem;font-weight:400;color:#212529;text-align:left;background-color:#eceeef}[tabindex="-1"]:focus:not(:focus-visible){outline:0!important}hr{box-sizing:content-box;height:0;overflow:visible}h1,h2,h3,h4,h5,h6{margin-top:0;margin-bottom:.5rem}p{margin-top:0;margin-bottom:1rem}abbr[data-original-title],abbr[title]{text-decoration:underline;-webkit-text-decoration:underline dotted;text-decoration:underline dotted;cursor:help;border-bottom:0;-webkit-text-decoration-skip-ink:none;text-decoration-skip-ink:none}address{font-style:normal;line-height:inherit}address,dl,ol,ul{margin-bottom:1rem}dl,ol,ul{margin-top:0}ol ol,ol ul,ul ol,ul ul{margin-bottom:0}dt{font-weight:700}dd{margin-bottom:.5rem;margin-left:0}blockquote{margin:0 0 1rem}b,strong{font-weight:bolder}small{font-size:80%}sub,sup{position:relative;font-size:75%;line-height:0;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}a{color:#007bff;text-decoration:none;background-color:transparent}a:hover{color:#0056b3;text-decoration:underline}a:not([href]):not([class]),a:not([href]):not([class]):hover{color:inherit;text-decoration:none}code,kbd,pre,samp{font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;font-size:1em}pre{margin-top:0;margin-bottom:1rem;overflow:auto;-ms-overflow-style:scrollbar}figure{margin:0 0 1rem}img{border-style:none}img,svg{vertical-align:middle}svg{overflow:hidden}table{border-collapse:collapse}caption{padding-top:.75rem;padding-bottom:.75rem;color:#6c757d;text-align:left;caption-side:bottom}th{text-align:inherit;text-align:-webkit-match-parent}label{display:inline-block;margin-bottom:.5rem}button{border-radius:0}button:focus{outline:1px dotted;outline:5px auto -webkit-focus-ring-color}button,input,optgroup,select,textarea{margin:0;font-family:inherit;font-size:inherit;line-height:inherit}button,input{overflow:visible}button,select{text-transform:none}[role=button]{cursor:pointer}select{word-wrap:normal}[type=button],[type=reset],[type=submit],button{-webkit-appearance:button}[type=button]:not(:disabled),[type=reset]:not(:disabled),[type=submit]:not(:disabled),button:not(:disabled){cursor:pointer}[type=button]::-moz-focus-inner,[type=reset]::-moz-focus-inner,[type=submit]::-moz-focus-inner,button::-moz-focus-inner{padding:0;border-style:none}input[type=checkbox],input[type=radio]{box-sizing:border-box;padding:0}textarea{overflow:auto;resize:vertical}fieldset{min-width:0;padding:0;margin:0;border:0}legend{display:block;width:100%;max-width:100%;padding:0;margin-bottom:.5rem;font-size:1.5rem;line-height:inherit;color:inherit;white-space:normal}progress{vertical-align:baseline}[type=number]::-webkit-inner-spin-button,[type=number]::-webkit-outer-spin-button{height:auto}[type=search]{outline-offset:-2px;-webkit-appearance:none}[type=search]::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{font:inherit;-webkit-appearance:button}output{display:inline-block}summary{display:list-item;cursor:pointer}template{display:none}[hidden]{display:none!important}.container,.container-fluid,.container-lg,.container-md,.container-sm,.container-xl{width:100%;padding-right:10px;padding-left:10px;margin-right:auto;margin-left:auto}@media (min-width:576px){.container,.container-sm{max-width:540px}}@media (min-width:768px){.container,.container-md,.container-sm{max-width:720px}}@media (min-width:992px){.container,.container-lg,.container-md,.container-sm{max-width:960px}}@media (min-width:1200px){.container,.container-lg,.container-md,.container-sm,.container-xl{max-width:1200px}}.row{display:flex;flex-wrap:wrap;margin-right:-10px;margin-left:-10px}.no-gutters{margin-right:0;margin-left:0}.no-gutters>.col,.no-gutters>[class*=col-]{padding-right:0;padding-left:0}.col,.col-1,.col-2,.col-3,.col-4,.col-5,.col-6,.col-7,.col-8,.col-9,.col-10,.col-11,.col-12,.col-auto,.col-lg,.col-lg-1,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9,.col-lg-10,.col-lg-11,.col-lg-12,.col-lg-auto,.col-md,.col-md-1,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9,.col-md-10,.col-md-11,.col-md-12,.col-md-auto,.col-sm,.col-sm-1,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9,.col-sm-10,.col-sm-11,.col-sm-12,.col-sm-auto,.col-xl,.col-xl-1,.col-xl-2,.col-xl-3,.col-xl-4,.col-xl-5,.col-xl-6,.col-xl-7,.col-xl-8,.col-xl-9,.col-xl-10,.col-xl-11,.col-xl-12,.col-xl-auto{position:relative;width:100%;padding-right:10px;padding-left:10px}.col{flex-basis:0;flex-grow:1;max-width:100%}.row-cols-1>*{flex:0 0 100%;max-width:100%}.row-cols-2>*{flex:0 0 50%;max-width:50%}.row-cols-3>*{flex:0 0 33.3333333333%;max-width:33.3333333333%}.row-cols-4>*{flex:0 0 25%;max-width:25%}.row-cols-5>*{flex:0 0 20%;max-width:20%}.row-cols-6>*{flex:0 0 16.6666666667%;max-width:16.6666666667%}.col-auto{flex:0 0 auto;width:auto;max-width:100%}.col-1{flex:0 0 8.3333333333%;max-width:8.3333333333%}.col-2{flex:0 0 16.6666666667%;max-width:16.6666666667%}.col-3{flex:0 0 25%;max-width:25%}.col-4{flex:0 0 33.3333333333%;max-width:33.3333333333%}.col-5{flex:0 0 41.6666666667%;max-width:41.6666666667%}.col-6{flex:0 0 50%;max-width:50%}.col-7{flex:0 0 58.3333333333%;max-width:58.3333333333%}.col-8{flex:0 0 66.6666666667%;max-width:66.6666666667%}.col-9{flex:0 0 75%;max-width:75%}.col-10{flex:0 0 83.3333333333%;max-width:83.3333333333%}.col-11{flex:0 0 91.6666666667%;max-width:91.6666666667%}.col-12{flex:0 0 100%;max-width:100%}.order-first{order:-1}.order-last{order:13}.order-0{order:0}.order-1{order:1}.order-2{order:2}.order-3{order:3}.order-4{order:4}.order-5{order:5}.order-6{order:6}.order-7{order:7}.order-8{order:8}.order-9{order:9}.order-10{order:10}.order-11{order:11}.order-12{order:12}.offset-1{margin-left:8.3333333333%}.offset-2{margin-left:16.6666666667%}.offset-3{margin-left:25%}.offset-4{margin-left:33.3333333333%}.offset-5{margin-left:41.6666666667%}.offset-6{margin-left:50%}.offset-7{margin-left:58.3333333333%}.offset-8{margin-left:66.6666666667%}.offset-9{margin-left:75%}.offset-10{margin-left:83.3333333333%}.offset-11{margin-left:91.6666666667%}@media (min-width:576px){.col-sm{flex-basis:0;flex-grow:1;max-width:100%}.row-cols-sm-1>*{flex:0 0 100%;max-width:100%}.row-cols-sm-2>*{flex:0 0 50%;max-width:50%}.row-cols-sm-3>*{flex:0 0 33.3333333333%;max-width:33.3333333333%}.row-cols-sm-4>*{flex:0 0 25%;max-width:25%}.row-cols-sm-5>*{flex:0 0 20%;max-width:20%}.row-cols-sm-6>*{flex:0 0 16.6666666667%;max-width:16.6666666667%}.col-sm-auto{flex:0 0 auto;width:auto;max-width:100%}.col-sm-1{flex:0 0 8.3333333333%;max-width:8.3333333333%}.col-sm-2{flex:0 0 16.6666666667%;max-width:16.6666666667%}.col-sm-3{flex:0 0 25%;max-width:25%}.col-sm-4{flex:0 0 33.3333333333%;max-width:33.3333333333%}.col-sm-5{flex:0 0 41.6666666667%;max-width:41.6666666667%}.col-sm-6{flex:0 0 50%;max-width:50%}.col-sm-7{flex:0 0 58.3333333333%;max-width:58.3333333333%}.col-sm-8{flex:0 0 66.6666666667%;max-width:66.6666666667%}.col-sm-9{flex:0 0 75%;max-width:75%}.col-sm-10{flex:0 0 83.3333333333%;max-width:83.3333333333%}.col-sm-11{flex:0 0 91.6666666667%;max-width:91.6666666667%}.col-sm-12{flex:0 0 100%;max-width:100%}.order-sm-first{order:-1}.order-sm-last{order:13}.order-sm-0{order:0}.order-sm-1{order:1}.order-sm-2{order:2}.order-sm-3{order:3}.order-sm-4{order:4}.order-sm-5{order:5}.order-sm-6{order:6}.order-sm-7{order:7}.order-sm-8{order:8}.order-sm-9{order:9}.order-sm-10{order:10}.order-sm-11{order:11}.order-sm-12{order:12}.offset-sm-0{margin-left:0}.offset-sm-1{margin-left:8.3333333333%}.offset-sm-2{margin-left:16.6666666667%}.offset-sm-3{margin-left:25%}.offset-sm-4{margin-left:33.3333333333%}.offset-sm-5{margin-left:41.6666666667%}.offset-sm-6{margin-left:50%}.offset-sm-7{margin-left:58.3333333333%}.offset-sm-8{margin-left:66.6666666667%}.offset-sm-9{margin-left:75%}.offset-sm-10{margin-left:83.3333333333%}.offset-sm-11{margin-left:91.6666666667%}}@media (min-width:768px){.col-md{flex-basis:0;flex-grow:1;max-width:100%}.row-cols-md-1>*{flex:0 0 100%;max-width:100%}.row-cols-md-2>*{flex:0 0 50%;max-width:50%}.row-cols-md-3>*{flex:0 0 33.3333333333%;max-width:33.3333333333%}.row-cols-md-4>*{flex:0 0 25%;max-width:25%}.row-cols-md-5>*{flex:0 0 20%;max-width:20%}.row-cols-md-6>*{flex:0 0 16.6666666667%;max-width:16.6666666667%}.col-md-auto{flex:0 0 auto;width:auto;max-width:100%}.col-md-1{flex:0 0 8.3333333333%;max-width:8.3333333333%}.col-md-2{flex:0 0 16.6666666667%;max-width:16.6666666667%}.col-md-3{flex:0 0 25%;max-width:25%}.col-md-4{flex:0 0 33.3333333333%;max-width:33.3333333333%}.col-md-5{flex:0 0 41.6666666667%;max-width:41.6666666667%}.col-md-6{flex:0 0 50%;max-width:50%}.col-md-7{flex:0 0 58.3333333333%;max-width:58.3333333333%}.col-md-8{flex:0 0 66.6666666667%;max-width:66.6666666667%}.col-md-9{flex:0 0 75%;max-width:75%}.col-md-10{flex:0 0 83.3333333333%;max-width:83.3333333333%}.col-md-11{flex:0 0 91.6666666667%;max-width:91.6666666667%}.col-md-12{flex:0 0 100%;max-width:100%}.order-md-first{order:-1}.order-md-last{order:13}.order-md-0{order:0}.order-md-1{order:1}.order-md-2{order:2}.order-md-3{order:3}.order-md-4{order:4}.order-md-5{order:5}.order-md-6{order:6}.order-md-7{order:7}.order-md-8{order:8}.order-md-9{order:9}.order-md-10{order:10}.order-md-11{order:11}.order-md-12{order:12}.offset-md-0{margin-left:0}.offset-md-1{margin-left:8.3333333333%}.offset-md-2{margin-left:16.6666666667%}.offset-md-3{margin-left:25%}.offset-md-4{margin-left:33.3333333333%}.offset-md-5{margin-left:41.6666666667%}.offset-md-6{margin-left:50%}.offset-md-7{margin-left:58.3333333333%}.offset-md-8{margin-left:66.6666666667%}.offset-md-9{margin-left:75%}.offset-md-10{margin-left:83.3333333333%}.offset-md-11{margin-left:91.6666666667%}}@media (min-width:992px){.col-lg{flex-basis:0;flex-grow:1;max-width:100%}.row-cols-lg-1>*{flex:0 0 100%;max-width:100%}.row-cols-lg-2>*{flex:0 0 50%;max-width:50%}.row-cols-lg-3>*{flex:0 0 33.3333333333%;max-width:33.3333333333%}.row-cols-lg-4>*{flex:0 0 25%;max-width:25%}.row-cols-lg-5>*{flex:0 0 20%;max-width:20%}.row-cols-lg-6>*{flex:0 0 16.6666666667%;max-width:16.6666666667%}.col-lg-auto{flex:0 0 auto;width:auto;max-width:100%}.col-lg-1{flex:0 0 8.3333333333%;max-width:8.3333333333%}.col-lg-2{flex:0 0 16.6666666667%;max-width:16.6666666667%}.col-lg-3{flex:0 0 25%;max-width:25%}.col-lg-4{flex:0 0 33.3333333333%;max-width:33.3333333333%}.col-lg-5{flex:0 0 41.6666666667%;max-width:41.6666666667%}.col-lg-6{flex:0 0 50%;max-width:50%}.col-lg-7{flex:0 0 58.3333333333%;max-width:58.3333333333%}.col-lg-8{flex:0 0 66.6666666667%;max-width:66.6666666667%}.col-lg-9{flex:0 0 75%;max-width:75%}.col-lg-10{flex:0 0 83.3333333333%;max-width:83.3333333333%}.col-lg-11{flex:0 0 91.6666666667%;max-width:91.6666666667%}.col-lg-12{flex:0 0 100%;max-width:100%}.order-lg-first{order:-1}.order-lg-last{order:13}.order-lg-0{order:0}.order-lg-1{order:1}.order-lg-2{order:2}.order-lg-3{order:3}.order-lg-4{order:4}.order-lg-5{order:5}.order-lg-6{order:6}.order-lg-7{order:7}.order-lg-8{order:8}.order-lg-9{order:9}.order-lg-10{order:10}.order-lg-11{order:11}.order-lg-12{order:12}.offset-lg-0{margin-left:0}.offset-lg-1{margin-left:8.3333333333%}.offset-lg-2{margin-left:16.6666666667%}.offset-lg-3{margin-left:25%}.offset-lg-4{margin-left:33.3333333333%}.offset-lg-5{margin-left:41.6666666667%}.offset-lg-6{margin-left:50%}.offset-lg-7{margin-left:58.3333333333%}.offset-lg-8{margin-left:66.6666666667%}.offset-lg-9{margin-left:75%}.offset-lg-10{margin-left:83.3333333333%}.offset-lg-11{margin-left:91.6666666667%}}@media (min-width:1200px){.col-xl{flex-basis:0;flex-grow:1;max-width:100%}.row-cols-xl-1>*{flex:0 0 100%;max-width:100%}.row-cols-xl-2>*{flex:0 0 50%;max-width:50%}.row-cols-xl-3>*{flex:0 0 33.3333333333%;max-width:33.3333333333%}.row-cols-xl-4>*{flex:0 0 25%;max-width:25%}.row-cols-xl-5>*{flex:0 0 20%;max-width:20%}.row-cols-xl-6>*{flex:0 0 16.6666666667%;max-width:16.6666666667%}.col-xl-auto{flex:0 0 auto;width:auto;max-width:100%}.col-xl-1{flex:0 0 8.3333333333%;max-width:8.3333333333%}.col-xl-2{flex:0 0 16.6666666667%;max-width:16.6666666667%}.col-xl-3{flex:0 0 25%;max-width:25%}.col-xl-4{flex:0 0 33.3333333333%;max-width:33.3333333333%}.col-xl-5{flex:0 0 41.6666666667%;max-width:41.6666666667%}.col-xl-6{flex:0 0 50%;max-width:50%}.col-xl-7{flex:0 0 58.3333333333%;max-width:58.3333333333%}.col-xl-8{flex:0 0 66.6666666667%;max-width:66.6666666667%}.col-xl-9{flex:0 0 75%;max-width:75%}.col-xl-10{flex:0 0 83.3333333333%;max-width:83.3333333333%}.col-xl-11{flex:0 0 91.6666666667%;max-width:91.6666666667%}.col-xl-12{flex:0 0 100%;max-width:100%}.order-xl-first{order:-1}.order-xl-last{order:13}.order-xl-0{order:0}.order-xl-1{order:1}.order-xl-2{order:2}.order-xl-3{order:3}.order-xl-4{order:4}.order-xl-5{order:5}.order-xl-6{order:6}.order-xl-7{order:7}.order-xl-8{order:8}.order-xl-9{order:9}.order-xl-10{order:10}.order-xl-11{order:11}.order-xl-12{order:12}.offset-xl-0{margin-left:0}.offset-xl-1{margin-left:8.3333333333%}.offset-xl-2{margin-left:16.6666666667%}.offset-xl-3{margin-left:25%}.offset-xl-4{margin-left:33.3333333333%}.offset-xl-5{margin-left:41.6666666667%}.offset-xl-6{margin-left:50%}.offset-xl-7{margin-left:58.3333333333%}.offset-xl-8{margin-left:66.6666666667%}.offset-xl-9{margin-left:75%}.offset-xl-10{margin-left:83.3333333333%}.offset-xl-11{margin-left:91.6666666667%}}.btn{display:inline-block;font-weight:400;color:#212529;text-align:center;vertical-align:middle;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;background-color:transparent;border:1px solid transparent;padding:.375rem .75rem;font-size:1rem;line-height:1.5;border-radius:.25rem;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){.btn{transition:none}}.btn:hover{color:#212529;text-decoration:none}.btn.focus,.btn:focus{outline:0;box-shadow:0 0 0 .2rem rgba(0,123,255,.25)}.btn.disabled,.btn:disabled{opacity:.65}.btn:not(:disabled):not(.disabled){cursor:pointer}a.btn.disabled,fieldset:disabled a.btn{pointer-events:none}.btn-primary{color:#fff;background-color:#007bff;border-color:#007bff}.btn-primary.focus,.btn-primary:focus,.btn-primary:hover{color:#fff;background-color:#0069d9;border-color:#0062cc}.btn-primary.focus,.btn-primary:focus{box-shadow:0 0 0 .2rem rgba(38,143,255,.5)}.btn-primary.disabled,.btn-primary:disabled{color:#fff;background-color:#007bff;border-color:#007bff}.btn-primary:not(:disabled):not(.disabled).active,.btn-primary:not(:disabled):not(.disabled):active,.show>.btn-primary.dropdown-toggle{color:#fff;background-color:#0062cc;border-color:#005cbf}.btn-primary:not(:disabled):not(.disabled).active:focus,.btn-primary:not(:disabled):not(.disabled):active:focus,.show>.btn-primary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(38,143,255,.5)}.btn-secondary{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-secondary.focus,.btn-secondary:focus,.btn-secondary:hover{color:#fff;background-color:#5a6268;border-color:#545b62}.btn-secondary.focus,.btn-secondary:focus{box-shadow:0 0 0 .2rem rgba(130,138,145,.5)}.btn-secondary.disabled,.btn-secondary:disabled{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-secondary:not(:disabled):not(.disabled).active,.btn-secondary:not(:disabled):not(.disabled):active,.show>.btn-secondary.dropdown-toggle{color:#fff;background-color:#545b62;border-color:#4e555b}.btn-secondary:not(:disabled):not(.disabled).active:focus,.btn-secondary:not(:disabled):not(.disabled):active:focus,.show>.btn-secondary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(130,138,145,.5)}.btn-success{color:#fff;background-color:#28a745;border-color:#28a745}.btn-success.focus,.btn-success:focus,.btn-success:hover{color:#fff;background-color:#218838;border-color:#1e7e34}.btn-success.focus,.btn-success:focus{box-shadow:0 0 0 .2rem rgba(72,180,97,.5)}.btn-success.disabled,.btn-success:disabled{color:#fff;background-color:#28a745;border-color:#28a745}.btn-success:not(:disabled):not(.disabled).active,.btn-success:not(:disabled):not(.disabled):active,.show>.btn-success.dropdown-toggle{color:#fff;background-color:#1e7e34;border-color:#1c7430}.btn-success:not(:disabled):not(.disabled).active:focus,.btn-success:not(:disabled):not(.disabled):active:focus,.show>.btn-success.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(72,180,97,.5)}.btn-info{color:#fff;background-color:#17a2b8;border-color:#17a2b8}.btn-info.focus,.btn-info:focus,.btn-info:hover{color:#fff;background-color:#138496;border-color:#117a8b}.btn-info.focus,.btn-info:focus{box-shadow:0 0 0 .2rem rgba(58,176,195,.5)}.btn-info.disabled,.btn-info:disabled{color:#fff;background-color:#17a2b8;border-color:#17a2b8}.btn-info:not(:disabled):not(.disabled).active,.btn-info:not(:disabled):not(.disabled):active,.show>.btn-info.dropdown-toggle{color:#fff;background-color:#117a8b;border-color:#10707f}.btn-info:not(:disabled):not(.disabled).active:focus,.btn-info:not(:disabled):not(.disabled):active:focus,.show>.btn-info.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(58,176,195,.5)}.btn-warning{color:#212529;background-color:#ffc107;border-color:#ffc107}.btn-warning.focus,.btn-warning:focus,.btn-warning:hover{color:#212529;background-color:#e0a800;border-color:#d39e00}.btn-warning.focus,.btn-warning:focus{box-shadow:0 0 0 .2rem rgba(222,170,12,.5)}.btn-warning.disabled,.btn-warning:disabled{color:#212529;background-color:#ffc107;border-color:#ffc107}.btn-warning:not(:disabled):not(.disabled).active,.btn-warning:not(:disabled):not(.disabled):active,.show>.btn-warning.dropdown-toggle{color:#212529;background-color:#d39e00;border-color:#c69500}.btn-warning:not(:disabled):not(.disabled).active:focus,.btn-warning:not(:disabled):not(.disabled):active:focus,.show>.btn-warning.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(222,170,12,.5)}.btn-danger{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-danger.focus,.btn-danger:focus,.btn-danger:hover{color:#fff;background-color:#c82333;border-color:#bd2130}.btn-danger.focus,.btn-danger:focus{box-shadow:0 0 0 .2rem rgba(225,83,97,.5)}.btn-danger.disabled,.btn-danger:disabled{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-danger:not(:disabled):not(.disabled).active,.btn-danger:not(:disabled):not(.disabled):active,.show>.btn-danger.dropdown-toggle{color:#fff;background-color:#bd2130;border-color:#b21f2d}.btn-danger:not(:disabled):not(.disabled).active:focus,.btn-danger:not(:disabled):not(.disabled):active:focus,.show>.btn-danger.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(225,83,97,.5)}.btn-light{color:#212529;background-color:#f8f9fa;border-color:#f8f9fa}.btn-light.focus,.btn-light:focus,.btn-light:hover{color:#212529;background-color:#e2e6ea;border-color:#dae0e5}.btn-light.focus,.btn-light:focus{box-shadow:0 0 0 .2rem rgba(216,217,219,.5)}.btn-light.disabled,.btn-light:disabled{color:#212529;background-color:#f8f9fa;border-color:#f8f9fa}.btn-light:not(:disabled):not(.disabled).active,.btn-light:not(:disabled):not(.disabled):active,.show>.btn-light.dropdown-toggle{color:#212529;background-color:#dae0e5;border-color:#d3d9df}.btn-light:not(:disabled):not(.disabled).active:focus,.btn-light:not(:disabled):not(.disabled):active:focus,.show>.btn-light.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(216,217,219,.5)}.btn-dark{color:#fff;background-color:#343a40;border-color:#343a40}.btn-dark.focus,.btn-dark:focus,.btn-dark:hover{color:#fff;background-color:#23272b;border-color:#1d2124}.btn-dark.focus,.btn-dark:focus{box-shadow:0 0 0 .2rem rgba(82,88,93,.5)}.btn-dark.disabled,.btn-dark:disabled{color:#fff;background-color:#343a40;border-color:#343a40}.btn-dark:not(:disabled):not(.disabled).active,.btn-dark:not(:disabled):not(.disabled):active,.show>.btn-dark.dropdown-toggle{color:#fff;background-color:#1d2124;border-color:#171a1d}.btn-dark:not(:disabled):not(.disabled).active:focus,.btn-dark:not(:disabled):not(.disabled):active:focus,.show>.btn-dark.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(82,88,93,.5)}.btn-outline-primary{color:#007bff;border-color:#007bff}.btn-outline-primary:hover{color:#fff;background-color:#007bff;border-color:#007bff}.btn-outline-primary.focus,.btn-outline-primary:focus{box-shadow:0 0 0 .2rem rgba(0,123,255,.5)}.btn-outline-primary.disabled,.btn-outline-primary:disabled{color:#007bff;background-color:transparent}.btn-outline-primary:not(:disabled):not(.disabled).active,.btn-outline-primary:not(:disabled):not(.disabled):active,.show>.btn-outline-primary.dropdown-toggle{color:#fff;background-color:#007bff;border-color:#007bff}.btn-outline-primary:not(:disabled):not(.disabled).active:focus,.btn-outline-primary:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-primary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(0,123,255,.5)}.btn-outline-secondary{color:#6c757d;border-color:#6c757d}.btn-outline-secondary:hover{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-outline-secondary.focus,.btn-outline-secondary:focus{box-shadow:0 0 0 .2rem rgba(108,117,125,.5)}.btn-outline-secondary.disabled,.btn-outline-secondary:disabled{color:#6c757d;background-color:transparent}.btn-outline-secondary:not(:disabled):not(.disabled).active,.btn-outline-secondary:not(:disabled):not(.disabled):active,.show>.btn-outline-secondary.dropdown-toggle{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-outline-secondary:not(:disabled):not(.disabled).active:focus,.btn-outline-secondary:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-secondary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(108,117,125,.5)}.btn-outline-success{color:#28a745;border-color:#28a745}.btn-outline-success:hover{color:#fff;background-color:#28a745;border-color:#28a745}.btn-outline-success.focus,.btn-outline-success:focus{box-shadow:0 0 0 .2rem rgba(40,167,69,.5)}.btn-outline-success.disabled,.btn-outline-success:disabled{color:#28a745;background-color:transparent}.btn-outline-success:not(:disabled):not(.disabled).active,.btn-outline-success:not(:disabled):not(.disabled):active,.show>.btn-outline-success.dropdown-toggle{color:#fff;background-color:#28a745;border-color:#28a745}.btn-outline-success:not(:disabled):not(.disabled).active:focus,.btn-outline-success:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-success.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(40,167,69,.5)}.btn-outline-info{color:#17a2b8;border-color:#17a2b8}.btn-outline-info:hover{color:#fff;background-color:#17a2b8;border-color:#17a2b8}.btn-outline-info.focus,.btn-outline-info:focus{box-shadow:0 0 0 .2rem rgba(23,162,184,.5)}.btn-outline-info.disabled,.btn-outline-info:disabled{color:#17a2b8;background-color:transparent}.btn-outline-info:not(:disabled):not(.disabled).active,.btn-outline-info:not(:disabled):not(.disabled):active,.show>.btn-outline-info.dropdown-toggle{color:#fff;background-color:#17a2b8;border-color:#17a2b8}.btn-outline-info:not(:disabled):not(.disabled).active:focus,.btn-outline-info:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-info.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(23,162,184,.5)}.btn-outline-warning{color:#ffc107;border-color:#ffc107}.btn-outline-warning:hover{color:#212529;background-color:#ffc107;border-color:#ffc107}.btn-outline-warning.focus,.btn-outline-warning:focus{box-shadow:0 0 0 .2rem rgba(255,193,7,.5)}.btn-outline-warning.disabled,.btn-outline-warning:disabled{color:#ffc107;background-color:transparent}.btn-outline-warning:not(:disabled):not(.disabled).active,.btn-outline-warning:not(:disabled):not(.disabled):active,.show>.btn-outline-warning.dropdown-toggle{color:#212529;background-color:#ffc107;border-color:#ffc107}.btn-outline-warning:not(:disabled):not(.disabled).active:focus,.btn-outline-warning:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-warning.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(255,193,7,.5)}.btn-outline-danger{color:#dc3545;border-color:#dc3545}.btn-outline-danger:hover{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-outline-danger.focus,.btn-outline-danger:focus{box-shadow:0 0 0 .2rem rgba(220,53,69,.5)}.btn-outline-danger.disabled,.btn-outline-danger:disabled{color:#dc3545;background-color:transparent}.btn-outline-danger:not(:disabled):not(.disabled).active,.btn-outline-danger:not(:disabled):not(.disabled):active,.show>.btn-outline-danger.dropdown-toggle{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-outline-danger:not(:disabled):not(.disabled).active:focus,.btn-outline-danger:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-danger.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(220,53,69,.5)}.btn-outline-light{color:#f8f9fa;border-color:#f8f9fa}.btn-outline-light:hover{color:#212529;background-color:#f8f9fa;border-color:#f8f9fa}.btn-outline-light.focus,.btn-outline-light:focus{box-shadow:0 0 0 .2rem rgba(248,249,250,.5)}.btn-outline-light.disabled,.btn-outline-light:disabled{color:#f8f9fa;background-color:transparent}.btn-outline-light:not(:disabled):not(.disabled).active,.btn-outline-light:not(:disabled):not(.disabled):active,.show>.btn-outline-light.dropdown-toggle{color:#212529;background-color:#f8f9fa;border-color:#f8f9fa}.btn-outline-light:not(:disabled):not(.disabled).active:focus,.btn-outline-light:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-light.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(248,249,250,.5)}.btn-outline-dark{color:#343a40;border-color:#343a40}.btn-outline-dark:hover{color:#fff;background-color:#343a40;border-color:#343a40}.btn-outline-dark.focus,.btn-outline-dark:focus{box-shadow:0 0 0 .2rem rgba(52,58,64,.5)}.btn-outline-dark.disabled,.btn-outline-dark:disabled{color:#343a40;background-color:transparent}.btn-outline-dark:not(:disabled):not(.disabled).active,.btn-outline-dark:not(:disabled):not(.disabled):active,.show>.btn-outline-dark.dropdown-toggle{color:#fff;background-color:#343a40;border-color:#343a40}.btn-outline-dark:not(:disabled):not(.disabled).active:focus,.btn-outline-dark:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-dark.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(52,58,64,.5)}.btn-link{font-weight:400;color:#007bff;text-decoration:none}.btn-link:hover{color:#0056b3}.btn-link.focus,.btn-link:focus,.btn-link:hover{text-decoration:underline}.btn-link.disabled,.btn-link:disabled{color:#6c757d;pointer-events:none}.btn-lg{padding:.5rem 1rem;font-size:1.25rem;line-height:1.5;border-radius:.3rem}.btn-sm{padding:.25rem .5rem;font-size:.875rem;line-height:1.5;border-radius:.2rem}.btn-block{display:block;width:100%}.btn-block+.btn-block{margin-top:.5rem}input[type=button].btn-block,input[type=reset].btn-block,input[type=submit].btn-block{width:100%}.fade{transition:opacity .15s linear}@media (prefers-reduced-motion:reduce){.fade{transition:none}}.fade:not(.show){opacity:0}.collapse:not(.show){display:none}.collapsing{position:relative;height:0;overflow:hidden;transition:height .35s ease}@media (prefers-reduced-motion:reduce){.collapsing{transition:none}}.dropdown,.dropleft,.dropright,.dropup{position:relative}.dropdown-toggle{white-space:nowrap}.dropdown-toggle:after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:"";border-top:.3em solid;border-right:.3em solid transparent;border-bottom:0;border-left:.3em solid transparent}.dropdown-toggle:empty:after{margin-left:0}.dropdown-menu{position:absolute;top:100%;left:0;z-index:1000;display:none;float:left;min-width:10rem;padding:24px 0;margin:0;font-size:1rem;color:#212529;text-align:left;list-style:none;background-color:#fff;background-clip:padding-box;border:0 solid rgba(0,0,0,.15);border-radius:0}.dropdown-menu-left{right:auto;left:0}.dropdown-menu-right{right:0;left:auto}@media (min-width:576px){.dropdown-menu-sm-left{right:auto;left:0}.dropdown-menu-sm-right{right:0;left:auto}}@media (min-width:768px){.dropdown-menu-md-left{right:auto;left:0}.dropdown-menu-md-right{right:0;left:auto}}@media (min-width:992px){.dropdown-menu-lg-left{right:auto;left:0}.dropdown-menu-lg-right{right:0;left:auto}}@media (min-width:1200px){.dropdown-menu-xl-left{right:auto;left:0}.dropdown-menu-xl-right{right:0;left:auto}}.dropup .dropdown-menu{top:auto;bottom:100%;margin-top:0;margin-bottom:0}.dropup .dropdown-toggle:after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:"";border-top:0;border-right:.3em solid transparent;border-bottom:.3em solid;border-left:.3em solid transparent}.dropup .dropdown-toggle:empty:after{margin-left:0}.dropright .dropdown-menu{top:0;right:auto;left:100%;margin-top:0;margin-left:0}.dropright .dropdown-toggle:after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:"";border-top:.3em solid transparent;border-right:0;border-bottom:.3em solid transparent;border-left:.3em solid}.dropright .dropdown-toggle:empty:after{margin-left:0}.dropright .dropdown-toggle:after{vertical-align:0}.dropleft .dropdown-menu{top:0;right:100%;left:auto;margin-top:0;margin-right:0}.dropleft .dropdown-toggle:after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:"";display:none}.dropleft .dropdown-toggle:before{display:inline-block;margin-right:.255em;vertical-align:.255em;content:"";border-top:.3em solid transparent;border-right:.3em solid;border-bottom:.3em solid transparent}.dropleft .dropdown-toggle:empty:after{margin-left:0}.dropleft .dropdown-toggle:before{vertical-align:0}.dropdown-menu[x-placement^=bottom],.dropdown-menu[x-placement^=left],.dropdown-menu[x-placement^=right],.dropdown-menu[x-placement^=top]{right:auto;bottom:auto}.dropdown-divider{height:0;margin:.5rem 0;overflow:hidden;border-top:1px solid #e9ecef}.dropdown-item{display:block;width:100%;padding:.25rem 1.5rem;clear:both;font-weight:400;color:#797f90;text-align:inherit;white-space:nowrap;background-color:transparent;border:0}.dropdown-item:focus,.dropdown-item:hover{color:#ff6f00;text-decoration:none;background-color:transparent}.dropdown-item.active,.dropdown-item:active{color:#fff;text-decoration:none;background-color:#007bff}.dropdown-item.disabled,.dropdown-item:disabled{color:#6c757d;pointer-events:none;background-color:transparent}.dropdown-menu.show{display:block}.dropdown-header{display:block;padding:24px 1.5rem;margin-bottom:0;font-size:.875rem;color:#6c757d;white-space:nowrap}.dropdown-item-text{display:block;padding:.25rem 1.5rem;color:#797f90}.navbar{position:relative;padding:0 1rem}.navbar,.navbar .container,.navbar .container-fluid,.navbar .container-lg,.navbar .container-md,.navbar .container-sm,.navbar .container-xl{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between}.navbar-brand{display:inline-block;padding-top:-.1875rem;padding-bottom:-.1875rem;margin-right:1rem;font-size:1.25rem;line-height:inherit;white-space:nowrap}.navbar-brand:focus,.navbar-brand:hover{text-decoration:none}.navbar-nav{display:flex;flex-direction:column;padding-left:0;margin-bottom:0;list-style:none}.navbar-nav .nav-link{padding-right:0;padding-left:0}.navbar-nav .dropdown-menu{position:static;float:none}.navbar-text{display:inline-block;padding-top:0;padding-bottom:0}.navbar-collapse{flex-basis:100%;flex-grow:1;align-items:center}.navbar-toggler{padding:.25rem .75rem;font-size:1.25rem;line-height:1;background-color:transparent;border:1px solid transparent;border-radius:.25rem}.navbar-toggler:focus,.navbar-toggler:hover{text-decoration:none}.navbar-toggler-icon{display:inline-block;width:1.5em;height:1.5em;vertical-align:middle;content:"";background:no-repeat 50%;background-size:100% 100%}@media (max-width:575.98px){.navbar-expand-sm>.container,.navbar-expand-sm>.container-fluid,.navbar-expand-sm>.container-lg,.navbar-expand-sm>.container-md,.navbar-expand-sm>.container-sm,.navbar-expand-sm>.container-xl{padding-right:0;padding-left:0}}@media (min-width:576px){.navbar-expand-sm{flex-flow:row nowrap;justify-content:flex-start}.navbar-expand-sm .navbar-nav{flex-direction:row}.navbar-expand-sm .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-sm .navbar-nav .nav-link{padding-right:0;padding-left:0}.navbar-expand-sm>.container,.navbar-expand-sm>.container-fluid,.navbar-expand-sm>.container-lg,.navbar-expand-sm>.container-md,.navbar-expand-sm>.container-sm,.navbar-expand-sm>.container-xl{flex-wrap:nowrap}.navbar-expand-sm .navbar-collapse{display:flex!important;flex-basis:auto}.navbar-expand-sm .navbar-toggler{display:none}}@media (max-width:767.98px){.navbar-expand-md>.container,.navbar-expand-md>.container-fluid,.navbar-expand-md>.container-lg,.navbar-expand-md>.container-md,.navbar-expand-md>.container-sm,.navbar-expand-md>.container-xl{padding-right:0;padding-left:0}}@media (min-width:768px){.navbar-expand-md{flex-flow:row nowrap;justify-content:flex-start}.navbar-expand-md .navbar-nav{flex-direction:row}.navbar-expand-md .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-md .navbar-nav .nav-link{padding-right:0;padding-left:0}.navbar-expand-md>.container,.navbar-expand-md>.container-fluid,.navbar-expand-md>.container-lg,.navbar-expand-md>.container-md,.navbar-expand-md>.container-sm,.navbar-expand-md>.container-xl{flex-wrap:nowrap}.navbar-expand-md .navbar-collapse{display:flex!important;flex-basis:auto}.navbar-expand-md .navbar-toggler{display:none}}@media (max-width:991.98px){.navbar-expand-lg>.container,.navbar-expand-lg>.container-fluid,.navbar-expand-lg>.container-lg,.navbar-expand-lg>.container-md,.navbar-expand-lg>.container-sm,.navbar-expand-lg>.container-xl{padding-right:0;padding-left:0}}@media (min-width:992px){.navbar-expand-lg{flex-flow:row nowrap;justify-content:flex-start}.navbar-expand-lg .navbar-nav{flex-direction:row}.navbar-expand-lg .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-lg .navbar-nav .nav-link{padding-right:0;padding-left:0}.navbar-expand-lg>.container,.navbar-expand-lg>.container-fluid,.navbar-expand-lg>.container-lg,.navbar-expand-lg>.container-md,.navbar-expand-lg>.container-sm,.navbar-expand-lg>.container-xl{flex-wrap:nowrap}.navbar-expand-lg .navbar-collapse{display:flex!important;flex-basis:auto}.navbar-expand-lg .navbar-toggler{display:none}}@media (max-width:1199.98px){.navbar-expand-xl>.container,.navbar-expand-xl>.container-fluid,.navbar-expand-xl>.container-lg,.navbar-expand-xl>.container-md,.navbar-expand-xl>.container-sm,.navbar-expand-xl>.container-xl{padding-right:0;padding-left:0}}@media (min-width:1200px){.navbar-expand-xl{flex-flow:row nowrap;justify-content:flex-start}.navbar-expand-xl .navbar-nav{flex-direction:row}.navbar-expand-xl .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-xl .navbar-nav .nav-link{padding-right:0;padding-left:0}.navbar-expand-xl>.container,.navbar-expand-xl>.container-fluid,.navbar-expand-xl>.container-lg,.navbar-expand-xl>.container-md,.navbar-expand-xl>.container-sm,.navbar-expand-xl>.container-xl{flex-wrap:nowrap}.navbar-expand-xl .navbar-collapse{display:flex!important;flex-basis:auto}.navbar-expand-xl .navbar-toggler{display:none}}.navbar-expand{flex-flow:row nowrap;justify-content:flex-start}.navbar-expand>.container,.navbar-expand>.container-fluid,.navbar-expand>.container-lg,.navbar-expand>.container-md,.navbar-expand>.container-sm,.navbar-expand>.container-xl{padding-right:0;padding-left:0}.navbar-expand .navbar-nav{flex-direction:row}.navbar-expand .navbar-nav .dropdown-menu{position:absolute}.navbar-expand .navbar-nav .nav-link{padding-right:0;padding-left:0}.navbar-expand>.container,.navbar-expand>.container-fluid,.navbar-expand>.container-lg,.navbar-expand>.container-md,.navbar-expand>.container-sm,.navbar-expand>.container-xl{flex-wrap:nowrap}.navbar-expand .navbar-collapse{display:flex!important;flex-basis:auto}.navbar-expand .navbar-toggler{display:none}.navbar-light .navbar-brand,.navbar-light .navbar-brand:focus,.navbar-light .navbar-brand:hover{color:rgba(0,0,0,.9)}.navbar-light .navbar-nav .nav-link{color:rgba(0,0,0,.5)}.navbar-light .navbar-nav .nav-link:focus,.navbar-light .navbar-nav .nav-link:hover{color:rgba(0,0,0,.7)}.navbar-light .navbar-nav .nav-link.disabled{color:rgba(0,0,0,.3)}.navbar-light .navbar-nav .active>.nav-link,.navbar-light .navbar-nav .nav-link.active,.navbar-light .navbar-nav .nav-link.show,.navbar-light .navbar-nav .show>.nav-link{color:rgba(0,0,0,.9)}.navbar-light .navbar-toggler{color:rgba(0,0,0,.5);border-color:rgba(0,0,0,.1)}.navbar-light .navbar-toggler-icon{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='30' height='30'%3E%3Cpath stroke='rgba(0, 0, 0, 0.5)' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3E%3C/svg%3E")}.navbar-light .navbar-text{color:rgba(0,0,0,.5)}.navbar-light .navbar-text a,.navbar-light .navbar-text a:focus,.navbar-light .navbar-text a:hover{color:rgba(0,0,0,.9)}.navbar-dark .navbar-brand,.navbar-dark .navbar-brand:focus,.navbar-dark .navbar-brand:hover{color:#fff}.navbar-dark .navbar-nav .nav-link{color:hsla(0,0%,100%,.7)}.navbar-dark .navbar-nav .nav-link:focus,.navbar-dark .navbar-nav .nav-link:hover{color:hsla(0,0%,100%,.75)}.navbar-dark .navbar-nav .nav-link.disabled{color:hsla(0,0%,100%,.25)}.navbar-dark .navbar-nav .active>.nav-link,.navbar-dark .navbar-nav .nav-link.active,.navbar-dark .navbar-nav .nav-link.show,.navbar-dark .navbar-nav .show>.nav-link{color:#fff}.navbar-dark .navbar-toggler{color:hsla(0,0%,100%,.7);border-color:hsla(0,0%,100%,.1)}.navbar-dark .navbar-toggler-icon{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='30' height='30'%3E%3Cpath stroke='rgba(255, 255, 255, 0.7)' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3E%3C/svg%3E")}.navbar-dark .navbar-text{color:hsla(0,0%,100%,.7)}.navbar-dark .navbar-text a,.navbar-dark .navbar-text a:focus,.navbar-dark .navbar-text a:hover{color:#fff}.nav{display:flex;flex-wrap:wrap;padding-left:0;margin-bottom:0;list-style:none}.nav-link{display:block;padding:0 1rem}.nav-link:focus,.nav-link:hover{text-decoration:none}.nav-link.disabled{color:#6c757d;pointer-events:none;cursor:default}.nav-tabs{border-bottom:1px solid #dee2e6}.nav-tabs .nav-item{margin-bottom:-1px}.nav-tabs .nav-link{border:1px solid transparent;border-top-left-radius:.25rem;border-top-right-radius:.25rem}.nav-tabs .nav-link:focus,.nav-tabs .nav-link:hover{border-color:#e9ecef #e9ecef #dee2e6}.nav-tabs .nav-link.disabled{color:#6c757d;background-color:transparent;border-color:transparent}.nav-tabs .nav-item.show .nav-link,.nav-tabs .nav-link.active{color:#495057;background-color:#eceeef;border-color:#dee2e6 #dee2e6 #eceeef}.nav-tabs .dropdown-menu{margin-top:-1px;border-top-left-radius:0;border-top-right-radius:0}.nav-pills .nav-link{border-radius:.25rem}.nav-pills .nav-link.active,.nav-pills .show>.nav-link{color:#fff;background-color:#007bff}.nav-fill .nav-item,.nav-fill>.nav-link{flex:1 1 auto;text-align:center}.nav-justified .nav-item,.nav-justified>.nav-link{flex-basis:0;flex-grow:1;text-align:center}.tab-content>.tab-pane{display:none}.tab-content>.active{display:block}.pbTable,.table{width:100%;margin-bottom:1rem;color:#797f90}.pbTable td,.pbTable th,.table td,.table th{padding:.75rem;vertical-align:top;border-top:1px solid #dddfe3}.pbTable thead th,.table thead th{vertical-align:bottom;border-bottom:2px solid #dddfe3}.pbTable tbody+tbody,.table tbody+tbody{border-top:2px solid #dddfe3}.table-sm td,.table-sm th{padding:.3rem}.pbTable,.pbTable td,.pbTable th,.table-bordered,.table-bordered td,.table-bordered th{border:1px solid #dddfe3}.pbTable thead td,.pbTable thead th,.table-bordered thead td,.table-bordered thead th{border-bottom-width:2px}.table-borderless tbody+tbody,.table-borderless td,.table-borderless th,.table-borderless thead th{border:0}.pbTable tbody tr:nth-of-type(odd),.table-striped tbody tr:nth-of-type(odd){background-color:#f8f9f9}.table-hover tbody tr:hover{color:#797f90;background-color:rgba(0,0,0,.075)}.table-primary,.table-primary>td,.table-primary>th{background-color:#b8daff}.table-primary tbody+tbody,.table-primary td,.table-primary th,.table-primary thead th{border-color:#7abaff}.table-hover .table-primary:hover,.table-hover .table-primary:hover>td,.table-hover .table-primary:hover>th{background-color:#9fcdff}.table-secondary,.table-secondary>td,.table-secondary>th{background-color:#d6d8db}.table-secondary tbody+tbody,.table-secondary td,.table-secondary th,.table-secondary thead th{border-color:#b3b7bb}.table-hover .table-secondary:hover,.table-hover .table-secondary:hover>td,.table-hover .table-secondary:hover>th{background-color:#c8cbcf}.table-success,.table-success>td,.table-success>th{background-color:#c3e6cb}.table-success tbody+tbody,.table-success td,.table-success th,.table-success thead th{border-color:#8fd19e}.table-hover .table-success:hover,.table-hover .table-success:hover>td,.table-hover .table-success:hover>th{background-color:#b1dfbb}.table-info,.table-info>td,.table-info>th{background-color:#bee5eb}.table-info tbody+tbody,.table-info td,.table-info th,.table-info thead th{border-color:#86cfda}.table-hover .table-info:hover,.table-hover .table-info:hover>td,.table-hover .table-info:hover>th{background-color:#abdde5}.table-warning,.table-warning>td,.table-warning>th{background-color:#ffeeba}.table-warning tbody+tbody,.table-warning td,.table-warning th,.table-warning thead th{border-color:#ffdf7e}.table-hover .table-warning:hover,.table-hover .table-warning:hover>td,.table-hover .table-warning:hover>th{background-color:#ffe8a1}.table-danger,.table-danger>td,.table-danger>th{background-color:#f5c6cb}.table-danger tbody+tbody,.table-danger td,.table-danger th,.table-danger thead th{border-color:#ed969e}.table-hover .table-danger:hover,.table-hover .table-danger:hover>td,.table-hover .table-danger:hover>th{background-color:#f1b0b7}.table-light,.table-light>td,.table-light>th{background-color:#fdfdfe}.table-light tbody+tbody,.table-light td,.table-light th,.table-light thead th{border-color:#fbfcfc}.table-hover .table-light:hover,.table-hover .table-light:hover>td,.table-hover .table-light:hover>th{background-color:#ececf6}.table-dark,.table-dark>td,.table-dark>th{background-color:#c6c8ca}.table-dark tbody+tbody,.table-dark td,.table-dark th,.table-dark thead th{border-color:#95999c}.table-hover .table-dark:hover,.table-hover .table-dark:hover>td,.table-hover .table-dark:hover>th{background-color:#b9bbbe}.table-active,.table-active>td,.table-active>th,.table-hover .table-active:hover,.table-hover .table-active:hover>td,.table-hover .table-active:hover>th{background-color:rgba(0,0,0,.075)}.pbTable .thead-dark th,.table .thead-dark th{color:#fff;background-color:#343a40;border-color:#454d55}.pbTable .thead-light th,.table .thead-light th{color:#495057;background-color:#e9ecef;border-color:#dddfe3}.table-dark{color:#fff;background-color:#343a40}.table-dark td,.table-dark th,.table-dark thead th{border-color:#454d55}.table-dark.pbTable,.table-dark.table-bordered{border:0}.table-dark.pbTable tbody tr:nth-of-type(odd),.table-dark.table-striped tbody tr:nth-of-type(odd){background-color:hsla(0,0%,100%,.05)}.table-dark.table-hover tbody tr:hover{color:#fff;background-color:hsla(0,0%,100%,.075)}@media (max-width:575.98px){.table-responsive-sm{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch}.table-responsive-sm>.pbTable,.table-responsive-sm>.table-bordered{border:0}}@media (max-width:767.98px){.table-responsive-md{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch}.table-responsive-md>.pbTable,.table-responsive-md>.table-bordered{border:0}}@media (max-width:991.98px){.table-responsive-lg{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch}.table-responsive-lg>.pbTable,.table-responsive-lg>.table-bordered{border:0}}@media (max-width:1199.98px){.table-responsive-xl{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch}.table-responsive-xl>.pbTable,.table-responsive-xl>.table-bordered{border:0}}.table-responsive{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch}.table-responsive>.pbTable,.table-responsive>.table-bordered{border:0}.card{position:relative;display:flex;flex-direction:column;min-width:0;word-wrap:break-word;background-color:#fff;background-clip:border-box;border:1px solid rgba(0,0,0,.125);border-radius:0}.card>hr{margin-right:0;margin-left:0}.card>.list-group{border-top:inherit;border-bottom:inherit}.card>.list-group:first-child{border-top-width:0;border-top-left-radius:0;border-top-right-radius:0}.card>.list-group:last-child{border-bottom-width:0;border-bottom-right-radius:0;border-bottom-left-radius:0}.card>.card-header+.list-group,.card>.list-group+.card-footer{border-top:0}.card-body{flex:1 1 auto;min-height:1px;padding:30px}.card-title{margin-bottom:.75rem}.card-subtitle{margin-top:-.375rem}.card-subtitle,.card-text:last-child{margin-bottom:0}.card-link:hover{text-decoration:none}.card-link+.card-link{margin-left:30px}.card-header{padding:.75rem 30px;margin-bottom:0;background-color:rgba(0,0,0,.03);border-bottom:1px solid rgba(0,0,0,.125)}.card-header:first-child{border-radius:0 0 0 0}.card-footer{padding:.75rem 30px;background-color:rgba(0,0,0,.03);border-top:1px solid rgba(0,0,0,.125)}.card-footer:last-child{border-radius:0 0 0 0}.card-header-tabs{margin-bottom:-.75rem;border-bottom:0}.card-header-pills,.card-header-tabs{margin-right:-15px;margin-left:-15px}.card-img-overlay{position:absolute;top:0;right:0;bottom:0;left:0;padding:1.25rem;border-radius:0}.card-img,.card-img-bottom,.card-img-top{flex-shrink:0;width:100%}.card-img,.card-img-top{border-top-left-radius:0;border-top-right-radius:0}.card-img,.card-img-bottom{border-bottom-right-radius:0;border-bottom-left-radius:0}.card-deck .card{margin-bottom:10px}@media (min-width:576px){.card-deck{display:flex;flex-flow:row wrap;margin-right:-10px;margin-left:-10px}.card-deck .card{flex:1 0 0%;margin-right:10px;margin-bottom:0;margin-left:10px}}.card-group>.card{margin-bottom:10px}@media (min-width:576px){.card-group{display:flex;flex-flow:row wrap}.card-group>.card{flex:1 0 0%;margin-bottom:0}.card-group>.card+.card{margin-left:0;border-left:0}.card-group>.card:not(:last-child){border-top-right-radius:0;border-bottom-right-radius:0}.card-group>.card:not(:last-child) .card-header,.card-group>.card:not(:last-child) .card-img-top{border-top-right-radius:0}.card-group>.card:not(:last-child) .card-footer,.card-group>.card:not(:last-child) .card-img-bottom{border-bottom-right-radius:0}.card-group>.card:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.card-group>.card:not(:first-child) .card-header,.card-group>.card:not(:first-child) .card-img-top{border-top-left-radius:0}.card-group>.card:not(:first-child) .card-footer,.card-group>.card:not(:first-child) .card-img-bottom{border-bottom-left-radius:0}}.card-columns .card{margin-bottom:.75rem}@media (min-width:576px){.card-columns{-moz-column-count:3;column-count:3;-moz-column-gap:1.25rem;column-gap:1.25rem;orphans:1;widows:1}.card-columns .card{display:inline-block;width:100%}}.accordion{overflow-anchor:none}.accordion>.card{overflow:hidden}.accordion>.card:not(:last-of-type){border-bottom:0;border-bottom-right-radius:0;border-bottom-left-radius:0}.accordion>.card:not(:first-of-type){border-top-left-radius:0;border-top-right-radius:0}.accordion>.card>.card-header{border-radius:0;margin-bottom:-1px}code{font-size:87.5%;color:#e83e8c;word-wrap:break-word}a>code{color:inherit}kbd{padding:.2rem .4rem;font-size:87.5%;color:#fff;background-color:#212529;border-radius:.2rem}kbd kbd{padding:0;font-size:100%;font-weight:700}pre{display:block;font-size:87.5%;color:#212529}pre code{font-size:inherit;color:inherit;word-break:normal}.pre-scrollable{max-height:340px;overflow-y:scroll}.alert,.pb-alert{position:relative;padding:.75rem 1.25rem;margin-bottom:1rem;border:1px solid transparent;border-radius:.25rem}.alert-heading{color:inherit}.alert-link{font-weight:700}.alert-dismissible{padding-right:4rem}.alert-dismissible .close{position:absolute;top:0;right:0;z-index:2;padding:.75rem 1.25rem;color:inherit}.alert-primary{color:#004085;background-color:#cce5ff;border-color:#b8daff}.alert-primary hr{border-top-color:#9fcdff}.alert-primary .alert-link{color:#002752}.alert-secondary{color:#383d41;background-color:#e2e3e5;border-color:#d6d8db}.alert-secondary hr{border-top-color:#c8cbcf}.alert-secondary .alert-link{color:#202326}.alert-success{color:#155724;background-color:#d4edda;border-color:#c3e6cb}.alert-success hr{border-top-color:#b1dfbb}.alert-success .alert-link{color:#0b2e13}.alert-info,.pb-alert-tip{color:#0c5460;background-color:#d1ecf1;border-color:#bee5eb}.alert-info hr,.pb-alert-tip hr{border-top-color:#abdde5}.alert-info .alert-link,.pb-alert-tip .alert-link{color:#062c33}.alert-warning,.pb-alert-warning{color:#856404;background-color:#fff3cd;border-color:#ffeeba}.alert-warning hr,.pb-alert-warning hr{border-top-color:#ffe8a1}.alert-warning .alert-link,.pb-alert-warning .alert-link{color:#533f03}.alert-danger,.pb-alert-important{color:#721c24;background-color:#f8d7da;border-color:#f5c6cb}.alert-danger hr,.pb-alert-important hr{border-top-color:#f1b0b7}.alert-danger .alert-link,.pb-alert-important .alert-link{color:#491217}.alert-light{color:#818182;background-color:#fefefe;border-color:#fdfdfe}.alert-light hr{border-top-color:#ececf6}.alert-light .alert-link{color:#686868}.alert-dark{color:#1b1e21;background-color:#d6d8d9;border-color:#c6c8ca}.alert-dark hr{border-top-color:#b9bbbe}.alert-dark .alert-link{color:#040505}.modal-open{overflow:hidden}.modal-open .modal{overflow-x:hidden;overflow-y:auto}.modal{position:fixed;top:0;left:0;z-index:1050;display:none;width:100%;height:100%;overflow:hidden;outline:0}.modal-dialog{position:relative;width:auto;margin:.5rem;pointer-events:none}.modal.fade .modal-dialog{transition:transform .3s ease-out;transform:translateY(-50px)}@media (prefers-reduced-motion:reduce){.modal.fade .modal-dialog{transition:none}}.modal.show .modal-dialog{transform:none}.modal.modal-static .modal-dialog{transform:scale(1.02)}.modal-dialog-scrollable{display:flex;max-height:calc(100% - 1rem)}.modal-dialog-scrollable .modal-content{max-height:calc(100vh - 1rem);overflow:hidden}.modal-dialog-scrollable .modal-footer,.modal-dialog-scrollable .modal-header{flex-shrink:0}.modal-dialog-scrollable .modal-body{overflow-y:auto}.modal-dialog-centered{display:flex;align-items:center;min-height:calc(100% - 1rem)}.modal-dialog-centered:before{display:block;height:calc(100vh - 1rem);height:-webkit-min-content;height:-moz-min-content;height:min-content;content:""}.modal-dialog-centered.modal-dialog-scrollable{flex-direction:column;justify-content:center;height:100%}.modal-dialog-centered.modal-dialog-scrollable .modal-content{max-height:none}.modal-dialog-centered.modal-dialog-scrollable:before{content:none}.modal-content{position:relative;display:flex;flex-direction:column;width:100%;pointer-events:auto;background-color:#fff;background-clip:padding-box;border:1px solid rgba(0,0,0,.2);border-radius:.3rem;outline:0}.modal-backdrop{position:fixed;top:0;left:0;z-index:1040;width:100vw;height:100vh;background-color:#000}.modal-backdrop.fade{opacity:0}.modal-backdrop.show{opacity:.5}.modal-header{display:flex;align-items:flex-start;justify-content:space-between;padding:1rem;border-bottom:1px solid #dee2e6;border-top-left-radius:calc(.3rem - 1px);border-top-right-radius:calc(.3rem - 1px)}.modal-header .close{padding:1rem;margin:-1rem -1rem -1rem auto}.modal-title{margin-bottom:0;line-height:1.5}.modal-body{position:relative;flex:1 1 auto;padding:1rem}.modal-footer{display:flex;flex-wrap:wrap;align-items:center;justify-content:flex-end;padding:.75rem;border-top:1px solid #dee2e6;border-bottom-right-radius:calc(.3rem - 1px);border-bottom-left-radius:calc(.3rem - 1px)}.modal-footer>*{margin:.25rem}.modal-scrollbar-measure{position:absolute;top:-9999px;width:50px;height:50px;overflow:scroll}@media (min-width:576px){.modal-dialog{max-width:500px;margin:1.75rem auto}.modal-dialog-scrollable{max-height:calc(100% - 3.5rem)}.modal-dialog-scrollable .modal-content{max-height:calc(100vh - 3.5rem)}.modal-dialog-centered{min-height:calc(100% - 3.5rem)}.modal-dialog-centered:before{height:calc(100vh - 3.5rem);height:-webkit-min-content;height:-moz-min-content;height:min-content}.modal-sm{max-width:300px}}@media (min-width:992px){.modal-lg,.modal-xl{max-width:800px}}@media (min-width:1200px){.modal-xl{max-width:1140px}}.align-baseline{vertical-align:baseline!important}.align-top{vertical-align:top!important}.align-middle{vertical-align:middle!important}.align-bottom{vertical-align:bottom!important}.align-text-bottom{vertical-align:text-bottom!important}.align-text-top{vertical-align:text-top!important}.bg-primary{background-color:#007bff!important}a.bg-primary:focus,a.bg-primary:hover,button.bg-primary:focus,button.bg-primary:hover{background-color:#0062cc!important}.bg-secondary{background-color:#6c757d!important}a.bg-secondary:focus,a.bg-secondary:hover,button.bg-secondary:focus,button.bg-secondary:hover{background-color:#545b62!important}.bg-success{background-color:#28a745!important}a.bg-success:focus,a.bg-success:hover,button.bg-success:focus,button.bg-success:hover{background-color:#1e7e34!important}.bg-info{background-color:#17a2b8!important}a.bg-info:focus,a.bg-info:hover,button.bg-info:focus,button.bg-info:hover{background-color:#117a8b!important}.bg-warning{background-color:#ffc107!important}a.bg-warning:focus,a.bg-warning:hover,button.bg-warning:focus,button.bg-warning:hover{background-color:#d39e00!important}.bg-danger{background-color:#dc3545!important}a.bg-danger:focus,a.bg-danger:hover,button.bg-danger:focus,button.bg-danger:hover{background-color:#bd2130!important}.bg-light{background-color:#f8f9fa!important}a.bg-light:focus,a.bg-light:hover,button.bg-light:focus,button.bg-light:hover{background-color:#dae0e5!important}.bg-dark{background-color:#343a40!important}a.bg-dark:focus,a.bg-dark:hover,button.bg-dark:focus,button.bg-dark:hover{background-color:#1d2124!important}.bg-white{background-color:#fff!important}.bg-transparent{background-color:transparent!important}.border{border:1px solid #dee2e6!important}.border-top{border-top:1px solid #dee2e6!important}.border-right{border-right:1px solid #dee2e6!important}.border-bottom{border-bottom:1px solid #dee2e6!important}.border-left{border-left:1px solid #dee2e6!important}.border-0{border:0!important}.border-top-0{border-top:0!important}.border-right-0{border-right:0!important}.border-bottom-0{border-bottom:0!important}.border-left-0{border-left:0!important}.border-primary{border-color:#007bff!important}.border-secondary{border-color:#6c757d!important}.border-success{border-color:#28a745!important}.border-info{border-color:#17a2b8!important}.border-warning{border-color:#ffc107!important}.border-danger{border-color:#dc3545!important}.border-light{border-color:#f8f9fa!important}.border-dark{border-color:#343a40!important}.border-white{border-color:#fff!important}.rounded-sm{border-radius:.2rem!important}.rounded{border-radius:.25rem!important}.rounded-top{border-top-left-radius:.25rem!important}.rounded-right,.rounded-top{border-top-right-radius:.25rem!important}.rounded-bottom,.rounded-right{border-bottom-right-radius:.25rem!important}.rounded-bottom,.rounded-left{border-bottom-left-radius:.25rem!important}.rounded-left{border-top-left-radius:.25rem!important}.rounded-lg{border-radius:.3rem!important}.rounded-circle{border-radius:50%!important}.rounded-pill{border-radius:50rem!important}.rounded-0{border-radius:0!important}.clearfix:after{display:block;clear:both;content:""}.d-none{display:none!important}.d-inline{display:inline!important}.d-inline-block{display:inline-block!important}.d-block{display:block!important}.d-table{display:table!important}.d-table-row{display:table-row!important}.d-table-cell{display:table-cell!important}.d-flex{display:flex!important}.d-inline-flex{display:inline-flex!important}@media (min-width:576px){.d-sm-none{display:none!important}.d-sm-inline{display:inline!important}.d-sm-inline-block{display:inline-block!important}.d-sm-block{display:block!important}.d-sm-table{display:table!important}.d-sm-table-row{display:table-row!important}.d-sm-table-cell{display:table-cell!important}.d-sm-flex{display:flex!important}.d-sm-inline-flex{display:inline-flex!important}}@media (min-width:768px){.d-md-none{display:none!important}.d-md-inline{display:inline!important}.d-md-inline-block{display:inline-block!important}.d-md-block{display:block!important}.d-md-table{display:table!important}.d-md-table-row{display:table-row!important}.d-md-table-cell{display:table-cell!important}.d-md-flex{display:flex!important}.d-md-inline-flex{display:inline-flex!important}}@media (min-width:992px){.d-lg-none{display:none!important}.d-lg-inline{display:inline!important}.d-lg-inline-block{display:inline-block!important}.d-lg-block{display:block!important}.d-lg-table{display:table!important}.d-lg-table-row{display:table-row!important}.d-lg-table-cell{display:table-cell!important}.d-lg-flex{display:flex!important}.d-lg-inline-flex{display:inline-flex!important}}@media (min-width:1200px){.d-xl-none{display:none!important}.d-xl-inline{display:inline!important}.d-xl-inline-block{display:inline-block!important}.d-xl-block{display:block!important}.d-xl-table{display:table!important}.d-xl-table-row{display:table-row!important}.d-xl-table-cell{display:table-cell!important}.d-xl-flex{display:flex!important}.d-xl-inline-flex{display:inline-flex!important}}@media print{.d-print-none{display:none!important}.d-print-inline{display:inline!important}.d-print-inline-block{display:inline-block!important}.d-print-block{display:block!important}.d-print-table{display:table!important}.d-print-table-row{display:table-row!important}.d-print-table-cell{display:table-cell!important}.d-print-flex{display:flex!important}.d-print-inline-flex{display:inline-flex!important}}.embed-responsive{position:relative;display:block;width:100%;padding:0;overflow:hidden}.embed-responsive:before{display:block;content:""}.embed-responsive .embed-responsive-item,.embed-responsive embed,.embed-responsive iframe,.embed-responsive object,.embed-responsive video{position:absolute;top:0;bottom:0;left:0;width:100%;height:100%;border:0}.embed-responsive-21by9:before{padding-top:42.8571428571%}.embed-responsive-16by9:before{padding-top:56.25%}.embed-responsive-4by3:before{padding-top:75%}.embed-responsive-1by1:before{padding-top:100%}.flex-row{flex-direction:row!important}.flex-column{flex-direction:column!important}.flex-row-reverse{flex-direction:row-reverse!important}.flex-column-reverse{flex-direction:column-reverse!important}.flex-wrap{flex-wrap:wrap!important}.flex-nowrap{flex-wrap:nowrap!important}.flex-wrap-reverse{flex-wrap:wrap-reverse!important}.flex-fill{flex:1 1 auto!important}.flex-grow-0{flex-grow:0!important}.flex-grow-1{flex-grow:1!important}.flex-shrink-0{flex-shrink:0!important}.flex-shrink-1{flex-shrink:1!important}.justify-content-start{justify-content:flex-start!important}.justify-content-end{justify-content:flex-end!important}.justify-content-center{justify-content:center!important}.justify-content-between{justify-content:space-between!important}.justify-content-around{justify-content:space-around!important}.align-items-start{align-items:flex-start!important}.align-items-end{align-items:flex-end!important}.align-items-center{align-items:center!important}.align-items-baseline{align-items:baseline!important}.align-items-stretch{align-items:stretch!important}.align-content-start{align-content:flex-start!important}.align-content-end{align-content:flex-end!important}.align-content-center{align-content:center!important}.align-content-between{align-content:space-between!important}.align-content-around{align-content:space-around!important}.align-content-stretch{align-content:stretch!important}.align-self-auto{align-self:auto!important}.align-self-start{align-self:flex-start!important}.align-self-end{align-self:flex-end!important}.align-self-center{align-self:center!important}.align-self-baseline{align-self:baseline!important}.align-self-stretch{align-self:stretch!important}@media (min-width:576px){.flex-sm-row{flex-direction:row!important}.flex-sm-column{flex-direction:column!important}.flex-sm-row-reverse{flex-direction:row-reverse!important}.flex-sm-column-reverse{flex-direction:column-reverse!important}.flex-sm-wrap{flex-wrap:wrap!important}.flex-sm-nowrap{flex-wrap:nowrap!important}.flex-sm-wrap-reverse{flex-wrap:wrap-reverse!important}.flex-sm-fill{flex:1 1 auto!important}.flex-sm-grow-0{flex-grow:0!important}.flex-sm-grow-1{flex-grow:1!important}.flex-sm-shrink-0{flex-shrink:0!important}.flex-sm-shrink-1{flex-shrink:1!important}.justify-content-sm-start{justify-content:flex-start!important}.justify-content-sm-end{justify-content:flex-end!important}.justify-content-sm-center{justify-content:center!important}.justify-content-sm-between{justify-content:space-between!important}.justify-content-sm-around{justify-content:space-around!important}.align-items-sm-start{align-items:flex-start!important}.align-items-sm-end{align-items:flex-end!important}.align-items-sm-center{align-items:center!important}.align-items-sm-baseline{align-items:baseline!important}.align-items-sm-stretch{align-items:stretch!important}.align-content-sm-start{align-content:flex-start!important}.align-content-sm-end{align-content:flex-end!important}.align-content-sm-center{align-content:center!important}.align-content-sm-between{align-content:space-between!important}.align-content-sm-around{align-content:space-around!important}.align-content-sm-stretch{align-content:stretch!important}.align-self-sm-auto{align-self:auto!important}.align-self-sm-start{align-self:flex-start!important}.align-self-sm-end{align-self:flex-end!important}.align-self-sm-center{align-self:center!important}.align-self-sm-baseline{align-self:baseline!important}.align-self-sm-stretch{align-self:stretch!important}}@media (min-width:768px){.flex-md-row{flex-direction:row!important}.flex-md-column{flex-direction:column!important}.flex-md-row-reverse{flex-direction:row-reverse!important}.flex-md-column-reverse{flex-direction:column-reverse!important}.flex-md-wrap{flex-wrap:wrap!important}.flex-md-nowrap{flex-wrap:nowrap!important}.flex-md-wrap-reverse{flex-wrap:wrap-reverse!important}.flex-md-fill{flex:1 1 auto!important}.flex-md-grow-0{flex-grow:0!important}.flex-md-grow-1{flex-grow:1!important}.flex-md-shrink-0{flex-shrink:0!important}.flex-md-shrink-1{flex-shrink:1!important}.justify-content-md-start{justify-content:flex-start!important}.justify-content-md-end{justify-content:flex-end!important}.justify-content-md-center{justify-content:center!important}.justify-content-md-between{justify-content:space-between!important}.justify-content-md-around{justify-content:space-around!important}.align-items-md-start{align-items:flex-start!important}.align-items-md-end{align-items:flex-end!important}.align-items-md-center{align-items:center!important}.align-items-md-baseline{align-items:baseline!important}.align-items-md-stretch{align-items:stretch!important}.align-content-md-start{align-content:flex-start!important}.align-content-md-end{align-content:flex-end!important}.align-content-md-center{align-content:center!important}.align-content-md-between{align-content:space-between!important}.align-content-md-around{align-content:space-around!important}.align-content-md-stretch{align-content:stretch!important}.align-self-md-auto{align-self:auto!important}.align-self-md-start{align-self:flex-start!important}.align-self-md-end{align-self:flex-end!important}.align-self-md-center{align-self:center!important}.align-self-md-baseline{align-self:baseline!important}.align-self-md-stretch{align-self:stretch!important}}@media (min-width:992px){.flex-lg-row{flex-direction:row!important}.flex-lg-column{flex-direction:column!important}.flex-lg-row-reverse{flex-direction:row-reverse!important}.flex-lg-column-reverse{flex-direction:column-reverse!important}.flex-lg-wrap{flex-wrap:wrap!important}.flex-lg-nowrap{flex-wrap:nowrap!important}.flex-lg-wrap-reverse{flex-wrap:wrap-reverse!important}.flex-lg-fill{flex:1 1 auto!important}.flex-lg-grow-0{flex-grow:0!important}.flex-lg-grow-1{flex-grow:1!important}.flex-lg-shrink-0{flex-shrink:0!important}.flex-lg-shrink-1{flex-shrink:1!important}.justify-content-lg-start{justify-content:flex-start!important}.justify-content-lg-end{justify-content:flex-end!important}.justify-content-lg-center{justify-content:center!important}.justify-content-lg-between{justify-content:space-between!important}.justify-content-lg-around{justify-content:space-around!important}.align-items-lg-start{align-items:flex-start!important}.align-items-lg-end{align-items:flex-end!important}.align-items-lg-center{align-items:center!important}.align-items-lg-baseline{align-items:baseline!important}.align-items-lg-stretch{align-items:stretch!important}.align-content-lg-start{align-content:flex-start!important}.align-content-lg-end{align-content:flex-end!important}.align-content-lg-center{align-content:center!important}.align-content-lg-between{align-content:space-between!important}.align-content-lg-around{align-content:space-around!important}.align-content-lg-stretch{align-content:stretch!important}.align-self-lg-auto{align-self:auto!important}.align-self-lg-start{align-self:flex-start!important}.align-self-lg-end{align-self:flex-end!important}.align-self-lg-center{align-self:center!important}.align-self-lg-baseline{align-self:baseline!important}.align-self-lg-stretch{align-self:stretch!important}}@media (min-width:1200px){.flex-xl-row{flex-direction:row!important}.flex-xl-column{flex-direction:column!important}.flex-xl-row-reverse{flex-direction:row-reverse!important}.flex-xl-column-reverse{flex-direction:column-reverse!important}.flex-xl-wrap{flex-wrap:wrap!important}.flex-xl-nowrap{flex-wrap:nowrap!important}.flex-xl-wrap-reverse{flex-wrap:wrap-reverse!important}.flex-xl-fill{flex:1 1 auto!important}.flex-xl-grow-0{flex-grow:0!important}.flex-xl-grow-1{flex-grow:1!important}.flex-xl-shrink-0{flex-shrink:0!important}.flex-xl-shrink-1{flex-shrink:1!important}.justify-content-xl-start{justify-content:flex-start!important}.justify-content-xl-end{justify-content:flex-end!important}.justify-content-xl-center{justify-content:center!important}.justify-content-xl-between{justify-content:space-between!important}.justify-content-xl-around{justify-content:space-around!important}.align-items-xl-start{align-items:flex-start!important}.align-items-xl-end{align-items:flex-end!important}.align-items-xl-center{align-items:center!important}.align-items-xl-baseline{align-items:baseline!important}.align-items-xl-stretch{align-items:stretch!important}.align-content-xl-start{align-content:flex-start!important}.align-content-xl-end{align-content:flex-end!important}.align-content-xl-center{align-content:center!important}.align-content-xl-between{align-content:space-between!important}.align-content-xl-around{align-content:space-around!important}.align-content-xl-stretch{align-content:stretch!important}.align-self-xl-auto{align-self:auto!important}.align-self-xl-start{align-self:flex-start!important}.align-self-xl-end{align-self:flex-end!important}.align-self-xl-center{align-self:center!important}.align-self-xl-baseline{align-self:baseline!important}.align-self-xl-stretch{align-self:stretch!important}}.float-left{float:left!important}.float-right{float:right!important}.float-none{float:none!important}@media (min-width:576px){.float-sm-left{float:left!important}.float-sm-right{float:right!important}.float-sm-none{float:none!important}}@media (min-width:768px){.float-md-left{float:left!important}.float-md-right{float:right!important}.float-md-none{float:none!important}}@media (min-width:992px){.float-lg-left{float:left!important}.float-lg-right{float:right!important}.float-lg-none{float:none!important}}@media (min-width:1200px){.float-xl-left{float:left!important}.float-xl-right{float:right!important}.float-xl-none{float:none!important}}.user-select-all{-webkit-user-select:all!important;-moz-user-select:all!important;-ms-user-select:all!important;user-select:all!important}.user-select-auto{-webkit-user-select:auto!important;-moz-user-select:auto!important;-ms-user-select:auto!important;user-select:auto!important}.user-select-none{-webkit-user-select:none!important;-moz-user-select:none!important;-ms-user-select:none!important;user-select:none!important}.overflow-auto{overflow:auto!important}.overflow-hidden{overflow:hidden!important}.position-static{position:static!important}.position-relative{position:relative!important}.position-absolute{position:absolute!important}.position-fixed{position:fixed!important}.position-sticky{position:-webkit-sticky!important;position:sticky!important}.fixed-top{top:0}.fixed-bottom,.fixed-top{position:fixed;right:0;left:0;z-index:1030}.fixed-bottom{bottom:0}@supports ((position:-webkit-sticky) or (position:sticky)){.sticky-top{position:-webkit-sticky;position:sticky;top:0;z-index:1020}}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;overflow:visible;clip:auto;white-space:normal}.shadow-sm{box-shadow:0 .125rem .25rem rgba(0,0,0,.075)!important}.shadow{box-shadow:0 .5rem 1rem rgba(0,0,0,.15)!important}.shadow-lg{box-shadow:0 1rem 3rem rgba(0,0,0,.175)!important}.shadow-none{box-shadow:none!important}.w-25{width:25%!important}.w-50{width:50%!important}.w-75{width:75%!important}.w-100{width:100%!important}.w-auto{width:auto!important}.h-25{height:25%!important}.h-50{height:50%!important}.h-75{height:75%!important}.h-100{height:100%!important}.h-auto{height:auto!important}.mw-100{max-width:100%!important}.mh-100{max-height:100%!important}.min-vw-100{min-width:100vw!important}.min-vh-100{min-height:100vh!important}.vw-100{width:100vw!important}.vh-100{height:100vh!important}.m-0{margin:0!important}.mt-0,.my-0{margin-top:0!important}.mr-0,.mx-0{margin-right:0!important}.mb-0,.my-0{margin-bottom:0!important}.ml-0,.mx-0{margin-left:0!important}.m-1{margin:.25rem!important}.mt-1,.my-1{margin-top:.25rem!important}.mr-1,.mx-1{margin-right:.25rem!important}.mb-1,.my-1{margin-bottom:.25rem!important}.ml-1,.mx-1{margin-left:.25rem!important}.m-2{margin:.5rem!important}.mt-2,.my-2{margin-top:.5rem!important}.mr-2,.mx-2{margin-right:.5rem!important}.mb-2,.my-2{margin-bottom:.5rem!important}.ml-2,.mx-2{margin-left:.5rem!important}.m-3{margin:1rem!important}.mt-3,.my-3{margin-top:1rem!important}.mr-3,.mx-3{margin-right:1rem!important}.mb-3,.my-3{margin-bottom:1rem!important}.ml-3,.mx-3{margin-left:1rem!important}.m-4{margin:1.5rem!important}.mt-4,.my-4{margin-top:1.5rem!important}.mr-4,.mx-4{margin-right:1.5rem!important}.mb-4,.my-4{margin-bottom:1.5rem!important}.ml-4,.mx-4{margin-left:1.5rem!important}.m-5{margin:3rem!important}.mt-5,.my-5{margin-top:3rem!important}.mr-5,.mx-5{margin-right:3rem!important}.mb-5,.my-5{margin-bottom:3rem!important}.ml-5,.mx-5{margin-left:3rem!important}.m-6{margin:3.75rem!important}.mt-6,.my-6{margin-top:3.75rem!important}.mr-6,.mx-6{margin-right:3.75rem!important}.mb-6,.my-6{margin-bottom:3.75rem!important}.ml-6,.mx-6{margin-left:3.75rem!important}.m-7{margin:4.5rem!important}.mt-7,.my-7{margin-top:4.5rem!important}.mr-7,.mx-7{margin-right:4.5rem!important}.mb-7,.my-7{margin-bottom:4.5rem!important}.ml-7,.mx-7{margin-left:4.5rem!important}.m-8{margin:5rem!important}.mt-8,.my-8{margin-top:5rem!important}.mr-8,.mx-8{margin-right:5rem!important}.mb-8,.my-8{margin-bottom:5rem!important}.ml-8,.mx-8{margin-left:5rem!important}.p-0{padding:0!important}.pt-0,.py-0{padding-top:0!important}.pr-0,.px-0{padding-right:0!important}.pb-0,.py-0{padding-bottom:0!important}.pl-0,.px-0{padding-left:0!important}.p-1{padding:.25rem!important}.pt-1,.py-1{padding-top:.25rem!important}.pr-1,.px-1{padding-right:.25rem!important}.pb-1,.py-1{padding-bottom:.25rem!important}.pl-1,.px-1{padding-left:.25rem!important}.p-2{padding:.5rem!important}.pt-2,.py-2{padding-top:.5rem!important}.pr-2,.px-2{padding-right:.5rem!important}.pb-2,.py-2{padding-bottom:.5rem!important}.pl-2,.px-2{padding-left:.5rem!important}.p-3{padding:1rem!important}.pt-3,.py-3{padding-top:1rem!important}.pr-3,.px-3{padding-right:1rem!important}.pb-3,.py-3{padding-bottom:1rem!important}.pl-3,.px-3{padding-left:1rem!important}.p-4{padding:1.5rem!important}.pt-4,.py-4{padding-top:1.5rem!important}.pr-4,.px-4{padding-right:1.5rem!important}.pb-4,.py-4{padding-bottom:1.5rem!important}.pl-4,.px-4{padding-left:1.5rem!important}.p-5{padding:3rem!important}.pt-5,.py-5{padding-top:3rem!important}.pr-5,.px-5{padding-right:3rem!important}.pb-5,.py-5{padding-bottom:3rem!important}.pl-5,.px-5{padding-left:3rem!important}.p-6{padding:3.75rem!important}.pt-6,.py-6{padding-top:3.75rem!important}.pr-6,.px-6{padding-right:3.75rem!important}.pb-6,.py-6{padding-bottom:3.75rem!important}.pl-6,.px-6{padding-left:3.75rem!important}.p-7{padding:4.5rem!important}.pt-7,.py-7{padding-top:4.5rem!important}.pr-7,.px-7{padding-right:4.5rem!important}.pb-7,.py-7{padding-bottom:4.5rem!important}.pl-7,.px-7{padding-left:4.5rem!important}.p-8{padding:5rem!important}.pt-8,.py-8{padding-top:5rem!important}.pr-8,.px-8{padding-right:5rem!important}.pb-8,.py-8{padding-bottom:5rem!important}.pl-8,.px-8{padding-left:5rem!important}.m-n1{margin:-.25rem!important}.mt-n1,.my-n1{margin-top:-.25rem!important}.mr-n1,.mx-n1{margin-right:-.25rem!important}.mb-n1,.my-n1{margin-bottom:-.25rem!important}.ml-n1,.mx-n1{margin-left:-.25rem!important}.m-n2{margin:-.5rem!important}.mt-n2,.my-n2{margin-top:-.5rem!important}.mr-n2,.mx-n2{margin-right:-.5rem!important}.mb-n2,.my-n2{margin-bottom:-.5rem!important}.ml-n2,.mx-n2{margin-left:-.5rem!important}.m-n3{margin:-1rem!important}.mt-n3,.my-n3{margin-top:-1rem!important}.mr-n3,.mx-n3{margin-right:-1rem!important}.mb-n3,.my-n3{margin-bottom:-1rem!important}.ml-n3,.mx-n3{margin-left:-1rem!important}.m-n4{margin:-1.5rem!important}.mt-n4,.my-n4{margin-top:-1.5rem!important}.mr-n4,.mx-n4{margin-right:-1.5rem!important}.mb-n4,.my-n4{margin-bottom:-1.5rem!important}.ml-n4,.mx-n4{margin-left:-1.5rem!important}.m-n5{margin:-3rem!important}.mt-n5,.my-n5{margin-top:-3rem!important}.mr-n5,.mx-n5{margin-right:-3rem!important}.mb-n5,.my-n5{margin-bottom:-3rem!important}.ml-n5,.mx-n5{margin-left:-3rem!important}.m-n6{margin:-3.75rem!important}.mt-n6,.my-n6{margin-top:-3.75rem!important}.mr-n6,.mx-n6{margin-right:-3.75rem!important}.mb-n6,.my-n6{margin-bottom:-3.75rem!important}.ml-n6,.mx-n6{margin-left:-3.75rem!important}.m-n7{margin:-4.5rem!important}.mt-n7,.my-n7{margin-top:-4.5rem!important}.mr-n7,.mx-n7{margin-right:-4.5rem!important}.mb-n7,.my-n7{margin-bottom:-4.5rem!important}.ml-n7,.mx-n7{margin-left:-4.5rem!important}.m-n8{margin:-5rem!important}.mt-n8,.my-n8{margin-top:-5rem!important}.mr-n8,.mx-n8{margin-right:-5rem!important}.mb-n8,.my-n8{margin-bottom:-5rem!important}.ml-n8,.mx-n8{margin-left:-5rem!important}.m-auto{margin:auto!important}.mt-auto,.my-auto{margin-top:auto!important}.mr-auto,.mx-auto{margin-right:auto!important}.mb-auto,.my-auto{margin-bottom:auto!important}.ml-auto,.mx-auto{margin-left:auto!important}@media (min-width:576px){.m-sm-0{margin:0!important}.mt-sm-0,.my-sm-0{margin-top:0!important}.mr-sm-0,.mx-sm-0{margin-right:0!important}.mb-sm-0,.my-sm-0{margin-bottom:0!important}.ml-sm-0,.mx-sm-0{margin-left:0!important}.m-sm-1{margin:.25rem!important}.mt-sm-1,.my-sm-1{margin-top:.25rem!important}.mr-sm-1,.mx-sm-1{margin-right:.25rem!important}.mb-sm-1,.my-sm-1{margin-bottom:.25rem!important}.ml-sm-1,.mx-sm-1{margin-left:.25rem!important}.m-sm-2{margin:.5rem!important}.mt-sm-2,.my-sm-2{margin-top:.5rem!important}.mr-sm-2,.mx-sm-2{margin-right:.5rem!important}.mb-sm-2,.my-sm-2{margin-bottom:.5rem!important}.ml-sm-2,.mx-sm-2{margin-left:.5rem!important}.m-sm-3{margin:1rem!important}.mt-sm-3,.my-sm-3{margin-top:1rem!important}.mr-sm-3,.mx-sm-3{margin-right:1rem!important}.mb-sm-3,.my-sm-3{margin-bottom:1rem!important}.ml-sm-3,.mx-sm-3{margin-left:1rem!important}.m-sm-4{margin:1.5rem!important}.mt-sm-4,.my-sm-4{margin-top:1.5rem!important}.mr-sm-4,.mx-sm-4{margin-right:1.5rem!important}.mb-sm-4,.my-sm-4{margin-bottom:1.5rem!important}.ml-sm-4,.mx-sm-4{margin-left:1.5rem!important}.m-sm-5{margin:3rem!important}.mt-sm-5,.my-sm-5{margin-top:3rem!important}.mr-sm-5,.mx-sm-5{margin-right:3rem!important}.mb-sm-5,.my-sm-5{margin-bottom:3rem!important}.ml-sm-5,.mx-sm-5{margin-left:3rem!important}.m-sm-6{margin:3.75rem!important}.mt-sm-6,.my-sm-6{margin-top:3.75rem!important}.mr-sm-6,.mx-sm-6{margin-right:3.75rem!important}.mb-sm-6,.my-sm-6{margin-bottom:3.75rem!important}.ml-sm-6,.mx-sm-6{margin-left:3.75rem!important}.m-sm-7{margin:4.5rem!important}.mt-sm-7,.my-sm-7{margin-top:4.5rem!important}.mr-sm-7,.mx-sm-7{margin-right:4.5rem!important}.mb-sm-7,.my-sm-7{margin-bottom:4.5rem!important}.ml-sm-7,.mx-sm-7{margin-left:4.5rem!important}.m-sm-8{margin:5rem!important}.mt-sm-8,.my-sm-8{margin-top:5rem!important}.mr-sm-8,.mx-sm-8{margin-right:5rem!important}.mb-sm-8,.my-sm-8{margin-bottom:5rem!important}.ml-sm-8,.mx-sm-8{margin-left:5rem!important}.p-sm-0{padding:0!important}.pt-sm-0,.py-sm-0{padding-top:0!important}.pr-sm-0,.px-sm-0{padding-right:0!important}.pb-sm-0,.py-sm-0{padding-bottom:0!important}.pl-sm-0,.px-sm-0{padding-left:0!important}.p-sm-1{padding:.25rem!important}.pt-sm-1,.py-sm-1{padding-top:.25rem!important}.pr-sm-1,.px-sm-1{padding-right:.25rem!important}.pb-sm-1,.py-sm-1{padding-bottom:.25rem!important}.pl-sm-1,.px-sm-1{padding-left:.25rem!important}.p-sm-2{padding:.5rem!important}.pt-sm-2,.py-sm-2{padding-top:.5rem!important}.pr-sm-2,.px-sm-2{padding-right:.5rem!important}.pb-sm-2,.py-sm-2{padding-bottom:.5rem!important}.pl-sm-2,.px-sm-2{padding-left:.5rem!important}.p-sm-3{padding:1rem!important}.pt-sm-3,.py-sm-3{padding-top:1rem!important}.pr-sm-3,.px-sm-3{padding-right:1rem!important}.pb-sm-3,.py-sm-3{padding-bottom:1rem!important}.pl-sm-3,.px-sm-3{padding-left:1rem!important}.p-sm-4{padding:1.5rem!important}.pt-sm-4,.py-sm-4{padding-top:1.5rem!important}.pr-sm-4,.px-sm-4{padding-right:1.5rem!important}.pb-sm-4,.py-sm-4{padding-bottom:1.5rem!important}.pl-sm-4,.px-sm-4{padding-left:1.5rem!important}.p-sm-5{padding:3rem!important}.pt-sm-5,.py-sm-5{padding-top:3rem!important}.pr-sm-5,.px-sm-5{padding-right:3rem!important}.pb-sm-5,.py-sm-5{padding-bottom:3rem!important}.pl-sm-5,.px-sm-5{padding-left:3rem!important}.p-sm-6{padding:3.75rem!important}.pt-sm-6,.py-sm-6{padding-top:3.75rem!important}.pr-sm-6,.px-sm-6{padding-right:3.75rem!important}.pb-sm-6,.py-sm-6{padding-bottom:3.75rem!important}.pl-sm-6,.px-sm-6{padding-left:3.75rem!important}.p-sm-7{padding:4.5rem!important}.pt-sm-7,.py-sm-7{padding-top:4.5rem!important}.pr-sm-7,.px-sm-7{padding-right:4.5rem!important}.pb-sm-7,.py-sm-7{padding-bottom:4.5rem!important}.pl-sm-7,.px-sm-7{padding-left:4.5rem!important}.p-sm-8{padding:5rem!important}.pt-sm-8,.py-sm-8{padding-top:5rem!important}.pr-sm-8,.px-sm-8{padding-right:5rem!important}.pb-sm-8,.py-sm-8{padding-bottom:5rem!important}.pl-sm-8,.px-sm-8{padding-left:5rem!important}.m-sm-n1{margin:-.25rem!important}.mt-sm-n1,.my-sm-n1{margin-top:-.25rem!important}.mr-sm-n1,.mx-sm-n1{margin-right:-.25rem!important}.mb-sm-n1,.my-sm-n1{margin-bottom:-.25rem!important}.ml-sm-n1,.mx-sm-n1{margin-left:-.25rem!important}.m-sm-n2{margin:-.5rem!important}.mt-sm-n2,.my-sm-n2{margin-top:-.5rem!important}.mr-sm-n2,.mx-sm-n2{margin-right:-.5rem!important}.mb-sm-n2,.my-sm-n2{margin-bottom:-.5rem!important}.ml-sm-n2,.mx-sm-n2{margin-left:-.5rem!important}.m-sm-n3{margin:-1rem!important}.mt-sm-n3,.my-sm-n3{margin-top:-1rem!important}.mr-sm-n3,.mx-sm-n3{margin-right:-1rem!important}.mb-sm-n3,.my-sm-n3{margin-bottom:-1rem!important}.ml-sm-n3,.mx-sm-n3{margin-left:-1rem!important}.m-sm-n4{margin:-1.5rem!important}.mt-sm-n4,.my-sm-n4{margin-top:-1.5rem!important}.mr-sm-n4,.mx-sm-n4{margin-right:-1.5rem!important}.mb-sm-n4,.my-sm-n4{margin-bottom:-1.5rem!important}.ml-sm-n4,.mx-sm-n4{margin-left:-1.5rem!important}.m-sm-n5{margin:-3rem!important}.mt-sm-n5,.my-sm-n5{margin-top:-3rem!important}.mr-sm-n5,.mx-sm-n5{margin-right:-3rem!important}.mb-sm-n5,.my-sm-n5{margin-bottom:-3rem!important}.ml-sm-n5,.mx-sm-n5{margin-left:-3rem!important}.m-sm-n6{margin:-3.75rem!important}.mt-sm-n6,.my-sm-n6{margin-top:-3.75rem!important}.mr-sm-n6,.mx-sm-n6{margin-right:-3.75rem!important}.mb-sm-n6,.my-sm-n6{margin-bottom:-3.75rem!important}.ml-sm-n6,.mx-sm-n6{margin-left:-3.75rem!important}.m-sm-n7{margin:-4.5rem!important}.mt-sm-n7,.my-sm-n7{margin-top:-4.5rem!important}.mr-sm-n7,.mx-sm-n7{margin-right:-4.5rem!important}.mb-sm-n7,.my-sm-n7{margin-bottom:-4.5rem!important}.ml-sm-n7,.mx-sm-n7{margin-left:-4.5rem!important}.m-sm-n8{margin:-5rem!important}.mt-sm-n8,.my-sm-n8{margin-top:-5rem!important}.mr-sm-n8,.mx-sm-n8{margin-right:-5rem!important}.mb-sm-n8,.my-sm-n8{margin-bottom:-5rem!important}.ml-sm-n8,.mx-sm-n8{margin-left:-5rem!important}.m-sm-auto{margin:auto!important}.mt-sm-auto,.my-sm-auto{margin-top:auto!important}.mr-sm-auto,.mx-sm-auto{margin-right:auto!important}.mb-sm-auto,.my-sm-auto{margin-bottom:auto!important}.ml-sm-auto,.mx-sm-auto{margin-left:auto!important}}@media (min-width:768px){.m-md-0{margin:0!important}.mt-md-0,.my-md-0{margin-top:0!important}.mr-md-0,.mx-md-0{margin-right:0!important}.mb-md-0,.my-md-0{margin-bottom:0!important}.ml-md-0,.mx-md-0{margin-left:0!important}.m-md-1{margin:.25rem!important}.mt-md-1,.my-md-1{margin-top:.25rem!important}.mr-md-1,.mx-md-1{margin-right:.25rem!important}.mb-md-1,.my-md-1{margin-bottom:.25rem!important}.ml-md-1,.mx-md-1{margin-left:.25rem!important}.m-md-2{margin:.5rem!important}.mt-md-2,.my-md-2{margin-top:.5rem!important}.mr-md-2,.mx-md-2{margin-right:.5rem!important}.mb-md-2,.my-md-2{margin-bottom:.5rem!important}.ml-md-2,.mx-md-2{margin-left:.5rem!important}.m-md-3{margin:1rem!important}.mt-md-3,.my-md-3{margin-top:1rem!important}.mr-md-3,.mx-md-3{margin-right:1rem!important}.mb-md-3,.my-md-3{margin-bottom:1rem!important}.ml-md-3,.mx-md-3{margin-left:1rem!important}.m-md-4{margin:1.5rem!important}.mt-md-4,.my-md-4{margin-top:1.5rem!important}.mr-md-4,.mx-md-4{margin-right:1.5rem!important}.mb-md-4,.my-md-4{margin-bottom:1.5rem!important}.ml-md-4,.mx-md-4{margin-left:1.5rem!important}.m-md-5{margin:3rem!important}.mt-md-5,.my-md-5{margin-top:3rem!important}.mr-md-5,.mx-md-5{margin-right:3rem!important}.mb-md-5,.my-md-5{margin-bottom:3rem!important}.ml-md-5,.mx-md-5{margin-left:3rem!important}.m-md-6{margin:3.75rem!important}.mt-md-6,.my-md-6{margin-top:3.75rem!important}.mr-md-6,.mx-md-6{margin-right:3.75rem!important}.mb-md-6,.my-md-6{margin-bottom:3.75rem!important}.ml-md-6,.mx-md-6{margin-left:3.75rem!important}.m-md-7{margin:4.5rem!important}.mt-md-7,.my-md-7{margin-top:4.5rem!important}.mr-md-7,.mx-md-7{margin-right:4.5rem!important}.mb-md-7,.my-md-7{margin-bottom:4.5rem!important}.ml-md-7,.mx-md-7{margin-left:4.5rem!important}.m-md-8{margin:5rem!important}.mt-md-8,.my-md-8{margin-top:5rem!important}.mr-md-8,.mx-md-8{margin-right:5rem!important}.mb-md-8,.my-md-8{margin-bottom:5rem!important}.ml-md-8,.mx-md-8{margin-left:5rem!important}.p-md-0{padding:0!important}.pt-md-0,.py-md-0{padding-top:0!important}.pr-md-0,.px-md-0{padding-right:0!important}.pb-md-0,.py-md-0{padding-bottom:0!important}.pl-md-0,.px-md-0{padding-left:0!important}.p-md-1{padding:.25rem!important}.pt-md-1,.py-md-1{padding-top:.25rem!important}.pr-md-1,.px-md-1{padding-right:.25rem!important}.pb-md-1,.py-md-1{padding-bottom:.25rem!important}.pl-md-1,.px-md-1{padding-left:.25rem!important}.p-md-2{padding:.5rem!important}.pt-md-2,.py-md-2{padding-top:.5rem!important}.pr-md-2,.px-md-2{padding-right:.5rem!important}.pb-md-2,.py-md-2{padding-bottom:.5rem!important}.pl-md-2,.px-md-2{padding-left:.5rem!important}.p-md-3{padding:1rem!important}.pt-md-3,.py-md-3{padding-top:1rem!important}.pr-md-3,.px-md-3{padding-right:1rem!important}.pb-md-3,.py-md-3{padding-bottom:1rem!important}.pl-md-3,.px-md-3{padding-left:1rem!important}.p-md-4{padding:1.5rem!important}.pt-md-4,.py-md-4{padding-top:1.5rem!important}.pr-md-4,.px-md-4{padding-right:1.5rem!important}.pb-md-4,.py-md-4{padding-bottom:1.5rem!important}.pl-md-4,.px-md-4{padding-left:1.5rem!important}.p-md-5{padding:3rem!important}.pt-md-5,.py-md-5{padding-top:3rem!important}.pr-md-5,.px-md-5{padding-right:3rem!important}.pb-md-5,.py-md-5{padding-bottom:3rem!important}.pl-md-5,.px-md-5{padding-left:3rem!important}.p-md-6{padding:3.75rem!important}.pt-md-6,.py-md-6{padding-top:3.75rem!important}.pr-md-6,.px-md-6{padding-right:3.75rem!important}.pb-md-6,.py-md-6{padding-bottom:3.75rem!important}.pl-md-6,.px-md-6{padding-left:3.75rem!important}.p-md-7{padding:4.5rem!important}.pt-md-7,.py-md-7{padding-top:4.5rem!important}.pr-md-7,.px-md-7{padding-right:4.5rem!important}.pb-md-7,.py-md-7{padding-bottom:4.5rem!important}.pl-md-7,.px-md-7{padding-left:4.5rem!important}.p-md-8{padding:5rem!important}.pt-md-8,.py-md-8{padding-top:5rem!important}.pr-md-8,.px-md-8{padding-right:5rem!important}.pb-md-8,.py-md-8{padding-bottom:5rem!important}.pl-md-8,.px-md-8{padding-left:5rem!important}.m-md-n1{margin:-.25rem!important}.mt-md-n1,.my-md-n1{margin-top:-.25rem!important}.mr-md-n1,.mx-md-n1{margin-right:-.25rem!important}.mb-md-n1,.my-md-n1{margin-bottom:-.25rem!important}.ml-md-n1,.mx-md-n1{margin-left:-.25rem!important}.m-md-n2{margin:-.5rem!important}.mt-md-n2,.my-md-n2{margin-top:-.5rem!important}.mr-md-n2,.mx-md-n2{margin-right:-.5rem!important}.mb-md-n2,.my-md-n2{margin-bottom:-.5rem!important}.ml-md-n2,.mx-md-n2{margin-left:-.5rem!important}.m-md-n3{margin:-1rem!important}.mt-md-n3,.my-md-n3{margin-top:-1rem!important}.mr-md-n3,.mx-md-n3{margin-right:-1rem!important}.mb-md-n3,.my-md-n3{margin-bottom:-1rem!important}.ml-md-n3,.mx-md-n3{margin-left:-1rem!important}.m-md-n4{margin:-1.5rem!important}.mt-md-n4,.my-md-n4{margin-top:-1.5rem!important}.mr-md-n4,.mx-md-n4{margin-right:-1.5rem!important}.mb-md-n4,.my-md-n4{margin-bottom:-1.5rem!important}.ml-md-n4,.mx-md-n4{margin-left:-1.5rem!important}.m-md-n5{margin:-3rem!important}.mt-md-n5,.my-md-n5{margin-top:-3rem!important}.mr-md-n5,.mx-md-n5{margin-right:-3rem!important}.mb-md-n5,.my-md-n5{margin-bottom:-3rem!important}.ml-md-n5,.mx-md-n5{margin-left:-3rem!important}.m-md-n6{margin:-3.75rem!important}.mt-md-n6,.my-md-n6{margin-top:-3.75rem!important}.mr-md-n6,.mx-md-n6{margin-right:-3.75rem!important}.mb-md-n6,.my-md-n6{margin-bottom:-3.75rem!important}.ml-md-n6,.mx-md-n6{margin-left:-3.75rem!important}.m-md-n7{margin:-4.5rem!important}.mt-md-n7,.my-md-n7{margin-top:-4.5rem!important}.mr-md-n7,.mx-md-n7{margin-right:-4.5rem!important}.mb-md-n7,.my-md-n7{margin-bottom:-4.5rem!important}.ml-md-n7,.mx-md-n7{margin-left:-4.5rem!important}.m-md-n8{margin:-5rem!important}.mt-md-n8,.my-md-n8{margin-top:-5rem!important}.mr-md-n8,.mx-md-n8{margin-right:-5rem!important}.mb-md-n8,.my-md-n8{margin-bottom:-5rem!important}.ml-md-n8,.mx-md-n8{margin-left:-5rem!important}.m-md-auto{margin:auto!important}.mt-md-auto,.my-md-auto{margin-top:auto!important}.mr-md-auto,.mx-md-auto{margin-right:auto!important}.mb-md-auto,.my-md-auto{margin-bottom:auto!important}.ml-md-auto,.mx-md-auto{margin-left:auto!important}}@media (min-width:992px){.m-lg-0{margin:0!important}.mt-lg-0,.my-lg-0{margin-top:0!important}.mr-lg-0,.mx-lg-0{margin-right:0!important}.mb-lg-0,.my-lg-0{margin-bottom:0!important}.ml-lg-0,.mx-lg-0{margin-left:0!important}.m-lg-1{margin:.25rem!important}.mt-lg-1,.my-lg-1{margin-top:.25rem!important}.mr-lg-1,.mx-lg-1{margin-right:.25rem!important}.mb-lg-1,.my-lg-1{margin-bottom:.25rem!important}.ml-lg-1,.mx-lg-1{margin-left:.25rem!important}.m-lg-2{margin:.5rem!important}.mt-lg-2,.my-lg-2{margin-top:.5rem!important}.mr-lg-2,.mx-lg-2{margin-right:.5rem!important}.mb-lg-2,.my-lg-2{margin-bottom:.5rem!important}.ml-lg-2,.mx-lg-2{margin-left:.5rem!important}.m-lg-3{margin:1rem!important}.mt-lg-3,.my-lg-3{margin-top:1rem!important}.mr-lg-3,.mx-lg-3{margin-right:1rem!important}.mb-lg-3,.my-lg-3{margin-bottom:1rem!important}.ml-lg-3,.mx-lg-3{margin-left:1rem!important}.m-lg-4{margin:1.5rem!important}.mt-lg-4,.my-lg-4{margin-top:1.5rem!important}.mr-lg-4,.mx-lg-4{margin-right:1.5rem!important}.mb-lg-4,.my-lg-4{margin-bottom:1.5rem!important}.ml-lg-4,.mx-lg-4{margin-left:1.5rem!important}.m-lg-5{margin:3rem!important}.mt-lg-5,.my-lg-5{margin-top:3rem!important}.mr-lg-5,.mx-lg-5{margin-right:3rem!important}.mb-lg-5,.my-lg-5{margin-bottom:3rem!important}.ml-lg-5,.mx-lg-5{margin-left:3rem!important}.m-lg-6{margin:3.75rem!important}.mt-lg-6,.my-lg-6{margin-top:3.75rem!important}.mr-lg-6,.mx-lg-6{margin-right:3.75rem!important}.mb-lg-6,.my-lg-6{margin-bottom:3.75rem!important}.ml-lg-6,.mx-lg-6{margin-left:3.75rem!important}.m-lg-7{margin:4.5rem!important}.mt-lg-7,.my-lg-7{margin-top:4.5rem!important}.mr-lg-7,.mx-lg-7{margin-right:4.5rem!important}.mb-lg-7,.my-lg-7{margin-bottom:4.5rem!important}.ml-lg-7,.mx-lg-7{margin-left:4.5rem!important}.m-lg-8{margin:5rem!important}.mt-lg-8,.my-lg-8{margin-top:5rem!important}.mr-lg-8,.mx-lg-8{margin-right:5rem!important}.mb-lg-8,.my-lg-8{margin-bottom:5rem!important}.ml-lg-8,.mx-lg-8{margin-left:5rem!important}.p-lg-0{padding:0!important}.pt-lg-0,.py-lg-0{padding-top:0!important}.pr-lg-0,.px-lg-0{padding-right:0!important}.pb-lg-0,.py-lg-0{padding-bottom:0!important}.pl-lg-0,.px-lg-0{padding-left:0!important}.p-lg-1{padding:.25rem!important}.pt-lg-1,.py-lg-1{padding-top:.25rem!important}.pr-lg-1,.px-lg-1{padding-right:.25rem!important}.pb-lg-1,.py-lg-1{padding-bottom:.25rem!important}.pl-lg-1,.px-lg-1{padding-left:.25rem!important}.p-lg-2{padding:.5rem!important}.pt-lg-2,.py-lg-2{padding-top:.5rem!important}.pr-lg-2,.px-lg-2{padding-right:.5rem!important}.pb-lg-2,.py-lg-2{padding-bottom:.5rem!important}.pl-lg-2,.px-lg-2{padding-left:.5rem!important}.p-lg-3{padding:1rem!important}.pt-lg-3,.py-lg-3{padding-top:1rem!important}.pr-lg-3,.px-lg-3{padding-right:1rem!important}.pb-lg-3,.py-lg-3{padding-bottom:1rem!important}.pl-lg-3,.px-lg-3{padding-left:1rem!important}.p-lg-4{padding:1.5rem!important}.pt-lg-4,.py-lg-4{padding-top:1.5rem!important}.pr-lg-4,.px-lg-4{padding-right:1.5rem!important}.pb-lg-4,.py-lg-4{padding-bottom:1.5rem!important}.pl-lg-4,.px-lg-4{padding-left:1.5rem!important}.p-lg-5{padding:3rem!important}.pt-lg-5,.py-lg-5{padding-top:3rem!important}.pr-lg-5,.px-lg-5{padding-right:3rem!important}.pb-lg-5,.py-lg-5{padding-bottom:3rem!important}.pl-lg-5,.px-lg-5{padding-left:3rem!important}.p-lg-6{padding:3.75rem!important}.pt-lg-6,.py-lg-6{padding-top:3.75rem!important}.pr-lg-6,.px-lg-6{padding-right:3.75rem!important}.pb-lg-6,.py-lg-6{padding-bottom:3.75rem!important}.pl-lg-6,.px-lg-6{padding-left:3.75rem!important}.p-lg-7{padding:4.5rem!important}.pt-lg-7,.py-lg-7{padding-top:4.5rem!important}.pr-lg-7,.px-lg-7{padding-right:4.5rem!important}.pb-lg-7,.py-lg-7{padding-bottom:4.5rem!important}.pl-lg-7,.px-lg-7{padding-left:4.5rem!important}.p-lg-8{padding:5rem!important}.pt-lg-8,.py-lg-8{padding-top:5rem!important}.pr-lg-8,.px-lg-8{padding-right:5rem!important}.pb-lg-8,.py-lg-8{padding-bottom:5rem!important}.pl-lg-8,.px-lg-8{padding-left:5rem!important}.m-lg-n1{margin:-.25rem!important}.mt-lg-n1,.my-lg-n1{margin-top:-.25rem!important}.mr-lg-n1,.mx-lg-n1{margin-right:-.25rem!important}.mb-lg-n1,.my-lg-n1{margin-bottom:-.25rem!important}.ml-lg-n1,.mx-lg-n1{margin-left:-.25rem!important}.m-lg-n2{margin:-.5rem!important}.mt-lg-n2,.my-lg-n2{margin-top:-.5rem!important}.mr-lg-n2,.mx-lg-n2{margin-right:-.5rem!important}.mb-lg-n2,.my-lg-n2{margin-bottom:-.5rem!important}.ml-lg-n2,.mx-lg-n2{margin-left:-.5rem!important}.m-lg-n3{margin:-1rem!important}.mt-lg-n3,.my-lg-n3{margin-top:-1rem!important}.mr-lg-n3,.mx-lg-n3{margin-right:-1rem!important}.mb-lg-n3,.my-lg-n3{margin-bottom:-1rem!important}.ml-lg-n3,.mx-lg-n3{margin-left:-1rem!important}.m-lg-n4{margin:-1.5rem!important}.mt-lg-n4,.my-lg-n4{margin-top:-1.5rem!important}.mr-lg-n4,.mx-lg-n4{margin-right:-1.5rem!important}.mb-lg-n4,.my-lg-n4{margin-bottom:-1.5rem!important}.ml-lg-n4,.mx-lg-n4{margin-left:-1.5rem!important}.m-lg-n5{margin:-3rem!important}.mt-lg-n5,.my-lg-n5{margin-top:-3rem!important}.mr-lg-n5,.mx-lg-n5{margin-right:-3rem!important}.mb-lg-n5,.my-lg-n5{margin-bottom:-3rem!important}.ml-lg-n5,.mx-lg-n5{margin-left:-3rem!important}.m-lg-n6{margin:-3.75rem!important}.mt-lg-n6,.my-lg-n6{margin-top:-3.75rem!important}.mr-lg-n6,.mx-lg-n6{margin-right:-3.75rem!important}.mb-lg-n6,.my-lg-n6{margin-bottom:-3.75rem!important}.ml-lg-n6,.mx-lg-n6{margin-left:-3.75rem!important}.m-lg-n7{margin:-4.5rem!important}.mt-lg-n7,.my-lg-n7{margin-top:-4.5rem!important}.mr-lg-n7,.mx-lg-n7{margin-right:-4.5rem!important}.mb-lg-n7,.my-lg-n7{margin-bottom:-4.5rem!important}.ml-lg-n7,.mx-lg-n7{margin-left:-4.5rem!important}.m-lg-n8{margin:-5rem!important}.mt-lg-n8,.my-lg-n8{margin-top:-5rem!important}.mr-lg-n8,.mx-lg-n8{margin-right:-5rem!important}.mb-lg-n8,.my-lg-n8{margin-bottom:-5rem!important}.ml-lg-n8,.mx-lg-n8{margin-left:-5rem!important}.m-lg-auto{margin:auto!important}.mt-lg-auto,.my-lg-auto{margin-top:auto!important}.mr-lg-auto,.mx-lg-auto{margin-right:auto!important}.mb-lg-auto,.my-lg-auto{margin-bottom:auto!important}.ml-lg-auto,.mx-lg-auto{margin-left:auto!important}}@media (min-width:1200px){.m-xl-0{margin:0!important}.mt-xl-0,.my-xl-0{margin-top:0!important}.mr-xl-0,.mx-xl-0{margin-right:0!important}.mb-xl-0,.my-xl-0{margin-bottom:0!important}.ml-xl-0,.mx-xl-0{margin-left:0!important}.m-xl-1{margin:.25rem!important}.mt-xl-1,.my-xl-1{margin-top:.25rem!important}.mr-xl-1,.mx-xl-1{margin-right:.25rem!important}.mb-xl-1,.my-xl-1{margin-bottom:.25rem!important}.ml-xl-1,.mx-xl-1{margin-left:.25rem!important}.m-xl-2{margin:.5rem!important}.mt-xl-2,.my-xl-2{margin-top:.5rem!important}.mr-xl-2,.mx-xl-2{margin-right:.5rem!important}.mb-xl-2,.my-xl-2{margin-bottom:.5rem!important}.ml-xl-2,.mx-xl-2{margin-left:.5rem!important}.m-xl-3{margin:1rem!important}.mt-xl-3,.my-xl-3{margin-top:1rem!important}.mr-xl-3,.mx-xl-3{margin-right:1rem!important}.mb-xl-3,.my-xl-3{margin-bottom:1rem!important}.ml-xl-3,.mx-xl-3{margin-left:1rem!important}.m-xl-4{margin:1.5rem!important}.mt-xl-4,.my-xl-4{margin-top:1.5rem!important}.mr-xl-4,.mx-xl-4{margin-right:1.5rem!important}.mb-xl-4,.my-xl-4{margin-bottom:1.5rem!important}.ml-xl-4,.mx-xl-4{margin-left:1.5rem!important}.m-xl-5{margin:3rem!important}.mt-xl-5,.my-xl-5{margin-top:3rem!important}.mr-xl-5,.mx-xl-5{margin-right:3rem!important}.mb-xl-5,.my-xl-5{margin-bottom:3rem!important}.ml-xl-5,.mx-xl-5{margin-left:3rem!important}.m-xl-6{margin:3.75rem!important}.mt-xl-6,.my-xl-6{margin-top:3.75rem!important}.mr-xl-6,.mx-xl-6{margin-right:3.75rem!important}.mb-xl-6,.my-xl-6{margin-bottom:3.75rem!important}.ml-xl-6,.mx-xl-6{margin-left:3.75rem!important}.m-xl-7{margin:4.5rem!important}.mt-xl-7,.my-xl-7{margin-top:4.5rem!important}.mr-xl-7,.mx-xl-7{margin-right:4.5rem!important}.mb-xl-7,.my-xl-7{margin-bottom:4.5rem!important}.ml-xl-7,.mx-xl-7{margin-left:4.5rem!important}.m-xl-8{margin:5rem!important}.mt-xl-8,.my-xl-8{margin-top:5rem!important}.mr-xl-8,.mx-xl-8{margin-right:5rem!important}.mb-xl-8,.my-xl-8{margin-bottom:5rem!important}.ml-xl-8,.mx-xl-8{margin-left:5rem!important}.p-xl-0{padding:0!important}.pt-xl-0,.py-xl-0{padding-top:0!important}.pr-xl-0,.px-xl-0{padding-right:0!important}.pb-xl-0,.py-xl-0{padding-bottom:0!important}.pl-xl-0,.px-xl-0{padding-left:0!important}.p-xl-1{padding:.25rem!important}.pt-xl-1,.py-xl-1{padding-top:.25rem!important}.pr-xl-1,.px-xl-1{padding-right:.25rem!important}.pb-xl-1,.py-xl-1{padding-bottom:.25rem!important}.pl-xl-1,.px-xl-1{padding-left:.25rem!important}.p-xl-2{padding:.5rem!important}.pt-xl-2,.py-xl-2{padding-top:.5rem!important}.pr-xl-2,.px-xl-2{padding-right:.5rem!important}.pb-xl-2,.py-xl-2{padding-bottom:.5rem!important}.pl-xl-2,.px-xl-2{padding-left:.5rem!important}.p-xl-3{padding:1rem!important}.pt-xl-3,.py-xl-3{padding-top:1rem!important}.pr-xl-3,.px-xl-3{padding-right:1rem!important}.pb-xl-3,.py-xl-3{padding-bottom:1rem!important}.pl-xl-3,.px-xl-3{padding-left:1rem!important}.p-xl-4{padding:1.5rem!important}.pt-xl-4,.py-xl-4{padding-top:1.5rem!important}.pr-xl-4,.px-xl-4{padding-right:1.5rem!important}.pb-xl-4,.py-xl-4{padding-bottom:1.5rem!important}.pl-xl-4,.px-xl-4{padding-left:1.5rem!important}.p-xl-5{padding:3rem!important}.pt-xl-5,.py-xl-5{padding-top:3rem!important}.pr-xl-5,.px-xl-5{padding-right:3rem!important}.pb-xl-5,.py-xl-5{padding-bottom:3rem!important}.pl-xl-5,.px-xl-5{padding-left:3rem!important}.p-xl-6{padding:3.75rem!important}.pt-xl-6,.py-xl-6{padding-top:3.75rem!important}.pr-xl-6,.px-xl-6{padding-right:3.75rem!important}.pb-xl-6,.py-xl-6{padding-bottom:3.75rem!important}.pl-xl-6,.px-xl-6{padding-left:3.75rem!important}.p-xl-7{padding:4.5rem!important}.pt-xl-7,.py-xl-7{padding-top:4.5rem!important}.pr-xl-7,.px-xl-7{padding-right:4.5rem!important}.pb-xl-7,.py-xl-7{padding-bottom:4.5rem!important}.pl-xl-7,.px-xl-7{padding-left:4.5rem!important}.p-xl-8{padding:5rem!important}.pt-xl-8,.py-xl-8{padding-top:5rem!important}.pr-xl-8,.px-xl-8{padding-right:5rem!important}.pb-xl-8,.py-xl-8{padding-bottom:5rem!important}.pl-xl-8,.px-xl-8{padding-left:5rem!important}.m-xl-n1{margin:-.25rem!important}.mt-xl-n1,.my-xl-n1{margin-top:-.25rem!important}.mr-xl-n1,.mx-xl-n1{margin-right:-.25rem!important}.mb-xl-n1,.my-xl-n1{margin-bottom:-.25rem!important}.ml-xl-n1,.mx-xl-n1{margin-left:-.25rem!important}.m-xl-n2{margin:-.5rem!important}.mt-xl-n2,.my-xl-n2{margin-top:-.5rem!important}.mr-xl-n2,.mx-xl-n2{margin-right:-.5rem!important}.mb-xl-n2,.my-xl-n2{margin-bottom:-.5rem!important}.ml-xl-n2,.mx-xl-n2{margin-left:-.5rem!important}.m-xl-n3{margin:-1rem!important}.mt-xl-n3,.my-xl-n3{margin-top:-1rem!important}.mr-xl-n3,.mx-xl-n3{margin-right:-1rem!important}.mb-xl-n3,.my-xl-n3{margin-bottom:-1rem!important}.ml-xl-n3,.mx-xl-n3{margin-left:-1rem!important}.m-xl-n4{margin:-1.5rem!important}.mt-xl-n4,.my-xl-n4{margin-top:-1.5rem!important}.mr-xl-n4,.mx-xl-n4{margin-right:-1.5rem!important}.mb-xl-n4,.my-xl-n4{margin-bottom:-1.5rem!important}.ml-xl-n4,.mx-xl-n4{margin-left:-1.5rem!important}.m-xl-n5{margin:-3rem!important}.mt-xl-n5,.my-xl-n5{margin-top:-3rem!important}.mr-xl-n5,.mx-xl-n5{margin-right:-3rem!important}.mb-xl-n5,.my-xl-n5{margin-bottom:-3rem!important}.ml-xl-n5,.mx-xl-n5{margin-left:-3rem!important}.m-xl-n6{margin:-3.75rem!important}.mt-xl-n6,.my-xl-n6{margin-top:-3.75rem!important}.mr-xl-n6,.mx-xl-n6{margin-right:-3.75rem!important}.mb-xl-n6,.my-xl-n6{margin-bottom:-3.75rem!important}.ml-xl-n6,.mx-xl-n6{margin-left:-3.75rem!important}.m-xl-n7{margin:-4.5rem!important}.mt-xl-n7,.my-xl-n7{margin-top:-4.5rem!important}.mr-xl-n7,.mx-xl-n7{margin-right:-4.5rem!important}.mb-xl-n7,.my-xl-n7{margin-bottom:-4.5rem!important}.ml-xl-n7,.mx-xl-n7{margin-left:-4.5rem!important}.m-xl-n8{margin:-5rem!important}.mt-xl-n8,.my-xl-n8{margin-top:-5rem!important}.mr-xl-n8,.mx-xl-n8{margin-right:-5rem!important}.mb-xl-n8,.my-xl-n8{margin-bottom:-5rem!important}.ml-xl-n8,.mx-xl-n8{margin-left:-5rem!important}.m-xl-auto{margin:auto!important}.mt-xl-auto,.my-xl-auto{margin-top:auto!important}.mr-xl-auto,.mx-xl-auto{margin-right:auto!important}.mb-xl-auto,.my-xl-auto{margin-bottom:auto!important}.ml-xl-auto,.mx-xl-auto{margin-left:auto!important}}.stretched-link:after{position:absolute;top:0;right:0;bottom:0;left:0;z-index:1;pointer-events:auto;content:"";background-color:transparent}.text-monospace{font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace!important}.text-justify{text-align:justify!important}.text-wrap{white-space:normal!important}.text-nowrap{white-space:nowrap!important}.text-truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.text-left{text-align:left!important}.text-right{text-align:right!important}.text-center{text-align:center!important}@media (min-width:576px){.text-sm-left{text-align:left!important}.text-sm-right{text-align:right!important}.text-sm-center{text-align:center!important}}@media (min-width:768px){.text-md-left{text-align:left!important}.text-md-right{text-align:right!important}.text-md-center{text-align:center!important}}@media (min-width:992px){.text-lg-left{text-align:left!important}.text-lg-right{text-align:right!important}.text-lg-center{text-align:center!important}}@media (min-width:1200px){.text-xl-left{text-align:left!important}.text-xl-right{text-align:right!important}.text-xl-center{text-align:center!important}}.text-lowercase{text-transform:lowercase!important}.text-uppercase{text-transform:uppercase!important}.text-capitalize{text-transform:capitalize!important}.font-weight-light{font-weight:300!important}.font-weight-lighter{font-weight:lighter!important}.font-weight-normal{font-weight:400!important}.font-weight-bold{font-weight:700!important}.font-weight-bolder{font-weight:bolder!important}.font-italic{font-style:italic!important}.text-white{color:#fff!important}.text-primary{color:#007bff!important}a.text-primary:focus,a.text-primary:hover{color:#0056b3!important}.text-secondary{color:#6c757d!important}a.text-secondary:focus,a.text-secondary:hover{color:#494f54!important}.text-success{color:#28a745!important}a.text-success:focus,a.text-success:hover{color:#19692c!important}.text-info{color:#17a2b8!important}a.text-info:focus,a.text-info:hover{color:#0f6674!important}.text-warning{color:#ffc107!important}a.text-warning:focus,a.text-warning:hover{color:#ba8b00!important}.text-danger{color:#dc3545!important}a.text-danger:focus,a.text-danger:hover{color:#a71d2a!important}.text-light{color:#f8f9fa!important}a.text-light:focus,a.text-light:hover{color:#cbd3da!important}.text-dark{color:#343a40!important}a.text-dark:focus,a.text-dark:hover{color:#121416!important}.text-body{color:#212529!important}.text-muted{color:#6c757d!important}.text-black-50{color:rgba(0,0,0,.5)!important}.text-white-50{color:hsla(0,0%,100%,.5)!important}.text-hide{font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0}.text-decoration-none{text-decoration:none!important}.text-break{word-break:break-word!important;word-wrap:break-word!important}.text-reset{color:inherit!important}.visible{visibility:visible!important}.invisible{visibility:hidden!important}.awesomplete>ul{background:#333;padding:0!important}.awesomplete>ul>li{padding:10px 15px;border-bottom:1px solid #707070;color:#efefef;font-size:17px}.awesomplete>ul>li:last-child{border-bottom:0}.awesomplete>ul>li[aria-selected=true]{background-color:#ff6f00}.awesomplete>ul>li:before{content:none!important}img{max-width:100%}body{color:#797f90;font-family:Arial,sans-serif;font-size:18px;line-height:1.5}@media (min-width:768px){body{font-size:18px}}.html__font-loaded--primary body{font-family:Open Sans,Arial,sans-serif}a{color:#ff6f00;text-decoration:underline}.h1,.h2,.h3,.h4,.h5,.h6,h1,h2,h3,h4,h5,h6{font-weight:600;color:#333}.typography-white .h1,.typography-white .h2,.typography-white .h3,.typography-white .h4,.typography-white .h5,.typography-white .h6,.typography-white h1,.typography-white h2,.typography-white h3,.typography-white h4,.typography-white h5,.typography-white h6{color:#fff}.h1.no-margin-top,.h2.no-margin-top,.h3.no-margin-top,.h4.no-margin-top,.h5.no-margin-top,.h6.no-margin-top,.no-margin-top .h1,.no-margin-top .h2,.no-margin-top .h3,.no-margin-top .h4,.no-margin-top .h5,.no-margin-top .h6,.no-margin-top h1,.no-margin-top h2,.no-margin-top h3,.no-margin-top h4,.no-margin-top h5,.no-margin-top h6,h1.no-margin-top,h2.no-margin-top,h3.no-margin-top,h4.no-margin-top,h5.no-margin-top,h6.no-margin-top{margin-top:0!important}.h1,h1{font-size:12vw;line-height:1.2}@media (min-width:410px){.h1,h1{font-size:42px}}@media (min-width:767px){.h1,h1{font-size:50px}}.h2,h2{font-size:36px;line-height:1.1}@media (min-width:768px){.h2,h2{font-size:40px}}.h3,h3{font-size:26px;line-height:1.1}@media (min-width:768px){.h3,h3{font-size:30px}}.h4,h4{font-size:22px}h5{font-size:20px}h6{font-size:18px}.pb-header .navbar{background:#333}@media (max-width:991px){.pb-header .navbar{padding-top:10px;padding-bottom:10px}}.pb-header .navbar-brand>img{display:block;max-width:140px;max-height:25px}.pb-header .dropdown-toggle:after{content:none}.pb-header .nav-item{padding-top:5px;padding-bottom:5px;margin-right:32px}.pb-header .nav-item:last-of-type{margin-right:0}@media (min-width:992px){.pb-header .nav-item{padding-top:34px;padding-bottom:24px}}.pb-header .nav-link{font-size:16px;text-decoration:none}@media (min-width:992px){.pb-header .nav-link[aria-expanded=true]:after{position:absolute;bottom:0;left:50%;height:0;width:0;border-color:transparent transparent #fff;border-style:solid;border-width:0 5.5px 8px;transform:translateX(-50%) translateY(0);z-index:5;content:""}}.pb-header .dropdown-menu{box-shadow:10px 10px 30px rgba(0,0,0,.16);-moz-column-rule:1px solid #dddfe3;column-rule:1px solid #dddfe3;padding:10px 0}@media (min-width:992px){.pb-header .dropdown-menu{padding:24px 0}.pb-header .dropdown-menu--product{-moz-columns:3;column-count:3;left:50%;transform:translateX(-50%)}.pb-header .dropdown-menu--support{-moz-columns:2;column-count:2;left:50%;transform:translateX(-50%)}.pb-header .dropdown-menu--resources{right:0;left:auto}.pb-header .dropdown-menu .dropdown-section{-moz-column-break-inside:avoid;break-inside:avoid-column}}.pb-header .dropdown-item{font-size:15px;text-decoration:none}.pb-header .dropdown-item--heading{font-weight:600;color:#333}.pb-header .dropdown-item--heading:hover{color:#ff6f00}@media (max-width:991px){.sidebar{margin-bottom:20px}}.sidebar a{text-decoration:none}.sidebar .navbar-toggler{color:rgba(0,0,0,.5);border-color:rgba(0,0,0,.1)}.sidebar .navbar-toggler-icon{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='30' height='30'%3E%3Cpath stroke='rgba(0, 0, 0, 0.5)' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3E%3C/svg%3E")}.sidebar .collapse.is-active,.sidebar .list-group-item{display:block}.sidebar .list-group-item--level-0{position:relative;padding:9px 12px 11px 14px;border-top:1px solid #dddfe3;color:#797f90;font-size:20px}.sidebar .list-group-item--level-0:after{position:absolute;top:50%;right:12px;height:8px;width:15px;transform:translateY(-50%);background:url(/assets/images/icons/down-carrot-0.svg) no-repeat 0 0;content:""}.sidebar .list-group-item--level-0:last-of-type{border-bottom:1px solid #dddfe3}.sidebar .list-group-item--level-0>.pb-section-title{display:inline-block;padding-right:20px}.sidebar .list-group-item--level-0.is-active{background-color:#333;color:#fff}.sidebar .list-group-item--level-0.is-active:after{background-image:url(/assets/images/icons/up-carrot-0.svg)}.sidebar .list-group-item--level-0.is-active+.sidebar-submenu+.list-group-item{border-top:0}.sidebar .list-group-item--level-1{padding:8px 14px 9px;background-color:hsla(0,0%,100%,.25);border-bottom:1px solid #dddfe3;color:#797f90;font-size:18px}.sidebar .list-group-item--level-1.is-active{position:relative;color:#ff6f00}.sidebar .list-group-item--level-1.is-active:after{position:absolute;top:50%;right:15px;height:5px;width:10px;transform:translateY(-50%);background-image:url(/assets/images/icons/up-carrot-1.svg);background-repeat:no-repeat;background-position:0 0;content:""}.sidebar .list-group-item--level-1.is-active>.pb-section-subtitle{display:inline-block;padding-right:15px}.sidebar .list-group-item--level-1.is-active+.sidebar-submenu{background-color:hsla(0,0%,100%,.25)}.sidebar .list-group-item--level-1>.menu-collapsed.pb-nav-item.is-active{color:#ff6f00}.sidebar .list-group-item--level-2{padding:11px 14px 4px;background-color:hsla(0,0%,100%,.5);color:#797f90;font-size:15px}.sidebar .list-group-item--level-2:last-child{padding-bottom:11px;border-bottom:1px solid #dddfe3}.sidebar .list-group-item--level-2.is-active{color:#ff6f00}.sidebar .list-group-item--level-2>.pb-nav-item--title{display:block;margin-bottom:-8px;padding-bottom:5px;border-bottom:1px solid #999;color:#333}.pb-footer{padding-top:50px;padding-bottom:30px;background:#fff;font-size:12px;line-height:1.2}.banner--medium .card{background:none;border-color:hsla(0,0%,100%,.8)}.card-media{display:flex;justify-content:center;align-items:center}.card-deck--products .card-media{min-height:96px;margin-top:6px}.card-deck--products .card-title{margin-top:30px}.card-deck--md .card{margin-bottom:10px}@media (min-width:768px){.card-deck--md{display:flex;flex-flow:row wrap;margin-right:-10px;margin-left:-10px}.card-deck--md .card{flex:1 0 0%;margin-right:10px;margin-bottom:0;margin-left:10px}}.card-deck--formats .card{margin-bottom:10px;z-index:2}.card-deck--formats .card-body{display:flex;flex-flow:column-reverse;justify-content:space-around}.card-deck--formats .card-title{font-weight:600;margin-top:24px;margin-bottom:0;font-size:22px;line-height:1.2;color:#1ba9e1;text-decoration:none}.card-deck--formats .card-title:hover{color:#fff;z-index:2}.card-deck--formats .card-title:hover:before{position:absolute;top:0;right:0;bottom:0;left:0;z-index:-1;background-color:#ff6f00;content:""}.card-deck--formats .card-title:hover+.card-media{cursor:pointer;pointer-events:none}.card-deck--formats .card-title:hover+.card-media path{stroke:#fff}.card-deck--formats .card-title:hover+.card-media path[fill="#ff6f00"]{fill:#fff}.card-deck--formats .card-title+.card-media{position:relative;z-index:2}@media (min-width:576px){.card-deck--formats{display:flex;flex-flow:row wrap;justify-content:center;margin-right:-10px;margin-left:-10px}.card-deck--formats .card{flex:1 0 0%;min-width:180px;max-width:200px;margin-right:10px;margin-bottom:20px;margin-left:10px}}.banner--medium .card-deck .card{z-index:2}.banner--medium .card-deck .card-body{display:flex;flex-flow:column;justify-content:space-around}.banner--medium .card-deck .card-title{margin-top:24px;margin-bottom:0}.banner--medium .card-deck .card-title a{color:#fff;font-size:26px;text-decoration:none}.banner--medium .card-deck .card-title a:before{position:absolute;top:0;right:0;bottom:0;left:0;background-color:#ff6f00;opacity:0;z-index:-1;content:""}.banner--medium .card-deck .card-title a:hover:before{opacity:1}.banner{padding-top:4rem;padding-bottom:5.5rem}.banner--medium{background:#7e8c97;color:#fff}.banner--light{background:#fff;padding-bottom:0}.banner--light hr{margin-top:30px;border:0;border-top:1px solid rgba(221,223,227,.49);background:none}.btn-outline-brand{color:#1ba9e1;font-weight:700;padding:18px 32px 15px;border-color:#dddfe3;font-size:18px;text-decoration:none}.btn-outline-brand:hover{color:#fff;background-color:#1ba9e1;border-color:#1ba9e1}.btn-outline-brand.focus,.btn-outline-brand:focus{box-shadow:0 0 0 .2rem rgba(27,169,225,.5)}.btn-outline-brand.disabled,.btn-outline-brand:disabled{color:#1ba9e1;background-color:transparent}.btn-outline-brand:not(:disabled):not(.disabled).active,.btn-outline-brand:not(:disabled):not(.disabled):active,.show>.btn-outline-brand.dropdown-toggle{color:#fff;background-color:#1ba9e1;border-color:#1ba9e1}.btn-outline-brand:not(:disabled):not(.disabled).active:focus,.btn-outline-brand:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-brand.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(27,169,225,.5)}@media (min-width:992px){.btn-outline-brand{padding-right:68px;padding-left:68px}}.pb-lg-img{width:70%;height:70%}.row>.wrapper{display:flex;flex-wrap:wrap;margin-right:-10px;margin-left:-10px}@media (min-width:992px){.pb-docs-container>.row>.col-lg-3.sidebar{flex:0 0 22%;max-width:22%}.pb-docs-container>.row>.col-lg-3.sidebar+.col-lg-9{flex:0 0 78%;max-width:78%}}.pb-docs-container+.pb-footer{margin-top:180px}.pb-content{padding:22px 30px;border:1px solid #dddfe3;background-color:#fff;font-size:19px;line-height:1.5789473684}.pb-content>.pb-content{margin:0;padding:0;border:none}.pb-content h1{margin-bottom:20px;padding-bottom:14px;border-bottom:1px solid #dddfe3;font-size:46.379px}.pb-content h2{margin-top:35px;margin-bottom:16px;font-size:37.107px}.pb-content h3{margin-top:28px;font-size:29.697px}.pb-content h4{margin-top:20px;font-size:23.75px}.pb-content h5{margin-top:16px;font-size:19px;font-style:italic}.pb-content ul{padding-left:20px;list-style:none}.pb-content ul li:not(.ui-tab){position:relative}.pb-content ul li:not(.ui-tab):before{position:absolute;top:10px;left:-20px;height:7px;width:7px;border:1px solid #707070;border-radius:50%;background:#333;content:""}.pb-content table.pbTable,.pb-content table.table{font-size:16px;line-height:1.75}.pb-content table.pbTable th,.pb-content table.table th{padding-top:9px;padding-bottom:9px;font-weight:600}.pb-content table.pbTable td,.pb-content table.pbTable th,.pb-content table.table td,.pb-content table.table th{padding-right:15px;padding-left:15px}.pb-content .highlight,.pb-content .pb-code-hl{margin-top:20px;margin-bottom:20px;padding:20px 22px;border:1px solid #dddfe3;background:#f8f9f9;font-size:16px}.pb-content .highlight pre,.pb-content .pb-code-hl pre{margin-top:0;margin-bottom:0;padding:0;border:0;background:none}.pb-docs-container{margin-top:20px}@media (min-width:992px){.pb-docs-container{margin-top:65px}}.pb-alert{margin-top:10px}.social-media{display:flex;align-items:center}@media (min-width:992px){.social-media{justify-content:flex-end;margin-top:100px}}.social-media a,.social-media h5{margin-right:22px;margin-bottom:0}.social-media h5{font-size:18px}.social-media a:last-child{margin-right:0}table.pbTable,table.table{background:#fff}.pbTable thead td,.pbTable thead th,.table-bordered thead td,.table-bordered thead th{border-bottom-width:1px}.download-form{margin-bottom:20px}.download-form>.row{flex-flow:column}.download-form .adapters{display:flex;flex-flow:row wrap}.download-form__modal,.modal-backdrop.fade{opacity:0}.pb-content .autocomplete-filter{padding:10px 15px;border:1px solid #b3c1cc;background-color:rgba(236,243,245,.35)}.pb-content .autocomplete-filter:focus{outline:none}.pb-content .c-bidder-list-group h4{color:#797f90;font-size:19px;font-weight:700}.pb-content .c-bidder-list{padding-left:0;-moz-columns:2;column-count:2}.pb-content .c-bidder-list li{padding-bottom:5px}.pb-content .c-bidder-list li:before{content:none!important}.pb-content .c-bidder-list a{text-decoration:none}.algolia-autocomplete .algolia-docsearch-suggestion--category-header{display:none!important}.c-search{position:relative}@media (max-width:990px){.c-search{float:left}}.c-search:after{position:absolute;top:50%;right:10px;height:20px;width:20px;transform:translateY(-50%);background:url(/assets/images/icons/search-icon2.svg);background-size:cover;content:""}.c-search input[type=search]{padding-right:8px;padding-left:8px;border:1px solid rgba(0,0,0,.125);max-width:120px;transition:max-width .2s ease-in-out}.c-search input[type=search]:focus,.c-search input[type=search]:hover{max-width:200px;outline:none}.c-search input[type=search]::-ms-clear,.c-search input[type=search]::-ms-reveal{display:none;width:0;height:0}.c-search input[type=search]::-webkit-search-cancel-button,.c-search input[type=search]::-webkit-search-decoration,.c-search input[type=search]::-webkit-search-results-button,.c-search input[type=search]::-webkit-search-results-decoration{display:none}.pb-homepage .h1,.pb-homepage h1{font-size:12vw;margin-bottom:.75rem}@media (min-width:768px){.pb-homepage .h1,.pb-homepage h1{font-size:40px}}.error404{width:100%;height:100%;text-align:center}.error404 h1{color:red;font-size:60px;font-weight:700}
\ No newline at end of file
diff --git a/assets/css/pb_style.scss b/assets/css/main-bundle.scss
similarity index 100%
rename from assets/css/pb_style.scss
rename to assets/css/main-bundle.scss
diff --git a/assets/css/prism.css b/assets/css/prism.css
index 7375d36283..bd6730fb83 100644
--- a/assets/css/prism.css
+++ b/assets/css/prism.css
@@ -1,142 +1,130 @@
-/* PrismJS 1.16.0
-https://prismjs.com/download.html#themes=prism&languages=markup+css+clike+javascript+go */
-/**
- * prism.js default theme for JavaScript, CSS and HTML
- * Based on dabblet (http://dabblet.com)
- * @author Lea Verou
- */
-
+/* PrismJS 1.29.0
+https://prismjs.com/download.html#themes=prism&languages=markup+css+clike+javascript+bash+diff+go+graphql+http+java+markup-templating+nginx+php+properties+scala+swift+typescript+yaml&plugins=diff-highlight */
code[class*="language-"],
pre[class*="language-"] {
- color: black;
- background: none;
- text-shadow: 0 1px white;
- font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace;
- font-size: 1em;
- text-align: left;
- white-space: pre;
- word-spacing: normal;
- word-break: normal;
- word-wrap: normal;
- line-height: 1.5;
-
- -moz-tab-size: 4;
- -o-tab-size: 4;
- tab-size: 4;
-
- -webkit-hyphens: none;
- -moz-hyphens: none;
- -ms-hyphens: none;
- hyphens: none;
-}
-
-pre[class*="language-"]::-moz-selection, pre[class*="language-"] ::-moz-selection,
-code[class*="language-"]::-moz-selection, code[class*="language-"] ::-moz-selection {
- text-shadow: none;
- background: #b3d4fc;
-}
-
-pre[class*="language-"]::selection, pre[class*="language-"] ::selection,
-code[class*="language-"]::selection, code[class*="language-"] ::selection {
- text-shadow: none;
- background: #b3d4fc;
-}
-
+ color: #000;
+ background: 0 0;
+ text-shadow: 0 1px #fff;
+ font-family: Consolas, Monaco, "Andale Mono", "Ubuntu Mono", monospace;
+ font-size: 1em;
+ text-align: left;
+ white-space: pre;
+ word-spacing: normal;
+ word-break: normal;
+ word-wrap: normal;
+ line-height: 1.5;
+ -moz-tab-size: 4;
+ -o-tab-size: 4;
+ tab-size: 4;
+ -webkit-hyphens: none;
+ -moz-hyphens: none;
+ -ms-hyphens: none;
+ hyphens: none;
+}
+code[class*="language-"] ::-moz-selection,
+code[class*="language-"]::-moz-selection,
+pre[class*="language-"] ::-moz-selection,
+pre[class*="language-"]::-moz-selection {
+ text-shadow: none;
+ background: #b3d4fc;
+}
+code[class*="language-"] ::selection,
+code[class*="language-"]::selection,
+pre[class*="language-"] ::selection,
+pre[class*="language-"]::selection {
+ text-shadow: none;
+ background: #b3d4fc;
+}
@media print {
- code[class*="language-"],
- pre[class*="language-"] {
- text-shadow: none;
- }
+ code[class*="language-"],
+ pre[class*="language-"] {
+ text-shadow: none;
+ }
}
-
-/* Code blocks */
pre[class*="language-"] {
- padding: 1em;
- margin: .5em 0;
- overflow: auto;
+ padding: 1em;
+ margin: 0.5em 0;
+ overflow: auto;
}
-
:not(pre) > code[class*="language-"],
pre[class*="language-"] {
- background: #f5f2f0;
+ background: #f5f2f0;
}
-
-/* Inline code */
:not(pre) > code[class*="language-"] {
- padding: .1em;
- border-radius: .3em;
- white-space: normal;
+ padding: 0.1em;
+ border-radius: 0.3em;
+ white-space: normal;
}
-
+.token.cdata,
.token.comment,
-.token.prolog,
.token.doctype,
-.token.cdata {
- color: slategray;
+.token.prolog {
+ color: #708090;
}
-
.token.punctuation {
- color: #999;
+ color: #999;
}
-
-.namespace {
- opacity: .7;
+.token.namespace {
+ opacity: 0.7;
}
-
-.token.property,
-.token.tag,
.token.boolean,
-.token.number,
.token.constant,
+.token.deleted,
+.token.number,
+.token.property,
.token.symbol,
-.token.deleted {
- color: #905;
+.token.tag {
+ color: #905;
}
-
-.token.selector,
.token.attr-name,
-.token.string,
-.token.char,
.token.builtin,
-.token.inserted {
- color: #690;
+.token.char,
+.token.inserted,
+.token.selector,
+.token.string {
+ color: #690;
}
-
-.token.operator,
-.token.entity,
-.token.url,
.language-css .token.string,
-.style .token.string {
- color: #9a6e3a;
- background: hsla(0, 0%, 100%, .5);
+.style .token.string,
+.token.entity,
+.token.operator,
+.token.url {
+ color: #9a6e3a;
+ background: hsla(0, 0%, 100%, 0.5);
}
-
.token.atrule,
.token.attr-value,
.token.keyword {
- color: #07a;
+ color: #07a;
}
-
-.token.function,
-.token.class-name {
- color: #DD4A68;
+.token.class-name,
+.token.function {
+ color: #dd4a68;
}
-
-.token.regex,
.token.important,
+.token.regex,
.token.variable {
- color: #e90;
+ color: #e90;
}
-
-.token.important,
-.token.bold {
- font-weight: bold;
+.token.bold,
+.token.important {
+ font-weight: 700;
}
.token.italic {
- font-style: italic;
+ font-style: italic;
}
-
.token.entity {
- cursor: help;
+ cursor: help;
+}
+pre.diff-highlight > code .token.deleted:not(.prefix),
+pre > code.diff-highlight .token.deleted:not(.prefix) {
+ background-color: rgba(255, 0, 0, 0.1);
+ color: inherit;
+ display: block;
+}
+pre.diff-highlight > code .token.inserted:not(.prefix),
+pre > code.diff-highlight .token.inserted:not(.prefix) {
+ background-color: rgba(0, 255, 128, 0.1);
+ color: inherit;
+ display: block;
}
-
diff --git a/assets/css/style.css b/assets/css/style.css
index 0af6a31a4c..7f63345730 100644
--- a/assets/css/style.css
+++ b/assets/css/style.css
@@ -37,12 +37,12 @@ h4 {
/* Paragraph & Typographic */
p {
- line-height: 28px;
- margin-bottom: 25px;
- font-family: 'Lato', sans-serif;
- color: #222222;
- font-size: 18px;
- font-weight: 400;}
+ line-height: 28px;
+ margin-bottom: 25px;
+ font-family: 'Lato', sans-serif;
+ color: #222222;
+ font-size: 18px;
+ font-weight: 400;}
.centered {
text-align: center;
@@ -130,228 +130,228 @@ hr {
}
.wrapper {
- display: flex;
- width: 100%;
- align-items: stretch;
+ display: flex;
+ width: 100%;
+ align-items: stretch;
}
/* alerts */
.pb-alert {
- padding:10px;
- width:65wv;
- margin: 10px 0;
+ padding:10px;
+ width:65wv;
+ margin: 10px 0;
}
.pb-alert-note {
- background-color: #deecf7;
- color: #4b6f8d;
- border: 1px solid #4b6f8d;
+ background-color: #deecf7;
+ color: #4b6f8d;
+ border: 1px solid #4b6f8d;
}
.pb-alert-warning {
- background-color: #f3ddde;
- color: #a94443;
- border: 1px solid #a94443;
+ background-color: #f3ddde;
+ color: #a94443;
+ border: 1px solid #a94443;
}
.pb-alert-important {
- background-color: #ede5ba;
- color: #85720f;
- border: 1px solid #85720f;
+ background-color: #ede5ba;
+ color: #85720f;
+ border: 1px solid #85720f;
}
.pb-alert-tip {
- background-color: #e3efd8;
- color: #527542;
- border: 1px solid #527542;
+ background-color: #e3efd8;
+ color: #527542;
+ border: 1px solid #527542;
}
/**********************
- API
+ API
*********************/
.pb-api-on {
- display: block;
+ display: block;
}
.pb-api-off {
- display: none;
+ display: none;
}
.pb-api-list ul {
- list-style-type: none;
- margin: 0;
- padding: 0;
- overflow: hidden;
+ list-style-type: none;
+ margin: 0;
+ padding: 0;
+ overflow: hidden;
}
.pb-api-list-item li {
- border-bottom: 1px solid #cccccc;
- border-bottom-width: 75%;
- background-color:transparent;
- margin-bottom: 10px;
+ border-bottom: 1px solid #cccccc;
+ border-bottom-width: 75%;
+ background-color:transparent;
+ margin-bottom: 10px;
}
.pb-api-list-item-sans-border li {
- background-color:transparent;
- margin-bottom: 10px;
+ background-color:transparent;
+ margin-bottom: 10px;
}
.pb-api-categories {
- margin-top:15px;
+ margin-top:15px;
}
.pb-api-categories li {
- float: left;
- margin-right: 15px;
- background-color: #eeeeee;
+ float: left;
+ margin-right: 15px;
+ background-color: #eeeeee;
}
.pb-api-categories a {
- color: #333333;
- font-family: 'Verdana', sans-serif;
- font-size: 17px;
- font-weight: 400;
- padding: 4px 10px;
+ color: #333333;
+ font-family: 'Verdana', sans-serif;
+ font-size: 17px;
+ font-weight: 400;
+ padding: 4px 10px;
}
.pb-api-categories a:hover {
- color: #3498db;
+ color: #3498db;
}
.pb-api-search {
- float:right;
- margin-right: 30px;
+ float:right;
+ margin-right: 30px;
}
.pb-api-title {
- color: #EA9622;
- font-family: 'Verdana', sans-serif;
- font-size: 22px;
- font-weight: 400;
- margin-bottom: 10px;
- margin-top: 15px;
+ color: #EA9622;
+ font-family: 'Verdana', sans-serif;
+ font-size: 22px;
+ font-weight: 400;
+ margin-bottom: 10px;
+ margin-top: 15px;
}
.pb-api-code {
- margin: 20px 0 20px 20px;
+ margin: 20px 0 20px 20px;
}
.pb-api-code-wrapper {
- margin-left: 20px;
+ margin-left: 20px;
}
.pb-api-code-display {
- margin: 20px 0 0 20px;
- width: 70%;
+ margin: 20px 0 0 20px;
+ width: 70%;
}
.pb-api-code-block {
- width: 70%;
- backgeound-color: #333333;
+ width: 70%;
+ backgeound-color: #333333;
}
.pb-api-block {
- margin: 20px 0 20px 20px;
+ margin: 20px 0 20px 20px;
}
.pb-api-doc-title {
- color: #EA9622;
- font-family: 'Verdana', sans-serif;
- font-size: 20px;
- font-weight: 400;
- margin-bottom: 10px;
+ color: #EA9622;
+ font-family: 'Verdana', sans-serif;
+ font-size: 20px;
+ font-weight: 400;
+ margin-bottom: 10px;
}
.pb-api-doc-description {
- color: #222222;
- font-size: 16px;
- font-family: 'Roboto', sans-serif;
- font-weight: 300;
- margin-bottom:10px;
+ color: #222222;
+ font-size: 16px;
+ font-family: 'Roboto', sans-serif;
+ font-weight: 300;
+ margin-bottom:10px;
}
.pb-api-doc-description ul, ol {
- font-size: 15px;
+ font-size: 15px;
}
.pb-api-code-title-bar {
- background-color: #E4E8ED;
- text-align: left;
- border-top-left-radius: 5px;
- border-top-right-radius: 5px;
- padding-left: 5px;
- margin-left: 20px;
- margin-top: 10px;
+ background-color: #E4E8ED;
+ text-align: left;
+ border-top-left-radius: 5px;
+ border-top-right-radius: 5px;
+ padding-left: 5px;
+ margin-left: 20px;
+ margin-top: 10px;
}
.pb-api-doc-sub-title {
- color: #EA9622;
- font-family: 'Verdana', sans-serif;
- font-size: 17px;
- font-weight: 400;
- margin: 15px 0;
+ color: #EA9622;
+ font-family: 'Verdana', sans-serif;
+ font-size: 17px;
+ font-weight: 400;
+ margin: 15px 0;
}
.pb-api-doc-section-title {
- font-size: 17px;
- font-weight: 400;
- color: #333333;
- margin:15px 0;
+ font-size: 17px;
+ font-weight: 400;
+ color: #333333;
+ margin:15px 0;
}
.pb-api-list-item-description {
- margin-top 5px;
- font-size:17px;
+ margin-top 5px;
+ font-size:17px;
}
.pb-api-table {
- margin-top: 20px;
- width:70%;
+ margin-top: 20px;
+ width:70%;
}
.pb-api-table-title {
- color: #333333;
- font-family: 'Verdana', sans-serif;
- font-size: 17px;
- font-weight: 400;
- text-align: center;
- background-color: #aaaaaa;
- border-top-left-radius: 5px;
- border-top-right-radius: 5px;
+ color: #333333;
+ font-family: 'Verdana', sans-serif;
+ font-size: 17px;
+ font-weight: 400;
+ text-align: center;
+ background-color: #aaaaaa;
+ border-top-left-radius: 5px;
+ border-top-right-radius: 5px;
}
.pb-api-table-text {
- color: #222222;
- font-size: 16px;
- font-family: 'Roboto', sans-serif;
- font-weight: 300;
+ color: #222222;
+ font-size: 16px;
+ font-family: 'Roboto', sans-serif;
+ font-weight: 300;
}
.pb-api-spacing {
- margin-top: 25px;
+ margin-top: 25px;
}
.pb-api-alert {
- font-size:15px;
+ font-size:15px;
}
.pb-api-button {
- width: 120px;
- height: 30px;
- background-color: #cccccc;
- border: 1px solid #333333;
- color: #33333;
- font-size: 15px;
- font-family: 'Roboto', sans-serif;
- font-weight: 400;
+ width: 120px;
+ height: 30px;
+ background-color: #cccccc;
+ border: 1px solid #333333;
+ color: #33333;
+ font-size: 15px;
+ font-family: 'Roboto', sans-serif;
+ font-weight: 400;
}
@@ -393,17 +393,17 @@ hr {
/* API */
.categoryBox {
- background-color: #f3ddde;
- color: #a94443;
- border: 1px solid #a94443;
+ background-color: #f3ddde;
+ color: #a94443;
+ border: 1px solid #a94443;
}
/* NavBar */
.navbar {
- z-index:100
- font-family: 'Roboto', sans-serif;
+ z-index:100
+ font-family: 'Roboto', sans-serif;
}
.navbar-default {
@@ -428,63 +428,63 @@ hr {
}
.navbar-brand img {
- max-width: 200px;
- max-height: 35px;
+ max-width: 200px;
+ max-height: 35px;
}
.navbar-brand{
- float:left;
- height:50px;
- padding:10px 15px;
- font-size:18px;
- line-height:20px
+ float:left;
+ height:50px;
+ padding:10px 15px;
+ font-size:18px;
+ line-height:20px
}
.pb-mobile-nav {
- display: none;
+ display: none;
}
.pb-mobile-dropdown-header {
- font-size: 13px;
- font-weight: 500;
- color: #3498db;
+ font-size: 13px;
+ font-weight: 500;
+ color: #3498db;
}
.pb-mobile-dropdown-item {
- font-size: 13px;
- font-weight: 400;
+ font-size: 13px;
+ font-weight: 400;
}
.navbar-default .navbar-nav > li > a.pb-mobile-dropdown {
- font-size:13px;
- margin:0;
- padding-left:5px;
- padding-top:2px;
- padding-bottom:2px;
+ font-size:13px;
+ margin:0;
+ padding-left:5px;
+ padding-top:2px;
+ padding-bottom:2px;
}
.pb_menu_btn {
- display: none;
- float:left;
- margin-right: 5px;
- margin-top: 10px;
+ display: none;
+ float:left;
+ margin-right: 5px;
+ margin-top: 10px;
}
.pb-video-list-title {
- margin-top: 15px;
- font-weight: 700;
+ margin-top: 15px;
+ font-weight: 700;
}
.pb-video-list {
- margin-top: 5px;
- padding-top: 0;
- list-style-type:none;
- font-weight:400;
+ margin-top: 5px;
+ padding-top: 0;
+ list-style-type:none;
+ font-weight:400;
}
.pb-video-link {
- font-weight: 400;
+ font-weight: 400;
}
/* DropDown*/
@@ -495,11 +495,11 @@ hr {
}
.dropdown-toggle {
- font-weight: 400;
+ font-weight: 400;
}
.dropdown-menu>li>a {
- font-weight: 400;
+ font-weight: 400;
}
.dropdown-submenu {
@@ -534,23 +534,23 @@ hr {
/* 404 error */
.error404 {
- width:100%;
- height: 100%;
- text-align: center;
- margin-top: 100px;
+ width:100%;
+ height: 100%;
+ text-align: center;
+ margin-top: 100px;
}
.error404 h1 {
- color: #FF0000;
- font-size: 60px;
- font-weight: bold;
+ color: #FF0000;
+ font-size: 60px;
+ font-weight: bold;
}
/**************
- Sidebar
+ Sidebar
**************/
/* side bar */
@@ -570,62 +570,62 @@ hr {
.sidebar {
- min-width: 300px;
- background-color: #f6f8fa;
- padding-left: 50px;
- padding-top: 20px;
- padding-bottom: 10px;
- padding-right:30px;
- margin-left: 0px;
- font-family: 'Verdana', sans-serif;
+ min-width: 300px;
+ background-color: #f6f8fa;
+ padding-left: 50px;
+ padding-top: 20px;
+ padding-bottom: 10px;
+ padding-right:30px;
+ margin-left: 0px;
+ font-family: 'Verdana', sans-serif;
}
.sidebar ul {
- color: #333333;
+ color: #333333;
}
.pb-section-title {
- display: inline-block;
- font-size:17px;
- padding-bottom: 10px;
- margin-top:5px;
- margin-bottom: 5px;
- color: #3498db;
+ display: inline-block;
+ font-size:17px;
+ padding-bottom: 10px;
+ margin-top:5px;
+ margin-bottom: 5px;
+ color: #3498db;
}
.pb-section-subtitle {
- font-size:16px;
- padding-bottom: 10px;
- margin-top:5px;
- margin-bottom: 5px;
+ font-size:16px;
+ padding-bottom: 10px;
+ margin-top:5px;
+ margin-bottom: 5px;
}
.pb-nav-item {
- display:inline-block;
- font-size:14px;
- padding-left: 5px;
+ display:inline-block;
+ font-size:14px;
+ padding-left: 5px;
}
.pb-first-item {
- padding-top: 10px;
+ padding-top: 10px;
}
.pb-last-item {
- padding-bottom: 10px;
+ padding-bottom: 10px;
}
.list-group-item-header {
- font-weight: 400;
- font-size: 20px;
+ font-weight: 400;
+ font-size: 20px;
}
.list-group-item {
- font-weight: 400;
- margin:0;
- padding: 3px 0 3px 5px;
- border-width:0;
- font-size: 16px;
- background-color: transparent;
+ font-weight: 400;
+ margin:0;
+ padding: 3px 0 3px 5px;
+ border-width:0;
+ font-size: 16px;
+ background-color: transparent;
}
@@ -650,65 +650,65 @@ pre {
/************* Home Page ************/
.pb-homepage {
- position: relative;
- margin-top:70px;
- width:100%;
- height: 90%;
+ position: relative;
+ margin-top:70px;
+ width:100%;
+ height: 90%;
}
.pb-homepage-container {
- text-align: center;
+ text-align: center;
}
.pb-message-box {
- display: inline-block;
- width: 70%;
- border: 1px solid gray;
- border-radius: 50px;
- font-family: 'Roboto', sans-serif;
- font-size: 16px;
- padding: 4px;
+ display: inline-block;
+ width: 70%;
+ border: 1px solid gray;
+ border-radius: 50px;
+ font-family: 'Roboto', sans-serif;
+ font-size: 16px;
+ padding: 4px;
}
.pb-message-box a:link {
- color: #dd9e21;
+ color: #dd9e21;
}
.pb-message-box a:hover {
- color: #855a09;
+ color: #855a09;
}
.pb-message-box a:visited {
- color: #1689db;
+ color: #1689db;
}
.pb-align-left {
- text-align: start;
+ text-align: start;
}
.pb-align-right {
- text-align: right;
+ text-align: right;
}
.pb-margin-top {
- margin-top:20px;
+ margin-top:20px;
}
.pb-outline {
- border: 1px dashed purple;
+ border: 1px dashed purple;
}
.pb-rule {
- padding-top: 10px;
+ padding-top: 10px;
}
.pb-link-title {
- font-family: 'Roboto', sans-serif;
- font-weight: 700;
- padding-top: 5px;
- padding-bottom: 10px;
- border-bottom-left-radius: 20px;
- border-bottom-right-radius: 20px;
+ font-family: 'Roboto', sans-serif;
+ font-weight: 700;
+ padding-top: 5px;
+ padding-bottom: 10px;
+ border-bottom-left-radius: 20px;
+ border-bottom-right-radius: 20px;
}
@@ -717,295 +717,295 @@ pre {
/**********Container****************/
.pb-container {
- width:75%;
- margin-left:auto;
- margin-right:auto;
+ width:75%;
+ margin-left:auto;
+ margin-right:auto;
}
.pb-outer {
- width:100%;
- padding-top:25%;
- position:relative
+ width:100%;
+ padding-top:25%;
+ position:relative
}
.pb-inner {
- position: absolute;
- top: 0;
- left: 0;
- right: 0;
- bottom: 0;
+ position: absolute;
+ top: 0;
+ left: 0;
+ right: 0;
+ bottom: 0;
}
/*************Hover Effect***************/
.pb-home-links {
- width: 75%;
- font-family: 'Verdana', sans-serif;
- margin-left:auto;
- margin-right:auto;
+ width: 75%;
+ font-family: 'Verdana', sans-serif;
+ margin-left:auto;
+ margin-right:auto;
}
.pb-home-links-panel {
- float:left;
- margin-left:auto;
- margin-right: auto;
- width: 33%;
- height: 100%;
- text-align: center;
+ float:left;
+ margin-left:auto;
+ margin-right: auto;
+ width: 33%;
+ height: 100%;
+ text-align: center;
}
.pb-home-links-panel img {
- display: inline-block;
- width: 60%;
- height: 60%;
+ display: inline-block;
+ width: 60%;
+ height: 60%;
}
.pb-home-links-outer-panel {
- float:left;
- margin-top:40px;
- margin-left:auto;
- margin-right: auto;
- width: 33%;
- height: 100%;
- text-align: center;
+ float:left;
+ margin-top:40px;
+ margin-left:auto;
+ margin-right: auto;
+ width: 33%;
+ height: 100%;
+ text-align: center;
}
.pb-home-links-outer-panel img {
- display: inline-block;
- width: 50%;
- height: 50%;
+ display: inline-block;
+ width: 50%;
+ height: 50%;
}
.pb-home-links-panel p {
- margin-top:0px;
+ margin-top:0px;
}
.pb-panel-title {
- display: block;
- font-size:35px;
- color: #ffffff;
- margin-top: 30px;
+ display: block;
+ font-size:35px;
+ color: #ffffff;
+ margin-top: 30px;
}
.pb-center-title {
- font-size:35px;
- color: #ffffff;
- margin-top: 20px;
+ font-size:35px;
+ color: #ffffff;
+ margin-top: 20px;
}
.pb-home-link-container:hover .pb-home-link-visible {
- display: none;
+ display: none;
}
.pb-home-link-container:hover .pb-home-link-hidden {
- display: block;
+ display: block;
}
.pb-home-link-hidden {
- display:none;
+ display:none;
}
.pb-lg-homelink {
- width: 40%;
- height: 40%;
+ width: 40%;
+ height: 40%;
}
.pb-md-honelink {
- width:30%;
- height:3 0%;
+ width:30%;
+ height:3 0%;
}
/**********Message****************/
.pb-message-container {
- margin-top: 140px;
- width:75%;
- margin-left:auto;
- margin-right:auto;
- text-align: center;
+ margin-top: 140px;
+ width:75%;
+ margin-left:auto;
+ margin-right:auto;
+ text-align: center;
}
.pb-message {
- display: inline-block;
- margin-left: auto;
- margin-right: auto;
- width: 100%;
- background-color: white;
- opacity: .8;
- text-align: center;
- padding: 5px;
+ display: inline-block;
+ margin-left: auto;
+ margin-right: auto;
+ width: 100%;
+ background-color: white;
+ opacity: .8;
+ text-align: center;
+ padding: 5px;
}
.pb--empty-message {
- display: inline-block;
- margin-left: auto;
- margin-right: auto;
- width: 100%;
- opacity: .8;
- text-align: center;
- padding: 5px;
+ display: inline-block;
+ margin-left: auto;
+ margin-right: auto;
+ width: 100%;
+ opacity: .8;
+ text-align: center;
+ padding: 5px;
}
.pb-message > h3 {
- color: #333333;
- font-size:1.7vw;
- font-family: 'Roboto', sans-serif;
- margin-right: auto;
- margin-left: auto;
+ color: #333333;
+ font-size:1.7vw;
+ font-family: 'Roboto', sans-serif;
+ margin-right: auto;
+ margin-left: auto;
}
/*===========Benefits===================*/
.pb_benefits {
- background-color: #ffffff;
- width: 80%;
- padding-bottom: 40px;
- margin-top:260px;
- margin-left: auto;
- margin-right: auto;
- opacity:.80;
- overflow:hidden;
+ background-color: #ffffff;
+ width: 80%;
+ padding-bottom: 40px;
+ margin-top:260px;
+ margin-left: auto;
+ margin-right: auto;
+ opacity:.80;
+ overflow:hidden;
}
.pb-benefits-title {
- text-align: center;
- padding-top:5px;
- padding-bottom:5px;
+ text-align: center;
+ padding-top:5px;
+ padding-bottom:5px;
}
.pb-benefits-title > h2 {
- font-family: 'Roboto', sans-serif;
- color: #47547c;
- font-size:3.5vw;
- font-weight: 400;
+ font-family: 'Roboto', sans-serif;
+ color: #47547c;
+ font-size:3.5vw;
+ font-weight: 400;
}
.pb-benefits-container {
- width: 100%;
- height: 100%;
+ width: 100%;
+ height: 100%;
}
.pb-benefits-row {
- display: inline-block;
- width:100%;
- height: 42%;
+ display: inline-block;
+ width:100%;
+ height: 42%;
}
.pb-benefits-panel {
- width:100%;
- height:100%;
- margin-top:100px;
+ width:100%;
+ height:100%;
+ margin-top:100px;
}
.pb-benefits-panel-left {
- float:left;
- width:50%;
+ float:left;
+ width:50%;
}
.pb-benefits-panel-right {
- float:right;
- width:50%;
- padding-right: 5%;
+ float:right;
+ width:50%;
+ padding-right: 5%;
}
.pb-benefits-panel-img {
- float: left;
- height: 100%;
- width:30%;
- text-align:right;
- padding-right:10px;
+ float: left;
+ height: 100%;
+ width:30%;
+ text-align:right;
+ padding-right:10px;
}
.pb-benefits-panel-img > img {
- max-width:60%;
- max-height:60%;
+ max-width:60%;
+ max-height:60%;
}
.pb-benefits-panel-content {
- float:right;
- height: 100%;
- width:70%;
+ float:right;
+ height: 100%;
+ width:70%;
}
.pb-benefits-panel-content-title {
- font-family: 'Roboto', sans-serif;
- color: #47547c;
- font-size:2.5vw;
- font-weight: 400;
+ font-family: 'Roboto', sans-serif;
+ color: #47547c;
+ font-size:2.5vw;
+ font-weight: 400;
}
.pb-benefits-panel-content-text {
- font-family: 'Lato', sans-serif;
- color: #47547c;
- font-size:1.7vw;
- font-weight: 400;
+ font-family: 'Lato', sans-serif;
+ color: #47547c;
+ font-size:1.7vw;
+ font-weight: 400;
}
/************ Carousel ****************/
.pb_home_belowfold_carousel {
- border-top-left-radius: 12px;
- border-top-right-radius: 12px;
- padding-top: 20px;
- text-align:center;
+ border-top-left-radius: 12px;
+ border-top-right-radius: 12px;
+ padding-top: 20px;
+ text-align:center;
}
.pb_carousel_title {
- margin-top:100px;
- margin-bottom:50px;
- margin-left:auto;
- margin-right:auto;
- padding-bottom: 10px;
- color: #ffffff;
- font-family: 'Roboto', sans-serif;
- font-size: 4vw;
- font-weight: 700;
+ margin-top:100px;
+ margin-bottom:50px;
+ margin-left:auto;
+ margin-right:auto;
+ padding-bottom: 10px;
+ color: #ffffff;
+ font-family: 'Roboto', sans-serif;
+ font-size: 4vw;
+ font-weight: 700;
}
.carousel-item > h3 {
- font-family: 'Roboto', sans-serif;
- font-size: 2.4vw;
- padding-top: 5px;
- padding-bottom:3px;
- border-top-left-radius: 12px;
- border-top-right-radius: 12px;
- background-color: #47547c;
- color: #ffffff;
- margin:0;
+ font-family: 'Roboto', sans-serif;
+ font-size: 2.4vw;
+ padding-top: 5px;
+ padding-bottom:3px;
+ border-top-left-radius: 12px;
+ border-top-right-radius: 12px;
+ background-color: #47547c;
+ color: #ffffff;
+ margin:0;
}
.carousel-item > h4 {
- font-family: 'Lato', sans-serif;
- font-size: 1.7vw;
- color: #47547c;
- padding-left: 10px;
- padding-right: 10px;
+ font-family: 'Lato', sans-serif;
+ font-size: 1.7vw;
+ color: #47547c;
+ padding-left: 10px;
+ padding-right: 10px;
}
.slide {
- background-color: #ffffff;
- width: 70%;
- height:250px;
- margin-left: auto;
- margin-right: auto;
- border-top-left-radius: 12px;
- border-top-right-radius: 12px;
+ background-color: #ffffff;
+ width: 70%;
+ height:250px;
+ margin-left: auto;
+ margin-right: auto;
+ border-top-left-radius: 12px;
+ border-top-right-radius: 12px;
}
.item {
- text-align: center;
+ text-align: center;
}
.pb_carousel_indicators {
- margin-top: 150px;
+ margin-top: 150px;
}
@@ -1106,58 +1106,58 @@ pre {
/************ Partners ****************/
.partners {
- text-align: center;
+ text-align: center;
}
.partners div.title {
- width:100%;
- padding-top: 30px;
+ width:100%;
+ padding-top: 30px;
}
.partners div.tableTitle {
- width:100%;
- padding-top: 30px;
- padding-bottom: 30px;
+ width:100%;
+ padding-top: 30px;
+ padding-bottom: 30px;
}
.partners h3 {
- margin:0;
- padding: 0;
- font-size:large;
+ margin:0;
+ padding: 0;
+ font-size:large;
}
.partners img.founders {
- width: 100px;
+ width: 100px;
}
.partners img.standard {
- width: 125px;
+ width: 125px;
}
.pb_tbl_title h3 {
- padding-bottom: 20px;
+ padding-bottom: 20px;
}
.pb_standard_tbl td {
- padding-left: 10px;
- padding-right: 10px;
+ padding-left: 10px;
+ padding-right: 10px;
}
.partners ul {
- list-style-type: none;
+ list-style-type: none;
display: table;
- width: 100%;
+ width: 100%;
}
.partners li {
- display: table-cell;
- text-align: center;
+ display: table-cell;
+ text-align: center;
}
.partners a[href^="http://"]:after,
@@ -1166,7 +1166,7 @@ pre {
}
.pb-sm-img {
- width: 50%;
+ width: 50%;
height: 50%;
}
@@ -1177,7 +1177,7 @@ pre {
}
.pb-lg-img {
- width: 70%;
+ width: 70%;
height: 70%;
}
@@ -1186,105 +1186,105 @@ pre {
}
/****************************
- Blog
+ Blog
***************************/
.pb-blog {
- margin-left:50px;
- font-family: 'Verdana', sans-serif;
- font-size: 34px;
- font-weight: 400;
+ margin-left:50px;
+ font-family: 'Verdana', sans-serif;
+ font-size: 34px;
+ font-weight: 400;
}
.pb-blog h1 {
- display: table;
- padding: 3px 8px;
- font-family: 'Verdana', sans-serif;
- color: #ffffff;
- font-size: 34px;
- font-weight: 400;
+ display: table;
+ padding: 3px 8px;
+ font-family: 'Verdana', sans-serif;
+ color: #ffffff;
+ font-size: 34px;
+ font-weight: 400;
}
/********************************
- Content Pages
+ Content Pages
*********************************/
.bs-docs-container {
- margin-top: 70px;
- margin-left:0;
+ margin-top: 70px;
+ margin-left:0;
}
.col-sm-9 {
- padding-top: 20px;
- margin:0;
+ padding-top: 20px;
+ margin:0;
}
.pb-content {
- padding: 20px;
- margin-left: 20px;
+ padding: 20px;
+ margin-left: 20px;
}
.pb-blog p {
- font-family: 'Lato', sans-serif;
- color: #222222;
- font-size: 16px;
- font-weight: 400;
+ font-family: 'Lato', sans-serif;
+ color: #222222;
+ font-size: 16px;
+ font-weight: 400;
}
.pb-content h1 {
- /*background-color: #EA9622;*/
- display: table;
- padding: 3px 0px;
- font-family: 'Verdana', sans-serif;
- color: #EA9622;
- font-size: 34px;
- font-weight: 400;
- width:75wv;
+ /*background-color: #EA9622;*/
+ display: table;
+ padding: 3px 0px;
+ font-family: 'Verdana', sans-serif;
+ color: #EA9622;
+ font-size: 34px;
+ font-weight: 400;
+ width:75wv;
}
.pb-content, .pb-blog h2 {
- font-family: 'Verdana', sans-serif;
- color: #000000;
- font-size: 27px;
- font-weight: 400;
+ font-family: 'Verdana', sans-serif;
+ color: #000000;
+ font-size: 27px;
+ font-weight: 400;
}
.pb-content, .pb-blog h3 {
- font-family: 'Verdana', sans-serif;
- color: #333333;
- font-size: 24px;
- font-weight: 400;
+ font-family: 'Verdana', sans-serif;
+ color: #333333;
+ font-size: 24px;
+ font-weight: 400;
}
.pb-content, .pb-blog h4 {
- font-family: 'Verdana', sans-serif;
- color: #333333;
- font-size: 20px;
- font-weight: 400;
+ font-family: 'Verdana', sans-serif;
+ color: #333333;
+ font-size: 20px;
+ font-weight: 400;
}
.pb-content, .pb-blog h5 {
- font-family: 'Verdana', sans-serif;
- color: #333333;
- font-size: 18px;
- font-weight: 400;
+ font-family: 'Verdana', sans-serif;
+ color: #333333;
+ font-size: 18px;
+ font-weight: 400;
}
.pb-content, .pb-blog ul, ol, li {
- font-family: 'Lato', sans-serif;
- font-size: 18px;
+ font-family: 'Lato', sans-serif;
+ font-size: 18px;
}
.pb-img, ,pb-blog {
@@ -1297,633 +1297,633 @@ pre {
/*************
- Footer
+ Footer
******************/
.pb_footer {
- display: block;
- width: 75%;
- font-family: 'Dosis', sans-serif;
- font-weight: 400;
- font-size:21px;
- padding-top: 30px 0;
- margin-left: auto;
- margin-right: auto;
- text-align: center;
+ display: block;
+ width: 75%;
+ font-family: 'Dosis', sans-serif;
+ font-weight: 400;
+ font-size:21px;
+ padding-top: 30px 0;
+ margin-left: auto;
+ margin-right: auto;
+ text-align: center;
}
/************ Was This Helpful Form ****************/
.wthHeader {
- background-color: #EA9622;
- border-top-left-radius: 5px;
- border-top-right-radius: 5px;
- height: 10px;
- width: 100%;
- margin-bottom: 15px;
+ background-color: #EA9622;
+ border-top-left-radius: 5px;
+ border-top-right-radius: 5px;
+ height: 10px;
+ width: 100%;
+ margin-bottom: 15px;
}
.wthBordered {
- border: 1px solid #cccccc;
- border-top-left-radius: 5px;
- border-top-right-radius: 5px;
- margin-top: 10px;
- padding-left: 7px;
+ border: 1px solid #cccccc;
+ border-top-left-radius: 5px;
+ border-top-right-radius: 5px;
+ margin-top: 10px;
+ padding-left: 7px;
}
.wthForm {
- padding-left: 15px;
+ padding-left: 15px;
}
.wthForm.input {
- margin-top: 5px;
- margin-bottom: 5px;
+ margin-top: 5px;
+ margin-bottom: 5px;
}
.wthSubmit {
- margin-top: 5px;
- margin-bottom: 5px;
+ margin-top: 5px;
+ margin-bottom: 5px;
}
.wthLabel {
- font-family: 'Lato', sans-serif;
- font-weight: 400;
- font-size:18px;
- color: #EA9622;
- margin-top: 5px;
- margin-bottom: 5px;
+ font-family: 'Lato', sans-serif;
+ font-weight: 400;
+ font-size:18px;
+ color: #EA9622;
+ margin-top: 5px;
+ margin-bottom: 5px;
}
.wthTitle {
- font-family: 'Lato', sans-serif;
- font-weight: 700;
- font-size:24px;
- color: #3498db;
+ font-family: 'Lato', sans-serif;
+ font-weight: 700;
+ font-size:24px;
+ color: #3498db;
}
/*
- Responsive
- There are 3 trigger levels, 1024, 768 and 480
+ Responsive
+ There are 3 trigger levels, 1024, 768 and 480
*/
/*small browsers*/
@media screen and (max-width: 1300px) {
- .pb-top-text h1 {
- font-size:60px;
- }
+ .pb-top-text h1 {
+ font-size:60px;
+ }
- .pb-top-text h2 {
- font-size:30px;
- }
+ .pb-top-text h2 {
+ font-size:30px;
+ }
- .pb-panel-title {
- font-size:33px;
- }
+ .pb-panel-title {
+ font-size:33px;
+ }
- .slide {
- height: 140px;
- }
+ .slide {
+ height: 140px;
+ }
- }
+ }
- /*iPad Pro*/
- @media screen and (max-width: 1024px) {
+ /*iPad Pro*/
+ @media screen and (max-width: 1024px) {
- .pb-message-container {
- margin-top: 100px;
- }
+ .pb-message-container {
+ margin-top: 100px;
+ }
- .pb_benefits {
- margin-top: 50px;
- }
+ .pb_benefits {
+ margin-top: 50px;
+ }
- .pb-benefits-panel {
- margin-top:0px;
+ .pb-benefits-panel {
+ margin-top:0px;
- .carousel-inner h3 {
- font-size: 30px;
- }
+ .carousel-inner h3 {
+ font-size: 30px;
+ }
- .carousel-inner h4 {
- padding-top: 20px;
- font-size: 24px;
- }
+ .carousel-inner h4 {
+ padding-top: 20px;
+ font-size: 24px;
+ }
- .pb_carousel_indicators {
- margin-top: 100px;
- }
+ .pb_carousel_indicators {
+ margin-top: 100px;
+ }
- .bs-docs-section {
- line-height: 1.6;
- font-size: large;
- margin-right: 10em;
- }
+ .bs-docs-section {
+ line-height: 1.6;
+ font-size: large;
+ margin-right: 10em;
+ }
- .slide {
- height: 160px;
- }
+ .slide {
+ height: 160px;
+ }
- .container {
- width: 88%;
- }
+ .container {
+ width: 88%;
+ }
- }
+ }
- /*iPad */
- @media screen and (max-width: 768px) {
+ /*iPad */
+ @media screen and (max-width: 768px) {
- .pb-top-text h1 {
- font-size:40px;
- }
+ .pb-top-text h1 {
+ font-size:40px;
+ }
- .pb-top-text h2 {
- font-size:20px;
- }
+ .pb-top-text h2 {
+ font-size:20px;
+ }
- .pb-panel-title {
- font-size:30px;
- }
+ .pb-panel-title {
+ font-size:30px;
+ }
- .pb_benefits {
- margin-top: 50px;
- }
+ .pb_benefits {
+ margin-top: 50px;
+ }
- .pb_carousel_title {
- margin-top:50px;
- margin-bottom:10px;
- }
+ .pb_carousel_title {
+ margin-top:50px;
+ margin-bottom:10px;
+ }
- .slide {
- height: 110px;
- }
+ .slide {
+ height: 110px;
+ }
- .pb_carousel_indicators {
- margin-top: 150px;
- }
+ .pb_carousel_indicators {
+ margin-top: 150px;
+ }
- }
+ }
- /*iPhone Plus */
- @media screen and (max-width: 414px) {
+ /*iPhone Plus */
+ @media screen and (max-width: 414px) {
- /* hide side nav on phone devices*/
- #sidebar {
- display: none;
- }
+ /* hide side nav on phone devices*/
+ #sidebar {
+ display: none;
+ }
- .pb-top-text h1 {
- font-size:20px;
- }
+ .pb-top-text h1 {
+ font-size:20px;
+ }
- .pb-top-text h2 {
- font-size:12px;
- }
+ .pb-top-text h2 {
+ font-size:12px;
+ }
- .pb-home-links-panel {
- margin-top: -10px;
- }
+ .pb-home-links-panel {
+ margin-top: -10px;
+ }
- .pb-outer-title {
- margin-top: 5px;
- }
+ .pb-outer-title {
+ margin-top: 5px;
+ }
- .pb-home-links {
- margin-top:-10px;
- }
+ .pb-home-links {
+ margin-top:-10px;
+ }
- .pb-home-links-outer-panel {
- margin-top:20px;
- }
+ .pb-home-links-outer-panel {
+ margin-top:20px;
+ }
- .pb-panel-title {
- font-size:14px;
- }
+ .pb-panel-title {
+ font-size:14px;
+ }
- .pb-message-container {
- margin-top: 50px;
- }
+ .pb-message-container {
+ margin-top: 50px;
+ }
- .pb_benefits {
- margin-top: 20px;
- }
+ .pb_benefits {
+ margin-top: 20px;
+ }
- .pb_carousel_title {
- margin-top:-10px;
- margin-bottom:20px;
- }
+ .pb_carousel_title {
+ margin-top:-10px;
+ margin-bottom:20px;
+ }
- .slide {
- height: 70px;
- }
+ .slide {
+ height: 70px;
+ }
- .pb-main-nav {
- display:none;
- }
+ .pb-main-nav {
+ display:none;
+ }
- .pb-mobile-nav {
- display: block;
- }
+ .pb-mobile-nav {
+ display: block;
+ }
- .pb_carousel_indicators {
- margin-top: 10px;
- height: 10px;
- }
+ .pb_carousel_indicators {
+ margin-top: 10px;
+ height: 10px;
+ }
- .pb-content {
- width: 85%;
- margin-left: -20px;
- }
+ .pb-content {
+ width: 85%;
+ margin-left: -20px;
+ }
- .pb-content p {
- font-size: 15px;
- font-weight: 400;
- line-height: inherit;
- width: 85%;
- }
+ .pb-content p {
+ font-size: 15px;
+ font-weight: 400;
+ line-height: inherit;
+ width: 85%;
+ }
- }
+ }
- /* iPhone X*/
- @media screen and (max-width: 375px) {
+ /* iPhone X*/
+ @media screen and (max-width: 375px) {
- .pb-top-text h1 {
- font-size:22px;
- }
+ .pb-top-text h1 {
+ font-size:22px;
+ }
- .pb-top-text h2 {
- font-size:11px;
- margin-top: 0px;
- }
+ .pb-top-text h2 {
+ font-size:11px;
+ margin-top: 0px;
+ }
- .pb-panel-title {
- font-size:12px;
- }
+ .pb-panel-title {
+ font-size:12px;
+ }
- .pb-home-links-panel {
- margin-top: -15px;
- }
+ .pb-home-links-panel {
+ margin-top: -15px;
+ }
- .pb_benefits {
- margin-top: 40px;
- }
+ .pb_benefits {
+ margin-top: 40px;
+ }
- .pb_home_belowfold_carousel {
- padding-top: 60px;
- }
+ .pb_home_belowfold_carousel {
+ padding-top: 60px;
+ }
- .pb_carousel_title {
- margin-top:-20px;
- margin-bottom:0px;
- }
+ .pb_carousel_title {
+ margin-top:-20px;
+ margin-bottom:0px;
+ }
- .slide {
- height: 80px;
- }
+ .slide {
+ height: 80px;
+ }
- .pb_carousel_indicators {
- margin-top: 0px;
- height: 22px;
- }
+ .pb_carousel_indicators {
+ margin-top: 0px;
+ height: 22px;
+ }
- .carousel-indicators {
- padding-top: 140px;
- }
+ .carousel-indicators {
+ padding-top: 140px;
+ }
- }
+ }
- /* iPhone 6, 7, 8 Galaxy S5 (different width) */
- @media screen and (max-width: 360px) {
+ /* iPhone 6, 7, 8 Galaxy S5 (different width) */
+ @media screen and (max-width: 360px) {
- .pb-top-text h1 {
- font-size:18px;
- }
+ .pb-top-text h1 {
+ font-size:18px;
+ }
- .pb-top-text > h2 {
- font-size:9px;
- margin-top: 0px;
- }
+ .pb-top-text > h2 {
+ font-size:9px;
+ margin-top: 0px;
+ }
- .pb-home-links-outer-panel {
- margin-top:10px;
- }
+ .pb-home-links-outer-panel {
+ margin-top:10px;
+ }
- .pb_benefits {
- margin-top: 70px;
- }
+ .pb_benefits {
+ margin-top: 70px;
+ }
- }
+ }
- /*iPhone 5*/
- @media screen and (max-width: 320px) {
+ /*iPhone 5*/
+ @media screen and (max-width: 320px) {
- .pb-home-links-outer-panel {
- margin-top:3px;
- }
+ .pb-home-links-outer-panel {
+ margin-top:3px;
+ }
- .pb_benefits {
- margin-top: 50px;
- }
+ .pb_benefits {
+ margin-top: 50px;
+ }
- }
+ }
@media screen and (max-width: 768px) {
- .col-sm-9 {
- padding-top: 10px;
- }
+ .col-sm-9 {
+ padding-top: 10px;
+ }
- .pb-content {
+ .pb-content {
- font-size: 15px;
- font-weight: 400;
- width: 85%;
- margin-left: 0px;
-
- }
-
- .pb-content p {
- font-size: 15px;
- font-weight: 400;
- line-height: inherit;
- width: 85%;
- }
-
- .pb-content li {
- font-size: 15px;
- font-weight: 400;
- }
-
- .pb-content h1 {
- font-size: 24px;
- }
-
- .pb-content h2 {
- font-size: 20px;
- }
-
- .pb-content h3 {
- font-size: 18px;
- }
-
- .pb_footer {
- display: block;
- font-size:15px;
- }
-
- /*Previous @media*/
-
- #pb-home-demo {
- margin-top: 30px;
- }
-
- #pb-home-demo .col-sm-7 .lead {
- margin-left: 0;
- padding-left: 0;
- }
-
- .pb-sm-left {
- text-align: left;
- }
-
- .pb-sm-center {
- text-align: center;
- }
-
- .pb-sm-right {
- text-align: right;
- }
-
- .pb-img {
- -webkit-box-shadow: 2px 2px 8px -2px rgba(0,0,0,0.35);
- -moz-box-shadow: 2px 2px 8px -2px rgba(0,0,0,0.35);
- box-shadow: 2px 2px 8px -2px rgba(0,0,0,0.35);
- margin-top: 10px;
- margin-bottom: 10px;
- }
-
-
- .blog-related-posts {
- color: #aaa;
- margin-top: 40px;
- }
-
- .bs-callout code {
- background-color: transparent;
- }
-
- .bs-docs-footer {
- margin-top: 60px;
- }
-
-
- .nav.nav-tabs {
- margin-bottom: 15px;
- font-weight: bold;
- }
-
- .bs-callout {
- padding-top: 0px;
- padding-bottom: 10px;
- }
-
- #chart_div {
- height: 400px;
- }
-
- .docs-sidebar {
- margin-top: 20px;
- padding: 20px;
- padding-top: 10px;
- padding-bottom: 10px;
- border-radius: 2px;
- }
-
- .docs-sidebar .nav>li>a{
- padding: 0px;
- padding-bottom: 10px;
- color: #555;
- }
-
- .docs-sidebar .nav>li>a:hover{
- color: #337ab7;
- background: transparent;
- }
-
- .docs-sidebar .nav>li>a.selected {
- color: #337ab7;
- }
-
- .docs-sidebar h5 {
- font-weight: 700;
- font-size: 13px;
- margin-top: 15px;
- }
-
- .bs-docs-nav {
- border-bottom: solid 1px #AAA;
- }
-
- .bg-info {
- padding: 10px;
- border-radius: 5px;
- }
-
- .bg-warning {
- padding: 10px;
- border-radius: 5px;
- margin-bottom: 5px;
- }
-
- .bg-danger {
- padding: 10px;
- border-radius: 5px;
- }
-
- table.jsfiddle-line-number {
- width: 100%;
- border: 0;
- }
-
- table.jsfiddle-line-number .line-number {
- padding-top: 61px;
- vertical-align: text-top;
- line-height: 21px;
- width: 17px;
- color: #aaa;
- font-size: 13px;
- text-align: right;
- }
-
- .blog-date {
- margin-top: 45px;
- text-align: right;
- width: 80%;
- font-size: 20px;
- color: #aaa;
- }
-
- #example-tab {
- padding-left:10px;
- }
-
- #example-tab li {
- margin-bottom: 6px;
- }
-
- table:not(.jsfiddle-line-number) {
- table-layout: fixed;
- word-wrap: break-word;
- }
-
- div.pl-doc-entry{
- position: absolute;
- }
-
- .prebid-mobile-notice {
- margin-top: 2em;
- }
-
- .pb-lg-img {
- width: 85%;
- height: 85%;
- }
-
- .pb-xlg-img {
+ font-size: 15px;
+ font-weight: 400;
+ width: 85%;
+ margin-left: 0px;
+
+ }
+
+ .pb-content p {
+ font-size: 15px;
+ font-weight: 400;
+ line-height: inherit;
+ width: 85%;
+ }
+
+ .pb-content li {
+ font-size: 15px;
+ font-weight: 400;
+ }
+
+ .pb-content h1 {
+ font-size: 24px;
+ }
+
+ .pb-content h2 {
+ font-size: 20px;
+ }
+
+ .pb-content h3 {
+ font-size: 18px;
+ }
+
+ .pb_footer {
+ display: block;
+ font-size:15px;
+ }
+
+ /*Previous @media*/
+
+ #pb-home-demo {
+ margin-top: 30px;
+ }
+
+ #pb-home-demo .col-sm-7 .lead {
+ margin-left: 0;
+ padding-left: 0;
+ }
+
+ .pb-sm-left {
+ text-align: left;
+ }
+
+ .pb-sm-center {
+ text-align: center;
+ }
+
+ .pb-sm-right {
+ text-align: right;
+ }
+
+ .pb-img {
+ -webkit-box-shadow: 2px 2px 8px -2px rgba(0,0,0,0.35);
+ -moz-box-shadow: 2px 2px 8px -2px rgba(0,0,0,0.35);
+ box-shadow: 2px 2px 8px -2px rgba(0,0,0,0.35);
+ margin-top: 10px;
+ margin-bottom: 10px;
+ }
+
+
+ .blog-related-posts {
+ color: #aaa;
+ margin-top: 40px;
+ }
+
+ .bs-callout code {
+ background-color: transparent;
+ }
+
+ .bs-docs-footer {
+ margin-top: 60px;
+ }
+
+
+ .nav.nav-tabs {
+ margin-bottom: 15px;
+ font-weight: bold;
+ }
+
+ .bs-callout {
+ padding-top: 0px;
+ padding-bottom: 10px;
+ }
+
+ #chart_div {
+ height: 400px;
+ }
+
+ .docs-sidebar {
+ margin-top: 20px;
+ padding: 20px;
+ padding-top: 10px;
+ padding-bottom: 10px;
+ border-radius: 2px;
+ }
+
+ .docs-sidebar .nav>li>a{
+ padding: 0px;
+ padding-bottom: 10px;
+ color: #555;
+ }
+
+ .docs-sidebar .nav>li>a:hover{
+ color: #337ab7;
+ background: transparent;
+ }
+
+ .docs-sidebar .nav>li>a.selected {
+ color: #337ab7;
+ }
+
+ .docs-sidebar h5 {
+ font-weight: 700;
+ font-size: 13px;
+ margin-top: 15px;
+ }
+
+ .bs-docs-nav {
+ border-bottom: solid 1px #AAA;
+ }
+
+ .bg-info {
+ padding: 10px;
+ border-radius: 5px;
+ }
+
+ .bg-warning {
+ padding: 10px;
+ border-radius: 5px;
+ margin-bottom: 5px;
+ }
+
+ .bg-danger {
+ padding: 10px;
+ border-radius: 5px;
+ }
+
+ table.jsfiddle-line-number {
+ width: 100%;
+ border: 0;
+ }
+
+ table.jsfiddle-line-number .line-number {
+ padding-top: 61px;
+ vertical-align: text-top;
+ line-height: 21px;
+ width: 17px;
+ color: #aaa;
+ font-size: 13px;
+ text-align: right;
+ }
+
+ .blog-date {
+ margin-top: 45px;
+ text-align: right;
+ width: 80%;
+ font-size: 20px;
+ color: #aaa;
+ }
+
+ #example-tab {
+ padding-left:10px;
+ }
+
+ #example-tab li {
+ margin-bottom: 6px;
+ }
+
+ table:not(.jsfiddle-line-number) {
+ table-layout: fixed;
+ word-wrap: break-word;
+ }
+
+ div.pl-doc-entry{
+ position: absolute;
+ }
+
+ .prebid-mobile-notice {
+ margin-top: 2em;
+ }
+
+ .pb-lg-img {
+ width: 85%;
+ height: 85%;
+ }
+
+ .pb-xlg-img {
width: 100%;
}
- .pb-md-img {
- width: 60%;
- height: 60%;
- }
+ .pb-md-img {
+ width: 60%;
+ height: 60%;
+ }
- #pb-home-demo {
- margin-top: 30px;
- }
+ #pb-home-demo {
+ margin-top: 30px;
+ }
- #pb-home-demo .col-sm-7 .lead {
- margin-left: 0;
- padding-left: 0;
- }
+ #pb-home-demo .col-sm-7 .lead {
+ margin-left: 0;
+ padding-left: 0;
+ }
- .pb-sm-left {
- text-align: left;
- }
+ .pb-sm-left {
+ text-align: left;
+ }
- .pb-sm-center {
- text-align: center;
- }
+ .pb-sm-center {
+ text-align: center;
+ }
- .pb-sm-right {
- text-align: right;
- }
+ .pb-sm-right {
+ text-align: right;
+ }
}
@media screen and (max-width: 414px) {
- #wrapper {
- padding-left: 0;
- -webkit-transition: all 0.5s ease;
- -moz-transition: all 0.5s ease;
- -o-transition: all 0.5s ease;
- transition: all 0.5s ease;
- }
-
- #wrapper.toggled {
- padding-left: 250px;
- }
-
- #sidebar-wrapper {
- z-index: 1000;
- position: fixed;
- left: 250px;
- width: 0;
- height: 100%;
- margin-left: -250px;
- overflow-y: auto;
- background: #f6f8fa;
- -webkit-transition: all 0.5s ease;
- -moz-transition: all 0.5s ease;
- -o-transition: all 0.5s ease;
- transition: all 0.5s ease;
- }
-
- #wrapper.toggled #sidebar-wrapper {
- width: 250px;
- }
-
- .pb-lg-img {
- width: 65%;
- height: 65%;
- }
-
- .pb-xlg-img {
+ #wrapper {
+ padding-left: 0;
+ -webkit-transition: all 0.5s ease;
+ -moz-transition: all 0.5s ease;
+ -o-transition: all 0.5s ease;
+ transition: all 0.5s ease;
+ }
+
+ #wrapper.toggled {
+ padding-left: 250px;
+ }
+
+ #sidebar-wrapper {
+ z-index: 1000;
+ position: fixed;
+ left: 250px;
+ width: 0;
+ height: 100%;
+ margin-left: -250px;
+ overflow-y: auto;
+ background: #f6f8fa;
+ -webkit-transition: all 0.5s ease;
+ -moz-transition: all 0.5s ease;
+ -o-transition: all 0.5s ease;
+ transition: all 0.5s ease;
+ }
+
+ #wrapper.toggled #sidebar-wrapper {
+ width: 250px;
+ }
+
+ .pb-lg-img {
+ width: 65%;
+ height: 65%;
+ }
+
+ .pb-xlg-img {
width: 100%;
}
- .pb-md-img {
- width: 45%;
- height: 45%;
- }
+ .pb-md-img {
+ width: 45%;
+ height: 45%;
+ }
- .pb_footer {
- display: block;
- font-size:10px;
- }
+ .pb_footer {
+ display: block;
+ font-size:10px;
+ }
}
@@ -2113,21 +2113,21 @@ div.pl-doc-entry{
}
/*******************
- API
+ API
.categoryBox {
- display:block;
- float: left;
- margin-right:10px;
- line-height:40px;
- height: 40px;
- padding-left: 15px;
- padding-right: 15px;
- background-color:#f6f8fa;
- text-align:center;
+ display:block;
+ float: left;
+ margin-right:10px;
+ line-height:40px;
+ height: 40px;
+ padding-left: 15px;
+ padding-right: 15px;
+ background-color:#f6f8fa;
+ text-align:center;
}
diff --git a/assets/images/ad-ops/dfp-native/add-targeting.png b/assets/images/ad-ops/dfp-native/add-targeting.png
deleted file mode 100644
index 0ffaa4f1a6..0000000000
Binary files a/assets/images/ad-ops/dfp-native/add-targeting.png and /dev/null differ
diff --git a/assets/images/ad-ops/dfp-native/create_prebid_native.png b/assets/images/ad-ops/dfp-native/create_prebid_native.png
deleted file mode 100644
index 665cad8a5f..0000000000
Binary files a/assets/images/ad-ops/dfp-native/create_prebid_native.png and /dev/null differ
diff --git a/assets/images/ad-ops/dfp-native/creative-click-through-url.png b/assets/images/ad-ops/dfp-native/creative-click-through-url.png
deleted file mode 100644
index 762b3c573f..0000000000
Binary files a/assets/images/ad-ops/dfp-native/creative-click-through-url.png and /dev/null differ
diff --git a/assets/images/ad-ops/dfp-native/gam-creative-type.png b/assets/images/ad-ops/dfp-native/gam-creative-type.png
deleted file mode 100644
index bd35cf0c0d..0000000000
Binary files a/assets/images/ad-ops/dfp-native/gam-creative-type.png and /dev/null differ
diff --git a/assets/images/ad-ops/dfp-native/gam-line-item.png b/assets/images/ad-ops/dfp-native/gam-line-item.png
deleted file mode 100644
index 43689e2e85..0000000000
Binary files a/assets/images/ad-ops/dfp-native/gam-line-item.png and /dev/null differ
diff --git a/assets/images/ad-ops/dfp-native/gam-native-format.png b/assets/images/ad-ops/dfp-native/gam-native-format.png
deleted file mode 100644
index 03981dcfd6..0000000000
Binary files a/assets/images/ad-ops/dfp-native/gam-native-format.png and /dev/null differ
diff --git a/assets/images/ad-ops/dfp-native/gam-new-creative.png b/assets/images/ad-ops/dfp-native/gam-new-creative.png
deleted file mode 100644
index 14d1561e81..0000000000
Binary files a/assets/images/ad-ops/dfp-native/gam-new-creative.png and /dev/null differ
diff --git a/assets/images/ad-ops/dfp-native/native-ad-unit.png b/assets/images/ad-ops/dfp-native/native-ad-unit.png
deleted file mode 100644
index b54604b596..0000000000
Binary files a/assets/images/ad-ops/dfp-native/native-ad-unit.png and /dev/null differ
diff --git a/assets/images/ad-ops/dfp-native/native-content-ad.png b/assets/images/ad-ops/dfp-native/native-content-ad.png
deleted file mode 100644
index d114ec7fba..0000000000
Binary files a/assets/images/ad-ops/dfp-native/native-content-ad.png and /dev/null differ
diff --git a/assets/images/ad-ops/dfp-native/new-creative.png b/assets/images/ad-ops/dfp-native/new-creative.png
deleted file mode 100644
index 8d6b5ffd68..0000000000
Binary files a/assets/images/ad-ops/dfp-native/new-creative.png and /dev/null differ
diff --git a/assets/images/ad-ops/dfp-native/new-line-item.png b/assets/images/ad-ops/dfp-native/new-line-item.png
deleted file mode 100644
index c899105603..0000000000
Binary files a/assets/images/ad-ops/dfp-native/new-line-item.png and /dev/null differ
diff --git a/assets/images/ad-ops/dfp-native/new-order-and-line-item.png b/assets/images/ad-ops/dfp-native/new-order-and-line-item.png
deleted file mode 100644
index 1c735fb793..0000000000
Binary files a/assets/images/ad-ops/dfp-native/new-order-and-line-item.png and /dev/null differ
diff --git a/assets/images/ad-ops/dfp-native/prebid_native_html_option.png b/assets/images/ad-ops/dfp-native/prebid_native_html_option.png
deleted file mode 100644
index d2444ccfe8..0000000000
Binary files a/assets/images/ad-ops/dfp-native/prebid_native_html_option.png and /dev/null differ
diff --git a/assets/images/ad-ops/dfp-native/prebid_native_settings.png b/assets/images/ad-ops/dfp-native/prebid_native_settings.png
deleted file mode 100644
index 5662f2d914..0000000000
Binary files a/assets/images/ad-ops/dfp-native/prebid_native_settings.png and /dev/null differ
diff --git a/assets/images/ad-ops/dfp-native/prebid_native_styling.png b/assets/images/ad-ops/dfp-native/prebid_native_styling.png
deleted file mode 100644
index fae3240690..0000000000
Binary files a/assets/images/ad-ops/dfp-native/prebid_native_styling.png and /dev/null differ
diff --git a/assets/images/ad-ops/dfp-native/select-native-ad-format.png b/assets/images/ad-ops/dfp-native/select-native-ad-format.png
deleted file mode 100644
index 5901af0399..0000000000
Binary files a/assets/images/ad-ops/dfp-native/select-native-ad-format.png and /dev/null differ
diff --git a/assets/images/ad-ops/dfp-native/select-the-appropriate-native-format.png b/assets/images/ad-ops/dfp-native/select-the-appropriate-native-format.png
deleted file mode 100644
index 9893105092..0000000000
Binary files a/assets/images/ad-ops/dfp-native/select-the-appropriate-native-format.png and /dev/null differ
diff --git a/assets/images/ad-ops/gam-hbt-sbs/hbt-bidders.png b/assets/images/ad-ops/gam-hbt-sbs/hbt-bidders.png
new file mode 100644
index 0000000000..c435d774cf
Binary files /dev/null and b/assets/images/ad-ops/gam-hbt-sbs/hbt-bidders.png differ
diff --git a/assets/images/ad-ops/gam-hbt-sbs/hbt-run-prebid.png b/assets/images/ad-ops/gam-hbt-sbs/hbt-run-prebid.png
new file mode 100644
index 0000000000..11b29a7cac
Binary files /dev/null and b/assets/images/ad-ops/gam-hbt-sbs/hbt-run-prebid.png differ
diff --git a/assets/images/ad-ops/gam-hbt-sbs/hbt-setup-finished.png b/assets/images/ad-ops/gam-hbt-sbs/hbt-setup-finished.png
new file mode 100644
index 0000000000..aa0e9a5c42
Binary files /dev/null and b/assets/images/ad-ops/gam-hbt-sbs/hbt-setup-finished.png differ
diff --git a/assets/images/ad-ops/gam-hbt-sbs/hbt-start.png b/assets/images/ad-ops/gam-hbt-sbs/hbt-start.png
new file mode 100644
index 0000000000..f29bae8705
Binary files /dev/null and b/assets/images/ad-ops/gam-hbt-sbs/hbt-start.png differ
diff --git a/assets/images/ad-ops/dfp-creative-setup/appnexus_vast_tag.png b/assets/images/ad-ops/gam-sbs/appnexus_vast_tag.png
similarity index 100%
rename from assets/images/ad-ops/dfp-creative-setup/appnexus_vast_tag.png
rename to assets/images/ad-ops/gam-sbs/appnexus_vast_tag.png
diff --git a/assets/images/ad-ops/gam-sbs/associated-creatives.png b/assets/images/ad-ops/gam-sbs/associated-creatives.png
new file mode 100644
index 0000000000..89e8a124ea
Binary files /dev/null and b/assets/images/ad-ops/gam-sbs/associated-creatives.png differ
diff --git a/assets/images/ad-ops/gam-sbs/banner-creative-settings.png b/assets/images/ad-ops/gam-sbs/banner-creative-settings.png
new file mode 100644
index 0000000000..4d49b93492
Binary files /dev/null and b/assets/images/ad-ops/gam-sbs/banner-creative-settings.png differ
diff --git a/assets/images/ad-ops/gam-sbs/creative-filter.png b/assets/images/ad-ops/gam-sbs/creative-filter.png
new file mode 100644
index 0000000000..3c15ef75ff
Binary files /dev/null and b/assets/images/ad-ops/gam-sbs/creative-filter.png differ
diff --git a/assets/images/ad-ops/gam-sbs/custom-targeting-format.png b/assets/images/ad-ops/gam-sbs/custom-targeting-format.png
new file mode 100644
index 0000000000..2cc81af54e
Binary files /dev/null and b/assets/images/ad-ops/gam-sbs/custom-targeting-format.png differ
diff --git a/assets/images/ad-ops/gam-sbs/custom-targeting-pb.png b/assets/images/ad-ops/gam-sbs/custom-targeting-pb.png
new file mode 100644
index 0000000000..2d1b207129
Binary files /dev/null and b/assets/images/ad-ops/gam-sbs/custom-targeting-pb.png differ
diff --git a/assets/images/ad-ops/gam-sbs/delivery-settings.png b/assets/images/ad-ops/gam-sbs/delivery-settings.png
new file mode 100644
index 0000000000..577995a987
Binary files /dev/null and b/assets/images/ad-ops/gam-sbs/delivery-settings.png differ
diff --git a/assets/images/ad-ops/gam-sbs/duplicate-creatives.png b/assets/images/ad-ops/gam-sbs/duplicate-creatives.png
new file mode 100644
index 0000000000..0f013d0120
Binary files /dev/null and b/assets/images/ad-ops/gam-sbs/duplicate-creatives.png differ
diff --git a/assets/images/ad-ops/gam-sbs/gam-hierarchy.png b/assets/images/ad-ops/gam-sbs/gam-hierarchy.png
new file mode 100644
index 0000000000..b46b7305e3
Binary files /dev/null and b/assets/images/ad-ops/gam-sbs/gam-hierarchy.png differ
diff --git a/assets/images/ad-ops/gam-sbs/gam-native-format.png b/assets/images/ad-ops/gam-sbs/gam-native-format.png
new file mode 100644
index 0000000000..8ea4c21c59
Binary files /dev/null and b/assets/images/ad-ops/gam-sbs/gam-native-format.png differ
diff --git a/assets/images/ad-ops/dfp-native/gam-native-template.png b/assets/images/ad-ops/gam-sbs/gam-native-template.png
similarity index 100%
rename from assets/images/ad-ops/dfp-native/gam-native-template.png
rename to assets/images/ad-ops/gam-sbs/gam-native-template.png
diff --git a/assets/images/ad-ops/dfp-native/gam-new-creative-part2.png b/assets/images/ad-ops/gam-sbs/gam-new-creative-part2.png
similarity index 100%
rename from assets/images/ad-ops/dfp-native/gam-new-creative-part2.png
rename to assets/images/ad-ops/gam-sbs/gam-new-creative-part2.png
diff --git a/assets/images/ad-ops/gam-sbs/line-item-settings.png b/assets/images/ad-ops/gam-sbs/line-item-settings.png
new file mode 100644
index 0000000000..2f20a948b0
Binary files /dev/null and b/assets/images/ad-ops/gam-sbs/line-item-settings.png differ
diff --git a/assets/images/ad-ops/gam-sbs/native-format.png b/assets/images/ad-ops/gam-sbs/native-format.png
new file mode 100644
index 0000000000..822bed01b7
Binary files /dev/null and b/assets/images/ad-ops/gam-sbs/native-format.png differ
diff --git a/assets/images/ad-ops/gam-sbs/select-creative.png b/assets/images/ad-ops/gam-sbs/select-creative.png
new file mode 100644
index 0000000000..f3156e368b
Binary files /dev/null and b/assets/images/ad-ops/gam-sbs/select-creative.png differ
diff --git a/assets/images/ad-ops/mopub/full/mopub-lineitem-full-adunit.png b/assets/images/ad-ops/mopub/full/mopub-lineitem-full-adunit.png
deleted file mode 100644
index 45485964f3..0000000000
Binary files a/assets/images/ad-ops/mopub/full/mopub-lineitem-full-adunit.png and /dev/null differ
diff --git a/assets/images/ad-ops/mopub/full/mopub_lineitem_full_vasttag.png b/assets/images/ad-ops/mopub/full/mopub_lineitem_full_vasttag.png
deleted file mode 100644
index ec952a815c..0000000000
Binary files a/assets/images/ad-ops/mopub/full/mopub_lineitem_full_vasttag.png and /dev/null differ
diff --git a/assets/images/ad-ops/mopub/rewarded/mopub-lineitem-advanced.png b/assets/images/ad-ops/mopub/rewarded/mopub-lineitem-advanced.png
deleted file mode 100644
index 423d9e4eac..0000000000
Binary files a/assets/images/ad-ops/mopub/rewarded/mopub-lineitem-advanced.png and /dev/null differ
diff --git a/assets/images/ad-ops/mopub/rewarded/mopub-lineitem-rewarded copy.png b/assets/images/ad-ops/mopub/rewarded/mopub-lineitem-rewarded copy.png
deleted file mode 100644
index 5bf220d953..0000000000
Binary files a/assets/images/ad-ops/mopub/rewarded/mopub-lineitem-rewarded copy.png and /dev/null differ
diff --git a/assets/images/ad-ops/mopub/rewarded/mopub-lineitem-rewarded.png b/assets/images/ad-ops/mopub/rewarded/mopub-lineitem-rewarded.png
deleted file mode 100644
index dafdbd7081..0000000000
Binary files a/assets/images/ad-ops/mopub/rewarded/mopub-lineitem-rewarded.png and /dev/null differ
diff --git a/assets/images/ad-ops/mopub/rewarded/mopub_lineitem_vasttag.png b/assets/images/ad-ops/mopub/rewarded/mopub_lineitem_vasttag.png
deleted file mode 100644
index cda6243ce5..0000000000
Binary files a/assets/images/ad-ops/mopub/rewarded/mopub_lineitem_vasttag.png and /dev/null differ
diff --git a/assets/images/ad-ops/mopub/rewarded/mopub_lineitem_vasttag2.png b/assets/images/ad-ops/mopub/rewarded/mopub_lineitem_vasttag2.png
deleted file mode 100644
index b5eadf1500..0000000000
Binary files a/assets/images/ad-ops/mopub/rewarded/mopub_lineitem_vasttag2.png and /dev/null differ
diff --git a/assets/images/ad-ops/planning/ad-ops-planning.png b/assets/images/ad-ops/planning/ad-ops-planning.png
new file mode 100644
index 0000000000..38093ef397
Binary files /dev/null and b/assets/images/ad-ops/planning/ad-ops-planning.png differ
diff --git a/assets/images/ad-ops/planning/pg-line-items-required.png b/assets/images/ad-ops/planning/pg-line-items-required.png
new file mode 100644
index 0000000000..a94216005b
Binary files /dev/null and b/assets/images/ad-ops/planning/pg-line-items-required.png differ
diff --git a/assets/images/dev-docs/modules/permutiveRtdProvider-integration-create.png b/assets/images/dev-docs/modules/permutiveRtdProvider-integration-create.png
new file mode 100644
index 0000000000..ec8737cc22
Binary files /dev/null and b/assets/images/dev-docs/modules/permutiveRtdProvider-integration-create.png differ
diff --git a/assets/images/dev-docs/modules/permutiveRtdProvider-integration-update.png b/assets/images/dev-docs/modules/permutiveRtdProvider-integration-update.png
new file mode 100644
index 0000000000..aec9fbbb1b
Binary files /dev/null and b/assets/images/dev-docs/modules/permutiveRtdProvider-integration-update.png differ
diff --git a/favicon.png b/assets/images/favicon.png
similarity index 100%
rename from favicon.png
rename to assets/images/favicon.png
diff --git a/assets/images/flowcharts/prebid-server/pbs-basic-flow.png b/assets/images/flowcharts/prebid-server/pbs-basic-flow.png
index 0d5c5b09de..6d7624fcef 100644
Binary files a/assets/images/flowcharts/prebid-server/pbs-basic-flow.png and b/assets/images/flowcharts/prebid-server/pbs-basic-flow.png differ
diff --git a/assets/images/flowcharts/prebid-server/pbs-dooh-flow.png b/assets/images/flowcharts/prebid-server/pbs-dooh-flow.png
new file mode 100644
index 0000000000..7241c07ef7
Binary files /dev/null and b/assets/images/flowcharts/prebid-server/pbs-dooh-flow.png differ
diff --git a/assets/images/icons/latency-blocking-1.png b/assets/images/icons/latency-blocking-1.png
deleted file mode 100644
index 93314028b4..0000000000
Binary files a/assets/images/icons/latency-blocking-1.png and /dev/null differ
diff --git a/assets/images/icons/latency-blocking-2.png b/assets/images/icons/latency-blocking-2.png
deleted file mode 100644
index d0712510fb..0000000000
Binary files a/assets/images/icons/latency-blocking-2.png and /dev/null differ
diff --git a/assets/images/icons/latency-concurrent.png b/assets/images/icons/latency-concurrent.png
deleted file mode 100644
index d1ab1ed64d..0000000000
Binary files a/assets/images/icons/latency-concurrent.png and /dev/null differ
diff --git a/assets/images/intros/Sincera_Logo_Black_Green-small.png b/assets/images/intros/Sincera_Logo_Black_Green-small.png
new file mode 100644
index 0000000000..f047cd9c55
Binary files /dev/null and b/assets/images/intros/Sincera_Logo_Black_Green-small.png differ
diff --git a/assets/images/intros/ad-server-black-box.png b/assets/images/intros/ad-server-black-box.png
new file mode 100644
index 0000000000..b95865cd6d
Binary files /dev/null and b/assets/images/intros/ad-server-black-box.png differ
diff --git a/assets/images/intros/header-bidding-intro.png b/assets/images/intros/header-bidding-intro.png
new file mode 100644
index 0000000000..faab245a8e
Binary files /dev/null and b/assets/images/intros/header-bidding-intro.png differ
diff --git a/assets/images/intros/prebid-benefits.png b/assets/images/intros/prebid-benefits.png
new file mode 100644
index 0000000000..10f4d16c6e
Binary files /dev/null and b/assets/images/intros/prebid-benefits.png differ
diff --git a/assets/images/intros/prebid-intro.png b/assets/images/intros/prebid-intro.png
new file mode 100644
index 0000000000..d93b643b90
Binary files /dev/null and b/assets/images/intros/prebid-intro.png differ
diff --git a/assets/images/partners/community/Adomik-logo.png b/assets/images/partners/community/Adomik-logo.png
deleted file mode 100644
index df8ddc2611..0000000000
Binary files a/assets/images/partners/community/Adomik-logo.png and /dev/null differ
diff --git a/assets/images/partners/leader/AssertiveYield_logo.png b/assets/images/partners/leader/AssertiveYield_logo.png
new file mode 100644
index 0000000000..ad979743b3
Binary files /dev/null and b/assets/images/partners/leader/AssertiveYield_logo.png differ
diff --git a/assets/images/partners/leader/mile.png b/assets/images/partners/leader/mile.png
new file mode 100644
index 0000000000..670611009c
Binary files /dev/null and b/assets/images/partners/leader/mile.png differ
diff --git a/assets/images/partners/leader/pubx.png b/assets/images/partners/leader/pubx.png
new file mode 100644
index 0000000000..d8bacea947
Binary files /dev/null and b/assets/images/partners/leader/pubx.png differ
diff --git a/assets/images/partners/publisher/sortable.png b/assets/images/partners/publisher/sortable.png
deleted file mode 100644
index e2a7297f35..0000000000
Binary files a/assets/images/partners/publisher/sortable.png and /dev/null differ
diff --git a/assets/images/partners/tech/conversant_logo.png b/assets/images/partners/tech/conversant_logo.png
deleted file mode 100644
index 419c51ffb4..0000000000
Binary files a/assets/images/partners/tech/conversant_logo.png and /dev/null differ
diff --git a/assets/images/partners/tech/epsilon_logo.png b/assets/images/partners/tech/epsilon_logo.png
new file mode 100644
index 0000000000..45667e1bc2
Binary files /dev/null and b/assets/images/partners/tech/epsilon_logo.png differ
diff --git a/assets/images/prebid-mobile/adops-line-item-setup-mopub/mopub1.png b/assets/images/prebid-mobile/adops-line-item-setup-mopub/mopub1.png
deleted file mode 100644
index dafdbd7081..0000000000
Binary files a/assets/images/prebid-mobile/adops-line-item-setup-mopub/mopub1.png and /dev/null differ
diff --git a/assets/images/prebid-mobile/adops-line-item-setup-mopub/mopub2.png b/assets/images/prebid-mobile/adops-line-item-setup-mopub/mopub2.png
deleted file mode 100644
index 33f9729029..0000000000
Binary files a/assets/images/prebid-mobile/adops-line-item-setup-mopub/mopub2.png and /dev/null differ
diff --git a/assets/images/prebid-mobile/adops-line-item-setup-mopub/mopub3.png b/assets/images/prebid-mobile/adops-line-item-setup-mopub/mopub3.png
deleted file mode 100644
index a960770821..0000000000
Binary files a/assets/images/prebid-mobile/adops-line-item-setup-mopub/mopub3.png and /dev/null differ
diff --git a/assets/images/prebid-mobile/adops-line-item-setup-mopub/mopub4.png b/assets/images/prebid-mobile/adops-line-item-setup-mopub/mopub4.png
deleted file mode 100644
index 9773ab05ea..0000000000
Binary files a/assets/images/prebid-mobile/adops-line-item-setup-mopub/mopub4.png and /dev/null differ
diff --git a/assets/images/prebid-mobile/modules/rendering/Prebid-In-App-Bidding-Overview-MoPub.png b/assets/images/prebid-mobile/modules/rendering/Prebid-In-App-Bidding-Overview-MoPub.png
deleted file mode 100644
index cc55054819..0000000000
Binary files a/assets/images/prebid-mobile/modules/rendering/Prebid-In-App-Bidding-Overview-MoPub.png and /dev/null differ
diff --git a/assets/images/prebid-mobile/modules/rendering/ad-experience/android-close-button-area-custom.jpg b/assets/images/prebid-mobile/modules/rendering/ad-experience/android-close-button-area-custom.jpg
new file mode 100644
index 0000000000..b37e680b6a
Binary files /dev/null and b/assets/images/prebid-mobile/modules/rendering/ad-experience/android-close-button-area-custom.jpg differ
diff --git a/assets/images/prebid-mobile/modules/rendering/ad-experience/android-close-button-area-default.jpg b/assets/images/prebid-mobile/modules/rendering/ad-experience/android-close-button-area-default.jpg
new file mode 100644
index 0000000000..66d980c7ff
Binary files /dev/null and b/assets/images/prebid-mobile/modules/rendering/ad-experience/android-close-button-area-default.jpg differ
diff --git a/assets/images/prebid-mobile/modules/rendering/ad-experience/android-close-button-position-custom.jpg b/assets/images/prebid-mobile/modules/rendering/ad-experience/android-close-button-position-custom.jpg
new file mode 100644
index 0000000000..add3ef836d
Binary files /dev/null and b/assets/images/prebid-mobile/modules/rendering/ad-experience/android-close-button-position-custom.jpg differ
diff --git a/assets/images/prebid-mobile/modules/rendering/ad-experience/android-close-button-position-default.jpg b/assets/images/prebid-mobile/modules/rendering/ad-experience/android-close-button-position-default.jpg
new file mode 100644
index 0000000000..2dd95eda59
Binary files /dev/null and b/assets/images/prebid-mobile/modules/rendering/ad-experience/android-close-button-position-default.jpg differ
diff --git a/assets/images/prebid-mobile/modules/rendering/ad-experience/android-skip-button-area-custom.jpg b/assets/images/prebid-mobile/modules/rendering/ad-experience/android-skip-button-area-custom.jpg
new file mode 100644
index 0000000000..767fae5f83
Binary files /dev/null and b/assets/images/prebid-mobile/modules/rendering/ad-experience/android-skip-button-area-custom.jpg differ
diff --git a/assets/images/prebid-mobile/modules/rendering/ad-experience/android-skip-button-area-default.jpg b/assets/images/prebid-mobile/modules/rendering/ad-experience/android-skip-button-area-default.jpg
new file mode 100644
index 0000000000..2a69b370c2
Binary files /dev/null and b/assets/images/prebid-mobile/modules/rendering/ad-experience/android-skip-button-area-default.jpg differ
diff --git a/assets/images/prebid-mobile/modules/rendering/ad-experience/android-skip-button-position-custom.jpg b/assets/images/prebid-mobile/modules/rendering/ad-experience/android-skip-button-position-custom.jpg
new file mode 100644
index 0000000000..4f80bfadd4
Binary files /dev/null and b/assets/images/prebid-mobile/modules/rendering/ad-experience/android-skip-button-position-custom.jpg differ
diff --git a/assets/images/prebid-mobile/modules/rendering/ad-experience/android-skip-button-position-default.jpg b/assets/images/prebid-mobile/modules/rendering/ad-experience/android-skip-button-position-default.jpg
new file mode 100644
index 0000000000..7d48a5942d
Binary files /dev/null and b/assets/images/prebid-mobile/modules/rendering/ad-experience/android-skip-button-position-default.jpg differ
diff --git a/assets/images/prebid-mobile/modules/rendering/ad-experience/android-sound-button.jpg b/assets/images/prebid-mobile/modules/rendering/ad-experience/android-sound-button.jpg
new file mode 100644
index 0000000000..5e1dafd983
Binary files /dev/null and b/assets/images/prebid-mobile/modules/rendering/ad-experience/android-sound-button.jpg differ
diff --git a/assets/images/prebid-mobile/modules/rendering/ad-experience/ios-close-button-area-010.png b/assets/images/prebid-mobile/modules/rendering/ad-experience/ios-close-button-area-010.png
new file mode 100644
index 0000000000..a1b280f5c5
Binary files /dev/null and b/assets/images/prebid-mobile/modules/rendering/ad-experience/ios-close-button-area-010.png differ
diff --git a/assets/images/prebid-mobile/modules/rendering/ad-experience/ios-close-button-area-020.png b/assets/images/prebid-mobile/modules/rendering/ad-experience/ios-close-button-area-020.png
new file mode 100644
index 0000000000..af4e77b3aa
Binary files /dev/null and b/assets/images/prebid-mobile/modules/rendering/ad-experience/ios-close-button-area-020.png differ
diff --git a/assets/images/prebid-mobile/modules/rendering/ad-experience/ios-close-button-possition-top-left.png b/assets/images/prebid-mobile/modules/rendering/ad-experience/ios-close-button-possition-top-left.png
new file mode 100644
index 0000000000..0c24a12aa0
Binary files /dev/null and b/assets/images/prebid-mobile/modules/rendering/ad-experience/ios-close-button-possition-top-left.png differ
diff --git a/assets/images/prebid-mobile/modules/rendering/ad-experience/ios-mute-button-visible.png b/assets/images/prebid-mobile/modules/rendering/ad-experience/ios-mute-button-visible.png
new file mode 100644
index 0000000000..ee40361c4c
Binary files /dev/null and b/assets/images/prebid-mobile/modules/rendering/ad-experience/ios-mute-button-visible.png differ
diff --git a/assets/images/prebid-mobile/modules/rendering/ad-experience/ios-skip-button-possition-top-left.png b/assets/images/prebid-mobile/modules/rendering/ad-experience/ios-skip-button-possition-top-left.png
new file mode 100644
index 0000000000..7de8a093d4
Binary files /dev/null and b/assets/images/prebid-mobile/modules/rendering/ad-experience/ios-skip-button-possition-top-left.png differ
diff --git a/assets/images/prebid-mobile/modules/rendering/ad-experience/ios-skip-button-possition-top-right.png b/assets/images/prebid-mobile/modules/rendering/ad-experience/ios-skip-button-possition-top-right.png
new file mode 100644
index 0000000000..003e076329
Binary files /dev/null and b/assets/images/prebid-mobile/modules/rendering/ad-experience/ios-skip-button-possition-top-right.png differ
diff --git a/assets/images/prebid-mobile/modules/rendering/max-ad-unit-setup.png b/assets/images/prebid-mobile/modules/rendering/max-ad-unit-setup.png
new file mode 100644
index 0000000000..c8976389f0
Binary files /dev/null and b/assets/images/prebid-mobile/modules/rendering/max-ad-unit-setup.png differ
diff --git a/assets/images/prebid-mobile/modules/rendering/max-cusom-network-setup.png b/assets/images/prebid-mobile/modules/rendering/max-cusom-network-setup.png
new file mode 100644
index 0000000000..e2a921992d
Binary files /dev/null and b/assets/images/prebid-mobile/modules/rendering/max-cusom-network-setup.png differ
diff --git a/assets/images/prebid-mobile/modules/rendering/order-admob-create-ad-units.png b/assets/images/prebid-mobile/modules/rendering/order-admob-create-ad-units.png
new file mode 100644
index 0000000000..30b9f78d81
Binary files /dev/null and b/assets/images/prebid-mobile/modules/rendering/order-admob-create-ad-units.png differ
diff --git a/assets/images/prebid-mobile/modules/rendering/order-admob-create-add-ad-sources.png b/assets/images/prebid-mobile/modules/rendering/order-admob-create-add-ad-sources.png
new file mode 100644
index 0000000000..02971e529a
Binary files /dev/null and b/assets/images/prebid-mobile/modules/rendering/order-admob-create-add-ad-sources.png differ
diff --git a/assets/images/prebid-mobile/modules/rendering/order-admob-create-add-custom-event-adapter-name.png b/assets/images/prebid-mobile/modules/rendering/order-admob-create-add-custom-event-adapter-name.png
new file mode 100644
index 0000000000..488c4a3c48
Binary files /dev/null and b/assets/images/prebid-mobile/modules/rendering/order-admob-create-add-custom-event-adapter-name.png differ
diff --git a/assets/images/prebid-mobile/modules/rendering/order-admob-create-add-custom-event-name.png b/assets/images/prebid-mobile/modules/rendering/order-admob-create-add-custom-event-name.png
new file mode 100644
index 0000000000..58208cdfc0
Binary files /dev/null and b/assets/images/prebid-mobile/modules/rendering/order-admob-create-add-custom-event-name.png differ
diff --git a/assets/images/prebid-mobile/modules/rendering/order-admob-create-list-custom-events.png b/assets/images/prebid-mobile/modules/rendering/order-admob-create-list-custom-events.png
new file mode 100644
index 0000000000..6aaba5e421
Binary files /dev/null and b/assets/images/prebid-mobile/modules/rendering/order-admob-create-list-custom-events.png differ
diff --git a/assets/images/prebid-mobile/modules/rendering/order-admob-create-properties.png b/assets/images/prebid-mobile/modules/rendering/order-admob-create-properties.png
new file mode 100644
index 0000000000..3f7e845c8a
Binary files /dev/null and b/assets/images/prebid-mobile/modules/rendering/order-admob-create-properties.png differ
diff --git a/assets/images/prebid-mobile/modules/rendering/order-admob-create.png b/assets/images/prebid-mobile/modules/rendering/order-admob-create.png
new file mode 100644
index 0000000000..163b749129
Binary files /dev/null and b/assets/images/prebid-mobile/modules/rendering/order-admob-create.png differ
diff --git a/assets/images/prebid-mobile/modules/rendering/order-mopub-create.png b/assets/images/prebid-mobile/modules/rendering/order-mopub-create.png
deleted file mode 100644
index eccdb4f6cc..0000000000
Binary files a/assets/images/prebid-mobile/modules/rendering/order-mopub-create.png and /dev/null differ
diff --git a/assets/images/prebid-mobile/modules/rendering/order-mopub-creative-native.png b/assets/images/prebid-mobile/modules/rendering/order-mopub-creative-native.png
deleted file mode 100644
index 8390fc608e..0000000000
Binary files a/assets/images/prebid-mobile/modules/rendering/order-mopub-creative-native.png and /dev/null differ
diff --git a/assets/images/prebid-mobile/modules/rendering/order-mopub-li-ad-unit.png b/assets/images/prebid-mobile/modules/rendering/order-mopub-li-ad-unit.png
deleted file mode 100644
index 494bc1b600..0000000000
Binary files a/assets/images/prebid-mobile/modules/rendering/order-mopub-li-ad-unit.png and /dev/null differ
diff --git a/assets/images/prebid-mobile/modules/rendering/order-mopub-li-audience.png b/assets/images/prebid-mobile/modules/rendering/order-mopub-li-audience.png
deleted file mode 100644
index 3f5593f958..0000000000
Binary files a/assets/images/prebid-mobile/modules/rendering/order-mopub-li-audience.png and /dev/null differ
diff --git a/assets/images/prebid-mobile/modules/rendering/order-mopub-li-type.png b/assets/images/prebid-mobile/modules/rendering/order-mopub-li-type.png
deleted file mode 100644
index 7cbe9f6644..0000000000
Binary files a/assets/images/prebid-mobile/modules/rendering/order-mopub-li-type.png and /dev/null differ
diff --git a/assets/images/prebid-mobile/modules/rendering/order-mopub-native-ad-creative.png b/assets/images/prebid-mobile/modules/rendering/order-mopub-native-ad-creative.png
deleted file mode 100644
index 7a2f63867b..0000000000
Binary files a/assets/images/prebid-mobile/modules/rendering/order-mopub-native-ad-creative.png and /dev/null differ
diff --git a/assets/images/prebid-mobile/modules/rendering/order-mopub-native-ad-li.png b/assets/images/prebid-mobile/modules/rendering/order-mopub-native-ad-li.png
deleted file mode 100644
index 3d02f09ef4..0000000000
Binary files a/assets/images/prebid-mobile/modules/rendering/order-mopub-native-ad-li.png and /dev/null differ
diff --git a/assets/images/prebid-mobile/modules/rendering/order-mopub-order-native.png b/assets/images/prebid-mobile/modules/rendering/order-mopub-order-native.png
deleted file mode 100644
index 2829e93800..0000000000
Binary files a/assets/images/prebid-mobile/modules/rendering/order-mopub-order-native.png and /dev/null differ
diff --git a/assets/images/prebid-mobile/modules/rendering/prebid-in-app-bidding-overview-admob.png b/assets/images/prebid-mobile/modules/rendering/prebid-in-app-bidding-overview-admob.png
new file mode 100644
index 0000000000..d0d5a42877
Binary files /dev/null and b/assets/images/prebid-mobile/modules/rendering/prebid-in-app-bidding-overview-admob.png differ
diff --git a/assets/images/prebid-mobile/modules/rendering/prebid-in-app-bidding-overview-max.png b/assets/images/prebid-mobile/modules/rendering/prebid-in-app-bidding-overview-max.png
new file mode 100644
index 0000000000..d849ce0c50
Binary files /dev/null and b/assets/images/prebid-mobile/modules/rendering/prebid-in-app-bidding-overview-max.png differ
diff --git a/assets/images/prebid-mobile/prebid-in-app-bidding-overview-mediation.png b/assets/images/prebid-mobile/prebid-in-app-bidding-overview-mediation.png
new file mode 100644
index 0000000000..0907d3448f
Binary files /dev/null and b/assets/images/prebid-mobile/prebid-in-app-bidding-overview-mediation.png differ
diff --git a/assets/images/prebid-mobile/prebid-in-app-bidding-overview-prebid-original-gam.png b/assets/images/prebid-mobile/prebid-in-app-bidding-overview-prebid-original-gam.png
new file mode 100644
index 0000000000..d039f43b48
Binary files /dev/null and b/assets/images/prebid-mobile/prebid-in-app-bidding-overview-prebid-original-gam.png differ
diff --git a/assets/images/prebid-mobile/prebid-in-app-bidding-overview-prebid-original.png b/assets/images/prebid-mobile/prebid-in-app-bidding-overview-prebid-original.png
new file mode 100644
index 0000000000..f758bf36cd
Binary files /dev/null and b/assets/images/prebid-mobile/prebid-in-app-bidding-overview-prebid-original.png differ
diff --git a/assets/images/prebid-mobile/prebid-plugin-renderer-ad-view-injection.png b/assets/images/prebid-mobile/prebid-plugin-renderer-ad-view-injection.png
new file mode 100644
index 0000000000..6fce19a655
Binary files /dev/null and b/assets/images/prebid-mobile/prebid-plugin-renderer-ad-view-injection.png differ
diff --git a/assets/images/prebid-mobile/prebid-plugin-renderer-event-listeners.png b/assets/images/prebid-mobile/prebid-plugin-renderer-event-listeners.png
new file mode 100644
index 0000000000..8944cf98e6
Binary files /dev/null and b/assets/images/prebid-mobile/prebid-plugin-renderer-event-listeners.png differ
diff --git a/assets/images/prebid-mobile/prebid-plugin-renderer.png b/assets/images/prebid-mobile/prebid-plugin-renderer.png
new file mode 100644
index 0000000000..3306b26348
Binary files /dev/null and b/assets/images/prebid-mobile/prebid-plugin-renderer.png differ
diff --git a/assets/images/prebid-server/json-logic-screenshot.png b/assets/images/prebid-server/json-logic-screenshot.png
new file mode 100644
index 0000000000..456429c61b
Binary files /dev/null and b/assets/images/prebid-server/json-logic-screenshot.png differ
diff --git a/assets/images/prebid-server/module-example.png b/assets/images/prebid-server/module-example.png
index 24e419909c..3b1433eb5a 100644
Binary files a/assets/images/prebid-server/module-example.png and b/assets/images/prebid-server/module-example.png differ
diff --git a/assets/images/prebid-server/pbs-floors-basic.png b/assets/images/prebid-server/pbs-floors-basic.png
new file mode 100644
index 0000000000..202bf65b79
Binary files /dev/null and b/assets/images/prebid-server/pbs-floors-basic.png differ
diff --git a/assets/images/prebid-server/pbs-floors-detailed.png b/assets/images/prebid-server/pbs-floors-detailed.png
new file mode 100644
index 0000000000..5ad7fc00ef
Binary files /dev/null and b/assets/images/prebid-server/pbs-floors-detailed.png differ
diff --git a/assets/images/tools/professor-prebid-10.png b/assets/images/tools/professor-prebid-10.png
new file mode 100644
index 0000000000..3fa52b65eb
Binary files /dev/null and b/assets/images/tools/professor-prebid-10.png differ
diff --git a/assets/images/tools/professor-prebid-11.png b/assets/images/tools/professor-prebid-11.png
new file mode 100644
index 0000000000..435e513fb7
Binary files /dev/null and b/assets/images/tools/professor-prebid-11.png differ
diff --git a/assets/images/tools/professor-prebid-12.png b/assets/images/tools/professor-prebid-12.png
new file mode 100644
index 0000000000..f8af4c6b07
Binary files /dev/null and b/assets/images/tools/professor-prebid-12.png differ
diff --git a/assets/images/tools/professor-prebid-13.png b/assets/images/tools/professor-prebid-13.png
new file mode 100644
index 0000000000..0e4f874be1
Binary files /dev/null and b/assets/images/tools/professor-prebid-13.png differ
diff --git a/assets/images/tools/professor-prebid-14.png b/assets/images/tools/professor-prebid-14.png
new file mode 100644
index 0000000000..937b56ace6
Binary files /dev/null and b/assets/images/tools/professor-prebid-14.png differ
diff --git a/assets/images/tools/professor-prebid-2.png b/assets/images/tools/professor-prebid-2.png
new file mode 100644
index 0000000000..525131827e
Binary files /dev/null and b/assets/images/tools/professor-prebid-2.png differ
diff --git a/assets/images/tools/professor-prebid-3.png b/assets/images/tools/professor-prebid-3.png
new file mode 100644
index 0000000000..077da6865b
Binary files /dev/null and b/assets/images/tools/professor-prebid-3.png differ
diff --git a/assets/images/tools/professor-prebid-4.png b/assets/images/tools/professor-prebid-4.png
new file mode 100644
index 0000000000..869b862115
Binary files /dev/null and b/assets/images/tools/professor-prebid-4.png differ
diff --git a/assets/images/tools/professor-prebid-5.png b/assets/images/tools/professor-prebid-5.png
new file mode 100644
index 0000000000..7d604d39fa
Binary files /dev/null and b/assets/images/tools/professor-prebid-5.png differ
diff --git a/assets/images/tools/professor-prebid-6.png b/assets/images/tools/professor-prebid-6.png
new file mode 100644
index 0000000000..d4de1c3e63
Binary files /dev/null and b/assets/images/tools/professor-prebid-6.png differ
diff --git a/assets/images/tools/professor-prebid-7.png b/assets/images/tools/professor-prebid-7.png
new file mode 100644
index 0000000000..401c7665ea
Binary files /dev/null and b/assets/images/tools/professor-prebid-7.png differ
diff --git a/assets/images/tools/professor-prebid-8.png b/assets/images/tools/professor-prebid-8.png
new file mode 100644
index 0000000000..04d565f479
Binary files /dev/null and b/assets/images/tools/professor-prebid-8.png differ
diff --git a/assets/images/tools/professor-prebid-9.png b/assets/images/tools/professor-prebid-9.png
new file mode 100644
index 0000000000..5cc93c21d8
Binary files /dev/null and b/assets/images/tools/professor-prebid-9.png differ
diff --git a/assets/images/tools/professor-prebid-icon.png b/assets/images/tools/professor-prebid-icon.png
new file mode 100644
index 0000000000..c471404b46
Binary files /dev/null and b/assets/images/tools/professor-prebid-icon.png differ
diff --git a/assets/js/download.js b/assets/js/download.js
new file mode 100644
index 0000000000..09197ae3e7
--- /dev/null
+++ b/assets/js/download.js
@@ -0,0 +1,215 @@
+(function () {
+ var currentUrl = new URL(window.location);
+ var searchParams = currentUrl.searchParams;
+
+ getVersionList();
+
+ $(function () {
+ // show all adapters
+ $(".adapters .col-md-4").show();
+ setPrepickedModules();
+
+ document.getElementById('download-button').addEventListener('click', function (event) {
+ event.preventDefault();
+ submit_download();
+ });
+ });
+
+ function getVersionList() {
+ $.ajax({
+ type: "GET",
+ url: "https://js-download.prebid.org/versions",
+ })
+ .success(function (data) {
+ try {
+ data = JSON.parse(data);
+ var versions = data.versions;
+ if (!versions || versions.length === 0) {
+ showError();
+ return;
+ }
+ versions.forEach(function (version, index) {
+ if (index === 0) {
+ $(".selectpicker").append(
+ '' +
+ version +
+ " - latest "
+ );
+ } else {
+ if (version.match(/\d\.\d+\.\d+/i)) {
+ $(".selectpicker").append(
+ '' + version + " "
+ );
+ } else {
+ // $('.selectpicker').append(''+version+' - deprecated ');
+ }
+ }
+ });
+ setPrepickedVersion();
+ } catch (e) {
+ console.log(e);
+ showError();
+ }
+ })
+ .fail(function (e) {
+ console.log(e);
+ showError();
+ });
+ function showError() {
+ $(".selectpicker").append(
+ 'Error generating version list. Please try again later '
+ );
+ }
+ }
+
+ function submit_download() {
+ $('#download-button').html(' Sending Request...').addClass('disabled');
+
+ var form_data = get_form_data();
+ $.ajax({
+ type: "POST",
+ url: "https://js-download.prebid.org/download",
+ dataType: "text",
+ data: form_data,
+ })
+ .success(function (data, textStatus, jqXHR) {
+ $('#download-button').html(' Prebid.js download successfully prepared!');
+ setTimeout(function () {
+ $('#download-button').html(' Download Prebid.js').removeClass('disabled');
+ }, 5000);
+ // Try to find out the filename from the content disposition `filename` value
+ var filename = "prebid" + form_data["version"] + ".js";
+ // this doens't work in our current jquery version.
+ var disposition = jqXHR.getResponseHeader("Content-Disposition");
+ if (disposition && disposition.indexOf("attachment") !== -1) {
+ var filenameRegex = /filename[^;=\n]*=((['"]).*?\2|[^;\n]*)/;
+ var matches = filenameRegex.exec(disposition);
+ if (matches != null && matches[1])
+ filename = matches[1].replace(/['"]/g, "");
+ }
+ // The actual download
+ var blob = new Blob([data], { type: "text/javascript" });
+ var link = document.createElement("a");
+ link.href = window.URL.createObjectURL(blob);
+ link.download = filename;
+ document.body.appendChild(link);
+ link.click();
+ document.body.removeChild(link);
+ if (form_data["removedModules"].length > 0) {
+ alert(
+ "The following modules were removed from your download because they aren't present in Prebid.js version " +
+ form_data["version"] +
+ ": " +
+ JSON.stringify(form_data["removedModules"])
+ );
+ }
+ })
+ .fail(function (e) {
+ console.log(e);
+ alert("Ran into an issue.");
+ });
+ }
+
+ function get_form_data() {
+ var modules = [];
+ var version = $(".selectpicker").val();
+ var removedModules = [];
+
+ document
+ .querySelectorAll("input[type=checkbox][moduleCode]:checked")
+ .forEach(function (box) {
+ var moduleCode = box.getAttribute("moduleCode");
+ var minVersion = box.getAttribute("minVersion");
+ modules.push(moduleCode);
+
+ if (minVersion) {
+ var module_version_array = minVersion.split(".");
+ var pbjs_version_array = version.split(".");
+ if (
+ Number(pbjs_version_array[0]) < Number(module_version_array[0]) ||
+ (Number(pbjs_version_array[0]) == Number(module_version_array[0]) &&
+ Number(pbjs_version_array[1]) < Number(module_version_array[1]))
+ ) {
+ removedModules.push(moduleCode);
+ }
+ }
+ });
+
+ return {
+ modules,
+ version,
+ removedModules,
+ };
+ }
+
+ function setPrepickedModules() {
+ var moduleCheckboxes = document.querySelectorAll(".module-check-box");
+ var modules = [];
+ var modulesParam = searchParams.get("modules");
+ if (modulesParam) {
+ modules = modulesParam.split(",");
+ }
+ if (modules && modules.length) {
+ moduleCheckboxes.forEach(function (checkbox) {
+ checkbox.checked = false;
+ });
+ modules.forEach(function (module) {
+ var checkbox = document.getElementById(module);
+ if (checkbox) {
+ checkbox.checked = true;
+ }
+ });
+ }
+
+ moduleCheckboxes.forEach(function (checkbox) {
+ if (checkbox.checked) {
+ var module = checkbox.id;
+ if (!modules.includes(module)) {
+ modules.push(module);
+ }
+ }
+ checkbox.addEventListener("change", function (event) {
+ var module = event.target.id;
+ if (event.target.checked) {
+ modules.push(module);
+ } else {
+ modules = modules.filter(function (m) {
+ return m !== module;
+ });
+ }
+ if (modules.length) {
+ searchParams.set("modules", modules.join(","));
+ } else {
+ searchParams.delete("modules");
+ }
+ window.history.replaceState(null, "", currentUrl);
+ });
+ });
+ }
+
+ function setPrepickedVersion() {
+ var version = searchParams.get("version");
+ if (version) {
+ var versionOption = document.querySelector(
+ '#version_selector option[value="' + version + '"]'
+ );
+ if (versionOption) {
+ versionOption.selected = true;
+ }
+ }
+ var versionSelector = document.getElementById("version_selector");
+ if (versionSelector) {
+ versionSelector.addEventListener("change", function (event) {
+ var version = event.target.value;
+ searchParams.set("version", version);
+ window.history.replaceState(
+ null,
+ "",
+ window.location.pathname + "?" + searchParams.toString()
+ );
+ });
+ }
+ }
+})();
diff --git a/assets/js/prism.js b/assets/js/prism.js
index e420b03b29..1825be36cd 100644
--- a/assets/js/prism.js
+++ b/assets/js/prism.js
@@ -1,8 +1,23 @@
-/* PrismJS 1.16.0
-https://prismjs.com/download.html#themes=prism&languages=markup+css+clike+javascript+go */
-var _self="undefined"!=typeof window?window:"undefined"!=typeof WorkerGlobalScope&&self instanceof WorkerGlobalScope?self:{},Prism=function(g){var c=/\blang(?:uage)?-([\w-]+)\b/i,a=0,C={manual:g.Prism&&g.Prism.manual,disableWorkerMessageHandler:g.Prism&&g.Prism.disableWorkerMessageHandler,util:{encode:function(e){return e instanceof M?new M(e.type,C.util.encode(e.content),e.alias):Array.isArray(e)?e.map(C.util.encode):e.replace(/&/g,"&").replace(/e.length)return;if(!(k instanceof M)){if(f&&y!=a.length-1){if(c.lastIndex=v,!(x=c.exec(e)))break;for(var b=x.index+(h?x[1].length:0),w=x.index+x[0].length,A=y,P=v,O=a.length;A"+n.content+""+n.tag+">"},!g.document)return g.addEventListener&&(C.disableWorkerMessageHandler||g.addEventListener("message",function(e){var a=JSON.parse(e.data),n=a.language,t=a.code,r=a.immediateClose;g.postMessage(C.highlight(t,C.languages[n],n)),r&&g.close()},!1)),C;var e=document.currentScript||[].slice.call(document.getElementsByTagName("script")).pop();return e&&(C.filename=e.src,C.manual||e.hasAttribute("data-manual")||("loading"!==document.readyState?window.requestAnimationFrame?window.requestAnimationFrame(C.highlightAll):window.setTimeout(C.highlightAll,16):document.addEventListener("DOMContentLoaded",C.highlightAll))),C}(_self);"undefined"!=typeof module&&module.exports&&(module.exports=Prism),"undefined"!=typeof global&&(global.Prism=Prism);
-Prism.languages.markup={comment://,prolog:/<\?[\s\S]+?\?>/,doctype://i,cdata://i,tag:{pattern:/<\/?(?!\d)[^\s>\/=$<%]+(?:\s(?:\s*[^\s>\/=]+(?:\s*=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+(?=[\s>]))|(?=[\s/>])))+)?\s*\/?>/i,greedy:!0,inside:{tag:{pattern:/^<\/?[^\s>\/]+/i,inside:{punctuation:/^<\/?/,namespace:/^[^\s>\/:]+:/}},"attr-value":{pattern:/=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+)/i,inside:{punctuation:[/^=/,{pattern:/^(\s*)["']|["']$/,lookbehind:!0}]}},punctuation:/\/?>/,"attr-name":{pattern:/[^\s>\/]+/,inside:{namespace:/^[^\s>\/:]+:/}}}},entity:/?[\da-z]{1,8};/i},Prism.languages.markup.tag.inside["attr-value"].inside.entity=Prism.languages.markup.entity,Prism.hooks.add("wrap",function(a){"entity"===a.type&&(a.attributes.title=a.content.replace(/&/,"&"))}),Object.defineProperty(Prism.languages.markup.tag,"addInlined",{value:function(a,e){var s={};s["language-"+e]={pattern:/(^$)/i,lookbehind:!0,inside:Prism.languages[e]},s.cdata=/^$/i;var n={"included-cdata":{pattern://i,inside:s}};n["language-"+e]={pattern:/[\s\S]+/,inside:Prism.languages[e]};var i={};i[a]={pattern:RegExp("(<__[\\s\\S]*?>)(?:\\s*|[\\s\\S])*?(?=<\\/__>)".replace(/__/g,a),"i"),lookbehind:!0,greedy:!0,inside:n},Prism.languages.insertBefore("markup","cdata",i)}}),Prism.languages.xml=Prism.languages.extend("markup",{}),Prism.languages.html=Prism.languages.markup,Prism.languages.mathml=Prism.languages.markup,Prism.languages.svg=Prism.languages.markup;
-!function(s){var t=/("|')(?:\\(?:\r\n|[\s\S])|(?!\1)[^\\\r\n])*\1/;s.languages.css={comment:/\/\*[\s\S]*?\*\//,atrule:{pattern:/@[\w-]+[\s\S]*?(?:;|(?=\s*\{))/,inside:{rule:/@[\w-]+/}},url:{pattern:RegExp("url\\((?:"+t.source+"|[^\n\r()]*)\\)","i"),inside:{function:/^url/i,punctuation:/^\(|\)$/}},selector:RegExp("[^{}\\s](?:[^{};\"']|"+t.source+")*?(?=\\s*\\{)"),string:{pattern:t,greedy:!0},property:/[-_a-z\xA0-\uFFFF][-\w\xA0-\uFFFF]*(?=\s*:)/i,important:/!important\b/i,function:/[-a-z0-9]+(?=\()/i,punctuation:/[(){};:,]/},s.languages.css.atrule.inside.rest=s.languages.css;var e=s.languages.markup;e&&(e.tag.addInlined("style","css"),s.languages.insertBefore("inside","attr-value",{"style-attr":{pattern:/\s*style=("|')(?:\\[\s\S]|(?!\1)[^\\])*\1/i,inside:{"attr-name":{pattern:/^\s*style/i,inside:e.tag.inside},punctuation:/^\s*=\s*['"]|['"]\s*$/,"attr-value":{pattern:/.+/i,inside:s.languages.css}},alias:"language-css"}},e.tag))}(Prism);
-Prism.languages.clike={comment:[{pattern:/(^|[^\\])\/\*[\s\S]*?(?:\*\/|$)/,lookbehind:!0},{pattern:/(^|[^\\:])\/\/.*/,lookbehind:!0,greedy:!0}],string:{pattern:/(["'])(?:\\(?:\r\n|[\s\S])|(?!\1)[^\\\r\n])*\1/,greedy:!0},"class-name":{pattern:/((?:\b(?:class|interface|extends|implements|trait|instanceof|new)\s+)|(?:catch\s+\())[\w.\\]+/i,lookbehind:!0,inside:{punctuation:/[.\\]/}},keyword:/\b(?:if|else|while|do|for|return|in|instanceof|function|new|try|throw|catch|finally|null|break|continue)\b/,boolean:/\b(?:true|false)\b/,function:/\w+(?=\()/,number:/\b0x[\da-f]+\b|(?:\b\d+\.?\d*|\B\.\d+)(?:e[+-]?\d+)?/i,operator:/--?|\+\+?|!=?=?|<=?|>=?|==?=?|&&?|\|\|?|\?|\*|\/|~|\^|%/,punctuation:/[{}[\];(),.:]/};
-Prism.languages.javascript=Prism.languages.extend("clike",{"class-name":[Prism.languages.clike["class-name"],{pattern:/(^|[^$\w\xA0-\uFFFF])[_$A-Z\xA0-\uFFFF][$\w\xA0-\uFFFF]*(?=\.(?:prototype|constructor))/,lookbehind:!0}],keyword:[{pattern:/((?:^|})\s*)(?:catch|finally)\b/,lookbehind:!0},{pattern:/(^|[^.])\b(?:as|async(?=\s*(?:function\b|\(|[$\w\xA0-\uFFFF]|$))|await|break|case|class|const|continue|debugger|default|delete|do|else|enum|export|extends|for|from|function|get|if|implements|import|in|instanceof|interface|let|new|null|of|package|private|protected|public|return|set|static|super|switch|this|throw|try|typeof|undefined|var|void|while|with|yield)\b/,lookbehind:!0}],number:/\b(?:(?:0[xX](?:[\dA-Fa-f](?:_[\dA-Fa-f])?)+|0[bB](?:[01](?:_[01])?)+|0[oO](?:[0-7](?:_[0-7])?)+)n?|(?:\d(?:_\d)?)+n|NaN|Infinity)\b|(?:\b(?:\d(?:_\d)?)+\.?(?:\d(?:_\d)?)*|\B\.(?:\d(?:_\d)?)+)(?:[Ee][+-]?(?:\d(?:_\d)?)+)?/,function:/[_$a-zA-Z\xA0-\uFFFF][$\w\xA0-\uFFFF]*(?=\s*(?:\.\s*(?:apply|bind|call)\s*)?\()/,operator:/-[-=]?|\+[+=]?|!=?=?|<=?|>>?>?=?|=(?:==?|>)?|&[&=]?|\|[|=]?|\*\*?=?|\/=?|~|\^=?|%=?|\?|\.{3}/}),Prism.languages.javascript["class-name"][0].pattern=/(\b(?:class|interface|extends|implements|instanceof|new)\s+)[\w.\\]+/,Prism.languages.insertBefore("javascript","keyword",{regex:{pattern:/((?:^|[^$\w\xA0-\uFFFF."'\])\s])\s*)\/(\[(?:[^\]\\\r\n]|\\.)*]|\\.|[^/\\\[\r\n])+\/[gimyus]{0,6}(?=\s*($|[\r\n,.;})\]]))/,lookbehind:!0,greedy:!0},"function-variable":{pattern:/[_$a-zA-Z\xA0-\uFFFF][$\w\xA0-\uFFFF]*(?=\s*[=:]\s*(?:async\s*)?(?:\bfunction\b|(?:\((?:[^()]|\([^()]*\))*\)|[_$a-zA-Z\xA0-\uFFFF][$\w\xA0-\uFFFF]*)\s*=>))/,alias:"function"},parameter:[{pattern:/(function(?:\s+[_$A-Za-z\xA0-\uFFFF][$\w\xA0-\uFFFF]*)?\s*\(\s*)(?!\s)(?:[^()]|\([^()]*\))+?(?=\s*\))/,lookbehind:!0,inside:Prism.languages.javascript},{pattern:/[_$a-z\xA0-\uFFFF][$\w\xA0-\uFFFF]*(?=\s*=>)/i,inside:Prism.languages.javascript},{pattern:/(\(\s*)(?!\s)(?:[^()]|\([^()]*\))+?(?=\s*\)\s*=>)/,lookbehind:!0,inside:Prism.languages.javascript},{pattern:/((?:\b|\s|^)(?!(?:as|async|await|break|case|catch|class|const|continue|debugger|default|delete|do|else|enum|export|extends|finally|for|from|function|get|if|implements|import|in|instanceof|interface|let|new|null|of|package|private|protected|public|return|set|static|super|switch|this|throw|try|typeof|undefined|var|void|while|with|yield)(?![$\w\xA0-\uFFFF]))(?:[_$A-Za-z\xA0-\uFFFF][$\w\xA0-\uFFFF]*\s*)\(\s*)(?!\s)(?:[^()]|\([^()]*\))+?(?=\s*\)\s*\{)/,lookbehind:!0,inside:Prism.languages.javascript}],constant:/\b[A-Z](?:[A-Z_]|\dx?)*\b/}),Prism.languages.insertBefore("javascript","string",{"template-string":{pattern:/`(?:\\[\s\S]|\${(?:[^{}]|{(?:[^{}]|{[^}]*})*})+}|[^\\`])*`/,greedy:!0,inside:{interpolation:{pattern:/\${(?:[^{}]|{(?:[^{}]|{[^}]*})*})+}/,inside:{"interpolation-punctuation":{pattern:/^\${|}$/,alias:"punctuation"},rest:Prism.languages.javascript}},string:/[\s\S]+/}}}),Prism.languages.markup&&Prism.languages.markup.tag.addInlined("script","javascript"),Prism.languages.js=Prism.languages.javascript;
-Prism.languages.go=Prism.languages.extend("clike",{keyword:/\b(?:break|case|chan|const|continue|default|defer|else|fallthrough|for|func|go(?:to)?|if|import|interface|map|package|range|return|select|struct|switch|type|var)\b/,builtin:/\b(?:bool|byte|complex(?:64|128)|error|float(?:32|64)|rune|string|u?int(?:8|16|32|64)?|uintptr|append|cap|close|complex|copy|delete|imag|len|make|new|panic|print(?:ln)?|real|recover)\b/,boolean:/\b(?:_|iota|nil|true|false)\b/,operator:/[*\/%^!=]=?|\+[=+]?|-[=-]?|\|[=|]?|&(?:=|&|\^=?)?|>(?:>=?|=)?|<(?:<=?|=|-)?|:=|\.\.\./,number:/(?:\b0x[a-f\d]+|(?:\b\d+\.?\d*|\B\.\d+)(?:e[-+]?\d+)?)i?/i,string:{pattern:/(["'`])(\\[\s\S]|(?!\1)[^\\])*\1/,greedy:!0}}),delete Prism.languages.go["class-name"];
+/* PrismJS 1.29.0
+https://prismjs.com/download.html#themes=prism&languages=markup+css+clike+javascript+bash+diff+go+graphql+http+java+kotlin+markup-templating+nginx+php+properties+scala+swift+typescript+yaml&plugins=diff-highlight */
+var _self="undefined"!=typeof window?window:"undefined"!=typeof WorkerGlobalScope&&self instanceof WorkerGlobalScope?self:{},Prism=function(e){var n=/(?:^|\s)lang(?:uage)?-([\w-]+)(?=\s|$)/i,t=0,r={},a={manual:e.Prism&&e.Prism.manual,disableWorkerMessageHandler:e.Prism&&e.Prism.disableWorkerMessageHandler,util:{encode:function e(n){return n instanceof i?new i(n.type,e(n.content),n.alias):Array.isArray(n)?n.map(e):n.replace(/&/g,"&").replace(/=g.reach);A+=w.value.length,w=w.next){var E=w.value;if(n.length>e.length)return;if(!(E instanceof i)){var P,L=1;if(y){if(!(P=l(b,A,e,m))||P.index>=e.length)break;var S=P.index,O=P.index+P[0].length,j=A;for(j+=w.value.length;S>=j;)j+=(w=w.next).value.length;if(A=j-=w.value.length,w.value instanceof i)continue;for(var C=w;C!==n.tail&&(jg.reach&&(g.reach=W);var z=w.prev;if(_&&(z=u(n,z,_),A+=_.length),c(n,z,L),w=u(n,z,new i(f,p?a.tokenize(N,p):N,k,N)),M&&u(n,w,M),L>1){var I={cause:f+","+d,reach:W};o(e,n,t,w.prev,A,I),g&&I.reach>g.reach&&(g.reach=I.reach)}}}}}}function s(){var e={value:null,prev:null,next:null},n={value:null,prev:e,next:null};e.next=n,this.head=e,this.tail=n,this.length=0}function u(e,n,t){var r=n.next,a={value:t,prev:n,next:r};return n.next=a,r.prev=a,e.length++,a}function c(e,n,t){for(var r=n.next,a=0;a"+i.content+""+i.tag+">"},!e.document)return e.addEventListener?(a.disableWorkerMessageHandler||e.addEventListener("message",(function(n){var t=JSON.parse(n.data),r=t.language,i=t.code,l=t.immediateClose;e.postMessage(a.highlight(i,a.languages[r],r)),l&&e.close()}),!1),a):a;var g=a.util.currentScript();function f(){a.manual||a.highlightAll()}if(g&&(a.filename=g.src,g.hasAttribute("data-manual")&&(a.manual=!0)),!a.manual){var h=document.readyState;"loading"===h||"interactive"===h&&g&&g.defer?document.addEventListener("DOMContentLoaded",f):window.requestAnimationFrame?window.requestAnimationFrame(f):window.setTimeout(f,16)}return a}(_self);"undefined"!=typeof module&&module.exports&&(module.exports=Prism),"undefined"!=typeof global&&(global.Prism=Prism);
+Prism.languages.markup={comment:{pattern://,greedy:!0},prolog:{pattern:/<\?[\s\S]+?\?>/,greedy:!0},doctype:{pattern:/"'[\]]|"[^"]*"|'[^']*')+(?:\[(?:[^<"'\]]|"[^"]*"|'[^']*'|<(?!!--)|)*\]\s*)?>/i,greedy:!0,inside:{"internal-subset":{pattern:/(^[^\[]*\[)[\s\S]+(?=\]>$)/,lookbehind:!0,greedy:!0,inside:null},string:{pattern:/"[^"]*"|'[^']*'/,greedy:!0},punctuation:/^$|[[\]]/,"doctype-tag":/^DOCTYPE/i,name:/[^\s<>'"]+/}},cdata:{pattern://i,greedy:!0},tag:{pattern:/<\/?(?!\d)[^\s>\/=$<%]+(?:\s(?:\s*[^\s>\/=]+(?:\s*=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+(?=[\s>]))|(?=[\s/>])))+)?\s*\/?>/,greedy:!0,inside:{tag:{pattern:/^<\/?[^\s>\/]+/,inside:{punctuation:/^<\/?/,namespace:/^[^\s>\/:]+:/}},"special-attr":[],"attr-value":{pattern:/=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+)/,inside:{punctuation:[{pattern:/^=/,alias:"attr-equals"},{pattern:/^(\s*)["']|["']$/,lookbehind:!0}]}},punctuation:/\/?>/,"attr-name":{pattern:/[^\s>\/]+/,inside:{namespace:/^[^\s>\/:]+:/}}}},entity:[{pattern:/&[\da-z]{1,8};/i,alias:"named-entity"},/?[\da-f]{1,8};/i]},Prism.languages.markup.tag.inside["attr-value"].inside.entity=Prism.languages.markup.entity,Prism.languages.markup.doctype.inside["internal-subset"].inside=Prism.languages.markup,Prism.hooks.add("wrap",(function(a){"entity"===a.type&&(a.attributes.title=a.content.replace(/&/,"&"))})),Object.defineProperty(Prism.languages.markup.tag,"addInlined",{value:function(a,e){var s={};s["language-"+e]={pattern:/(^$)/i,lookbehind:!0,inside:Prism.languages[e]},s.cdata=/^$/i;var t={"included-cdata":{pattern://i,inside:s}};t["language-"+e]={pattern:/[\s\S]+/,inside:Prism.languages[e]};var n={};n[a]={pattern:RegExp("(<__[^>]*>)(?:))*\\]\\]>|(?!)".replace(/__/g,(function(){return a})),"i"),lookbehind:!0,greedy:!0,inside:t},Prism.languages.insertBefore("markup","cdata",n)}}),Object.defineProperty(Prism.languages.markup.tag,"addAttribute",{value:function(a,e){Prism.languages.markup.tag.inside["special-attr"].push({pattern:RegExp("(^|[\"'\\s])(?:"+a+")\\s*=\\s*(?:\"[^\"]*\"|'[^']*'|[^\\s'\">=]+(?=[\\s>]))","i"),lookbehind:!0,inside:{"attr-name":/^[^\s=]+/,"attr-value":{pattern:/=[\s\S]+/,inside:{value:{pattern:/(^=\s*(["']|(?!["'])))\S[\s\S]*(?=\2$)/,lookbehind:!0,alias:[e,"language-"+e],inside:Prism.languages[e]},punctuation:[{pattern:/^=/,alias:"attr-equals"},/"|'/]}}}})}}),Prism.languages.html=Prism.languages.markup,Prism.languages.mathml=Prism.languages.markup,Prism.languages.svg=Prism.languages.markup,Prism.languages.xml=Prism.languages.extend("markup",{}),Prism.languages.ssml=Prism.languages.xml,Prism.languages.atom=Prism.languages.xml,Prism.languages.rss=Prism.languages.xml;
+!function(s){var e=/(?:"(?:\\(?:\r\n|[\s\S])|[^"\\\r\n])*"|'(?:\\(?:\r\n|[\s\S])|[^'\\\r\n])*')/;s.languages.css={comment:/\/\*[\s\S]*?\*\//,atrule:{pattern:RegExp("@[\\w-](?:[^;{\\s\"']|\\s+(?!\\s)|"+e.source+")*?(?:;|(?=\\s*\\{))"),inside:{rule:/^@[\w-]+/,"selector-function-argument":{pattern:/(\bselector\s*\(\s*(?![\s)]))(?:[^()\s]|\s+(?![\s)])|\((?:[^()]|\([^()]*\))*\))+(?=\s*\))/,lookbehind:!0,alias:"selector"},keyword:{pattern:/(^|[^\w-])(?:and|not|only|or)(?![\w-])/,lookbehind:!0}}},url:{pattern:RegExp("\\burl\\((?:"+e.source+"|(?:[^\\\\\r\n()\"']|\\\\[^])*)\\)","i"),greedy:!0,inside:{function:/^url/i,punctuation:/^\(|\)$/,string:{pattern:RegExp("^"+e.source+"$"),alias:"url"}}},selector:{pattern:RegExp("(^|[{}\\s])[^{}\\s](?:[^{};\"'\\s]|\\s+(?![\\s{])|"+e.source+")*(?=\\s*\\{)"),lookbehind:!0},string:{pattern:e,greedy:!0},property:{pattern:/(^|[^-\w\xA0-\uFFFF])(?!\s)[-_a-z\xA0-\uFFFF](?:(?!\s)[-\w\xA0-\uFFFF])*(?=\s*:)/i,lookbehind:!0},important:/!important\b/i,function:{pattern:/(^|[^-a-z0-9])[-a-z0-9]+(?=\()/i,lookbehind:!0},punctuation:/[(){};:,]/},s.languages.css.atrule.inside.rest=s.languages.css;var t=s.languages.markup;t&&(t.tag.addInlined("style","css"),t.tag.addAttribute("style","css"))}(Prism);
+Prism.languages.clike={comment:[{pattern:/(^|[^\\])\/\*[\s\S]*?(?:\*\/|$)/,lookbehind:!0,greedy:!0},{pattern:/(^|[^\\:])\/\/.*/,lookbehind:!0,greedy:!0}],string:{pattern:/(["'])(?:\\(?:\r\n|[\s\S])|(?!\1)[^\\\r\n])*\1/,greedy:!0},"class-name":{pattern:/(\b(?:class|extends|implements|instanceof|interface|new|trait)\s+|\bcatch\s+\()[\w.\\]+/i,lookbehind:!0,inside:{punctuation:/[.\\]/}},keyword:/\b(?:break|catch|continue|do|else|finally|for|function|if|in|instanceof|new|null|return|throw|try|while)\b/,boolean:/\b(?:false|true)\b/,function:/\b\w+(?=\()/,number:/\b0x[\da-f]+\b|(?:\b\d+(?:\.\d*)?|\B\.\d+)(?:e[+-]?\d+)?/i,operator:/[<>]=?|[!=]=?=?|--?|\+\+?|&&?|\|\|?|[?*/~^%]/,punctuation:/[{}[\];(),.:]/};
+Prism.languages.javascript=Prism.languages.extend("clike",{"class-name":[Prism.languages.clike["class-name"],{pattern:/(^|[^$\w\xA0-\uFFFF])(?!\s)[_$A-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\.(?:constructor|prototype))/,lookbehind:!0}],keyword:[{pattern:/((?:^|\})\s*)catch\b/,lookbehind:!0},{pattern:/(^|[^.]|\.\.\.\s*)\b(?:as|assert(?=\s*\{)|async(?=\s*(?:function\b|\(|[$\w\xA0-\uFFFF]|$))|await|break|case|class|const|continue|debugger|default|delete|do|else|enum|export|extends|finally(?=\s*(?:\{|$))|for|from(?=\s*(?:['"]|$))|function|(?:get|set)(?=\s*(?:[#\[$\w\xA0-\uFFFF]|$))|if|implements|import|in|instanceof|interface|let|new|null|of|package|private|protected|public|return|static|super|switch|this|throw|try|typeof|undefined|var|void|while|with|yield)\b/,lookbehind:!0}],function:/#?(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*(?:\.\s*(?:apply|bind|call)\s*)?\()/,number:{pattern:RegExp("(^|[^\\w$])(?:NaN|Infinity|0[bB][01]+(?:_[01]+)*n?|0[oO][0-7]+(?:_[0-7]+)*n?|0[xX][\\dA-Fa-f]+(?:_[\\dA-Fa-f]+)*n?|\\d+(?:_\\d+)*n|(?:\\d+(?:_\\d+)*(?:\\.(?:\\d+(?:_\\d+)*)?)?|\\.\\d+(?:_\\d+)*)(?:[Ee][+-]?\\d+(?:_\\d+)*)?)(?![\\w$])"),lookbehind:!0},operator:/--|\+\+|\*\*=?|=>|&&=?|\|\|=?|[!=]==|<<=?|>>>?=?|[-+*/%&|^!=<>]=?|\.{3}|\?\?=?|\?\.?|[~:]/}),Prism.languages.javascript["class-name"][0].pattern=/(\b(?:class|extends|implements|instanceof|interface|new)\s+)[\w.\\]+/,Prism.languages.insertBefore("javascript","keyword",{regex:{pattern:RegExp("((?:^|[^$\\w\\xA0-\\uFFFF.\"'\\])\\s]|\\b(?:return|yield))\\s*)/(?:(?:\\[(?:[^\\]\\\\\r\n]|\\\\.)*\\]|\\\\.|[^/\\\\\\[\r\n])+/[dgimyus]{0,7}|(?:\\[(?:[^[\\]\\\\\r\n]|\\\\.|\\[(?:[^[\\]\\\\\r\n]|\\\\.|\\[(?:[^[\\]\\\\\r\n]|\\\\.)*\\])*\\])*\\]|\\\\.|[^/\\\\\\[\r\n])+/[dgimyus]{0,7}v[dgimyus]{0,7})(?=(?:\\s|/\\*(?:[^*]|\\*(?!/))*\\*/)*(?:$|[\r\n,.;:})\\]]|//))"),lookbehind:!0,greedy:!0,inside:{"regex-source":{pattern:/^(\/)[\s\S]+(?=\/[a-z]*$)/,lookbehind:!0,alias:"language-regex",inside:Prism.languages.regex},"regex-delimiter":/^\/|\/$/,"regex-flags":/^[a-z]+$/}},"function-variable":{pattern:/#?(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*[=:]\s*(?:async\s*)?(?:\bfunction\b|(?:\((?:[^()]|\([^()]*\))*\)|(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*)\s*=>))/,alias:"function"},parameter:[{pattern:/(function(?:\s+(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*)?\s*\(\s*)(?!\s)(?:[^()\s]|\s+(?![\s)])|\([^()]*\))+(?=\s*\))/,lookbehind:!0,inside:Prism.languages.javascript},{pattern:/(^|[^$\w\xA0-\uFFFF])(?!\s)[_$a-z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*=>)/i,lookbehind:!0,inside:Prism.languages.javascript},{pattern:/(\(\s*)(?!\s)(?:[^()\s]|\s+(?![\s)])|\([^()]*\))+(?=\s*\)\s*=>)/,lookbehind:!0,inside:Prism.languages.javascript},{pattern:/((?:\b|\s|^)(?!(?:as|async|await|break|case|catch|class|const|continue|debugger|default|delete|do|else|enum|export|extends|finally|for|from|function|get|if|implements|import|in|instanceof|interface|let|new|null|of|package|private|protected|public|return|set|static|super|switch|this|throw|try|typeof|undefined|var|void|while|with|yield)(?![$\w\xA0-\uFFFF]))(?:(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*\s*)\(\s*|\]\s*\(\s*)(?!\s)(?:[^()\s]|\s+(?![\s)])|\([^()]*\))+(?=\s*\)\s*\{)/,lookbehind:!0,inside:Prism.languages.javascript}],constant:/\b[A-Z](?:[A-Z_]|\dx?)*\b/}),Prism.languages.insertBefore("javascript","string",{hashbang:{pattern:/^#!.*/,greedy:!0,alias:"comment"},"template-string":{pattern:/`(?:\\[\s\S]|\$\{(?:[^{}]|\{(?:[^{}]|\{[^}]*\})*\})+\}|(?!\$\{)[^\\`])*`/,greedy:!0,inside:{"template-punctuation":{pattern:/^`|`$/,alias:"string"},interpolation:{pattern:/((?:^|[^\\])(?:\\{2})*)\$\{(?:[^{}]|\{(?:[^{}]|\{[^}]*\})*\})+\}/,lookbehind:!0,inside:{"interpolation-punctuation":{pattern:/^\$\{|\}$/,alias:"punctuation"},rest:Prism.languages.javascript}},string:/[\s\S]+/}},"string-property":{pattern:/((?:^|[,{])[ \t]*)(["'])(?:\\(?:\r\n|[\s\S])|(?!\2)[^\\\r\n])*\2(?=\s*:)/m,lookbehind:!0,greedy:!0,alias:"property"}}),Prism.languages.insertBefore("javascript","operator",{"literal-property":{pattern:/((?:^|[,{])[ \t]*)(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*:)/m,lookbehind:!0,alias:"property"}}),Prism.languages.markup&&(Prism.languages.markup.tag.addInlined("script","javascript"),Prism.languages.markup.tag.addAttribute("on(?:abort|blur|change|click|composition(?:end|start|update)|dblclick|error|focus(?:in|out)?|key(?:down|up)|load|mouse(?:down|enter|leave|move|out|over|up)|reset|resize|scroll|select|slotchange|submit|unload|wheel)","javascript")),Prism.languages.js=Prism.languages.javascript;
+!function(e){var t="\\b(?:BASH|BASHOPTS|BASH_ALIASES|BASH_ARGC|BASH_ARGV|BASH_CMDS|BASH_COMPLETION_COMPAT_DIR|BASH_LINENO|BASH_REMATCH|BASH_SOURCE|BASH_VERSINFO|BASH_VERSION|COLORTERM|COLUMNS|COMP_WORDBREAKS|DBUS_SESSION_BUS_ADDRESS|DEFAULTS_PATH|DESKTOP_SESSION|DIRSTACK|DISPLAY|EUID|GDMSESSION|GDM_LANG|GNOME_KEYRING_CONTROL|GNOME_KEYRING_PID|GPG_AGENT_INFO|GROUPS|HISTCONTROL|HISTFILE|HISTFILESIZE|HISTSIZE|HOME|HOSTNAME|HOSTTYPE|IFS|INSTANCE|JOB|LANG|LANGUAGE|LC_ADDRESS|LC_ALL|LC_IDENTIFICATION|LC_MEASUREMENT|LC_MONETARY|LC_NAME|LC_NUMERIC|LC_PAPER|LC_TELEPHONE|LC_TIME|LESSCLOSE|LESSOPEN|LINES|LOGNAME|LS_COLORS|MACHTYPE|MAILCHECK|MANDATORY_PATH|NO_AT_BRIDGE|OLDPWD|OPTERR|OPTIND|ORBIT_SOCKETDIR|OSTYPE|PAPERSIZE|PATH|PIPESTATUS|PPID|PS1|PS2|PS3|PS4|PWD|RANDOM|REPLY|SECONDS|SELINUX_INIT|SESSION|SESSIONTYPE|SESSION_MANAGER|SHELL|SHELLOPTS|SHLVL|SSH_AUTH_SOCK|TERM|UID|UPSTART_EVENTS|UPSTART_INSTANCE|UPSTART_JOB|UPSTART_SESSION|USER|WINDOWID|XAUTHORITY|XDG_CONFIG_DIRS|XDG_CURRENT_DESKTOP|XDG_DATA_DIRS|XDG_GREETER_DATA_DIR|XDG_MENU_PREFIX|XDG_RUNTIME_DIR|XDG_SEAT|XDG_SEAT_PATH|XDG_SESSION_DESKTOP|XDG_SESSION_ID|XDG_SESSION_PATH|XDG_SESSION_TYPE|XDG_VTNR|XMODIFIERS)\\b",a={pattern:/(^(["']?)\w+\2)[ \t]+\S.*/,lookbehind:!0,alias:"punctuation",inside:null},n={bash:a,environment:{pattern:RegExp("\\$"+t),alias:"constant"},variable:[{pattern:/\$?\(\([\s\S]+?\)\)/,greedy:!0,inside:{variable:[{pattern:/(^\$\(\([\s\S]+)\)\)/,lookbehind:!0},/^\$\(\(/],number:/\b0x[\dA-Fa-f]+\b|(?:\b\d+(?:\.\d*)?|\B\.\d+)(?:[Ee]-?\d+)?/,operator:/--|\+\+|\*\*=?|<<=?|>>=?|&&|\|\||[=!+\-*/%<>^&|]=?|[?~:]/,punctuation:/\(\(?|\)\)?|,|;/}},{pattern:/\$\((?:\([^)]+\)|[^()])+\)|`[^`]+`/,greedy:!0,inside:{variable:/^\$\(|^`|\)$|`$/}},{pattern:/\$\{[^}]+\}/,greedy:!0,inside:{operator:/:[-=?+]?|[!\/]|##?|%%?|\^\^?|,,?/,punctuation:/[\[\]]/,environment:{pattern:RegExp("(\\{)"+t),lookbehind:!0,alias:"constant"}}},/\$(?:\w+|[#?*!@$])/],entity:/\\(?:[abceEfnrtv\\"]|O?[0-7]{1,3}|U[0-9a-fA-F]{8}|u[0-9a-fA-F]{4}|x[0-9a-fA-F]{1,2})/};e.languages.bash={shebang:{pattern:/^#!\s*\/.*/,alias:"important"},comment:{pattern:/(^|[^"{\\$])#.*/,lookbehind:!0},"function-name":[{pattern:/(\bfunction\s+)[\w-]+(?=(?:\s*\(?:\s*\))?\s*\{)/,lookbehind:!0,alias:"function"},{pattern:/\b[\w-]+(?=\s*\(\s*\)\s*\{)/,alias:"function"}],"for-or-select":{pattern:/(\b(?:for|select)\s+)\w+(?=\s+in\s)/,alias:"variable",lookbehind:!0},"assign-left":{pattern:/(^|[\s;|&]|[<>]\()\w+(?:\.\w+)*(?=\+?=)/,inside:{environment:{pattern:RegExp("(^|[\\s;|&]|[<>]\\()"+t),lookbehind:!0,alias:"constant"}},alias:"variable",lookbehind:!0},parameter:{pattern:/(^|\s)-{1,2}(?:\w+:[+-]?)?\w+(?:\.\w+)*(?=[=\s]|$)/,alias:"variable",lookbehind:!0},string:[{pattern:/((?:^|[^<])<<-?\s*)(\w+)\s[\s\S]*?(?:\r?\n|\r)\2/,lookbehind:!0,greedy:!0,inside:n},{pattern:/((?:^|[^<])<<-?\s*)(["'])(\w+)\2\s[\s\S]*?(?:\r?\n|\r)\3/,lookbehind:!0,greedy:!0,inside:{bash:a}},{pattern:/(^|[^\\](?:\\\\)*)"(?:\\[\s\S]|\$\([^)]+\)|\$(?!\()|`[^`]+`|[^"\\`$])*"/,lookbehind:!0,greedy:!0,inside:n},{pattern:/(^|[^$\\])'[^']*'/,lookbehind:!0,greedy:!0},{pattern:/\$'(?:[^'\\]|\\[\s\S])*'/,greedy:!0,inside:{entity:n.entity}}],environment:{pattern:RegExp("\\$?"+t),alias:"constant"},variable:n.variable,function:{pattern:/(^|[\s;|&]|[<>]\()(?:add|apropos|apt|apt-cache|apt-get|aptitude|aspell|automysqlbackup|awk|basename|bash|bc|bconsole|bg|bzip2|cal|cargo|cat|cfdisk|chgrp|chkconfig|chmod|chown|chroot|cksum|clear|cmp|column|comm|composer|cp|cron|crontab|csplit|curl|cut|date|dc|dd|ddrescue|debootstrap|df|diff|diff3|dig|dir|dircolors|dirname|dirs|dmesg|docker|docker-compose|du|egrep|eject|env|ethtool|expand|expect|expr|fdformat|fdisk|fg|fgrep|file|find|fmt|fold|format|free|fsck|ftp|fuser|gawk|git|gparted|grep|groupadd|groupdel|groupmod|groups|grub-mkconfig|gzip|halt|head|hg|history|host|hostname|htop|iconv|id|ifconfig|ifdown|ifup|import|install|ip|java|jobs|join|kill|killall|less|link|ln|locate|logname|logrotate|look|lpc|lpr|lprint|lprintd|lprintq|lprm|ls|lsof|lynx|make|man|mc|mdadm|mkconfig|mkdir|mke2fs|mkfifo|mkfs|mkisofs|mknod|mkswap|mmv|more|most|mount|mtools|mtr|mutt|mv|nano|nc|netstat|nice|nl|node|nohup|notify-send|npm|nslookup|op|open|parted|passwd|paste|pathchk|ping|pkill|pnpm|podman|podman-compose|popd|pr|printcap|printenv|ps|pushd|pv|quota|quotacheck|quotactl|ram|rar|rcp|reboot|remsync|rename|renice|rev|rm|rmdir|rpm|rsync|scp|screen|sdiff|sed|sendmail|seq|service|sftp|sh|shellcheck|shuf|shutdown|sleep|slocate|sort|split|ssh|stat|strace|su|sudo|sum|suspend|swapon|sync|sysctl|tac|tail|tar|tee|time|timeout|top|touch|tr|traceroute|tsort|tty|umount|uname|unexpand|uniq|units|unrar|unshar|unzip|update-grub|uptime|useradd|userdel|usermod|users|uudecode|uuencode|v|vcpkg|vdir|vi|vim|virsh|vmstat|wait|watch|wc|wget|whereis|which|who|whoami|write|xargs|xdg-open|yarn|yes|zenity|zip|zsh|zypper)(?=$|[)\s;|&])/,lookbehind:!0},keyword:{pattern:/(^|[\s;|&]|[<>]\()(?:case|do|done|elif|else|esac|fi|for|function|if|in|select|then|until|while)(?=$|[)\s;|&])/,lookbehind:!0},builtin:{pattern:/(^|[\s;|&]|[<>]\()(?:\.|:|alias|bind|break|builtin|caller|cd|command|continue|declare|echo|enable|eval|exec|exit|export|getopts|hash|help|let|local|logout|mapfile|printf|pwd|read|readarray|readonly|return|set|shift|shopt|source|test|times|trap|type|typeset|ulimit|umask|unalias|unset)(?=$|[)\s;|&])/,lookbehind:!0,alias:"class-name"},boolean:{pattern:/(^|[\s;|&]|[<>]\()(?:false|true)(?=$|[)\s;|&])/,lookbehind:!0},"file-descriptor":{pattern:/\B&\d\b/,alias:"important"},operator:{pattern:/\d?<>|>\||\+=|=[=~]?|!=?|<<[<-]?|[&\d]?>>|\d[<>]&?|[<>][&=]?|&[>&]?|\|[&|]?/,inside:{"file-descriptor":{pattern:/^\d/,alias:"important"}}},punctuation:/\$?\(\(?|\)\)?|\.\.|[{}[\];\\]/,number:{pattern:/(^|\s)(?:[1-9]\d*|0)(?:[.,]\d+)?\b/,lookbehind:!0}},a.inside=e.languages.bash;for(var s=["comment","function-name","for-or-select","assign-left","parameter","string","environment","function","keyword","builtin","boolean","file-descriptor","operator","punctuation","number"],o=n.variable[1].inside,i=0;i",unchanged:" ",diff:"!"};Object.keys(n).forEach((function(a){var i=n[a],r=[];/^\w+$/.test(a)||r.push(/\w+/.exec(a)[0]),"diff"===a&&r.push("bold"),e.languages.diff[a]={pattern:RegExp("^(?:["+i+"].*(?:\r\n?|\n|(?![\\s\\S])))+","m"),alias:r,inside:{line:{pattern:/(.)(?=[\s\S]).*(?:\r\n?|\n)?/,lookbehind:!0},prefix:{pattern:/[\s\S]/,alias:/\w+/.exec(a)[0]}}}})),Object.defineProperty(e.languages.diff,"PREFIXES",{value:n})}(Prism);
+Prism.languages.go=Prism.languages.extend("clike",{string:{pattern:/(^|[^\\])"(?:\\.|[^"\\\r\n])*"|`[^`]*`/,lookbehind:!0,greedy:!0},keyword:/\b(?:break|case|chan|const|continue|default|defer|else|fallthrough|for|func|go(?:to)?|if|import|interface|map|package|range|return|select|struct|switch|type|var)\b/,boolean:/\b(?:_|false|iota|nil|true)\b/,number:[/\b0(?:b[01_]+|o[0-7_]+)i?\b/i,/\b0x(?:[a-f\d_]+(?:\.[a-f\d_]*)?|\.[a-f\d_]+)(?:p[+-]?\d+(?:_\d+)*)?i?(?!\w)/i,/(?:\b\d[\d_]*(?:\.[\d_]*)?|\B\.\d[\d_]*)(?:e[+-]?[\d_]+)?i?(?!\w)/i],operator:/[*\/%^!=]=?|\+[=+]?|-[=-]?|\|[=|]?|&(?:=|&|\^=?)?|>(?:>=?|=)?|<(?:<=?|=|-)?|:=|\.\.\./,builtin:/\b(?:append|bool|byte|cap|close|complex|complex(?:64|128)|copy|delete|error|float(?:32|64)|u?int(?:8|16|32|64)?|imag|len|make|new|panic|print(?:ln)?|real|recover|rune|string|uintptr)\b/}),Prism.languages.insertBefore("go","string",{char:{pattern:/'(?:\\.|[^'\\\r\n]){0,10}'/,greedy:!0}}),delete Prism.languages.go["class-name"];
+Prism.languages.graphql={comment:/#.*/,description:{pattern:/(?:"""(?:[^"]|(?!""")")*"""|"(?:\\.|[^\\"\r\n])*")(?=\s*[a-z_])/i,greedy:!0,alias:"string",inside:{"language-markdown":{pattern:/(^"(?:"")?)(?!\1)[\s\S]+(?=\1$)/,lookbehind:!0,inside:Prism.languages.markdown}}},string:{pattern:/"""(?:[^"]|(?!""")")*"""|"(?:\\.|[^\\"\r\n])*"/,greedy:!0},number:/(?:\B-|\b)\d+(?:\.\d+)?(?:e[+-]?\d+)?\b/i,boolean:/\b(?:false|true)\b/,variable:/\$[a-z_]\w*/i,directive:{pattern:/@[a-z_]\w*/i,alias:"function"},"attr-name":{pattern:/\b[a-z_]\w*(?=\s*(?:\((?:[^()"]|"(?:\\.|[^\\"\r\n])*")*\))?:)/i,greedy:!0},"atom-input":{pattern:/\b[A-Z]\w*Input\b/,alias:"class-name"},scalar:/\b(?:Boolean|Float|ID|Int|String)\b/,constant:/\b[A-Z][A-Z_\d]*\b/,"class-name":{pattern:/(\b(?:enum|implements|interface|on|scalar|type|union)\s+|&\s*|:\s*|\[)[A-Z_]\w*/,lookbehind:!0},fragment:{pattern:/(\bfragment\s+|\.{3}\s*(?!on\b))[a-zA-Z_]\w*/,lookbehind:!0,alias:"function"},"definition-mutation":{pattern:/(\bmutation\s+)[a-zA-Z_]\w*/,lookbehind:!0,alias:"function"},"definition-query":{pattern:/(\bquery\s+)[a-zA-Z_]\w*/,lookbehind:!0,alias:"function"},keyword:/\b(?:directive|enum|extend|fragment|implements|input|interface|mutation|on|query|repeatable|scalar|schema|subscription|type|union)\b/,operator:/[!=|&]|\.{3}/,"property-query":/\w+(?=\s*\()/,object:/\w+(?=\s*\{)/,punctuation:/[!(){}\[\]:=,]/,property:/\w+/},Prism.hooks.add("after-tokenize",(function(n){if("graphql"===n.language)for(var t=n.tokens.filter((function(n){return"string"!=typeof n&&"comment"!==n.type&&"scalar"!==n.type})),e=0;e0)){var s=f(/^\{$/,/^\}$/);if(-1===s)continue;for(var u=e;u=0&&b(p,"variable-input")}}}}function l(n){return t[e+n]}function c(n,t){t=t||0;for(var e=0;e=%~.:,;?+\-*/&|^])|requires|return|sealed|short|static|strictfp|super|switch|synchronized|this|throw|throws|to|transient|transitive|try|uses|var|void|volatile|while|with|yield)\b/,t="(?:[a-z]\\w*\\s*\\.\\s*)*(?:[A-Z]\\w*\\s*\\.\\s*)*",s={pattern:RegExp("(^|[^\\w.])"+t+"[A-Z](?:[\\d_A-Z]*[a-z]\\w*)?\\b"),lookbehind:!0,inside:{namespace:{pattern:/^[a-z]\w*(?:\s*\.\s*[a-z]\w*)*(?:\s*\.)?/,inside:{punctuation:/\./}},punctuation:/\./}};e.languages.java=e.languages.extend("clike",{string:{pattern:/(^|[^\\])"(?:\\.|[^"\\\r\n])*"/,lookbehind:!0,greedy:!0},"class-name":[s,{pattern:RegExp("(^|[^\\w.])"+t+"[A-Z]\\w*(?=\\s+\\w+\\s*[;,=()]|\\s*(?:\\[[\\s,]*\\]\\s*)?::\\s*new\\b)"),lookbehind:!0,inside:s.inside},{pattern:RegExp("(\\b(?:class|enum|extends|implements|instanceof|interface|new|record|throws)\\s+)"+t+"[A-Z]\\w*\\b"),lookbehind:!0,inside:s.inside}],keyword:n,function:[e.languages.clike.function,{pattern:/(::\s*)[a-z_]\w*/,lookbehind:!0}],number:/\b0b[01][01_]*L?\b|\b0x(?:\.[\da-f_p+-]+|[\da-f_]+(?:\.[\da-f_p+-]+)?)\b|(?:\b\d[\d_]*(?:\.[\d_]*)?|\B\.\d[\d_]*)(?:e[+-]?\d[\d_]*)?[dfl]?/i,operator:{pattern:/(^|[^.])(?:<<=?|>>>?=?|->|--|\+\+|&&|\|\||::|[?:~]|[-+*/%&|^!=<>]=?)/m,lookbehind:!0},constant:/\b[A-Z][A-Z_\d]+\b/}),e.languages.insertBefore("java","string",{"triple-quoted-string":{pattern:/"""[ \t]*[\r\n](?:(?:"|"")?(?:\\.|[^"\\]))*"""/,greedy:!0,alias:"string"},char:{pattern:/'(?:\\.|[^'\\\r\n]){1,6}'/,greedy:!0}}),e.languages.insertBefore("java","class-name",{annotation:{pattern:/(^|[^.])@\w+(?:\s*\.\s*\w+)*/,lookbehind:!0,alias:"punctuation"},generics:{pattern:/<(?:[\w\s,.?]|&(?!&)|<(?:[\w\s,.?]|&(?!&)|<(?:[\w\s,.?]|&(?!&)|<(?:[\w\s,.?]|&(?!&))*>)*>)*>)*>/,inside:{"class-name":s,keyword:n,punctuation:/[<>(),.:]/,operator:/[?&|]/}},import:[{pattern:RegExp("(\\bimport\\s+)"+t+"(?:[A-Z]\\w*|\\*)(?=\\s*;)"),lookbehind:!0,inside:{namespace:s.inside.namespace,punctuation:/\./,operator:/\*/,"class-name":/\w+/}},{pattern:RegExp("(\\bimport\\s+static\\s+)"+t+"(?:\\w+|\\*)(?=\\s*;)"),lookbehind:!0,alias:"static",inside:{namespace:s.inside.namespace,static:/\b\w+$/,punctuation:/\./,operator:/\*/,"class-name":/\w+/}}],namespace:{pattern:RegExp("(\\b(?:exports|import(?:\\s+static)?|module|open|opens|package|provides|requires|to|transitive|uses|with)\\s+)(?!)[a-z]\\w*(?:\\.[a-z]\\w*)*\\.?".replace(//g,(function(){return n.source}))),lookbehind:!0,inside:{punctuation:/\./}}})}(Prism);
+!function(n){n.languages.kotlin=n.languages.extend("clike",{keyword:{pattern:/(^|[^.])\b(?:abstract|actual|annotation|as|break|by|catch|class|companion|const|constructor|continue|crossinline|data|do|dynamic|else|enum|expect|external|final|finally|for|fun|get|if|import|in|infix|init|inline|inner|interface|internal|is|lateinit|noinline|null|object|open|operator|out|override|package|private|protected|public|reified|return|sealed|set|super|suspend|tailrec|this|throw|to|try|typealias|val|var|vararg|when|where|while)\b/,lookbehind:!0},function:[{pattern:/(?:`[^\r\n`]+`|\b\w+)(?=\s*\()/,greedy:!0},{pattern:/(\.)(?:`[^\r\n`]+`|\w+)(?=\s*\{)/,lookbehind:!0,greedy:!0}],number:/\b(?:0[xX][\da-fA-F]+(?:_[\da-fA-F]+)*|0[bB][01]+(?:_[01]+)*|\d+(?:_\d+)*(?:\.\d+(?:_\d+)*)?(?:[eE][+-]?\d+(?:_\d+)*)?[fFL]?)\b/,operator:/\+[+=]?|-[-=>]?|==?=?|!(?:!|==?)?|[\/*%<>]=?|[?:]:?|\.\.|&&|\|\||\b(?:and|inv|or|shl|shr|ushr|xor)\b/}),delete n.languages.kotlin["class-name"];var e={"interpolation-punctuation":{pattern:/^\$\{?|\}$/,alias:"punctuation"},expression:{pattern:/[\s\S]+/,inside:n.languages.kotlin}};n.languages.insertBefore("kotlin","string",{"string-literal":[{pattern:/"""(?:[^$]|\$(?:(?!\{)|\{[^{}]*\}))*?"""/,alias:"multiline",inside:{interpolation:{pattern:/\$(?:[a-z_]\w*|\{[^{}]*\})/i,inside:e},string:/[\s\S]+/}},{pattern:/"(?:[^"\\\r\n$]|\\.|\$(?:(?!\{)|\{[^{}]*\}))*"/,alias:"singleline",inside:{interpolation:{pattern:/((?:^|[^\\])(?:\\{2})*)\$(?:[a-z_]\w*|\{[^{}]*\})/i,lookbehind:!0,inside:e},string:/[\s\S]+/}}],char:{pattern:/'(?:[^'\\\r\n]|\\(?:.|u[a-fA-F0-9]{0,4}))'/,greedy:!0}}),delete n.languages.kotlin.string,n.languages.insertBefore("kotlin","keyword",{annotation:{pattern:/\B@(?:\w+:)?(?:[A-Z]\w*|\[[^\]]+\])/,alias:"builtin"}}),n.languages.insertBefore("kotlin","function",{label:{pattern:/\b\w+@|@\w+\b/,alias:"symbol"}}),n.languages.kt=n.languages.kotlin,n.languages.kts=n.languages.kotlin}(Prism);
+!function(e){function n(e,n){return"___"+e.toUpperCase()+n+"___"}Object.defineProperties(e.languages["markup-templating"]={},{buildPlaceholders:{value:function(t,a,r,o){if(t.language===a){var c=t.tokenStack=[];t.code=t.code.replace(r,(function(e){if("function"==typeof o&&!o(e))return e;for(var r,i=c.length;-1!==t.code.indexOf(r=n(a,i));)++i;return c[i]=e,r})),t.grammar=e.languages.markup}}},tokenizePlaceholders:{value:function(t,a){if(t.language===a&&t.tokenStack){t.grammar=e.languages[a];var r=0,o=Object.keys(t.tokenStack);!function c(i){for(var u=0;u=o.length);u++){var g=i[u];if("string"==typeof g||g.content&&"string"==typeof g.content){var l=o[r],s=t.tokenStack[l],f="string"==typeof g?g:g.content,p=n(a,l),k=f.indexOf(p);if(k>-1){++r;var m=f.substring(0,k),d=new e.Token(a,e.tokenize(s,t.grammar),"language-"+a,s),h=f.substring(k+p.length),v=[];m&&v.push.apply(v,c([m])),v.push(d),h&&v.push.apply(v,c([h])),"string"==typeof g?i.splice.apply(i,[u,1].concat(v)):g.content=v}}else g.content&&c(g.content)}return i}(t.tokens)}}}})}(Prism);
+!function(e){var n=/\$(?:\w[a-z\d]*(?:_[^\x00-\x1F\s"'\\()$]*)?|\{[^}\s"'\\]+\})/i;e.languages.nginx={comment:{pattern:/(^|[\s{};])#.*/,lookbehind:!0,greedy:!0},directive:{pattern:/(^|\s)\w(?:[^;{}"'\\\s]|\\.|"(?:[^"\\]|\\.)*"|'(?:[^'\\]|\\.)*'|\s+(?:#.*(?!.)|(?![#\s])))*?(?=\s*[;{])/,lookbehind:!0,greedy:!0,inside:{string:{pattern:/((?:^|[^\\])(?:\\\\)*)(?:"(?:[^"\\]|\\.)*"|'(?:[^'\\]|\\.)*')/,lookbehind:!0,greedy:!0,inside:{escape:{pattern:/\\["'\\nrt]/,alias:"entity"},variable:n}},comment:{pattern:/(\s)#.*/,lookbehind:!0,greedy:!0},keyword:{pattern:/^\S+/,greedy:!0},boolean:{pattern:/(\s)(?:off|on)(?!\S)/,lookbehind:!0},number:{pattern:/(\s)\d+[a-z]*(?!\S)/i,lookbehind:!0},variable:n}},punctuation:/[{};]/}}(Prism);
+!function(e){var a=/\/\*[\s\S]*?\*\/|\/\/.*|#(?!\[).*/,t=[{pattern:/\b(?:false|true)\b/i,alias:"boolean"},{pattern:/(::\s*)\b[a-z_]\w*\b(?!\s*\()/i,greedy:!0,lookbehind:!0},{pattern:/(\b(?:case|const)\s+)\b[a-z_]\w*(?=\s*[;=])/i,greedy:!0,lookbehind:!0},/\b(?:null)\b/i,/\b[A-Z_][A-Z0-9_]*\b(?!\s*\()/],i=/\b0b[01]+(?:_[01]+)*\b|\b0o[0-7]+(?:_[0-7]+)*\b|\b0x[\da-f]+(?:_[\da-f]+)*\b|(?:\b\d+(?:_\d+)*\.?(?:\d+(?:_\d+)*)?|\B\.\d+)(?:e[+-]?\d+)?/i,n=/=>|\?\?=?|\.{3}|\??->|[!=]=?=?|::|\*\*=?|--|\+\+|&&|\|\||<<|>>|[?~]|[/^|%*&<>.+-]=?/,s=/[{}\[\](),:;]/;e.languages.php={delimiter:{pattern:/\?>$|^<\?(?:php(?=\s)|=)?/i,alias:"important"},comment:a,variable:/\$+(?:\w+\b|(?=\{))/,package:{pattern:/(namespace\s+|use\s+(?:function\s+)?)(?:\\?\b[a-z_]\w*)+\b(?!\\)/i,lookbehind:!0,inside:{punctuation:/\\/}},"class-name-definition":{pattern:/(\b(?:class|enum|interface|trait)\s+)\b[a-z_]\w*(?!\\)\b/i,lookbehind:!0,alias:"class-name"},"function-definition":{pattern:/(\bfunction\s+)[a-z_]\w*(?=\s*\()/i,lookbehind:!0,alias:"function"},keyword:[{pattern:/(\(\s*)\b(?:array|bool|boolean|float|int|integer|object|string)\b(?=\s*\))/i,alias:"type-casting",greedy:!0,lookbehind:!0},{pattern:/([(,?]\s*)\b(?:array(?!\s*\()|bool|callable|(?:false|null)(?=\s*\|)|float|int|iterable|mixed|object|self|static|string)\b(?=\s*\$)/i,alias:"type-hint",greedy:!0,lookbehind:!0},{pattern:/(\)\s*:\s*(?:\?\s*)?)\b(?:array(?!\s*\()|bool|callable|(?:false|null)(?=\s*\|)|float|int|iterable|mixed|never|object|self|static|string|void)\b/i,alias:"return-type",greedy:!0,lookbehind:!0},{pattern:/\b(?:array(?!\s*\()|bool|float|int|iterable|mixed|object|string|void)\b/i,alias:"type-declaration",greedy:!0},{pattern:/(\|\s*)(?:false|null)\b|\b(?:false|null)(?=\s*\|)/i,alias:"type-declaration",greedy:!0,lookbehind:!0},{pattern:/\b(?:parent|self|static)(?=\s*::)/i,alias:"static-context",greedy:!0},{pattern:/(\byield\s+)from\b/i,lookbehind:!0},/\bclass\b/i,{pattern:/((?:^|[^\s>:]|(?:^|[^-])>|(?:^|[^:]):)\s*)\b(?:abstract|and|array|as|break|callable|case|catch|clone|const|continue|declare|default|die|do|echo|else|elseif|empty|enddeclare|endfor|endforeach|endif|endswitch|endwhile|enum|eval|exit|extends|final|finally|fn|for|foreach|function|global|goto|if|implements|include|include_once|instanceof|insteadof|interface|isset|list|match|namespace|never|new|or|parent|print|private|protected|public|readonly|require|require_once|return|self|static|switch|throw|trait|try|unset|use|var|while|xor|yield|__halt_compiler)\b/i,lookbehind:!0}],"argument-name":{pattern:/([(,]\s*)\b[a-z_]\w*(?=\s*:(?!:))/i,lookbehind:!0},"class-name":[{pattern:/(\b(?:extends|implements|instanceof|new(?!\s+self|\s+static))\s+|\bcatch\s*\()\b[a-z_]\w*(?!\\)\b/i,greedy:!0,lookbehind:!0},{pattern:/(\|\s*)\b[a-z_]\w*(?!\\)\b/i,greedy:!0,lookbehind:!0},{pattern:/\b[a-z_]\w*(?!\\)\b(?=\s*\|)/i,greedy:!0},{pattern:/(\|\s*)(?:\\?\b[a-z_]\w*)+\b/i,alias:"class-name-fully-qualified",greedy:!0,lookbehind:!0,inside:{punctuation:/\\/}},{pattern:/(?:\\?\b[a-z_]\w*)+\b(?=\s*\|)/i,alias:"class-name-fully-qualified",greedy:!0,inside:{punctuation:/\\/}},{pattern:/(\b(?:extends|implements|instanceof|new(?!\s+self\b|\s+static\b))\s+|\bcatch\s*\()(?:\\?\b[a-z_]\w*)+\b(?!\\)/i,alias:"class-name-fully-qualified",greedy:!0,lookbehind:!0,inside:{punctuation:/\\/}},{pattern:/\b[a-z_]\w*(?=\s*\$)/i,alias:"type-declaration",greedy:!0},{pattern:/(?:\\?\b[a-z_]\w*)+(?=\s*\$)/i,alias:["class-name-fully-qualified","type-declaration"],greedy:!0,inside:{punctuation:/\\/}},{pattern:/\b[a-z_]\w*(?=\s*::)/i,alias:"static-context",greedy:!0},{pattern:/(?:\\?\b[a-z_]\w*)+(?=\s*::)/i,alias:["class-name-fully-qualified","static-context"],greedy:!0,inside:{punctuation:/\\/}},{pattern:/([(,?]\s*)[a-z_]\w*(?=\s*\$)/i,alias:"type-hint",greedy:!0,lookbehind:!0},{pattern:/([(,?]\s*)(?:\\?\b[a-z_]\w*)+(?=\s*\$)/i,alias:["class-name-fully-qualified","type-hint"],greedy:!0,lookbehind:!0,inside:{punctuation:/\\/}},{pattern:/(\)\s*:\s*(?:\?\s*)?)\b[a-z_]\w*(?!\\)\b/i,alias:"return-type",greedy:!0,lookbehind:!0},{pattern:/(\)\s*:\s*(?:\?\s*)?)(?:\\?\b[a-z_]\w*)+\b(?!\\)/i,alias:["class-name-fully-qualified","return-type"],greedy:!0,lookbehind:!0,inside:{punctuation:/\\/}}],constant:t,function:{pattern:/(^|[^\\\w])\\?[a-z_](?:[\w\\]*\w)?(?=\s*\()/i,lookbehind:!0,inside:{punctuation:/\\/}},property:{pattern:/(->\s*)\w+/,lookbehind:!0},number:i,operator:n,punctuation:s};var l={pattern:/\{\$(?:\{(?:\{[^{}]+\}|[^{}]+)\}|[^{}])+\}|(^|[^\\{])\$+(?:\w+(?:\[[^\r\n\[\]]+\]|->\w+)?)/,lookbehind:!0,inside:e.languages.php},r=[{pattern:/<<<'([^']+)'[\r\n](?:.*[\r\n])*?\1;/,alias:"nowdoc-string",greedy:!0,inside:{delimiter:{pattern:/^<<<'[^']+'|[a-z_]\w*;$/i,alias:"symbol",inside:{punctuation:/^<<<'?|[';]$/}}}},{pattern:/<<<(?:"([^"]+)"[\r\n](?:.*[\r\n])*?\1;|([a-z_]\w*)[\r\n](?:.*[\r\n])*?\2;)/i,alias:"heredoc-string",greedy:!0,inside:{delimiter:{pattern:/^<<<(?:"[^"]+"|[a-z_]\w*)|[a-z_]\w*;$/i,alias:"symbol",inside:{punctuation:/^<<<"?|[";]$/}},interpolation:l}},{pattern:/`(?:\\[\s\S]|[^\\`])*`/,alias:"backtick-quoted-string",greedy:!0},{pattern:/'(?:\\[\s\S]|[^\\'])*'/,alias:"single-quoted-string",greedy:!0},{pattern:/"(?:\\[\s\S]|[^\\"])*"/,alias:"double-quoted-string",greedy:!0,inside:{interpolation:l}}];e.languages.insertBefore("php","variable",{string:r,attribute:{pattern:/#\[(?:[^"'\/#]|\/(?![*/])|\/\/.*$|#(?!\[).*$|\/\*(?:[^*]|\*(?!\/))*\*\/|"(?:\\[\s\S]|[^\\"])*"|'(?:\\[\s\S]|[^\\'])*')+\](?=\s*[a-z$#])/im,greedy:!0,inside:{"attribute-content":{pattern:/^(#\[)[\s\S]+(?=\]$)/,lookbehind:!0,inside:{comment:a,string:r,"attribute-class-name":[{pattern:/([^:]|^)\b[a-z_]\w*(?!\\)\b/i,alias:"class-name",greedy:!0,lookbehind:!0},{pattern:/([^:]|^)(?:\\?\b[a-z_]\w*)+/i,alias:["class-name","class-name-fully-qualified"],greedy:!0,lookbehind:!0,inside:{punctuation:/\\/}}],constant:t,number:i,operator:n,punctuation:s}},delimiter:{pattern:/^#\[|\]$/,alias:"punctuation"}}}}),e.hooks.add("before-tokenize",(function(a){/<\?/.test(a.code)&&e.languages["markup-templating"].buildPlaceholders(a,"php",/<\?(?:[^"'/#]|\/(?![*/])|("|')(?:\\[\s\S]|(?!\1)[^\\])*\1|(?:\/\/|#(?!\[))(?:[^?\n\r]|\?(?!>))*(?=$|\?>|[\r\n])|#\[|\/\*(?:[^*]|\*(?!\/))*(?:\*\/|$))*?(?:\?>|$)/g)})),e.hooks.add("after-tokenize",(function(a){e.languages["markup-templating"].tokenizePlaceholders(a,"php")}))}(Prism);
+Prism.languages.properties={comment:/^[ \t]*[#!].*$/m,value:{pattern:/(^[ \t]*(?:\\(?:\r\n|[\s\S])|[^\\\s:=])+(?: *[=:] *(?! )| ))(?:\\(?:\r\n|[\s\S])|[^\\\r\n])+/m,lookbehind:!0,alias:"attr-value"},key:{pattern:/^[ \t]*(?:\\(?:\r\n|[\s\S])|[^\\\s:=])+(?= *[=:]| )/m,alias:"attr-name"},punctuation:/[=:]/};
+Prism.languages.scala=Prism.languages.extend("java",{"triple-quoted-string":{pattern:/"""[\s\S]*?"""/,greedy:!0,alias:"string"},string:{pattern:/("|')(?:\\.|(?!\1)[^\\\r\n])*\1/,greedy:!0},keyword:/<-|=>|\b(?:abstract|case|catch|class|def|derives|do|else|enum|extends|extension|final|finally|for|forSome|given|if|implicit|import|infix|inline|lazy|match|new|null|object|opaque|open|override|package|private|protected|return|sealed|self|super|this|throw|trait|transparent|try|type|using|val|var|while|with|yield)\b/,number:/\b0x(?:[\da-f]*\.)?[\da-f]+|(?:\b\d+(?:\.\d*)?|\B\.\d+)(?:e\d+)?[dfl]?/i,builtin:/\b(?:Any|AnyRef|AnyVal|Boolean|Byte|Char|Double|Float|Int|Long|Nothing|Short|String|Unit)\b/,symbol:/'[^\d\s\\]\w*/}),Prism.languages.insertBefore("scala","triple-quoted-string",{"string-interpolation":{pattern:/\b[a-z]\w*(?:"""(?:[^$]|\$(?:[^{]|\{(?:[^{}]|\{[^{}]*\})*\}))*?"""|"(?:[^$"\r\n]|\$(?:[^{]|\{(?:[^{}]|\{[^{}]*\})*\}))*")/i,greedy:!0,inside:{id:{pattern:/^\w+/,greedy:!0,alias:"function"},escape:{pattern:/\\\$"|\$[$"]/,greedy:!0,alias:"symbol"},interpolation:{pattern:/\$(?:\w+|\{(?:[^{}]|\{[^{}]*\})*\})/,greedy:!0,inside:{punctuation:/^\$\{?|\}$/,expression:{pattern:/[\s\S]+/,inside:Prism.languages.scala}}},string:/[\s\S]+/}}}),delete Prism.languages.scala["class-name"],delete Prism.languages.scala.function,delete Prism.languages.scala.constant;
+Prism.languages.swift={comment:{pattern:/(^|[^\\:])(?:\/\/.*|\/\*(?:[^/*]|\/(?!\*)|\*(?!\/)|\/\*(?:[^*]|\*(?!\/))*\*\/)*\*\/)/,lookbehind:!0,greedy:!0},"string-literal":[{pattern:RegExp('(^|[^"#])(?:"(?:\\\\(?:\\((?:[^()]|\\([^()]*\\))*\\)|\r\n|[^(])|[^\\\\\r\n"])*"|"""(?:\\\\(?:\\((?:[^()]|\\([^()]*\\))*\\)|[^(])|[^\\\\"]|"(?!""))*""")(?!["#])'),lookbehind:!0,greedy:!0,inside:{interpolation:{pattern:/(\\\()(?:[^()]|\([^()]*\))*(?=\))/,lookbehind:!0,inside:null},"interpolation-punctuation":{pattern:/^\)|\\\($/,alias:"punctuation"},punctuation:/\\(?=[\r\n])/,string:/[\s\S]+/}},{pattern:RegExp('(^|[^"#])(#+)(?:"(?:\\\\(?:#+\\((?:[^()]|\\([^()]*\\))*\\)|\r\n|[^#])|[^\\\\\r\n])*?"|"""(?:\\\\(?:#+\\((?:[^()]|\\([^()]*\\))*\\)|[^#])|[^\\\\])*?""")\\2'),lookbehind:!0,greedy:!0,inside:{interpolation:{pattern:/(\\#+\()(?:[^()]|\([^()]*\))*(?=\))/,lookbehind:!0,inside:null},"interpolation-punctuation":{pattern:/^\)|\\#+\($/,alias:"punctuation"},string:/[\s\S]+/}}],directive:{pattern:RegExp("#(?:(?:elseif|if)\\b(?:[ \t]*(?:![ \t]*)?(?:\\b\\w+\\b(?:[ \t]*\\((?:[^()]|\\([^()]*\\))*\\))?|\\((?:[^()]|\\([^()]*\\))*\\))(?:[ \t]*(?:&&|\\|\\|))?)+|(?:else|endif)\\b)"),alias:"property",inside:{"directive-name":/^#\w+/,boolean:/\b(?:false|true)\b/,number:/\b\d+(?:\.\d+)*\b/,operator:/!|&&|\|\||[<>]=?/,punctuation:/[(),]/}},literal:{pattern:/#(?:colorLiteral|column|dsohandle|file(?:ID|Literal|Path)?|function|imageLiteral|line)\b/,alias:"constant"},"other-directive":{pattern:/#\w+\b/,alias:"property"},attribute:{pattern:/@\w+/,alias:"atrule"},"function-definition":{pattern:/(\bfunc\s+)\w+/,lookbehind:!0,alias:"function"},label:{pattern:/\b(break|continue)\s+\w+|\b[a-zA-Z_]\w*(?=\s*:\s*(?:for|repeat|while)\b)/,lookbehind:!0,alias:"important"},keyword:/\b(?:Any|Protocol|Self|Type|actor|as|assignment|associatedtype|associativity|async|await|break|case|catch|class|continue|convenience|default|defer|deinit|didSet|do|dynamic|else|enum|extension|fallthrough|fileprivate|final|for|func|get|guard|higherThan|if|import|in|indirect|infix|init|inout|internal|is|isolated|lazy|left|let|lowerThan|mutating|none|nonisolated|nonmutating|open|operator|optional|override|postfix|precedencegroup|prefix|private|protocol|public|repeat|required|rethrows|return|right|safe|self|set|some|static|struct|subscript|super|switch|throw|throws|try|typealias|unowned|unsafe|var|weak|where|while|willSet)\b/,boolean:/\b(?:false|true)\b/,nil:{pattern:/\bnil\b/,alias:"constant"},"short-argument":/\$\d+\b/,omit:{pattern:/\b_\b/,alias:"keyword"},number:/\b(?:[\d_]+(?:\.[\de_]+)?|0x[a-f0-9_]+(?:\.[a-f0-9p_]+)?|0b[01_]+|0o[0-7_]+)\b/i,"class-name":/\b[A-Z](?:[A-Z_\d]*[a-z]\w*)?\b/,function:/\b[a-z_]\w*(?=\s*\()/i,constant:/\b(?:[A-Z_]{2,}|k[A-Z][A-Za-z_]+)\b/,operator:/[-+*/%=!<>&|^~?]+|\.[.\-+*/%=!<>&|^~?]+/,punctuation:/[{}[\]();,.:\\]/},Prism.languages.swift["string-literal"].forEach((function(e){e.inside.interpolation.inside=Prism.languages.swift}));
+!function(e){e.languages.typescript=e.languages.extend("javascript",{"class-name":{pattern:/(\b(?:class|extends|implements|instanceof|interface|new|type)\s+)(?!keyof\b)(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?:\s*<(?:[^<>]|<(?:[^<>]|<[^<>]*>)*>)*>)?/,lookbehind:!0,greedy:!0,inside:null},builtin:/\b(?:Array|Function|Promise|any|boolean|console|never|number|string|symbol|unknown)\b/}),e.languages.typescript.keyword.push(/\b(?:abstract|declare|is|keyof|readonly|require)\b/,/\b(?:asserts|infer|interface|module|namespace|type)\b(?=\s*(?:[{_$a-zA-Z\xA0-\uFFFF]|$))/,/\btype\b(?=\s*(?:[\{*]|$))/),delete e.languages.typescript.parameter,delete e.languages.typescript["literal-property"];var s=e.languages.extend("typescript",{});delete s["class-name"],e.languages.typescript["class-name"].inside=s,e.languages.insertBefore("typescript","function",{decorator:{pattern:/@[$\w\xA0-\uFFFF]+/,inside:{at:{pattern:/^@/,alias:"operator"},function:/^[\s\S]+/}},"generic-function":{pattern:/#?(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*\s*<(?:[^<>]|<(?:[^<>]|<[^<>]*>)*>)*>(?=\s*\()/,greedy:!0,inside:{function:/^#?(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*/,generic:{pattern:/<[\s\S]+/,alias:"class-name",inside:s}}}}),e.languages.ts=e.languages.typescript}(Prism);
+!function(e){var n=/[*&][^\s[\]{},]+/,r=/!(?:<[\w\-%#;/?:@&=+$,.!~*'()[\]]+>|(?:[a-zA-Z\d-]*!)?[\w\-%#;/?:@&=+$.~*'()]+)?/,t="(?:"+r.source+"(?:[ \t]+"+n.source+")?|"+n.source+"(?:[ \t]+"+r.source+")?)",a="(?:[^\\s\\x00-\\x08\\x0e-\\x1f!\"#%&'*,\\-:>?@[\\]`{|}\\x7f-\\x84\\x86-\\x9f\\ud800-\\udfff\\ufffe\\uffff]|[?:-])(?:[ \t]*(?:(?![#:])|:))*".replace(//g,(function(){return"[^\\s\\x00-\\x08\\x0e-\\x1f,[\\]{}\\x7f-\\x84\\x86-\\x9f\\ud800-\\udfff\\ufffe\\uffff]"})),d="\"(?:[^\"\\\\\r\n]|\\\\.)*\"|'(?:[^'\\\\\r\n]|\\\\.)*'";function o(e,n){n=(n||"").replace(/m/g,"")+"m";var r="([:\\-,[{]\\s*(?:\\s<>[ \t]+)?)(?:<>)(?=[ \t]*(?:$|,|\\]|\\}|(?:[\r\n]\\s*)?#))".replace(/<>/g,(function(){return t})).replace(/<>/g,(function(){return e}));return RegExp(r,n)}e.languages.yaml={scalar:{pattern:RegExp("([\\-:]\\s*(?:\\s<>[ \t]+)?[|>])[ \t]*(?:((?:\r?\n|\r)[ \t]+)\\S[^\r\n]*(?:\\2[^\r\n]+)*)".replace(/<>/g,(function(){return t}))),lookbehind:!0,alias:"string"},comment:/#.*/,key:{pattern:RegExp("((?:^|[:\\-,[{\r\n?])[ \t]*(?:<>[ \t]+)?)<>(?=\\s*:\\s)".replace(/<>/g,(function(){return t})).replace(/<>/g,(function(){return"(?:"+a+"|"+d+")"}))),lookbehind:!0,greedy:!0,alias:"atrule"},directive:{pattern:/(^[ \t]*)%.+/m,lookbehind:!0,alias:"important"},datetime:{pattern:o("\\d{4}-\\d\\d?-\\d\\d?(?:[tT]|[ \t]+)\\d\\d?:\\d{2}:\\d{2}(?:\\.\\d*)?(?:[ \t]*(?:Z|[-+]\\d\\d?(?::\\d{2})?))?|\\d{4}-\\d{2}-\\d{2}|\\d\\d?:\\d{2}(?::\\d{2}(?:\\.\\d*)?)?"),lookbehind:!0,alias:"number"},boolean:{pattern:o("false|true","i"),lookbehind:!0,alias:"important"},null:{pattern:o("null|~","i"),lookbehind:!0,alias:"important"},string:{pattern:o(d),lookbehind:!0,greedy:!0},number:{pattern:o("[+-]?(?:0x[\\da-f]+|0o[0-7]+|(?:\\d+(?:\\.\\d*)?|\\.\\d+)(?:e[+-]?\\d+)?|\\.inf|\\.nan)","i"),lookbehind:!0},tag:r,important:n,punctuation:/---|[:[\]{}\-,|>?]|\.\.\./},e.languages.yml=e.languages.yaml}(Prism);
+!function(){if("undefined"!=typeof Prism){var e=/^diff-([\w-]+)/i,i=/<\/?(?!\d)[^\s>\/=$<%]+(?:\s(?:\s*[^\s>\/=]+(?:\s*=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+(?=[\s>]))|(?=[\s/>])))+)?\s*\/?>/g,a=RegExp("(?:__|[^\r\n<])*(?:\r\n?|\n|(?:__|[^\r\n<])(?![^\r\n]))".replace(/__/g,(function(){return i.source})),"gi"),s=!1;Prism.hooks.add("before-sanity-check",(function(i){var a=i.language;e.test(a)&&!i.grammar&&(i.grammar=Prism.languages[a]=Prism.languages.diff)})),Prism.hooks.add("before-tokenize",(function(i){s||Prism.languages.diff||Prism.plugins.autoloader||(s=!0,console.warn("Prism's Diff Highlight plugin requires the Diff language definition (prism-diff.js).Make sure the language definition is loaded or use Prism's Autoloader plugin."));var a=i.language;e.test(a)&&!Prism.languages[a]&&(Prism.languages[a]=Prism.languages.diff)})),Prism.hooks.add("wrap",(function(s){var r,n;if("diff"!==s.language){var g=e.exec(s.language);if(!g)return;r=g[1],n=Prism.languages[r]}var f=Prism.languages.diff&&Prism.languages.diff.PREFIXES;if(f&&s.type in f){var u,l=s.content.replace(i,"").replace(/</g,"<").replace(/&/g,"&"),t=l.replace(/(^|[\r\n])./g,"$1");u=n?Prism.highlight(t,n,r):Prism.util.encode(t);var o,m=new Prism.Token("prefix",f[s.type],[/\w+/.exec(s.type)[0]]),d=Prism.Token.stringify(m,s.language),c=[];for(a.lastIndex=0;o=a.exec(u);)c.push(d+o[0]);/(?:^|[\r\n]).$/.test(l)&&c.push(d),s.content=c.join(""),n&&s.classes.push("language-"+r)}}))}}();
diff --git a/assets/js/video/pb-code-highlight.js b/assets/js/video/pb-code-highlight.js
deleted file mode 100644
index 419ff085f0..0000000000
--- a/assets/js/video/pb-code-highlight.js
+++ /dev/null
@@ -1,335 +0,0 @@
-
-var arrCodeElems = document.getElementsByClassName("pb-code-hl");
-
-for(i=0; i -1) {
- s = str.search(start);
- e = str.indexOf(end, s);
- if (e == -1) {e = str.length;}
- if (repl) {
- a.push(func(str.substring(s, e + (end.length))));
- str = str.substring(0, s) + repl + str.substr(e + (end.length));
- } else {
- d += str.substring(0, s);
- d += func(str.substring(s, e + (end.length)));
- str = str.substr(e + (end.length));
- }
- }
- this.rest = d + str;
- this.arr = a;
- }
- function htmlMode(txt) {
- var rest = txt, done = "", php, comment, angular, startpos, endpos, note, i;
- comment = new extract(rest, "<!--", "-->", commentMode, "W3HTMLCOMMENTPOS");
- rest = comment.rest;
- while (rest.indexOf("<") > -1) {
- note = "";
- startpos = rest.indexOf("<");
- if (rest.substr(startpos, 9).toUpperCase() == "<STYLE") {note = "css";}
- if (rest.substr(startpos, 10).toUpperCase() == "<SCRIPT") {note = "javascript";}
- endpos = rest.indexOf(">", startpos);
- if (endpos == -1) {endpos = rest.length;}
- done += rest.substring(0, startpos);
- done += tagMode(rest.substring(startpos, endpos + 4));
- rest = rest.substr(endpos + 4);
- if (note == "css") {
- endpos = rest.indexOf("</style>");
- if (endpos > -1) {
- done += cssMode(rest.substring(0, endpos));
- rest = rest.substr(endpos);
- }
- }
- if (note == "javascript") {
- endpos = rest.indexOf("</script>");
- if (endpos > -1) {
- done += jsMode(rest.substring(0, endpos));
- rest = rest.substr(endpos);
- }
- }
- }
- rest = done + rest;
- for (i = 0; i < comment.arr.length; i++) {
- rest = rest.replace("W3HTMLCOMMENTPOS", comment.arr[i]);
- }
- return rest;
- }
- function tagMode(txt) {
- var rest = txt, done = "", startpos, endpos, result;
- while (rest.search(/(\s| )/) > -1) {
- startpos = rest.search(/(\s| )/);
- endpos = rest.indexOf(">");
- if (endpos == -1) {endpos = rest.length;}
- done += rest.substring(0, startpos);
- done += attributeMode(rest.substring(startpos, endpos));
- rest = rest.substr(endpos);
- }
- result = done + rest;
- result = "< " + result.substring(4);
- if (result.substr(result.length - 4, 4) == ">") {
- result = result.substring(0, result.length - 4) + "> ";
- }
- return "" + result + " ";
- }
- function attributeMode(txt) {
- var rest = txt, done = "", startpos, endpos, singlefnuttpos, doublefnuttpos, spacepos;
- while (rest.indexOf("=") > -1) {
- endpos = -1;
- startpos = rest.indexOf("=");
- singlefnuttpos = rest.indexOf("'", startpos);
- doublefnuttpos = rest.indexOf('"', startpos);
- spacepos = rest.indexOf(" ", startpos + 2);
- if (spacepos > -1 && (spacepos < singlefnuttpos || singlefnuttpos == -1) && (spacepos < doublefnuttpos || doublefnuttpos == -1)) {
- endpos = rest.indexOf(" ", startpos);
- } else if (doublefnuttpos > -1 && (doublefnuttpos < singlefnuttpos || singlefnuttpos == -1) && (doublefnuttpos < spacepos || spacepos == -1)) {
- endpos = rest.indexOf('"', rest.indexOf('"', startpos) + 1);
- } else if (singlefnuttpos > -1 && (singlefnuttpos < doublefnuttpos || doublefnuttpos == -1) && (singlefnuttpos < spacepos || spacepos == -1)) {
- endpos = rest.indexOf("'", rest.indexOf("'", startpos) + 1);
- }
- if (!endpos || endpos == -1 || endpos < startpos) {endpos = rest.length;}
- done += rest.substring(0, startpos);
- done += attributeValueMode(rest.substring(startpos, endpos + 1));
- rest = rest.substr(endpos + 1);
- }
- return "" + done + rest + " ";
- }
- function attributeValueMode(txt) {
- return "" + txt + " ";
- }
- function commentMode(txt) {
- return "" + txt + " ";
- }
- function cssMode(txt) {
- var rest = txt, done = "", s, e, comment, i, midz, c, cc;
- comment = new extract(rest, /\/\*/, "*/", commentMode, "W3CSSCOMMENTPOS");
- rest = comment.rest;
- while (rest.search("{") > -1) {
- s = rest.search("{");
- midz = rest.substr(s + 1);
- cc = 1;
- c = 0;
- for (i = 0; i < midz.length; i++) {
- if (midz.substr(i, 1) == "{") {cc++; c++}
- if (midz.substr(i, 1) == "}") {cc--;}
- if (cc == 0) {break;}
- }
- if (cc != 0) {c = 0;}
- e = s;
- for (i = 0; i <= c; i++) {
- e = rest.indexOf("}", e + 1);
- }
- if (e == -1) {e = rest.length;}
- done += rest.substring(0, s + 1);
- done += cssPropertyMode(rest.substring(s + 1, e));
- rest = rest.substr(e);
- }
- rest = done + rest;
- rest = rest.replace(/{/g, "{ ");
- rest = rest.replace(/}/g, "} ");
- for (i = 0; i < comment.arr.length; i++) {
- rest = rest.replace("W3CSSCOMMENTPOS", comment.arr[i]);
- }
- return "" + rest + " ";
- }
- function cssPropertyMode(txt) {
- var rest = txt, done = "", s, e, n, loop;
- if (rest.indexOf("{") > -1 ) { return cssMode(rest); }
- while (rest.search(":") > -1) {
- s = rest.search(":");
- loop = true;
- n = s;
- while (loop == true) {
- loop = false;
- e = rest.indexOf(";", n);
- if (rest.substring(e - 5, e + 1) == " ") {
- loop = true;
- n = e + 1;
- }
- }
- if (e == -1) {e = rest.length;}
- done += rest.substring(0, s);
- done += cssPropertyValueMode(rest.substring(s, e + 1));
- rest = rest.substr(e + 1);
- }
- return "" + done + rest + " ";
- }
- function cssPropertyValueMode(txt) {
- var rest = txt, done = "", s;
- rest = ": " + rest.substring(1);
- while (rest.search(/!important/i) > -1) {
- s = rest.search(/!important/i);
- done += rest.substring(0, s);
- done += cssImportantMode(rest.substring(s, s + 10));
- rest = rest.substr(s + 10);
- }
- result = done + rest;
- if (result.substr(result.length - 1, 1) == ";" && result.substr(result.length - 6, 6) != " " && result.substr(result.length - 4, 4) != "<" && result.substr(result.length - 4, 4) != ">" && result.substr(result.length - 5, 5) != "&") {
- result = result.substring(0, result.length - 1) + "; ";
- }
- return "" + result + " ";
- }
- function cssImportantMode(txt) {
- return "" + txt + " ";
- }
- function jsMode(txt) {
- var rest = txt, done = "", esc = [], i, cc, tt = "", sfnuttpos, dfnuttpos, compos, comlinepos, keywordpos, numpos, mypos, dotpos, y;
- for (i = 0; i < rest.length; i++) {
- cc = rest.substr(i, 1);
- if (cc == "\\") {
- esc.push(rest.substr(i, 2));
- cc = "W3JSESCAPE";
- i++;
- }
- tt += cc;
- }
- rest = tt;
- y = 1;
- while (y == 1) {
- sfnuttpos = getPos(rest, "'", "'", jsStringMode);
- dfnuttpos = getPos(rest, '"', '"', jsStringMode);
- compos = getPos(rest, /\/\*/, "*/", commentMode);
- comlinepos = getPos(rest, /\/\//, " ", commentMode);
- numpos = getNumPos(rest, jsNumberMode);
- keywordpos = getKeywordPos("js", rest, jsKeywordMode);
- dotpos = getDotPos(rest, jsPropertyMode);
- if (Math.max(numpos[0], sfnuttpos[0], dfnuttpos[0], compos[0], comlinepos[0], keywordpos[0], dotpos[0]) == -1) {break;}
- mypos = getMinPos(numpos, sfnuttpos, dfnuttpos, compos, comlinepos, keywordpos, dotpos);
- if (mypos[0] == -1) {break;}
- if (mypos[0] > -1) {
- done += rest.substring(0, mypos[0]);
- done += mypos[2](rest.substring(mypos[0], mypos[1]));
- rest = rest.substr(mypos[1]);
- }
- }
- rest = done + rest;
- for (i = 0; i < esc.length; i++) {
- rest = rest.replace("W3JSESCAPE", esc[i]);
- }
- return "" + rest + " ";
- }
- function jsStringMode(txt) {
- return "" + txt + " ";
- }
- function jsKeywordMode(txt) {
- return "" + txt + " ";
- }
- function jsNumberMode(txt) {
- return "" + txt + " ";
- }
- function jsPropertyMode(txt) {
- return "" + txt + " ";
- }
- function getDotPos(txt, func) {
- var x, i, j, s, e, arr = [".","<", " ", ";", "(", "+", ")", "[", "]", ",", "&", ":", "{", "}", "/" ,"-", "*", "|", "%"];
- s = txt.indexOf(".");
- if (s > -1) {
- x = txt.substr(s + 1);
- for (j = 0; j < x.length; j++) {
- cc = x[j];
- for (i = 0; i < arr.length; i++) {
- if (cc.indexOf(arr[i]) > -1) {
- e = j;
- return [s + 1, e + s + 1, func];
- }
- }
- }
- }
- return [-1, -1, func];
- }
- function getMinPos() {
- var i, arr = [];
- for (i = 0; i < arguments.length; i++) {
- if (arguments[i][0] > -1) {
- if (arr.length == 0 || arguments[i][0] < arr[0]) {arr = arguments[i];}
- }
- }
- if (arr.length == 0) {arr = arguments[i];}
- return arr;
- }
- function getKeywordPos(typ, txt, func) {
- var words, i, pos, rpos = -1, rpos2 = -1, patt;
- if (typ == "js") {
- words = ["abstract","arguments","boolean","break","byte","case","catch","char","class","const","continue","debugger","default","delete",
- "do","double","else","enum","eval","export","extends","false","final","finally","float","for","function","goto","if","implements","import",
- "in","instanceof","int","interface","let","long","NaN","native","new","null","package","private","protected","public","return","short","static",
- "super","switch","synchronized","this","throw","throws","transient","true","try","typeof","var","void","volatile","while","with","yield"];
- }
- for (i = 0; i < words.length; i++) {
- pos = txt.indexOf(words[i]);
- if (pos > -1) {
- patt = /\W/g;
- if (txt.substr(pos + words[i].length,1).match(patt) && txt.substr(pos - 1,1).match(patt)) {
- if (pos > -1 && (rpos == -1 || pos < rpos)) {
- rpos = pos;
- rpos2 = rpos + words[i].length;
- }
- }
- }
- }
- return [rpos, rpos2, func];
- }
- function getPos(txt, start, end, func) {
- var s, e;
- s = txt.search(start);
- e = txt.indexOf(end, s + (end.length));
- if (e == -1) {e = txt.length;}
- return [s, e + (end.length), func];
- }
- function getNumPos(txt, func) {
- var arr = [" ", " ", ";", "(", "+", ")", "[", "]", ",", "&", ":", "{", "}", "/" ,"-", "*", "|", "%", "="], i, j, c, startpos = 0, endpos, word;
- for (i = 0; i < txt.length; i++) {
- for (j = 0; j < arr.length; j++) {
- c = txt.substr(i, arr[j].length);
- if (c == arr[j]) {
- if (c == "-" && (txt.substr(i - 1, 1) == "e" || txt.substr(i - 1, 1) == "E")) {
- continue;
- }
- endpos = i;
- if (startpos < endpos) {
- word = txt.substring(startpos, endpos);
- if (!isNaN(word)) {return [startpos, endpos, func];}
- }
- i += arr[j].length;
- startpos = i;
- i -= 1;
- break;
- }
- }
- }
- return [-1, -1, func];
- }
-}
-
diff --git a/bower.json b/bower.json
deleted file mode 100755
index d484f76bec..0000000000
--- a/bower.json
+++ /dev/null
@@ -1,8 +0,0 @@
-{
- "name": "prebid.js",
- "version": "1.1.0",
-
- "dependencies": {
-
- }
-}
\ No newline at end of file
diff --git a/cookies.html b/cookies.html
new file mode 100644
index 0000000000..ee74f1b400
--- /dev/null
+++ b/cookies.html
@@ -0,0 +1,5 @@
+
+
+Redirecting to https://docs.prebid.org/policies/cookies.html
+
+
diff --git a/cookies.md b/cookies.md
deleted file mode 100644
index 33fa7dbdde..0000000000
--- a/cookies.md
+++ /dev/null
@@ -1,21 +0,0 @@
----
-layout: page_v2
-title: Cookies Used on Prebid.org
-description: Cookies Used on Prebid.org
-sidebarType: 0
----
-
-# Cookie Declaration
-
-The docs.prebid.org website may store or retrieve information on your browser in the form of cookies. This information might be about you, your preferences or your device and is mostly used to make the site work as you expect it to. The information does not usually directly identify you, but it can give you a more personalized web experience. Because we respect your right to privacy, you can choose not to allow some types of cookies. However, blocking cookies may impact your experience of the site and the services we are able to offer.
-
-
-Cookie Settings
-
-
-
-
-
-
-
-
diff --git a/debugging/debugging.md b/debugging/debugging.md
index 906dba744c..4b0d0fe192 100644
--- a/debugging/debugging.md
+++ b/debugging/debugging.md
@@ -1,23 +1,27 @@
---
layout: page_v2
-title: Debugging | Prebid
-description: Debugging Prebid Extension
+title: Debugging | Prebid.js
+description: Debugging Prebid.js
sidebarType: 1
---
-# Chrome Extension for Debugging Prebid.js
+# Debugging Prebid.js
-Prebid.Org supports the Chrome extension [Headerbid Expert](https://chrome.google.com/webstore/detail/headerbid-expert/cgfkddgbnfplidghapbbnngaogeldmop). Web publishers can use this tool to understand how their Prebid.js header bidding partners are doing:
+{:.no_toc}
-1. What's the latency from each header bidding partner?
-1. Do they load asynchronously or are they blocking my pages?
-1. Are they all loaded together in parallel?
+- TOC
+{:toc}
-Use the tool to determine whether a page might be under-monetized or could
-benefit from implementation improvements.
+## Professor Prebid Chrome Extension for Debugging Prebid.js
-Further Reading
+Prebid has a Chrome extension that can be utilized for debugging called [Professor Prebid](https://chrome.google.com/webstore/detail/professor-prebid/kdnllijdimhbledmfdbljampcdphcbdc). Publishers are able to utilize this extension to view Adunits, Bids, Auction Timeline, User IDs, and other details of the ad auctions on a given page. This information can be easily viewed in the various tabs of the extension itself or through a debug page that opens with all the details inside a single page format. In the Professor Prebid ***Tools*** tab you will find this feature along with the ability to easily enable the Prebid.js Debbugging Module (described below) that can also be helpful in debugging. To learn more about all the features and how to utilize this extension please refer to [Professor Prebid](https://docs.prebid.org/tools/professor-prebid.html).
-+ [Prebid.js Troubleshooting Guide](/dev-docs/prebid-troubleshooting-guide.html)
+## Debugging Module
+
+The Prebid.js debugging module enables the "intercepting" of bids and replacing of the contents with data for testing purposes. To learn more about how to utilize this module please refer to the [Debugging Module](https://docs.prebid.org/dev-docs/modules/debugging.html).
+
+## Related Reading
+
+- [Prebid.js Troubleshooting Guide](/dev-docs/prebid-troubleshooting-guide.html)
diff --git a/deprecated/old_index_md_content.html b/deprecated/old_index_md_content.html
index a2552234c5..cfe3a01a2d 100644
--- a/deprecated/old_index_md_content.html
+++ b/deprecated/old_index_md_content.html
@@ -93,7 +93,7 @@ Partners that work with Prebid
SmartyAds
Meme Global
Underdog Media
-
Conversant
+
Epsilon
Adblade
Piximedia
GetIntent
diff --git a/dev-docs/activity-controls.md b/dev-docs/activity-controls.md
new file mode 100644
index 0000000000..ef227c9d9b
--- /dev/null
+++ b/dev-docs/activity-controls.md
@@ -0,0 +1,405 @@
+---
+layout: page_v2
+title: Activity Controls
+description: How to stop Prebid.js from doing things you don't want
+sidebarType: 1
+pbjs_version: 7.52
+---
+
+# Prebid.js Activity Controls
+{: .no_toc }
+
+Starting with version 7.52, Prebid.js introduced a centralized control mechanism for privacy-sensitive _activities_ - such as accessing device storage or sharing data with partners.
+These controls are intended to serve as building blocks for privacy protection mechanisms, allowing module developers or publishers to directly specify what should be permitted or avoided in any given regulatory environment.
+
+* TOC
+{: toc }
+
+## Overview
+
+There are many privacy regulations that Prebid publishers need to accommodate. Prebid supplies [modules](/dev-docs/faq.html#how-does-prebid-support-privacy-regulations) to help Publishers implement their legal policies, but there are scenarios where extra control is needed:
+
+* a Publisher's lawyers want to make a particular exception
+* a module hasn't been built for a regulation the Publisher needs to support
+
+Several, but not all, of the popular consent strings have modules (eg [Prebid Activity Controls -- GPP control module - usnat](/dev-docs/modules/gppControl_usnat.html)) that translate their contents into activity controls. These modules may have some overrides to default string interpretations available. When these overrides are insufficient for a publisher, or case law has abruptly changed, publishers may prefer direct control.
+
+### Prebid Is a Toolkit
+
+{% include legal-warning.html %}
+
+1. Get a privacy lawyer.
+2. Consider all the privacy regulations your content business is subject to.
+3. Come up with a plan.
+4. Use Prebid.js modules and these Activity Controls as ways to help implement your privacy plan with respect to header bidding.
+5. Let us know if there are tools missing from the Prebid toolkit.
+
+### What is an Activity?
+
+We did an analysis of the things Prebid.js does and identified those related to privacy regulations. We call these things "potentially restricted activities", or just "activities" for short. Here are some:
+
+* Setting a cookie
+* Syncing ID cookies
+* Transmitting user first-party data
+* etc.
+
+The [full list of activities Prebid.js supports](#activities) is below.
+
+Think of an activity control as a 'gatekeeper' that makes the decision about whether the activity should be allowed in this specific context:
+
+* Should I allow this cookie to be set for bidderA?
+* Should I allow this usersync for bidderB?
+* Is it ok for this data to be passed to bidderC and analyticsD?
+* etc.
+
+Prebid.js core checks with the Activity Controls to see whether an activity is allowed. The configuration for the activity can come from modules, custom functions in the page, or a rule-based JSON config.
+
+### Example Activity Control
+
+{: .alert.alert-info :}
+In this example, bidderX wants to set a cookie through StorageManager, which queries the Activity Control System to determine whether that's allowed. The publisher has set up configuration that specifically enables bidderX to do this.
+
+Here's an example JSON config that disables accessing local storage (including cookies) for everything except the bid adapter `bidderX`:
+
+```javascript
+pbjs.setConfig({
+ allowActivities: {
+ accessDevice: {
+ default: false,
+ rules: [{
+ condition(params) {
+ return params.componentName === 'bidderX'
+ },
+ allow: true
+ }]
+ }
+ }
+})
+```
+
+
+
+## Configuration
+
+`allowActivities` is a new option to [setConfig](/dev-docs/publisher-api-reference/setConfig.html). It contains a list of activity names -- see the [full list of activities below](#activities). Each activity is an object that can contain these attributes:
+
+{: .table .table-bordered .table-striped }
+| Name | Type | Description |
+|------|------|-------------|
+| `default` | Boolean | Whether the activity should be allowed if no other rule applies. Defaults to true. |
+| `rules` | Array of objects | Rules for this activity |
+| `rules[].condition` | Function | Condition function to use for this rule; the rule applies only if this returns true. Receives a single object that contains [activity parameters](#parameters) as input. If omitted, the rule always applies. |
+| `rules[].allow` | Boolean | Whether the activity should be allowed when this rule applies. Defaults to true. |
+| `rules[].priority` | Number | Priority of this rule compared to other rules; a lower number means higher priority. See [note on rule priority](#priority) below. Defaults to 1. |
+
+`Rules` is an array of objects that a publisher can construct to provide fine-grained control over a given activity. For instance, you could set up a series of rules that says:
+
+* Amongst the bid adapters, BidderA is always allowed to receive user first-party data
+* Always let analytics adapters receive user first-party data
+* Otherwise, let the active privacy modules decide
+* if they refuse to decide, then the overall default is to allow the transmitting of user first-party data
+
+There's more about [rules](#parameters) below.
+
+
+
+### Activities
+
+Here's the list of the 'potentially restricted activities' that Prebid.js core can restrict for Publishers:
+
+{: .table .table-bordered .table-striped }
+| Name | Description | Effect when denied | Additional parameters |
+|----------------|-------------|---------------------------|--------------------------------|
+| `accessDevice` | A component wants to use device storage | Storage is disabled | [`storageType`](#params-accessDevice) |
+| `enrichEids` | A user ID or RTD submodule wants to add user IDs to outgoing requests | User IDs are discarded | None |
+| `enrichUfpd` | A Real-Time Data (RTD) submodule wants to add user first-party data to outgoing requests (`user.data` in ORTB) | User FPD is discarded | None |
+| `fetchBids` | A bid adapter wants to participate in an auction | Bidder is removed from the auction | [`configName`](#params-fetchBids) |
+| `reportAnalytics` | An analytics adapter is being enabled through `pbjs.enableAnalytics` | Adapter remains disabled | None |
+| `syncUser` | A bid adapter wants to fetch a [user sync](/dev-docs/publisher-api-reference/setConfig.html#setConfig-Configure-User-Syncing) | User sync is skipped | [`syncType`, `syncUrl`](#params-syncUser) |
+| `transmitEids` | A bid adapter or RTD submodule wants to access and/or transmit user IDs to their endpoint | User IDs are hidden from the component | [`configName`](#params-fetchBids) |
+| `transmitPreciseGeo` | A bid adapter or RTD submodule wants to access and/or transmit precise geolocation data to their endpoint | Component is allowed only 2-digit precision for latitude and longitude | [`configName`](#params-fetchBids) |
+| `transmitTid` | A bid adapter or RTD submodule wants to access and/or transmit globally unique transaction IDs to their endpoint | Transaction IDs are hidden from the component | [`configName`](#params-fetchBids) |
+| `transmitUfpd` | A bid adapter or RTD submodule wants to access and/or transmit user FPD to their endpoint | User FPD is hidden from the component | [`configName`](#params-fetchBids) |
+
+
+
+### Rules
+
+There are three parts to an Activity Control's rule:
+
+ 1. The priority
+ 2. The condition
+ 3. The allow flag
+
+For example, this rule would allow bidderX to perform the activity if no higher priority rules take precedence.
+
+```javascript
+...
+ rules: [{
+ priority: 10, // average priority
+ condition(params) {
+ return params.componentName === 'bidderX'
+ },
+ allow: true
+ }]
+...
+```
+
+
+
+#### Rule Priority
+
+Activity control rules in Prebid.js can be created by two main sources:
+
+* Publisher `setConfig({allowActivities})` as in the examples shown here. When set this way, rules are considered the highest priority value of 1.
+* Modules can set activity control rules, e.g. [usersync](/dev-docs/publisher-api-reference/setConfig.html#setConfig-Configure-User-Syncing), [bidderSettings](/dev-docs/publisher-api-reference/bidderSettings.html), the [GPP](/dev-docs/modules/consentManagementGpp.html) or [GDPR](/dev-docs/modules/gdprEnforcement.html) modules. Rules set by modules have a less urgent priority of 10.
+
+When rules are processed, they are sorted by priority, and all rules of the same priority are considered to happen at the same time. The details:
+
+1. The highest rule priority is 1
+2. There's no defined lowest priority other than MAXINT
+3. Default priority for rules defined with setConfig is 1. The default priority for other rules is 10.
+4. When processing, group the rules by priority
+5. Then, in descending order of priority:
+ 1. If any rule that matches the condition defines `allow: false`, the activity is DENIED.
+ 2. Otherwise, if at least one rule that matches the condition defines `allow: true`, the activity is ALLOWED.
+ 3. If any rule matches, break out of the priority loop.
+6. If none of the rules match, and the activity defines `default: false`, the activity is DENIED.
+7. Otherwise, the activity is ALLOWED.
+
+So this means that when `priority` is omitted from `allowActivities` configuration, it acts as an override over other control mechanisms. For example:
+
+```javascript
+pbjs.setConfig({
+ accessDevice: false, // this would have the effect of disabling device storage, but...
+ allowActivities: {
+ accessDevice: {
+ rules: [
+ {allow: true} // ... it's overridden by this condition-less rule with a default priority of 1
+ ]
+ }
+ }
+})
+```
+
+If a priority number greater than 10 is specified, the rule only takes effect when all other controls have allowed the activity. For example:
+
+```javascript
+pbjs.setConfig({
+ allowActivities: {
+ accessDevice: {
+ // the intent here is to disable cookies but allow HTML5 localStorage
+ // because this defines priority > 10, other controls will be checked first
+ // e.g. if GDPR is in-scope and there's no consent, this priority 20 rule won't be processed
+ default: false,
+ rules: [{
+ condition({storageType}) {
+ return storageType === 'html5'
+ },
+ allow: true,
+ priority: 20
+ }]
+ }
+ }
+})
+```
+
+#### Rule Conditions
+
+A `condition` is a javascript function that receives information about the activity that is about to be performed. If a condition evaluates to true, the `allow` attribute of the rule will be utilized. If there's no condition specified, the rule's `allow` attribute will always be utilized.
+
+These are the parameters available to the condition function:
+
+{: .table .table-bordered .table-striped }
+| Name | Type | Available for | Description |
+|------|------|-------------|---------------|
+| `componentType` | String | All activities | One of: `'bidder'`, `'userId'`, `'rtd'`, `'analytics'`, or `'prebid'`; identifies the type of component (usually a module) that wishes to perform the activity. `'prebid'` is reserved for Prebid core itself and a few "privileged" modules such as the [PBS adapter](/dev-docs/modules/prebidServer.html). |
+| `componentName` | String | All activities | Name of the component; this is (depending on the type) either a bidder code, user ID or RTD submodule name, analytics provider code, or module name. |
+| `component` | String | All activities | This is always a dot-separated concatenation of `componentType` and `componentName`; for example, with `{componentType: 'bidder', componentName: 'bidderX'}`, `component` is `'bidder.bidderX'`. |
+| `adapterCode` | String | All activities | If `componentType` is `'bidder'`, and `componentName` is an [alias](/dev-docs/publisher-api-reference/aliasBidder.html), then `adapterCode` is the bidder code that was aliased; or identical to `componentName` if the bidder is not an alias. This is undefined when the component is not a bidder.|
+| `configName` | String | `fetchBids` | When the Prebid Server adapter is part of an auction, this is the name given to its [s2s configuration](/dev-docs/modules/prebidServer.html), if any. |
+| `storageType` | String | `accessDevice` | Either `'html5'` or `'cookie'` - the device storage mechanism being accessed. |
+| `syncType` | String | `syncUser` | Either `'iframe'` or `'image'` - the type of user sync. |
+| `syncUrl` | String | `syncUser` | URL of the user sync. |
+
+#### Allow Flag
+
+If the rule's condition matches, this attribute defines whether the rule 'votes' to allow (true) or disallow (false) the activity in question.
+
+As noted in the priority section, **disallow** (false) takes precedence amongst rules at the same priority level.
+
+If `allow` is not defined, the rule is assumed to assert **true** (i.e. allow the activity to take place).
+
+### More examples
+
+#### Always include a particular bidder in auctions
+
+This is similiar to the 'vendor exception' feature of the [GDPR Enforcement Module](/dev-docs/modules/gdprEnforcement.html). This would always allow bidderA to participate in the auction, even without explicit consent in GDPR scenarios. It might indicate, for instance, that this is a 'first party bidder'.
+
+```javascript
+pbjs.setConfig({
+ allowActivities: {
+ fetchBids: {
+ rules: [{
+ condition: ({componentName}) => componentName === 'bidderA',
+ allow: true
+ }]
+ }
+ }
+})
+```
+
+#### Disable all user syncs except for specific domains
+
+```javascript
+const DOMAINLIST = [
+ 'https://example-domain.org',
+ 'https://other-domain.com',
+];
+
+pbjs.setConfig({
+ allowActivities: {
+ syncUser: {
+ default: false,
+ rules: [{
+ condition({syncUrl}) {
+ return DOMAINLIST.some(domain => syncUrl.startsWith(domain));
+ },
+ allow: true
+ }]
+ }
+ }
+})
+```
+
+#### Deny a particular vendor access to user IDs
+
+```javascript
+pbjs.setConfig({
+ allowActivities: {
+ transmitEids: {
+ rules: [{
+ condition: ({componentName}) => componentName === 'exampleVendor',
+ allow: false,
+ }]
+ }
+ }
+})
+```
+
+#### __uspapi CCPA/CPRA based control
+
+Reference: [US Privacy User Signal Mechanism âUSP APIâ Specification](https://github.com/InteractiveAdvertisingBureau/USPrivacy/blob/master/CCPA/USP%20API.md)
+
+```javascript
+function isCCPAConsentDenied() {
+### assumes uspapi is properly implemented and available in your environment.
+### check usp string for the second character (notice) is not 'Y' or third character (opt out) is not 'N' or first character (version) is not '1'
+ __uspapi('getUSPData', 1 , (uspData, success) => { if(uspData.uspString.charAt(2) ==='Y' || uspData.uspString.charAt(1) !=='Y'|| uspData.uspString.charAt(0) !=='1') { return true } else { return false }});
+}
+
+pbjs.setConfig({
+ allowActivities: {
+ enrichUfpd: {
+ rules: [{
+ condition: isCCPAConsentDenied,
+ allow: false
+ }]
+ },
+ enrichEids: {
+ rules: [{
+ condition: isCCPAConsentDenied,
+ allow: false
+ }]
+ },
+ reportAnalytics: {
+ rules: [{
+ condition: isCCPAConsentDenied,
+ allow: false
+ }]
+ },
+ syncUser: {
+ rules: [{
+ condition: isCCPAConsentDenied,
+ allow: false
+ }]
+ },
+ transmitEids: {
+ rules: [{
+ condition: isCCPAConsentDenied,
+ allow: false
+ }]
+ },
+ transmitPreciseGeo: {
+ rules: [{
+ condition: isCCPAConsentDenied,
+ allow: false
+ }]
+ },
+ transmitUfpd: {
+ rules: [{
+ condition: isCCPAConsentDenied,
+ allow: false
+ }]
+ }
+
+ }
+})
+```
+
+#### When there's a GPP CMP active, anonymize everything
+
+This example might be useful for publishers using a version
+of Prebid.js that supports activity controls but does not support
+the [USNat module](/dev-docs/modules/gppControl_usnat.html).
+
+```javascript
+if (in-page code to detect that GPP SID 7 through 12 are in-scope or if the GPC flag is set) {
+ pbjs.setConfig({
+ allowActivities: {
+ enrichEids: {
+ default: false
+ },
+ transmitEids: {
+ default: false
+ },
+ ⌠see other activities in https://docs.prebid.org/dev-docs/activity-controls.html âŚ
+ }
+ });
+}
+```
+
+#### Always allow sharedId to be passed, others determined by privacy regs
+
+To make exceptions for certain IDs, there are two steps:
+
+1. Always allow the transmitEids activity to take place
+1. Configure the enrichEids activity to allow only the desired IDs
+
+This approach works in conjunction with other activity-control compiant modules (like the [GPP USNat module](/dev-docs/modules/gppControl_usnat.html).
+
+```javascript
+ pbjs.setConfig({
+ allowActivities: {
+ enrichEids: {
+ default: false,
+ priority: 1,
+ rules: [{
+ condition(params) {
+ return params.componentName === 'sharedIdSystem'
+ },
+ allow: true
+ }]
+ },
+ transmitEids: {
+ rules: [{
+ allow: true
+ },
+ ⌠see other activities in https://docs.prebid.org/dev-docs/activity-controls.html âŚ
+ }
+ });
+```
+
+## Further Reading
+
+* [FAQ: How does Prebid.js support privacy regulations](/dev-docs/faq.html#how-does-prebid-support-privacy-regulations)
diff --git a/dev-docs/add-rtd-submodule.md b/dev-docs/add-rtd-submodule.md
index fa041d2086..fbf85669cf 100644
--- a/dev-docs/add-rtd-submodule.md
+++ b/dev-docs/add-rtd-submodule.md
@@ -6,16 +6,17 @@ sidebarType: 1
---
# How to Add a Real Time Data Submodule
+
{:.no_toc}
Sub-modules interact with the Real-Time Data (RTD) core module to
add data to bid requests or add targeting values for the primary ad server.
-
* TOC
{:toc }
## Overview
+
The point of the Real Time Data (RTD) infrastructure is to make configuration consistent for publishers. Rather than having dozens of different modules with disparate config approaches, being a Real-Time Data sub-module means plugging into a framework
for publishers to control how sub-modules behave. For example, publishers can define how long the auction can be delayed and give some
sub-modules priority over others.
@@ -40,13 +41,13 @@ Here is the flow for how the RTD-core module interacts with its sub-modules:
The activities performed by the RTD-core module are on the left-hand side, while the functions
that can be provided by your RTD sub-module are on the right-hand side. Note that you don't need to implement all of the functions - you'll want to plan out your functionality and develop the appropriate functions.
-
## Creating a Sub-Module
When you create a Real-Time Data sub-module, you will be operating under the umbrella of the Real-Time Data core module. Here are the services core provides:
-- your sub-module will be initialized as soon as pbjs.setConfig({realTimeData}) is called. If you can initialize at the time of code load, that can be done at the bottom of your javascript file.
-- whenever any of your functions is called, it will be passed the config params provided by the publisher. As a result, you should not call getConfig().
-- your functions will also be passed all available privacy information. As a result, you do not need to query to get GDPR, US Privacy, or any other consent parameters.
+
+* your sub-module will be initialized as soon as pbjs.setConfig({realTimeData}) is called. If you can initialize at the time of code load, that can be done at the bottom of your javascript file.
+* whenever any of your functions is called, it will be passed the config params provided by the publisher. As a result, you should not call getConfig().
+* your functions will also be passed all available privacy information. As a result, you do not need to query to get GDPR, US Privacy, or any other consent parameters.
Working with any Prebid project requires using Github. In general, we recommend the same basic workflow for any project:
@@ -65,7 +66,8 @@ with the [module rules](/dev-docs/module-rules.html) that apply globally and to
Create a markdown file under `modules` with the name of the module suffixed with 'RtdProvider', e.g., `exRtdProvider.md`
Example markdown file:
-{% highlight text %}
+
+```md
# Overview
Module Name: Ex Rtd Provider
@@ -76,7 +78,7 @@ Maintainer: prebid@example.com
RTD provider for Example.com. Contact prebid@example.com for information.
-{% endhighlight %}
+```
### Step 2: Build the Module
@@ -90,41 +92,45 @@ In order to let RTD-core know where to find the functions in your sub-module, cr
| param name | type | Scope | Description | Params |
| :------------ | :------------ | :------ | :------ | :------ |
| name | string | required | must match the name provided by the publisher in the on-page config | n/a |
-| init | function | required | defines the function that does any auction-level initialization required | config, userConsent |
-| getTargetingData | function | optional | defines a function that provides ad server targeting data to RTD-core | adUnitArray, config, userConsent |
-| getBidRequestData | function | optional | defines a function that provides bid request data to RTD-core | reqBidsConfigObj, callback, config, userConsent |
-| onAuctionInitEvent | function | optional | listens to the AUCTION_INIT event and calls a sub-module function that lets it inspect and/or update the auction | auctionDetails, config, userConsent |
-| onAuctionEndEvent | function |optional | listens to the AUCTION_END event and calls a sub-module function that lets it know when auction is done | auctionDetails, config, userConsent |
-| onBidRequestEvent | function |optional | listens to the BID_REQUESTED event and calls a sub-module function that lets it know when a bid is about to be requested | bidRequest, config, userConsent |
-| onBidResponseEvent | function |optional | listens to the BID_RESPONSE event and calls a sub-module function that lets it know when a bid response has been collected | bidResponse, config, userConsent |
+| gvlid | number | optional | global vendor list ID for your submodule | n/a |
+| init | function | required | defines the function that does any auction-level initialization required | config, userConsent |
+| getTargetingData | function | optional | defines a function that provides ad server targeting data to RTD-core | adUnitArray, config, userConsent |
+| getBidRequestData | function | optional | defines a function that provides bid request data to RTD-core | reqBidsConfigObj, callback, config, userConsent |
+| onAuctionInitEvent | function | optional | listens to the AUCTION_INIT event and calls a sub-module function that lets it inspect and/or update the auction | auctionDetails, config, userConsent |
+| onAuctionEndEvent | function |optional | listens to the AUCTION_END event and calls a sub-module function that lets it know when auction is done | auctionDetails, config, userConsent |
+| onBidRequestEvent | function |optional | listens to the BID_REQUESTED event and calls a sub-module function that lets it know when a bid is about to be requested | bidRequest, config, userConsent |
+| onBidResponseEvent | function |optional | listens to the BID_RESPONSE event and calls a sub-module function that lets it know when a bid response has been collected | bidResponse, config, userConsent |
For example:
-{% highlight text %}
+
+```javascript
export const subModuleObj = {
name: 'ExampleRTDModule',
init: init,
getTargetingData: sendDataToModule
};
-{% endhighlight %}
+```
#### Register the submodule
Register submodule to RTD-core:
-{% highlight text %}
+```javascript
submodule('realTimeData', subModuleObject);
-{% endhighlight %}
+```
#### User Consent
Several of the interfaces get a `userConsent` object. It's an object that carries these attributes:
-- [gdpr](/dev-docs/modules/consentManagement.html#bidder-adapter-gdpr-integration) - GDPR
-- [usp](/dev-docs/modules/consentManagementUsp.html#bidder-adapter-us-privacy-integration) - US Privacy (aka CCPA)
-- [coppa](/dev-docs/publisher-api-reference/setConfig.html#setConfig-coppa) - the Child Online Privacy Protection Act
+
+* [gdpr](/dev-docs/modules/consentManagement.html#bidder-adapter-gdpr-integration) - GDPR
+* [usp](/dev-docs/modules/consentManagementUsp.html#bidder-adapter-us-privacy-integration) - US Privacy (aka CCPA)
+* [coppa](/dev-docs/publisher-api-reference/setConfig.html#setConfig-coppa) - the Child Online Privacy Protection Act
These are provided so you can do the right thing with respect to regulations. The only privacy requirement imposed by the RTD-core is that sub-modules make make use of the StorageManager instead of attempting to access cookies or localstorage directly.
#### The init() function
+
1. This function receives module configuration and userConsent parameters
2. If the function returns `false`, the submodule will be ignored.
@@ -136,7 +142,8 @@ This is the function that will allow RTD sub-modules to merge ad server targetin
1. RTD-core will call this function with an array of adUnits, config, and userConsent as parameters
2. Your sub-module should respond with per-adslot data that should be set as key values on the ad server targeting in this format:
-{% highlight text %}
+
+```json
{
"slotA":{
"p":0.56, // ad server targeting variable (e.g. p) for slotA is 0.56
@@ -145,11 +152,11 @@ This is the function that will allow RTD sub-modules to merge ad server targetin
"p":0.824, // ad server targeting variable (e.g. p) for slotB is 0.824
}
}
-{% endhighlight %}
+```
**Code Example**
-{% highlight text %}
+```javascript
/** @type {RtdSubmodule} */
export const subModuleObj = {
name: 'ExampleRTDModule',
@@ -169,32 +176,49 @@ function returnTargetingData(adUnits, config, userConsent) {
}
submodule('realTimeData', subModuleObj);
-{% endhighlight %}
+```
#### getBidRequestData
This is the function that will allow RTD sub-modules to modify the AdUnit object for each auction. It's called as part of the requestBids hook.
1. RTD-core will call this function with:
- - reqBidsConfigObj: the object that's passed to [`pbjs.requestBids`](). Note that several auctions can happen concurrently, so the sub-module must be ready to support this.
- - callback: lets RTD-core know which auction the sub-module is done with.
- - config: the sub-module's config params provided by the publisher
- - userConsent object (see above)
+ 1. reqBidsConfigObj: a slightly modified version of the object that's passed to `pbjs.requestBids` (see [below](#reqBidsConfigObj)). Note that several auctions can happen concurrently, so the sub-module must be ready to support this.
+ 2. callback: lets RTD-core know which auction the sub-module is done with.
+ 3. config: the sub-module's config params provided by the publisher
+ 4. userConsent object (see above)
2. Your sub-module may update the reqBidsConfigObj and hit the callback. To inject data into the bid requests, you should follow one of these conventions:
- - Recommended: use one of these [First Party Data](/features/firstPartyData.html) conventions:
- - For AdUnit-specific first party data, set AdUnit.fpd.context.data.ATTRIBUTES
- - For global first party data, call 'pbjs.[getConfig](/dev-docs/publisher-api-reference/setConfig.html)({fpd.context})' or 'pbjs.getConfig({fpd.user})', merge in the new global data, and update with `pbjs.[setConfig](/dev-docs/publisher-api-reference/setConfig.html)()'.
- - If the data is not meant to go to all bidders, the module should use 'pbjs.[setBidderConfig](/dev-docs/publisher-api-reference/setBidderConfig.html)()' and support a parameter to allow the publisher to define which bidders are to receive the data.
- - Not recommended: Place your data in bidRequest.rtd.RTDPROVIDERCODE.ATTRIBUTES and then get individual adapters to specifically read that location. Note that this method won't pass data to Prebid Server adapters.
+ 1. Recommended: use one of these [First Party Data](/features/firstPartyData.html) conventions:
+ 1. For AdUnit-specific first party data, set AdUnit.ortb2Imp.ext.data.ATTRIBUTES
+ 2. For global first party data, including bidder-specific data, modify the `reqBidsConfigObj` as shown [below](#reqBidsConfigObj)
+ 2. Not recommended: Place your data in bidRequest.rtd.RTDPROVIDERCODE.ATTRIBUTES and then get individual adapters to specifically read that location. Note that this method won't pass data to Prebid Server adapters.
+
+
+
+The `reqBidsConfigObj` parameter is a copy of the object passed to [`requestBids`](/dev-docs/publisher-api-reference/requestBids.html), except for:
+
+* `adUnits` and `timeout` are always defined (if the publisher didn't provide them, the default values are filled in - `pbjs.adUnits` and `getConfig('bidderTimeout')` respectively)
+* `ortb2` is replaced with an `ortb2Fragments` object, intended to be inspected and / or modified by your module.
+
+The `ortb2Fragments` parameter is an object containing two properties:
+
+* `global`, an object containing global (not bidder-specific) first party data in the same OpenRTB format used by `setConfig({ortb2})`
+* `bidder`, a map from bidder code to bidder-specific, OpenRTB-formatted first party data.
+
+Your module may modify either or both with additional data. If adding bidder-specific data in `ortb2Fragments.bidder`, it should also support a parameter to allow the publisher to define which bidders are to receive the data.
+
+{: .alert.alert-warning :}
+Before version 7, the pattern for first party data inspection and enrichment by RTD modules was `getConfig({ortb2])` / `mergeConfig({ortb2})`. With the introduction of [auction-specific data](/features/firstPartyData.html#supplying-auction-specific-data) in 7, the global `getConfig('ortb2')` is "frozen"
+at the time `requestBids` is called, and RTD submodules that wish to modify it are required to work on `ortb2Fragments` instead - as any additional call to `mergeConfig` will only take effect on the *next* auction.
**Code Example**
-{% highlight text %}
+```javascript
/** @type {RtdSubmodule} */
export const subModuleObj = {
name: 'ExampleRTDModule2',
init: init,
- setBidRequestsData: alterBidRequests
+ getBidRequestData: alterBidRequests
};
function init(config, userConsent) {
@@ -205,18 +229,25 @@ function init(config, userConsent) {
function alterBidRequests(reqBidsConfigObj, callback, config, userConsent) {
// do stuff
- // put data in AdUnit.fpd.* or rtd.RTDPROVIDERCODE.*
+ // put data in adUnits' ortb2Imp:
+ reqBidsConfigObj.adUnits.forEach((adUnit) => mergeDeep(adUnit, 'ortb2Imp.ext', myCustomData);
+ // or in global first party data:
+ mergeDeep(reqBidsConfigObj.ortb2Fragments.global, myCustomData);
+ // or in bidder-specific first party data:
+ config.bidders.forEach((bidderCode) => mergeDeep(reqBidsConfigObj.ortb2Fragments.bidder, {[bidderCode]: myCustomData});
callback();
}
submodule('realTimeData', subModuleObj);
-{% endhighlight %}
+```
#### beforeInit
+
1. Use this function to take action to make sure data will be served as soon as possible (AJAX calls, pixels, etc..)
2. This function is **not** invoked by the RTD module, and should be invoked at the bottom of the submodule.
#### Using event listeners
+
1. The RTD-core module listens for 3 events - `AUCTION_INIT`, `AUCTION_END`, and `BID_RESPONSE`.
2. Each time one of the events fires, RTD-core will invoke the corresponding function on each sub-module, allowing the sub-module to make changes to the event object.
3. To use this on your sub-module, define the required functions as noted in the table above and the examples below.
@@ -224,7 +255,8 @@ submodule('realTimeData', subModuleObj);
**Code Example**
Here is a code example with both mandatory and optional functions:
-{% highlight text %}
+
+```javascript
/** @type {RtdSubmodule} */
export const subModuleObj = {
name: 'ExampleRTDModule3',
@@ -263,8 +295,7 @@ function beforeInit(){
}
beforeInit();
-{% endhighlight %}
-
+```
### Step 3: Add unit tests
@@ -282,7 +313,7 @@ Once everything looks good, submit the code, tests, and markdown as a pull reque
2. Create a new file for your RTD sub-module in dev-docs/modules/ExampleRtdProvider.md. Take a look at the other *RtdProvider.md files in that directory for the important header values. Specifically it requires the following:
- ```
+ ```markdown
---
layout: page_v2
title: Example Module
@@ -299,6 +330,7 @@ Once everything looks good, submit the code, tests, and markdown as a pull reque
[Useful publisher-facing documentation]
```
+
3. Submit the pull request to the prebid.github.io repo.
### Step 6: Wait for Prebid volunteers to review
diff --git a/dev-docs/add-video-submodule.md b/dev-docs/add-video-submodule.md
new file mode 100644
index 0000000000..81aadb6eda
--- /dev/null
+++ b/dev-docs/add-video-submodule.md
@@ -0,0 +1,180 @@
+---
+layout: page_v2
+title: How to Add a Prebid.js Video submodule
+description: How to Add a Prebid.js Video submodule
+sidebarType: 1
+---
+
+# How to Add a Video Submodule
+
+{:.no_toc}
+
+Video submodules interact with the Video Module to integrate Prebid with Video Players, allowing Prebid to automatically:
+
+* render bids in the desired video player.
+* mark used bids as won.
+* trigger player and media events.
+* populate the oRTB Video Impression and Content params in the bid request.
+
+* TOC
+{:toc }
+
+## Overview
+
+The Prebid Video Module simplifies the way Prebid integrates with video players by acting as a single point of contact for everything video.
+In order for the Video Module to connect to a video player, a submodule must be implemented. The submodule acts as a bridge between the Video Module and the video player.
+The Video Module will route commands and tasks to the appropriate submodule instance.
+A submodule is expected to work for a specific video player. i.e. the JW Player submodule is used to integrate Prebid with JW Player. The video.js submdule connects to video.js.
+Publishers who use players from different vendors on the same page can use multiple video submodules.
+
+## Requirements
+
+The Video Module only supports integration with Video Players that meet the following requirements:
+
+* Must support parsing and reproduction of VAST ads.
+ * Input can be an ad tag URL or the actual Vast XML.
+* Must expose an API that allows the procurement of [Open RTB params](https://www.iab.com/wp-content/uploads/2016/03/OpenRTB-API-Specification-Version-2-5-FINAL.pdf) for Video (section 3.2.7) and Content (section 3.2.16).
+* Must emit javascript events for Ads and Media.
+ * see [Event Registration](#event-registration).
+
+## Creating a Submodule
+
+Working with any Prebid project requires using Github. In general, we recommend the same basic workflow for any project:
+
+1. Fork the appropriate Prebid repository (e.g. [Prebid.js](https://github.com/prebid/Prebid.js)).
+2. Create a branch in your fork for your proposed code change (e.g. feature/exampleVideoProvider).
+3. Build and test your feature/bug fix in the branch.
+4. Open a [pull request](https://help.github.com/en/desktop/contributing-to-projects/creating-a-pull-request) to the appropriate repository's master branch with a good description of the feature/bug fix.
+5. If there's something that needs to change on the prebid.org website, follow the above steps for the [website repo](https://github.com/prebid/prebid.github.io).
+
+### Step 1: Add a Markdown File Describing the Submodule
+
+Create a markdown file under `modules` with the name of the module suffixed with 'VideoProvider', i.e. `exampleVideoProvider.md`.
+
+Example markdown file:
+
+```md
+# Overview
+
+Module Name: Example Video Provider
+Module Type: Video Submodule
+Video Player: Example player
+Player website: example-player.com
+Maintainer: someone@example.com
+
+# Description
+
+Video provider for Example Player. Contact someone@example.com for information.
+
+# Requirements
+
+Your page must link the Example Player build from our CDN. Alternatively you can use npm to load the build.
+
+```
+
+### Step 2: Add a Vendor Code
+
+Vendor codes are required to indicate which submodule type to instantiate. Add your vendor code constant to an export const in `vendorCodes.js` in Prebid.js under `libraries/video/constants/vendorCodes.js`.
+i.e. in `vendorCodes.js`:
+
+```javascript
+export const EXAMPLE_PLAYER_VENDOR = 3;
+```
+
+### Step 3: Build the Module
+
+Now create a javascript file under `modules` with the name of the module suffixed with 'VideoProvider', e.g., `exampleVideoProvider.js`.
+
+#### The Submodule factory
+
+The Video Module will need a submodule instance for every player instance registered with Prebid. You will therefore need to implement a submodule factory which is called with a `videoProviderConfig` argument and returns a Video Provider instance.
+Your submodule should import your vendor code constant and set it to a `vendorCode` property on your submodule factory.
+Your submodule should also import the `submodule` function from `src/hook.js` and should use it to register as a submodule of `'video'`.
+
+**Code Example**
+
+```javascript
+import { submodule } from '../src/hook.js';
+
+function exampleSubmoduleFactory(videoProviderConfig) {
+ const videoProvider = {
+ // implementation
+ };
+
+ return videoProvider;
+}
+
+exampleSubmoduleFactory.vendorCode = EXAMPLE_VENDOR;
+submodule('video', exampleSubmoduleFactory);
+```
+
+#### The Submodule object
+
+The submodule object must adhere to the following interface:
+
+{: .table .table-bordered .table-striped }
+| param name | type | Scope | Description | Arguments | Return type |
+| :---------- | :---- | :---- | :---------- | :-------- | :---------- |
+| init | function | required | Initializes the submodule and the video player, if not already instantiated. | n/a | void |
+| getId | function | required | Returns the divId (unique identifier) of the associated video player. | n/a | string |
+| getOrtbVideo | function | required | Returns the oRTB Video object for the associated video player. See [oRTB specâs](https://www.iab.com/wp-content/uploads/2016/03/OpenRTB-API-Specification-Version-2-5-FINAL.pdf) video section 3.2.7. | n/a | object |
+| getOrtbContent | function | required | Returns the oRTB Content object for the associated video player and its media's metadata. See [oRTB specâs](https://www.iab.com/wp-content/uploads/2016/03/OpenRTB-API-Specification-Version-2-5-FINAL.pdf) content section 3.2.16. | n/a | object |
+| setAdTagUrl | function | required | Requests that the video player load and begin playing the given ad tag url. | adTagUrl: string | void |
+| onEvent | function | required | Registers event listeners for the given event strings to the player instance. | externalEventName: string, callback: function, basePayload: object | void |
+| offEvent | function | required | Removes event listeners for the given event strings to the player instance. | event: string, callback: function | void |
+| destroy | function | required | Deallocates the submodule and destroys the associated video player. n/a | void | void |
+
+For example:
+
+```javascript
+const exampleSubmodule = {
+ init: init,
+ getId: getId,
+ getOrtbVideo: getOrtbVideo,
+ getOrtbContent: getOrtbContent,
+ setAdTagUrl: setAdTagUrl,
+ onEvent: onEvent,
+ offEvent: offEvent,
+ destroy: destroy
+};
+```
+
+
+
+#### Event Registration
+
+Submodules must support attaching and detaching event listeners on the video player. The list of events and their respective params are defined in the [Video Module docs's Events section]({{site.github.url}}/prebid-video/video-module.html#events).
+
+##### onEvent
+
+{: .table .table-bordered .table-striped }
+| argument name | type | description |
+| event | string | Name of event for which the listener should be added |
+| callback | function | Function that will get called when the event is triggered. The function will be called with a payload argument containing metadata for the event |
+| basePayload | object | Base payload for every event; includes common parameters such as divId and type. The event payload should be built on top of this |
+
+##### offEvent
+
+{: .table .table-bordered .table-striped }
+| argument name | type | description |
+| event | string | name of event for which the attached listener should be removed |
+| callback | function | function that was assigned as a callback when the listener was added |
+
+#### Update .submodules.json
+
+In prebid.js, add your new submodule to `.submodules.json` under the `videoModule` as such:
+
+```json
+{
+ "parentModules": {
+ "videoModule": [
+ "exampleVideoProvider"
+ ]
+ }
+}
+```
+
+## Shared Resources for Developers
+
+A video library containing reusable code and constants has been added to Prebid.js for your convenience. We encourage you to import from this library.
+Constants such as event names can be found in the `libraries/video/constants/` folder.
diff --git a/dev-docs/adfusion.md b/dev-docs/adfusion.md
new file mode 100644
index 0000000000..9d3c71ddbe
--- /dev/null
+++ b/dev-docs/adfusion.md
@@ -0,0 +1,35 @@
+---
+layout: bidder
+title: AdFusion
+biddercode: adfusion
+tcfeu_supported: true
+gvl_id: 844
+usp_supported: false
+coppa_supported: false
+gpp_supported: false
+schain_supported: false
+dchain_supported: false
+safeframes_ok: false
+deals_supported: true
+userId: all
+media_types: display, video
+floors_supported: true
+fpd_supported: false
+pbjs: true
+pbs: false
+prebid_member: false
+multiformat_supported: will-bid-on-one
+ortb_blocking_supported: true
+sidebarType: 1
+---
+
+### Note
+
+The AdFusion Bidding adapter requires setup from the AdFusion team. Please contact us at [prebid@adfusion.pl](mailto:prebid@adfusion.pl).
+
+### Bid Params
+
+{: .table .table-bordered .table-striped }
+| Name | Scope | Description | Example | Type |
+|---------------|----------|-----------------------|-----------|-----------|
+| `accountId` | required | The account ID provided by AdFusion | `1234` | `number` |
diff --git a/dev-docs/adunit-reference.md b/dev-docs/adunit-reference.md
index 266ca9b6c0..b745357059 100644
--- a/dev-docs/adunit-reference.md
+++ b/dev-docs/adunit-reference.md
@@ -6,18 +6,19 @@ sidebarType: 1
---
# Ad Unit Reference
+
{:.no_toc}
The ad unit object is where you configure what kinds of ads you will show in a given ad slot on your page, including:
-+ Allowed media types (e.g., banner, native, and/or video)
-+ Allowed sizes
-+ AdUnit-specific first party data
+* Allowed media types (e.g., banner, native, and/or video)
+* Allowed sizes
+* AdUnit-specific first party data
It's also where you will configure bidders, e.g.:
-+ Which bidders are allowed to bid for that ad slot
-+ What information is passed to those bidders via their [parameters]({{site.baseurl}}/dev-docs/bidders.html)
+* Which bidders are allowed to bid for that ad slot
+* What information is passed to those bidders via their [parameters]({{site.baseurl}}/dev-docs/bidders.html)
This page describes the properties of the `adUnit` object.
@@ -32,28 +33,36 @@ See the table below for the list of properties on the ad unit. For example ad u
| Name | Scope | Type | Description |
|--------------+----------+---------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| `code` | Required | String | An identifier you create and assign to this ad unit. Generally this is set to the ad slot name or the div element ID. Used by [setTargetingForGPTAsync()](/dev-docs/publisher-api-reference/setTargetingForGPTAsync.html) to match which auction is for which ad slot. |
-| `sizes` | Required | Array[Number] or Array[Array[Number]] | All sizes this ad unit can accept. Examples: `[400, 600]`, `[[300, 250], [300, 600]]`. For 1.0 and later, define sizes within the appropriate `mediaTypes.{banner,native,video}` object. |
-| `bids` | Required | Array[Object] | Array of bid objects representing demand partners and associated parameters for a given ad unit. See [Bids](#adUnit.bids) below. |
+| `bids` | Optional | Array[Object] | Array of bid objects representing demand partners and associated parameters for a given ad unit. See [Bids](#adUnit.bids) below. |
| `mediaTypes` | Optional | Object | Defines one or more media types that can serve into the ad unit. For a list of properties, see [`adUnit.mediaTypes`](#adUnit.mediaTypes) below. |
| `labelAny` | Optional | Array[String] | Used for [conditional ads][conditionalAds]. Works with `sizeConfig` argument to [pbjs.setConfig][configureResponsive]. |
| `labelAll` | Optional | Array[String] | Used for [conditional ads][conditionalAds]. Works with `sizeConfig` argument to [pbjs.setConfig][configureResponsive]. |
-| `ortb2Imp` | Optional | Object | ortb2Imp is used to signal OpenRTB Imp objects at the adUnit grain. Similar to the global ortb2 field used for [global first party data configuration](/dev-docs/publisher-api-reference/setConfig.html#setConfig-fpd), but specific to this adunit. The ortb2Imp object currently supports [first party data](#adUnit-fpd-example) including the [Prebid Ad Slot](/features/pbAdSlot.html) and the [interstitial](#adUnit-interstitial-example) signal. |
+| `ortb2Imp` | Optional | Object | ortb2Imp is used to signal OpenRTB Imp objects at the adUnit grain. Similar to the global ortb2 field used for [global first party data configuration](/dev-docs/publisher-api-reference/setConfig.html#setConfig-fpd), but specific to this adunit.|
+| `ttlBuffer` | Optional | Number | TTL buffer override for this adUnit. See [setConfig({ttlBuffer})](/dev-docs/publisher-api-reference/setConfig.html#setConfig-ttlBuffer) |
+| `renderer` | Optional | Object | Custom renderer, typically used for [outstream video](/dev-docs/show-outstream-video-ads.html) |
+| `video` | Optional | Object | Used to link an Ad Unit to the [Video Module][videoModule]. For allowed params see the [adUnit.video reference](#adunitvideo). |
+| `deferBilling` | Optional | Boolean | Used by a publisher to flag adUnits as being separately billable. This allows for a publisher to trigger billing manually for winning bids. See [pbjs.triggerBilling](/dev-docs/publisher-api-reference/triggerBilling.html) and [onBidBillable](/dev-docs/bidder-adaptor.html#registering-on-bid-billable) for more info. |
-
+
### adUnit.bids
See the table below for the list of properties in the `bids` array of the ad unit. For example ad units, see the [Examples](#adUnit-examples) below.
+Note that `bids` is optional only for [Prebid Server stored impressions](#stored-imp), and required in all other cases.
+
{: .table .table-bordered .table-striped }
| Name | Scope | Type | Description |
|------------+----------+---------------+------------------------------------------------------------------------------------------------------------------------------------------|
-| `bidder` | Required | String | Unique code identifying the bidder. For bidder codes, see the [bidder param reference]({{site.baseurl}}/dev-docs/bidders.html). |
+| `bidder` | Optional | String | Unique code identifying the bidder. For bidder codes, see the [bidder param reference]({{site.baseurl}}/dev-docs/bidders.html). |
+| `module` | Optional | String | Module code - for requesting bids from modules that are not bid adapters. See [Prebid Server stored impressions](#stored-imp). |
| `params` | Required | Object | Bid request parameters for a given bidder. For allowed params, see the [bidder param reference]({{site.baseurl}}/dev-docs/bidders.html). |
| `labelAny` | Optional | Array[String] | Used for [conditional ads][conditionalAds]. Works with `sizeConfig` argument to [pbjs.setConfig][configureResponsive]. |
| `labelAll` | Optional | Array[String] | Used for [conditional ads][conditionalAds]. Works with `sizeConfig` argument to [pbjs.setConfig][configureResponsive]. |
+| `ortb2Imp` | Optional | Object | OpenRTB first-party data specific to this bidder. This is merged with, and takes precedence over, `adUnit.ortb2Imp`.|
+| `renderer` | Optional | Object | Custom renderer. Takes precedence over `adUnit.renderer`, but applies only to this bidder. |
-
+
### adUnit.mediaTypes
@@ -66,119 +75,26 @@ See the table below for the list of properties in the `mediaTypes` object of the
| [`native`](#adUnit.mediaTypes.native) | At least one of the `banner`, `native`, or `video` objects are required. | Object | Defines properties of a native ad. For properties, see [`adUnit.mediaTypes.native`](#adUnit.mediaTypes.native). |
| [`video`](#adUnit.mediaTypes.video) | At least one of the `banner`, `native`, or `video` objects are required. | Object | Defines properties of a video ad. For examples, see [`adUnit.mediaTypes.video`](#adUnit.mediaTypes.video). |
-
+
#### adUnit.mediaTypes.banner
{: .table .table-bordered .table-striped }
| Name | Scope | Type | Description |
|---------+----------+---------------------------------------+-----------------------------------------------------------------------------------------|
-| `sizes` | Required | Array[Number] or Array[Array[Number]] | All sizes this ad unit can accept. Examples: `[400, 600]`, `[[300, 250], [300, 600]]`. |
+| `sizes` | Required | Array[Number] or Array[Array[Number]] | All sizes this ad unit can accept. Examples: `[400, 600]`, `[[300, 250], [300, 600]]`. Prebid recommends that the sizes auctioned by Prebid should be the same auctioned by AdX and GAM OpenBidding, which means AdUnit sizes should match the GPT sizes. |
| `pos` | Optional | Integer | OpenRTB page position value: 0=unknown, 1=above-the-fold, 3=below-the-fold, 4=header, 5=footer, 6=sidebar, 7=full-screen |
| `name` | Optional | String | Name for this banner ad unit. Can be used for testing and debugging. |
-
+
#### adUnit.mediaTypes.native
-The `native` object contains the following properties that correspond to the assets of the native ad.
-
-{: .table .table-bordered .table-striped }
-| Name | Scope | Type | Description |
-|---------------+----------+--------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
-| `type` | Optional | String | A [pre-defined native type]({{site.baseurl}}/dev-docs/show-native-ads.html#pre-defined-native-types) used as a shorthand, e.g., `type: 'image'` implies required fields `image`, `title`, `sponsoredBy`, `clickUrl`. |
-| `title` | Optional | Object | The title object is to be used for the title element of the native ad. For properties, see [`native.title`](#adUnit.mediaTypes.native.title). |
-| `body` | Optional | Object | The body object is to be used for the body element of the native ad. For properties, see [`native.body`](#adUnit.mediaTypes.native.body). |
-| `sponsoredBy` | Optional | Object | The name of the brand associated with the ad. For properties, see [`native.sponsoredBy`](#adUnit.mediaTypes.native.sponsoredby). |
-| `icon` | Optional | Object | The brand icon that will appear with the ad. For properties, see [`native.icon`](#adUnit.mediaTypes.native.icon). |
-| `image` | Optional | Object | The image object is to be used for the main image of the native ad. For properties, see [`native.image`](#adUnit.mediaTypes.native.image). |
-| `clickUrl` | Optional | Object | Where the user will end up if they click the ad. For properties, see [`native.clickUrl`](#adUnit.mediaTypes.native.clickUrl). |
-| `cta` | Optional | String | *Call to Action* text, e.g., "Click here for more information". |
-
-
-
-##### adUnit.mediaTypes.native.image
-
-{: .table .table-bordered .table-striped }
-| Name | Scope | Type | Description |
-|-----------------+----------+---------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------|
-| `required` | Optional | Boolean | Whether this asset is required. |
-| `sizes` | Optional | Array[Number] or Array[Array[Number]] | All sizes this ad unit can accept. Examples: `[400, 600]`, `[[300, 250], [300, 600]]`. |
-| `aspect_ratios` | Optional | Array[Object] | Alongside `sizes`, you can define allowed aspect ratios. For properties, see [`image.aspect_ratios`](#adUnit.mediaTypes.native.image.aspect_ratios). |
-
-
-
-###### adUnit.mediaTypes.native.image.aspect_ratios
-
-{: .table .table-bordered .table-striped }
-| Name | Scope | Type | Description |
-|----------------+----------+---------+------------------------------------------------------------------------------------------------------|
-| `min_height` | Optional | Integer | The minimum height required for an image to serve (in pixels). |
-| `min_width` | Optional | Integer | The minimum width required for an image to serve (in pixels). |
-| `ratio_height` | Required | Integer | This, combined with `ratio_width`, determines the required aspect ratio for an image that can serve. |
-| `ratio_width` | Required | Integer | See above. |
-
-
-
-##### adUnit.mediaTypes.native.title
-
-{: .table .table-bordered .table-striped }
-| Name | Scope | Type | Description |
-|------------+----------+---------+------------------------------------------------------|
-| `required` | Optional | Boolean | Whether a title asset is required on this native ad. |
-| `len` | Optional | Integer | Maximum length of title text, in characters. |
-
-
-
-##### adUnit.mediaTypes.native.sponsoredBy
-
-{: .table .table-bordered .table-striped }
-| Name | Scope | Type | Description |
-|------------+----------+---------+-----------------------------------------------------------|
-| `required` | Optional | Boolean | Whether a brand name asset is required on this native ad. |
-
-
-
-##### adUnit.mediaTypes.native.clickUrl
-
-{: .table .table-bordered .table-striped }
-| Name | Scope | Type | Description |
-|------------+----------+---------+----------------------------------------------------------|
-| `required` | Optional | Boolean | Whether a click URL asset is required on this native ad. |
-
-
-
-##### adUnit.mediaTypes.native.body
-
-{: .table .table-bordered .table-striped }
-| Name | Scope | Type | Description |
-|------------+----------+---------+---------------------------------------------------|
-| `required` | Optional | Boolean | Whether body text is required for this native ad. |
-| `len` | Optional | Integer | Maximum length of body text, in characters. |
-
-
+The `native` object contains properties that correspond to the assets of the native ad.
-##### adUnit.mediaTypes.native.icon
-
-{: .table .table-bordered .table-striped }
-| Name | Scope | Type | Description |
-|-----------------+----------+---------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------|
-| `required` | Optional | Boolean | Whether an icon asset is required on this ad. |
-| `sizes` | Optional | Array[Number] or Array[Array[Number]] | All sizes this ad unit can accept. Examples: `[400, 600]`, `[[300, 250], [300, 600]]`. |
-| `aspect_ratios` | Optional | Array[Object] | Instead of `sizes`, you can define allowed aspect ratios. For properties, see [`icon.aspect_ratios`](#adUnit.mediaTypes.native.icon.aspect_ratios). |
-
-
-
-###### adUnit.mediaTypes.native.icon.aspect_ratios
-
-{: .table .table-bordered .table-striped }
-| Name | Scope | Type | Description |
-|----------------+----------+---------+------------------------------------------------------------------------------------------------------|
-| `min_width` | Optional | Integer | The minimum width required for an image to serve (in pixels). |
-| `ratio_height` | Required | Integer | This, combined with `ratio_width`, determines the required aspect ratio for an image that can serve. |
-| `ratio_width` | Required | Integer | See above. |
+See [Prebid Native Implementation](/prebid/native-implementation.html) for details.
-
+
#### adUnit.mediaTypes.video
@@ -187,31 +103,28 @@ The `native` object contains the following properties that correspond to the ass
|------------------+-------------+------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| `pos` | Optional | Integer | OpenRTB page position value: 0=unknown, 1=above-the-fold, 3=below-the-fold, 4=header, 5=footer, 6=sidebar, 7=full-screen |
| `context` | Recommended | String | The video context, either `'instream'`, `'outstream'`, or `'adpod'` (for long-form videos). Example: `context: 'outstream'`. Defaults to 'instream'. |
+| `useCacheKey` | Optional | Boolean | Defaults to `false`. While context `'instream'` always will return an vastUrl in bidResponse, `'outstream'` will not. Setting this `true` will use cache url defined in global options also for outstream responses. |
| `placement` | Recommended | Integer | 1=in-stream, 2=in-banner, 3=in-article, 4=in-feed, 5=interstitial/floating. **Highly recommended** because some bidders require more than context=outstream. |
+| `plcmt` | Recommended | Integer | 1=in-stream, 2=accompanying content, 3=interstitial, 4=no content/standalone. **Highly recommended** to comply with new IAB video specifications. See [AdCOM v1 spec](https://github.com/InteractiveAdvertisingBureau/AdCOM/blob/develop/AdCOM%20v1.0%20FINAL.md#list_plcmtsubtypesvideo) |
| `playerSize` | Optional | Array[Integer,Integer] | The size (width, height) of the video player on the page, in pixels. Example: `playerSize: [640, 480]` |
-| `api` | Recommended | Array[Integer] | List of supported API frameworks for this impression. If an API is not explicitly listed, it is assumed not to be supported. For list, see [OpenRTB spec][openRTB]. |
+| `api` | Recommended | Array[Integer] | List of supported API frameworks for this impression. If an API is not explicitly listed, it is assumed not to be supported. For list, see [OpenRTB 2.5 spec][openRTB]. If your video player or video ads SDK supports [Open Measurement][OpenMeasurement], **recommended** to set `7` for OMID-1|
| `mimes` | Recommended | Array[String] | Content MIME types supported, e.g., `"video/x-ms-wmv"`, `"video/mp4"`. **Required by OpenRTB when using [Prebid Server][pbServer]**. |
-| `protocols` | Optional | Array[Integer] | Array of supported video protocols. For list, see [OpenRTB spec][openRTB]. **Required by OpenRTB when using [Prebid Server][pbServer]**. |
-| `playbackmethod` | Optional | Array[Integer] | Allowed playback methods. If none specified, all are allowed. For list, see [OpenRTB spec][openRTB]. **Required by OpenRTB when using [Prebid Server][pbServer]**. |
-| `minduration` | Recommended | Integer | Minimum video ad duration in seconds, see [OpenRTB spec][openRTB]. |
-| `maxduration` | Recommended | Integer | Maximum video ad duration in seconds, see [OpenRTB spec][openRTB]. |
-| `w` | Recommended | Integer |
-Width of the video player in device independent pixels (DIPS)., see [OpenRTB spec][openRTB]. |
-| `h` | Recommended | Integer | Height of the video player in device independent pixels (DIPS)., see [OpenRTB spec][openRTB]. |
-| `startdelay` | Recommended | Integer | Indicates the start delay in seconds, see [OpenRTB spec][openRTB]. |
-| `placement` | Optional | Integer | Placement type for the impression, see [OpenRTB spec][openRTB]. |
-| `linearity` | Optional | Integer | Indicates if the impression must be linear, nonlinear, etc, see [OpenRTB spec][openRTB]. |
-| `skip` | Optional | Integer | Indicates if the player will allow the video to be skipped,
-where 0 = no, 1 = yes., see [OpenRTB spec][openRTB]. |
-| `skipmin` | Optional | Integer | Videos of total duration greater than this number of seconds
-can be skippable; only applicable if the ad is skippable., see [OpenRTB spec][openRTB]. |
-| `skipafter` | Optional | Integer | Number of seconds a video must play before skipping is
-enabled; only applicable if the ad is skippable., see [OpenRTB spec][openRTB]. |
-| `minbitrate` | Optional | Integer | Minimum bit rate in Kbps., see [OpenRTB spec][openRTB]. |
-| `maxbitrate` | Optional | Integer | Maximum bit rate in Kbps., see [OpenRTB spec][openRTB]. |
-| `delivery` | Optional | Array[Integer] | Supported delivery methods (e.g., streaming, progressive), see [OpenRTB spec][openRTB]. |
-| `pos` | Optional | Integer | Ad position on screen, see [OpenRTB spec][openRTB]. |
-| `playbackend` | Optional | Integer | The event that causes playback to end, see [OpenRTB spec][openRTB]. |
+| `protocols` | Optional | Array[Integer] | Array of supported video protocols. For list, see [OpenRTB 2.5 spec][openRTB]. **Required by OpenRTB when using [Prebid Server][pbServer]**. |
+| `playbackmethod` | Optional | Array[Integer] | Allowed playback methods. If none specified, all are allowed. For list, see [OpenRTB 2.5 spec][openRTB]. **Required by OpenRTB when using [Prebid Server][pbServer]**. |
+| `minduration` | Recommended | Integer | Minimum video ad duration in seconds, see [OpenRTB 2.5 spec][openRTB]. |
+| `maxduration` | Recommended | Integer | Maximum video ad duration in seconds, see [OpenRTB 2.5 spec][openRTB]. |
+| `w` | Recommended | Integer | Width of the video player in device independent pixels (DIPS)., see [OpenRTB 2.5 spec][openRTB]. |
+| `h` | Recommended | Integer | Height of the video player in device independent pixels (DIPS)., see [OpenRTB 2.5 spec][openRTB]. |
+| `startdelay` | Recommended | Integer | Indicates the start delay in seconds, see [OpenRTB 2.5 spec][openRTB]. |
+| `linearity` | Optional | Integer | Indicates if the impression must be linear, nonlinear, etc, see [OpenRTB 2.5 spec][openRTB]. |
+| `skip` | Optional | Integer | Indicates if the player will allow the video to be skipped, where 0 = no, 1 = yes., see [OpenRTB 2.5 spec][openRTB]. |
+| `skipmin` | Optional | Integer | Videos of total duration greater than this number of seconds can be skippable; only applicable if the ad is skippable., see [OpenRTB 2.5 spec][openRTB]. |
+| `skipafter` | Optional | Integer | Number of seconds a video must play before skipping is enabled; only applicable if the ad is skippable., see [OpenRTB 2.5 spec][openRTB]. |
+| `minbitrate` | Optional | Integer | Minimum bit rate in Kbps., see [OpenRTB 2.5 spec][openRTB]. |
+| `maxbitrate` | Optional | Integer | Maximum bit rate in Kbps., see [OpenRTB 2.5 spec][openRTB]. |
+| `delivery` | Optional | Array[Integer] | Supported delivery methods (e.g., streaming, progressive), see [OpenRTB 2.5 spec][openRTB]. |
+| `pos` | Optional | Integer | Ad position on screen, see [OpenRTB 2.5 spec][openRTB]. |
+| `playbackend` | Optional | Integer | The event that causes playback to end, see [OpenRTB 2.5 spec][openRTB]. |
If `'video.context'` is set to `'adpod'` then the following parameters are also available.
@@ -228,22 +141,41 @@ If `'video.context'` is set to `'adpod'` then the following parameters are also
| `contentLengthSec` | Optional | Number | A number representing the length of the video in seconds. Example: `contentLengthSec = 1` |
| `contentMode` | Optional | String | A string indicating the type of content being displayed in the video player. There are two options, `live` and `on-demand`. Example: `contentMode = 'on-demand'` |
+
-
+
+
+### adUnit.video
+
+See the table below for the list of properties in the `video` object of the ad unit. For example ad units, see the [Example](#adUnit-video-module-example) below.
+
+**Note:** your Ad Unit must have `mediaTypes.video` defined and your prebid instance should be configured to use the [Video Module][videoModule].
+When using the Video Module, the mediaTypes.video properties get filled out automatically. Any values already set by the Publisher will not be replaced by the Video Module.
+
+{: .table .table-bordered .table-striped }
+| Field | Scope | Type | Description |
+|----------+--------------------------------------------------------------+--------+--------------------------------------------------------------------------------------------------------------------|
+| `divId` | required | string | Unique identifier of the player provider, used to specify which player should be used to render the ad. Equivalent to the HTML Div Id of the player. |
+| `adServer` | optional | object | Configuration for ad server integration. Supersedes `video.adServer` configurations defined in the Prebid Config. |
+| `adServer.vendorCode` | required if `adServer` is defined | string | The identifier of the AdServer vendor (i.e. gam, etc). |
+| `adServer.baseAdTagUrl` | required if `adServer.params` is not defined | string | Your AdServer Ad Tag. The targeting params of the winning bid will be appended. |
+| `adServer.params` | required if `adServer.baseAdTagUrl` is not defined | object | Querystring parameters that will be used to construct the video ad tag URL. |
## Examples
-+ [Banner](#adUnit-banner-example)
-+ [Video](#adUnit-video-example)
- - [Instream](#adUnit-video-example-instream)
- - [Outstream](#adUnit-video-example-outstream)
- - [Adpod (Long-Form)](#adUnit-video-example-adpod)
-+ [Native](#adUnit-native-example)
-+ [Multi-Format](#adUnit-multi-format-example)
-+ [Twin Codes](#adUnit-twin-codes-example)
-+ [First Party Data](#adUnit-fpd-example)
+* [Banner](#adUnit-banner-example)
+* [Video](#adUnit-video-example)
+ * [With the Video Module](#adUnit-video-module-example)
+ * [Instream Sound-On](#adUnit-video-example-instream)
+ * [Accompanying Content](#adUnit-video-example-accompanying)
+ * [No Content/Standalone](#adUnit-video-example-outstream)
+ * [Adpod (Long-Form)](#adUnit-video-example-adpod)
+* [Native](#adUnit-native-example)
+* [Multi-Format](#adUnit-multi-format-example)
+* [Twin Codes](#adUnit-twin-codes-example)
+* [First Party Data](#adUnit-fpd-example)
-
+
### Banner
@@ -268,15 +200,43 @@ pbjs.addAdUnits({
});
```
-
+
### Video
-
+
-#### Instream
+#### With the Video Module
-For an example of an instream video ad unit, see below. For more detailed instructions, see [Show Video Ads]({{site.baseurl}}/dev-docs/show-video-with-a-dfp-video-tag.html).
+For an example of a video ad unit linked to the Video Module, see below. For more detailed instructions see the [Video Module docs][videoModule].
+
+```javascript
+pbjs.addAdUnits({
+ code: slot.code,
+ mediaTypes: {
+ video: {},
+ },
+ video: {
+ divId: 'playerDiv',
+ adServer: {
+ vendorCode: 'gam', // constant variable is GAM_VENDOR - see vendorCodes.js in the video library
+ baseAdTagUrl: 'https://pubads.g.doubleclick.net/gampad/ads?iu=/12345/'
+ }
+ },
+ bids: [{
+ bidder: 'appnexus',
+ params: {
+ placementId: 13232361
+ }
+ }]
+});
+```
+
+
+
+#### Instream Sound-On
+
+For an example of an instream video ad unit that you handle on your own, see below. For more detailed instructions, see [Show Video Ads]({{site.baseurl}}/dev-docs/show-video-with-a-dfp-video-tag.html).
```javascript
pbjs.addAdUnits({
@@ -284,10 +244,11 @@ pbjs.addAdUnits({
mediaTypes: {
video: {
context: 'instream',
+ plcmt: 1,
playerSize: [640, 480],
mimes: ['video/mp4'],
protocols: [1, 2, 3, 4, 5, 6, 7, 8],
- playbackmethod: [2],
+ playbackmethod: [5],
skip: 1
},
},
@@ -300,11 +261,42 @@ pbjs.addAdUnits({
});
```
-
+
-#### Outstream
+#### Player contains video content with sound off
-For an example of an outstream video ad unit, see below. For more detailed instructions, see [Show Outstream Video Ads]({{site.baseurl}}/dev-docs/show-outstream-video-ads.html).
+The IAB calls this scenario "Accompanying Content". Previously, this might have been called "instream with sound-off", but as of April 2023, the IAB has reclassified this scenario.
+
+```javascript
+pbjs.addAdUnits({
+ code: slot.code,
+ mediaTypes: {
+ video: {
+ context: 'instream',
+ plcmt: 2,
+ playerSize: [640, 480],
+ mimes: ['video/mp4'],
+ protocols: [1, 2, 3, 4, 5, 6, 7, 8],
+ playbackmethod: [6],
+ skip: 1
+ },
+ },
+ bids: [{
+ bidder: 'appnexus',
+ params: {
+ placementId: 13232361
+ }
+ }]
+});
+```
+
+
+
+#### Standalone ad wit no video content
+
+This is the scenario formerly known as Outstream. As of April 2023, the IAB now calls this scenario "No Content/Standalone".
+
+For an example of an outstream video ad unit that you handle on your own, see below. For more detailed instructions, see [Show Outstream Video Ads]({{site.baseurl}}/dev-docs/show-outstream-video-ads.html).
```javascript
pbjs.addAdUnits({
@@ -312,7 +304,11 @@ pbjs.addAdUnits({
mediaTypes: {
video: {
context: 'outstream',
- playerSize: [640, 480]
+ plcmt: 4,
+ playerSize: [640, 480],
+ mimes: ['video/mp4'],
+ protocols: [1, 2, 3, 4, 5, 6, 7, 8],
+ playbackmethod: [6],
}
},
renderer: {
@@ -327,11 +323,42 @@ pbjs.addAdUnits({
...
});
```
-
+
+An example of an outstream video ad unit using useCacheKey:
+
+```javascript
+pbjs.addAdUnits({
+ code: slot.code,
+ mediaTypes: {
+ video: {
+ context: 'outstream',
+ plcmt: 4,
+ playerSize: [640, 480],
+ mimes: ['video/mp4'],
+ protocols: [1, 2, 3, 4, 5, 6, 7, 8],
+ playbackmethod: [6],
+ useCacheKey: true,
+ }
+ },
+ renderer: {
+ url: 'https://example.com/myVastVideoPlayer.js',
+ render: function(bid) {
+ let vastUrl = bid.vastUrl;
+ myVastVideoPlayer.setSrc({
+ src: vastUrl,
+ ...
+ });
+ }
+ },
+ ...
+});
+```
+
+
#### Adpod (Long-Form)
-For an example of an adpod video ad unit, see below. For more detailed instructions, see [Show Long-Form Video Ads]({{site.baseurl}}/prebid-video/video-long-form.html).
+For an example of an adpod video ad unit that you handle on your own, see below. For more detailed instructions, see [Show Long-Form Video Ads]({{site.baseurl}}/prebid-video/video-long-form.html).
```javascript
var longFormatAdUnit = {
@@ -361,7 +388,7 @@ var longFormatAdUnit = {
}
```
-
+
### Native
@@ -372,28 +399,41 @@ pbjs.addAdUnits({
code: slot.code,
mediaTypes: {
native: {
- image: {
- required: true,
- sizes: [150, 50]
- },
- title: {
- required: true,
- len: 80
- },
- sponsoredBy: {
- required: true
- },
- clickUrl: {
- required: true
- },
- body: {
- required: true
- },
- icon: {
- required: true,
- sizes: [50, 50]
- }
+ ortb: {
+ ver: "1.2",
+ assets: [{
+ required: 1,
+ img: {
+ type: 1,
+ hmin: 50
+ },
+ },{
+ required: 1,
+ title: {
+ len: 80
+ },
+ },{
+ required: 1,
+ data: {
+ type: 1,
+ len: 30
+ },
+ },{
+ required: 1,
+ data: {
+ type: 2,
+ len: 100
+ },
+ },{
+ required: 1,
+ img: {
+ type: 3,
+ hmin: 200,
+ wmin: 267
+ }
+ }]
}
+ }
},
bids: [
{
@@ -406,13 +446,13 @@ pbjs.addAdUnits({
});
```
-
+
### Multi-Format
For an example of a multi-format ad unit, see below. For more detailed instructions, see [Show Multi-Format Ads]({{site.baseurl}}/dev-docs/show-multi-format-ads.html).
-{% highlight js %}
+```javascript
pbjs.addAdUnits([{
code: 'div-banner-native',
@@ -423,7 +463,16 @@ pbjs.addAdUnits([{
]
},
native: {
- type: 'image'
+ ortb: {
+ ver: "1.2",
+ assets: [{
+ required: 1,
+ img: {
+ type: 1,
+ hmin: 50
+ }
+ }]
+ }
},
},
bids: [{
@@ -464,7 +513,16 @@ pbjs.addAdUnits([{
]
},
native: {
- type: 'image'
+ ortb: {
+ ver: "1.2",
+ assets: [{
+ required: 1,
+ img: {
+ type: 1,
+ hmin: 50
+ }
+ }]
+ }
},
video: {
context: 'outstream',
@@ -480,72 +538,73 @@ pbjs.addAdUnits([{
}
]);
-{% endhighlight %}
+```
-
+
### Twin AdUnit Codes
It's ok to have multiple AdUnits with the same `code`. This can be useful in scenarios
where bidders have different capabilities for the same spot on the page. e.g.
-- BidderA should receive both media types, while BidderB gets only one
-- BidderA gets one size while BidderB gets another
+* BidderA should receive both media types, while BidderB gets only one
+* BidderA gets one size while BidderB gets another
In this example, bidderA gets both banner and outstream, while bidderB gets only banner.
-{% highlight js %}
- var adUnits = [
- {
- code: 'test-div',
- mediaTypes: {
- video: {
- context: "outstream",
- playerSize: [[300,250]]
+
+```javascript
+var adUnits = [
+ {
+ code: 'test-div',
+ mediaTypes: {
+ video: {
+ context: "outstream",
+ playerSize: [[300,250]]
+ }
+ },
+ bids: [
+ {
+ bidder: 'bidderA',
+ params: {
+ ...
}
- },
- bids: [
- {
- bidder: 'bidderA',
- params: {
- ...
- }
- }
- ]
- },
- {
- code: 'test-div',
- mediaTypes: {
- banner: {
- sizes: [[300,250],[300,600],[728,90]]
+ }
+ ]
+ },
+ {
+ code: 'test-div',
+ mediaTypes: {
+ banner: {
+ sizes: [[300,250],[300,600],[728,90]]
+ }
+ },
+ bids: [
+ {
+ bidder: 'bidderB',
+ params: {
+ ...
}
- },
- bids: [
- {
- bidder: 'bidderB',
- params: {
- ...
- }
- },{
- bidder: 'bidderA',
- params: {
- ...
- }
- }
- ]
- }
- ];
-{% endhighlight %}
+ },{
+ bidder: 'bidderA',
+ params: {
+ ...
+ }
+ }
+ ]
+ }
+ ];
+```
In this example, bidderA receives 2 bidRequest objects while bidderB receives one. If a bidder provides more than one bid for the same AdUnit.code, Prebid.js will use the highest bid when it's
time to set targeting.
-
+
### First Party Data
Example of an adunit-specific block of first party data:
-{% highlight js %}
+```javascript
pbjs.addAdUnits({
code: "test-div",
mediaTypes: {
@@ -554,28 +613,29 @@ pbjs.addAdUnits({
}
},
ortb2Imp: {
- ext: {
- data: {
- pbadslot: "homepage-top-rect",
- adUnitSpecificContextAttribute: "123"
- }
- }
+ ext: {
+ data: {
+ pbadslot: "homepage-top-rect",
+ adUnitSpecificContextAttribute: "123"
+ }
+ }
},
- ...
+ // ...
});
-{% endhighlight %}
+```
Notes:
-- Only contextual data should be added on the AdUnit; user-related data goes in the [global first party data](/dev-docs/publisher-api-reference/setConfig.html#setConfig-fpd) config.
-- For additional help with analytics and reporting you can use the [Prebid Ad Slot](/features/pbAdSlot.html), a special type of first party data.
-
+* Only contextual data should be added on the AdUnit; user-related data goes in the [global first party data](/dev-docs/publisher-api-reference/setConfig.html#setConfig-fpd) config.
+* For additional help with analytics and reporting you can use the [Prebid Ad Slot](/features/pbAdSlot.html), a special type of first party data.
+
+
### Interstitial Ads
Example of an adunit-specific interstitial signal:
-{% highlight js %}
+```javascript
pbjs.addAdUnits({
code: "test-div",
mediaTypes: {
@@ -584,31 +644,95 @@ pbjs.addAdUnits({
}
},
ortb2Imp: {
- instl:1
+ instl:1
},
- ...
+ // ...
});
-{% endhighlight %}
+```
-For more information on Interstitial ads, reference the [Interstitial feature page](/features/InterstitialAds.html).
+For more information on Interstitial ads, reference the [Interstitial feature page](/features/InterstitialAds.html). Additionally, to assist with billing optimization and interstitial ads, the triggerBilling and onBidBillable functionality can be utilized. See [pbjs.triggerBilling](/dev-docs/publisher-api-reference/triggerBilling.html) and [onBidBillable](/dev-docs/bidder-adaptor.html#registering-on-bid-billable) for more info.
-## Related Topics
+
-+ [Publisher API Reference]({{site.baseurl}}/dev-docs/publisher-api-reference)
-+ [Conditional Ad Units][conditionalAds]
-+ [Show Native Ads]({{site.baseurl}}/dev-docs/show-native-ads.html)
-+ [Show Video Ads]({{site.baseurl}}/dev-docs/show-video-with-a-dfp-video-tag.html)
-+ [Show Outstream Video Ads]({{site.baseurl}}/dev-docs/show-outstream-video-ads.html)
-+ [Show Long-Form Video Ads]({{site.baseurl}}/prebid-video/video-long-form.html)
-+ [Prebid.org Video Examples]({{site.baseurl}}/examples/video/)
-+ [Prebid.org Native Examples](/dev-docs//examples/native-ad-example.html)
+### Prebid Server stored impressions
+When using [PBS stored impressions](/dev-docs/modules/prebidServer.html#stored-imp), `bids` is not required:
+
+```javascript
+pbjs.addAdUnits({
+ code: "test-div",
+ ortb2Imp: {
+ ext: {
+ prebid: {
+ storedrequest: {
+ id: 'stored-request-id'
+ }
+ }
+ }
+ }
+})
+```
+
+To use stored impressions together with client-side bidders - or stored impressions from other instances of Prebid Server - use `bids[].module`:
+
+```javascript
+pbjs.addAdUnits({
+ code: "test-div",
+ bids: [
+ {
+ module: "pbsBidAdapter",
+ params: {
+ configName: "server-1"
+ },
+ ortb2Imp: {
+ ext: {
+ prebid: {
+ storedrequest: {
+ id: 'stored-request-server-1'
+ }
+ }
+ }
+ }
+ },
+ {
+ module: "pbsBidAdapter",
+ params: {
+ configName: "server-2"
+ },
+ ortb2Imp: {
+ ext: {
+ prebid: {
+ storedrequest: {
+ id: 'stored-request-server-2'
+ }
+ }
+ }
+ }
+ },
+ {
+ bidder: 'client-bidder',
+ // ...
+ }
+ ]
+});
+```
+
+## Related Topics
+* [Publisher API Reference](/dev-docs/publisher-api-reference)
+* [Conditional Ad Units][conditionalAds]
+* [Show Native Ads](/prebid/native-implementation.html)
+* [Show Video Ads](/dev-docs/show-video-with-a-dfp-video-tag.html)
+* [Show Outstream Video Ads](/dev-docs/show-outstream-video-ads.html)
+* [Show Long-Form Video Ads](/prebid-video/video-long-form.html)
+* [Prebid.org Video Examples](/examples/video/)
+* [Prebid.org Native Examples](/dev-docs//examples/native-ad-example.html)
-[conditionalAds]: {{site.baseurl}}/dev-docs/conditional-ad-units.html
-[setConfig]: {{site.baseurl}}/dev-docs/publisher-api-reference/setConfig.html
-[configureResponsive]: {{site.baseurl}}/dev-docs/publisher-api-reference/setConfig.html#setConfig-Configure-Responsive-Ads
+[conditionalAds]: /dev-docs/conditional-ad-units.html
+[configureResponsive]: /dev-docs/publisher-api-reference/setConfig.html#setConfig-Configure-Responsive-Ads
[openRTB]: https://www.iab.com/wp-content/uploads/2016/03/OpenRTB-API-Specification-Version-2-5-FINAL.pdf
-[pbServer]: {{site.baseurl}}/prebid-server/overview/prebid-server-overview.html
+[pbServer]: /prebid-server/overview/prebid-server-overview.html
+[OpenMeasurement]: https://iabtechlab.com/standards/open-measurement-sdk/
+[videoModule]: {{site.github.url}}/prebid-video/video-module.html
diff --git a/dev-docs/adzymic.md b/dev-docs/adzymic.md
new file mode 100644
index 0000000000..585db1c6ee
--- /dev/null
+++ b/dev-docs/adzymic.md
@@ -0,0 +1,29 @@
+---
+layout: bidder
+title: Adzymic
+description: Adzymic Bidder Adapter
+biddercode: adzymic
+pbjs: true
+pbs: false
+aliasCode: appnexus
+gdpr_supported: true
+media_types: banner, video, native
+safeframes_ok: false
+multiformat_supported: will-bid-on-any
+gvl_id: 723
+schain_supported: true
+userId: all
+sidebarType: 1
+---
+### Bid Params
+
+{: .table .table-bordered .table-striped }
+| Name | Scope | Description | Example | Type |
+|---------------|----------|-----------------------|-----------|-----------|
+| `placementID` | required | Placement id | `'11111'` | `string` |
+
+Adzymic is an aliased bidder for AppNexus.
+
+### Note
+
+For setup with Adzymic, please reach out to [anil@adzymic.co](mailto:anil@adzymic.co) / [travis@adzymic.co](mailto:travis@adzymic.co)
diff --git a/dev-docs/analytics-ga.md b/dev-docs/analytics-ga.md
index 6e9ebaa939..e1f580e411 100644
--- a/dev-docs/analytics-ga.md
+++ b/dev-docs/analytics-ga.md
@@ -12,14 +12,17 @@ nav_section: reference
# Prebid Analytics with GA
+
{: .no_toc}
* TOC
{:toc }
-### Code Example
+## Notice: Deleted in Prebid 8 with the deprecation of GA by Google
+
+## Code Example
-{% highlight js %}
+```javascript
// If you're using GA, this should already be in your page:
(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
@@ -38,25 +41,25 @@ pbjs.que.push(function() {
});
});
-{% endhighlight %}
+```
-##### A Few Requirements
+### A Few Requirements
1. This code snippet has to be inserted after the `'ga'` param is available.
2. This code snippet has to be inserted after pbjs.que has been defined.
3. You must include `"ga"` in the `"analytics"` array in `package.json`.
-##### Distribution Data
+### Distribution Data
Note: we recommend disabling `enableDistribution` if you are using more than 4 bidders. This is because GA throttles the number of events that can be logged (20 initial + 2/second). Distribution data provides you with a histogram of CPM distribution and bid load time (latency) for each bidder. See distribution data [demo here](https://prebid.org/blog/header-bidding-analytics-coming-soon/#histogram-analysis-of-latency-and-cpm-distribution).
See [this link](https://developers.google.com/analytics/devguides/collection/protocol/v1/limits-quotas) for details on GA's throttling.
-##### Sampling
+### Sampling
To track a lower volume of traffic in Google Analytics, you may specify a sample rate in the options. For example, to set up a 5% sample rate:
-{% highlight js %}
+```javascript
pbjs.que.push(function() {
pbjs.enableAnalytics({
provider: 'ga',
@@ -67,34 +70,33 @@ pbjs.que.push(function() {
}
});
});
-{% endhighlight %}
+```
-At the start of each page, Prebid chooses a random number between 0 and 1
+At the start of each page, Prebid chooses a random number between 0 and 1
and logs the analytics only if the number is less than the supplied sample rate, which defaults to 1 (100%).
Of course a smaller sample rate means that reported numbers will be correspondingly lower, so a scaling factor in reports may be useful, but is outside the scope of Prebid.
It should also be noted that all events on a given page are subject to the same analytics behavior. This means that all requests, responses, and renders on a page are either logged or not logged.
-### How Prebid.js uses GA's Events
+## How Prebid.js uses GA's Events
Prebid.js sends out GA-compatible [Events](https://support.google.com/analytics/answer/1033068). (For more information, see the GA docs on [Event Tracking](https://developers.google.com/analytics/devguides/collection/analyticsjs/events)).
In this example, the page has 1 ad unit with 3 bidders. The timeout is set to 400ms. Let's go through what Prebid Analytics sends out to GA:
{: .table .table-bordered .table-striped }
-| Time | What Happened | GA Events Sent |
+| Time | What Happened | GA Events Sent |
| :---- |:--------| :-------|
-| 15ms | Prebid.js sends out bid requests to bidders AppNexus, OpenX, and Pubmatic. | Event 1: Category=`Prebid.js Bids`, Action=`Requests`, Label=`appnexus`, Value=1. Event 2: Category=`Prebid.js Bids`, Action=`Requests`, Label=`openx`, Value=1. Event 3: Category=`Prebid.js Bids`, Action=`Requests`, Label=`pubmatic`, Value=1 |
-| 203ms | AppNexus' bid came back with a CPM of $2.314 and a latency of 188ms. | Event 1: Category=`Prebid.js Bids`, Action=`Bids`, Label=`appnexus`, Value=231. Event 2: Category=`Prebid.js Bids`, Action=`Bid Load Time`, Label=`appnexus`, Value=188 |
-| 274ms | Pubmatic's bid came back with a CPM of $0 and a latency of 259ms. | No bid event sent out because it is a no bid. Event 1: Category=`Prebid.js Bids`, Action=`Bid Load Time`, Label=`appnexus`, Value=259 |
+| 15ms | Prebid.js sends out bid requests to bidders AppNexus, OpenX, and Pubmatic. | Event 1: Category=`Prebid.js Bids`, Action=`Requests`, Label=`appnexus`, Value=1. Event 2: Category=`Prebid.js Bids`, Action=`Requests`, Label=`openx`, Value=1. Event 3: Category=`Prebid.js Bids`, Action=`Requests`, Label=`pubmatic`, Value=1 |
+| 203ms | AppNexus' bid came back with a CPM of $2.314 and a latency of 188ms. | Event 1: Category=`Prebid.js Bids`, Action=`Bids`, Label=`appnexus`, Value=231. Event 2: Category=`Prebid.js Bids`, Action=`Bid Load Time`, Label=`appnexus`, Value=188 |
+| 274ms | Pubmatic's bid came back with a CPM of $0 and a latency of 259ms. | No bid event sent out because it is a no bid. Event 1: Category=`Prebid.js Bids`, Action=`Bid Load Time`, Label=`appnexus`, Value=259 |
| 415ms | Timeout is up because 400ms has passed since bid requests were sent. OpenX has timed out. | Event 1: Category=`Prebid.js Bids`, Action=`Timeouts`, Label=`openx`, Value=1 |
-| 476ms | OpenX's bid came back with a CPM of $2.831 and a latency of 461ms (a bid may still come back after a timeout). | Event 1: Category=`Prebid.js Bids`, Action=`Bids`, Label=`openx`, Value=283. Event 2: Category=`Prebid.js Bids`, Action=`Bid Load Time`, Label=`openx`, Value=461 |
+| 476ms | OpenX's bid came back with a CPM of $2.831 and a latency of 461ms (a bid may still come back after a timeout). | Event 1: Category=`Prebid.js Bids`, Action=`Bids`, Label=`openx`, Value=283. Event 2: Category=`Prebid.js Bids`, Action=`Bid Load Time`, Label=`openx`, Value=461 |
| 572ms | Google Ad Manager completed its auction and the AppNexus $2.314 bid won. | Event 3: Category=`Prebid.js Bids`, Action=`Wins`, Label=`appnexus`, Value=231 |
-
Note that a Win event is a true win, meaning that it is not just the highest bid in the header bidding auction, but the winning bid across the entire auction hosted by the ad server and its creative is served back to the page.
-### How to Verify it Works
+## How to Verify it Works
After you've implemented the above code snippet, load the page a few times, wait 1-2 hours for GA's data pipeline to finish, and go to your GA Reporting screen. Navigate to **Behavior > Events**. You should be able to find the Prebid.js events (if you have many other events, filter **Event Category** by `Prebid.js`)
@@ -102,28 +104,28 @@ After you've implemented the above code snippet, load the page a few times, wait
![Prebid Diagram Image]({{ site.github.url }}/assets/images/dev-docs/GA-event-categories.png)
-
+
**GA Action:**
![Prebid Diagram Image]({{ site.github.url }}/assets/images/dev-docs/GA-event-actions.png)
-
+
**GA Label:**
![Prebid Diagram Image]({{ site.github.url }}/assets/images/dev-docs/GA-event-labels.png)
-As you can see, this reporting screen cannot help you answer questions such as:
+As you can see, this reporting screen cannot help you answer questions such as:
-+ What's the AppNexus bidder's avg. bid CPM
-+ What's the AppNexus bidder's avg. bid load time?
+* What's the AppNexus bidder's avg. bid CPM
+* What's the AppNexus bidder's avg. bid load time?
To see how to answer these questions, see the following sections.
### Better Reports within GA
-With a custom report in GA, you can get:
+With a custom report in GA, you can get:
![Prebid Diagram Image]({{ site.github.url }}/assets/images/dev-docs/GA-custom-report.png)
@@ -148,8 +150,8 @@ Install the [Google Analytics Spreadsheet Add-on](https://developers.google.com/
Make a local copy of the [Demo Dashboard](https://docs.google.com/spreadsheets/d/11czzvF5wczKoWGMrGgz0NFEOM7wsnAISbp_MpmGzogU/edit?usp=sharing).
![Prebid Diagram Image]({{ site.github.url }}/assets/images/dev-docs/sheet-copy-dashboard.png){: .pb-lg-img :}
-
-
+
+
#### Step 3. Update the GA Profile ID
@@ -157,16 +159,14 @@ In your local copy, go to the **Report Configuration** tab, update the GA profil
![Prebid Diagram Image]({{ site.github.url }}/assets/images/dev-docs/sheet-report-config.png){: .pb-lg-img :}
-
+
#### Step 4. Run the Report
![Prebid Diagram Image]({{ site.github.url }}/assets/images/dev-docs/sheet-run-report.png){: .pb-lg-img :}
-
+
#### Step 5. (Optional) Schedule a Daily Report
![Prebid Diagram Image]({{ site.github.url }}/assets/images/dev-docs/sheet-schedule-report.png){: .pb-lg-img :}
-
-
diff --git a/dev-docs/analytics/33across.md b/dev-docs/analytics/33across.md
new file mode 100644
index 0000000000..d6edecc535
--- /dev/null
+++ b/dev-docs/analytics/33across.md
@@ -0,0 +1,78 @@
+---
+layout: analytics
+title: 33Across
+description: 33Across Analytics Adapter
+modulecode: 33across
+prebid_member: true
+gdpr_supported: true
+usp_supported: true
+gpp_supported: true
+coppa_supported: true
+gvl_id: 58
+enable_download: true
+---
+
+#### About
+
+This analytics adapter collects data about the performance of your ad slots
+for each auction run on your site. It also provides insight into how identifiers
+from the
+[33Across User ID Sub-module](https://docs.prebid.org/dev-docs/modules/userid-submodules/33across.html)
+and other user ID sub-modules improve your monetization. The data is sent at
+the earliest opportunity for each auction to provide a more complete picture of
+your ad performance.
+
+The analytics adapter is free to use!
+However, the publisher must work with our account management team to obtain a
+Publisher/Partner ID (PID) and enable Analytics for their account.
+To get a PID and to have the publisher account enabled for Analytics,
+you can reach out to our team at the following email -
+
+If you are an existing publisher and you already use a 33Across PID,
+you can reach out to
+to have your account enabled for analytics.
+
+The 33Across privacy policy is at .
+
+#### Analytics Options
+
+{: .table .table-bordered .table-striped }
+| Name | Scope | Example | Type | Description |
+|-----------|----------|---------|----------|-------------|
+| `pid` | required | abc123 | `string` | 33Across Publisher ID |
+| `timeout` | optional | 10000 | `int` | Milliseconds to wait after last seen auction transaction before sending report (default 10000). |
+
+#### Configuration
+
+The data is sent at the earliest opportunity for each auction to provide
+a more complete picture of your ad performance, even if the auction is interrupted
+by a page navigation. At the latest, the adapter will always send the report
+when the page is unloaded, at the end of the auction, or after the timeout,
+whichever comes first.
+
+In order to guarantee consistent reports of your ad slot behavior, we recommend
+including the GPT Pre-Auction Module (`gptPreAuction` if compiling from source).
+This module is included by default when Prebid is downloaded.
+
+Enable the 33Across Analytics Adapter in Prebid.js using the analytics provider `33across`
+and options as seen in the example below.
+
+#### Example Configuration
+
+```js
+pbjs.enableAnalytics({
+ provider: '33across',
+ options: {
+ /**
+ * The 33Across Publisher ID.
+ */
+ pid: 'abc123',
+ /**
+ * Timeout in milliseconds after which an auction report
+ * will be sent regardless of auction state.
+ * [optional]
+ */
+ timeout: 10000
+ }
+});
+```
diff --git a/dev-docs/analytics/adWMG.md b/dev-docs/analytics/adWMG.md
index 7370dd57db..d159085d90 100644
--- a/dev-docs/analytics/adWMG.md
+++ b/dev-docs/analytics/adWMG.md
@@ -3,7 +3,7 @@ layout: analytics
title: adWMG
description: adWMG Analytics Adapter
modulecode: adWMG
-gdpr_supported: true
+tcfeu_supported: true
usp_supported: false
coppa_supported: false
prebid_member: false
@@ -18,7 +18,6 @@ gvl_id: 959
| publisher_id | required | Publisher ID from WMG Dashboard | `'5abd0543ba45723db49d97ea'` | string |
| site | required | Domain where Prebid.js working | `'test.com'` | string |
-
### Example Configuration
```
@@ -29,6 +28,7 @@ gvl_id: 959
publisher_id: '5abd0543ba45723db49d97ea'
}});
```
+
#### Registration
-Please visit [https://adwmg.com/](https://adwmg.com/) for more information.
+Please visit [adwmg.com](https://adwmg.com/) for more information.
diff --git a/dev-docs/analytics/adagio.md b/dev-docs/analytics/adagio.md
index e57ac297b8..ff442970bf 100644
--- a/dev-docs/analytics/adagio.md
+++ b/dev-docs/analytics/adagio.md
@@ -4,9 +4,23 @@ title: Adagio
description: Adagio Analytics Adapter
modulecode: adagio
prebid_member: true
+tcfeu_supported: true
+usp_supported: true
+coppa_supported: true
+gvl_id: 617
+enable_download: true
---
#### Registration
-Please visit [https://adagio.io/](https://adagio.io/) for more information.
+The Adagio Analytics adapter requires setup and approval from the Adagio team. Please reach out to for more information.
+#### Example Configuration
+
+```js
+ pbjs.que.push(function () {
+ pbjs.enableAnalytics({
+ provider: 'adagio',
+ });
+ });
+```
diff --git a/dev-docs/analytics/adkernelAdn.md b/dev-docs/analytics/adkernelAdn.md
index c483625dde..6c53b999c4 100644
--- a/dev-docs/analytics/adkernelAdn.md
+++ b/dev-docs/analytics/adkernelAdn.md
@@ -3,7 +3,7 @@ layout: analytics
title: Adkernel
description: Adkernel Analytics Adapter
modulecode: adkernelAdn
-gdpr_supported: true
+tcfeu_supported: true
usp_supported: true
coppa_supported: true
prebid_member: false
@@ -12,5 +12,4 @@ gvl_id: 14
#### Registration
-Please visit https://adkernel.com/dsp-suite/ for more information.
-
+Please visit [adkernel.com/dsp-suite/](https://adkernel.com/dsp-suite/) for more information.
diff --git a/dev-docs/analytics/adloox.md b/dev-docs/analytics/adloox.md
index 03f9e5f354..66d9339591 100644
--- a/dev-docs/analytics/adloox.md
+++ b/dev-docs/analytics/adloox.md
@@ -3,7 +3,7 @@ layout: analytics
title: Adloox
description: Adloox Prebid Analytics Adapter
modulecode: adloox
-gdpr_supported: true
+tcfeu_supported: true
usp_supported: true
coppa_supported: false
prebid_member: false
@@ -19,7 +19,7 @@ The adapter adds an HTML `
-### Full List
+## Full List
+
+### #-A
-#### #-A
{% for page in bidder_pages %}
{% assign firstletter = page.title | slice:0 | downcase %}
@@ -46,7 +49,8 @@ var AutocompleteList = [{% for page in bidder_pages %}{ label: '{{ page.title }}
{% endfor %}
-#### B-C
+### B-C
+
{% for page in bidder_pages %}
{% assign firstletter = page.title | slice:0 | downcase %}
@@ -57,7 +61,8 @@ var AutocompleteList = [{% for page in bidder_pages %}{ label: '{{ page.title }}
{% endfor %}
-#### D-G
+### D-G
+
{% for page in bidder_pages %}
{% assign firstletter = page.title | slice:0 | downcase %}
@@ -68,7 +73,8 @@ var AutocompleteList = [{% for page in bidder_pages %}{ label: '{{ page.title }}
{% endfor %}
-#### H-L
+### H-L
+
{% for page in bidder_pages %}
{% assign firstletter = page.title | slice:0 | downcase %}
@@ -79,7 +85,8 @@ var AutocompleteList = [{% for page in bidder_pages %}{ label: '{{ page.title }}
{% endfor %}
-#### M-O
+### M-O
+
{% for page in bidder_pages %}
{% assign firstletter = page.title | slice:0 | downcase %}
@@ -90,7 +97,8 @@ var AutocompleteList = [{% for page in bidder_pages %}{ label: '{{ page.title }}
{% endfor %}
-#### P-R
+### P-R
+
{% for page in bidder_pages %}
{% assign firstletter = page.title | slice:0 | downcase %}
@@ -101,7 +109,8 @@ var AutocompleteList = [{% for page in bidder_pages %}{ label: '{{ page.title }}
{% endfor %}
-#### S-T
+### S-T
+
{% for page in bidder_pages %}
{% assign firstletter = page.title | slice:0 | downcase %}
@@ -112,7 +121,8 @@ var AutocompleteList = [{% for page in bidder_pages %}{ label: '{{ page.title }}
{% endfor %}
-#### U-Z
+### U-Z
+
{% for page in bidder_pages %}
{% assign firstletter = page.title | slice:0 | downcase %}
diff --git a/dev-docs/bidders/1ad4good.md b/dev-docs/bidders/1ad4good.md
deleted file mode 100644
index ce869099b1..0000000000
--- a/dev-docs/bidders/1ad4good.md
+++ /dev/null
@@ -1,20 +0,0 @@
----
-layout: bidder
-title: 1ad4good
-description: Prebid One Ad for Good(1ad4good.org) Bidder Adaptor
-pbjs: true
-biddercode: 1ad4good
-enable_download: false
-pbjs_version_notes: not ported to 5.x
----
-
-### Note:
-This adapter is for displaying free ads for various not profits. You can find more info at [1ad4good.org])(http://1ad4good.org).
-
-### Bid Params
-
-{: .table .table-bordered .table-striped }
-| Name | Scope | Description | Example | Type |
-|---------------|----------|-------------|---------|----------|
-| `placementId` | required | Meaningless, but required id | `234234` | `integer` |
-| `cpm` | optional | forces bidder to insert custom cpm bid | 0.50 | `decimal` |
diff --git a/dev-docs/bidders/33across.md b/dev-docs/bidders/33across.md
index ceed5753a3..4076fae58b 100644
--- a/dev-docs/bidders/33across.md
+++ b/dev-docs/bidders/33across.md
@@ -6,12 +6,21 @@ pbjs: true
pbs: true
biddercode: 33across
media_types: banner, video
-gdpr_supported: true
+tcfeu_supported: true
floors_supported: true
schain_supported: true
+dchain_supported: false
usp_supported: true
+gpp_supported: true
+coppa_supported: true
+fpd_supported: true
+multiformat_supported: will-bid-on-any
+safeframes_ok: true
+deals_supported: true
+prebid_member: true
userIds: all
gvl_id: 58
+sidebarType: 1
---
### Bid Params
@@ -23,6 +32,7 @@ gvl_id: 58
| `productId` | required | 33Across Product ID that the Publisher has registered for (use `'siab'` for Banner or Outstream Video , `'inview'` for Adhesion, `'instream'` for Instream Video) | `'siab'` | `string` |
### Ad Unit Setup for Banner
+
```javascript
var adUnits = [
{
@@ -43,9 +53,10 @@ var adUnits = [
}
}]
}
-```
+```
### Ad Unit Setup for Outstream Video
+
```javascript
var adUnits = [
{
@@ -81,6 +92,7 @@ var adUnits = [
```
### Ad Unit Setup for Instream Video
+
```javascript
var adUnits = [
{
@@ -117,6 +129,7 @@ var adUnits = [
```
### Ad Unit Setup for Multi-format: Banner, Video (Outstream)
+
```javascript
var adUnits = [
{
@@ -156,9 +169,12 @@ var adUnits = [
...
}
```
+
### SRA Mode
+
We recommend using SRA mode to optimize the bidding process as this allows our adapter to group together bid requests for Ad Units pertaining to the same product and site ID thereby minimizing the number of http requests made to our endpoint. To enable SRA set the following bidder specific config under 33Across
-```
+
+```javascript
pbjs.setBidderConfig({
bidders: ['33across'],
config: {
@@ -167,4 +183,4 @@ pbjs.setBidderConfig({
}
}
});
-```
\ No newline at end of file
+```
diff --git a/dev-docs/bidders/7xbid.md b/dev-docs/bidders/7xbid.md
deleted file mode 100644
index 75b539fdd3..0000000000
--- a/dev-docs/bidders/7xbid.md
+++ /dev/null
@@ -1,18 +0,0 @@
----
-layout: bidder
-title: 7xbid
-description: Prebid 7xbid Bidder Adaptor
-pbjs: true
-biddercode: 7xbid
-media_types: banner, native
-enable_download: false
-pbjs_version_notes: not ported to 5.x
----
-
-### Bid Params
-
-{: .table .table-bordered .table-striped }
-| Name | Scope | Description | Example | Type |
-|---------------|----------|-------------|---------|----------|
-| `placementId` | required | This is placement Id | `1425292` | `integer` |
-| `currency` | optional | 3-letter ISO 4217 code defining the currency of the bid (currently support USD and JPY), default is JPY | `'USD'` | `string` |
diff --git a/dev-docs/bidders/9MediaOnline.md b/dev-docs/bidders/9MediaOnline.md
index 593bc91a00..3e337a1da8 100644
--- a/dev-docs/bidders/9MediaOnline.md
+++ b/dev-docs/bidders/9MediaOnline.md
@@ -5,12 +5,14 @@ description: Prebid 9 Media Online Bidder Adaptor
biddercode: 9MediaOnline
pbjs: true
media_types: banner, video
-gdpr_supported: true
+gvl_id: 644
+tcfeu_supported: true
tcf2_supported: true
schain_supported: true
usp_supported: true
userIds: id5Id, unifiedId
aliasCode: gamoshi
+sidebarType: 1
---
### Bid params
diff --git a/dev-docs/bidders/9dotsmedia.md b/dev-docs/bidders/9dotsmedia.md
new file mode 100644
index 0000000000..d553a6d833
--- /dev/null
+++ b/dev-docs/bidders/9dotsmedia.md
@@ -0,0 +1,108 @@
+---
+layout: bidder
+title: 9Dots Media
+description: 9Dots Media Bidder Adapter
+biddercode: 9dotsmedia
+aliasCode: adtelligent
+media_types: video,banner
+gvl_id: 410 (adtelligent)
+tcfeu_supported: true
+gpp_supported: true
+userIds: britepoolId, criteo, id5Id, identityLink, liveIntentId, netId, parrableId, pubCommonId, unifiedId
+schain_supported: true
+coppa_supported: true
+usp_supported: true
+safeframes_ok: true
+prebid_member: true
+pbjs: true
+pbs: false
+deals_supported: false
+sidebarType: 1
+---
+
+### Bid params
+
+{: .table .table-bordered .table-striped }
+| Name | Scope | Description | Example | Type |
+|-------|----------|---------------------------------|----------|-----------|
+| `aid` | required | The source ID from 9Dots Media. | `12412` | `integer` |
+
+### Description
+
+9Dots Media header bidding adapter connects with 9Dots Media demand sources in order to fetch bids.
+This adapter provides a solution for accessing Video demand and display demand.
+
+### Test Parameters
+
+``` javascript
+ var adUnits = [
+
+ // Video instream adUnit
+ {
+ code: 'test-div',
+ mediaTypes: {
+ video: {
+ context: 'instream',
+ playerSize: [640, 480]
+ }
+ },
+ bids: [{
+ bidder: '9dotsmedia',
+ params: {
+ aid: 472386
+ }
+ }]
+ },
+
+ // Video outstream adUnit
+ {
+ code: 'test-div',
+ mediaTypes: {
+ video: {
+ context: 'outstream',
+ playerSize: [640, 480]
+ }
+ },
+ bids: [{
+ bidder: '9dotsmedia',
+ params: {
+ aid: 472386
+ }
+ }]
+ },
+
+ // Video ADPOD adUnit
+ {
+ code: 'test-div',
+ sizes: [[640, 480]],
+ mediaTypes: {
+ video: {
+ context: 'adpod',
+ playerSize: [640, 480]
+ }
+ },
+ bids: [{
+ bidder: '9dotsmedia',
+ params: {
+ aid: 472386
+ }
+ }]
+ },
+
+ // Banner adUnit
+ {
+ code: 'test-div',
+ mediaTypes:{
+ banner:{
+ sizes: [[300, 250]]
+ }
+ }
+ bids: [{
+ bidder: '9dotsmedia',
+ params: {
+ aid: 529814
+ }
+ }]
+ }
+ ];
+```
diff --git a/dev-docs/bidders/a1media.md b/dev-docs/bidders/a1media.md
new file mode 100644
index 0000000000..82d1158742
--- /dev/null
+++ b/dev-docs/bidders/a1media.md
@@ -0,0 +1,37 @@
+---
+layout: bidder
+title: A1Media
+description: Prebid A1Media Bidder Adapter
+biddercode: a1media
+tcfeu_supported: false
+gvl_id: none
+usp_supported: false
+coppa_supported: false
+gpp_supported: false
+schain_supported: true
+dchain_supported: false
+media_types: banner, video, native
+safeframes_ok: false
+deals_supported: false
+floors_supported: true
+pbjs: true
+pbs: false
+prebid_member: false
+multiformat_supported: will-bid-on-one
+ortb_blocking_supported: partial
+sidebarType: 1
+---
+
+### Note
+
+The A1Media Bidding adapter requires setup before beginning. Please contact us at .
+
+### Bid Params
+
+{: .table .table-bordered .table-striped }
+| Name | Scope | Description | Example | Type |
+|---------------|----------|--------------------------------------------|-------------------------------------|----------|
+| `bidfloor` | optional | Bid Floor Price, It is used if the Floor Module is not available | `0.9` | `float` |
+| `currency` | optional | Currency For Bid and Bid Floor, It is used if the Currency Module is not available | `'JPY'` | `string` |
+| `bcat` | optional | Blocked advertiser categories using the IAB content categories | `['IAB1-1']` | `string array` |
+| `battr` | optional | Blocked creative attributes | `[ 13 ]` | `integer array` |
diff --git a/dev-docs/bidders/a4g.md b/dev-docs/bidders/a4g.md
index 0e6bf6c0dd..4f4aee6e68 100644
--- a/dev-docs/bidders/a4g.md
+++ b/dev-docs/bidders/a4g.md
@@ -4,7 +4,8 @@ title: A4G
description: Prebid A4G Bidder Adaptor
pbjs: true
biddercode: a4g
-gdpr_supported: true
+tcfeu_supported: false
+sidebarType: 1
---
### Bid Params
diff --git a/dev-docs/bidders/aardvark.md b/dev-docs/bidders/aardvark.md
deleted file mode 100644
index a435711ff4..0000000000
--- a/dev-docs/bidders/aardvark.md
+++ /dev/null
@@ -1,23 +0,0 @@
----
-layout: bidder
-title: Aardvark
-description: Prebid Aardvark Bidder Adaptor
-pbjs: true
-biddercode: aardvark
-gdpr_supported: true
-usp_supported: true
-schain_supported: true
-userIds: unifiedId
-gvl_id: 52
-enable_download: false
-pbjs_version_notes: not ported to 5.x
----
-
-### Bid Params
-
-{: .table .table-bordered .table-striped }
-| Name | Scope | Description | Example | Type |
-|------|----------|--------------------|----------|----------|
-| `ai` | required | The rtk auction ID | `'XBC1'` | `string` |
-| `sc` | required | The rtk shortcode | `'AF2g'` | `string` |
-| `categories` | optional | Deal ID Categories | `['news','sports']` | `array` |
diff --git a/dev-docs/bidders/aax.md b/dev-docs/bidders/aax.md
new file mode 100644
index 0000000000..67d7a46407
--- /dev/null
+++ b/dev-docs/bidders/aax.md
@@ -0,0 +1,128 @@
+---
+layout: bidder
+title: AAX
+description: Prebid Aax Bidder Adaptor
+biddercode: aax
+aliasCode : medianet
+tcfeu_supported: true
+media_types: banner,native,video
+usp_supported: true
+userIds: britepoolId, criteo, id5Id, identityLink, liveIntentId, netId, parrableId, pubCommonId, unifiedId
+prebid_member: false
+pbjs: true
+gvl_id: 720
+schain_supported: true
+floors_supported: true
+fpd_supported: true
+pbs: true
+safeframes_ok: true
+multiformat_supported: will-not-bid
+sidebarType: 1
+---
+
+### Bid Params
+
+{: .table .table-bordered .table-striped }
+| Name | Scope | Description | Example | Type |
+|------------|----------|----------------------------------------|---------------|----------|
+| `cid` | required | The customer id provided by Aax. | `'aax_test_customer'` | `string` |
+| `crid` | required | The placement id provided by Aax. | `'aax_crid'` | `string` |
+| `video` | required for video Ad units | Object containing video targeting parameters. See [Video Object](#aax-video-object) for details.|`video: { maxduration: 60 }` | `object` |
+
+
+
+#### Video Object
+
+{: .table .table-bordered .table-striped }
+| Name | Type | Description | Example|
+|------------|----------|--------------|--------|
+|mimes|array of strings|(Recommended) Specifies the video content MIME types supported; for example, video/x-ms-wmv and video/x-flv.|["video/x-ms-wmv","video/x-flv"]|
+|minduration|integer|(Recommended) Specifies the minimum video ad duration, in seconds.|10|
+|maxduration|integer|(Recommended) Specifies the maximum video ad duration, in seconds.|60|
+|w|integer|(Recommended) Specifies the width of the video player, in pixels. Required if playerSize not present in `mediaTypes.video`|640|
+|h|integer|(Recommended) Specifies the height of the video player, in pixels. Required if playerSize not present in `mediaTypes.video`|480|
+|startdelay |integer | (Recommended) Specifies the start delay of the video ad|0|
+|battr| array of integers|Specifies the video creative attributes to block. Refer to section 5.3 of the IAB specification for a list of attributes.| [ 13, 14 ]|
+playbackmethod| array of integers| Specifies the allowed playback methods. If not specified, all are assumed to be allowed. Currently supported values are: `1: Autoplay, sound on`; `2: Autoplay, sound off`; `3: Click to play`; `4: Mouse over to play`|[1, 3]|
+|api| array of integers| Specifies the supported API frameworks for this impression. If an API is not explicitly listed, it is assumed not to be supported. Currently supported values are: `1: VPAID 1.0`; `2: VPAID 2.0`; `3: MRAID-1`; `4: ORMMA`; `5: MRAID-2`|[1, 2]|
+|protocols |array of integers| Array of supported video protocols. Currently supported values are: `1: VAST 1.0`; `2: VAST 2.0`; `3: VAST 3.0`; `4: VAST 1.0 Wrapper`; `5: VAST 2.0 Wrapper`; `6: VAST 3.0 Wrapper`; `7: VAST 4.0`|[1, 2]|
+|placement |integer|Placement type for the impression. Possible options: `1: In-Stream`; `2: In-banner`; `3: Outstream/In-article`; `4: In-feed`; `5: Interstitial/Slider/Floating`; `6: Long-Form`;|1|
+
+Besides the above-mentioned parameters, we support all other OpenRTB 2.x video objects as optional parameters.
+
+In addition to `bids[].params.video`, Aax adapter consumes parameters specified in the `mediaTypes.video`.
+
+#### Example of Instream Video Ad-unit
+
+```javascript
+var videoAdUnit = {
+ code: 'video1',
+ mediaTypes: {
+ video: {
+ context: "instream",
+ playerSize: [640, 480],
+ mimes: ['video/mp4'],
+ placement: 1
+ }
+ },
+ bids: [{
+ bidder: 'aax',
+ params: {
+ cid: 'aax_test_customer',
+ crid: 'aax_crid',
+ }
+ }]
+};
+```
+
+#### Example of Native Ad-unit
+
+```javascript
+var adUnits = [{
+ code: 'div-gpt-ad-6874091242345-0',
+ mediaTypes: {
+ native: {
+ image: {
+ required: true,
+ sizes: [300, 250],
+ wmin: 50,
+ },
+ title: {
+ required: true,
+ len: 80
+ }
+ }
+ },
+ bids: [{
+ bidder: 'aax',
+ params: {
+ cid: 'aax_test_customer',
+ crid: 'aax_crid'
+ }
+ }]
+}];
+```
+
+#### Example of Banner Ad-unit
+
+```javascript
+var adUnits = [{
+ code: 'div-gpt-ad-6874091242345-0',
+ mediaTypes: {
+ banner: {
+ sizes: [
+ [728, 90],
+ [300, 600],
+ [300, 250]
+ ],
+ }
+ },
+ bids: [{
+ bidder: 'aax',
+ params: {
+ cid: 'aax_test_customer',
+ crid: 'aax_crid'
+ }
+ }]
+}];
+```
diff --git a/dev-docs/bidders/ablida.md b/dev-docs/bidders/ablida.md
index 590cc756df..75ea5c3d3c 100644
--- a/dev-docs/bidders/ablida.md
+++ b/dev-docs/bidders/ablida.md
@@ -5,7 +5,8 @@ description: Prebid ablida Bidder Adaptor
pbjs: true
biddercode: ablida
media_types: banner, native, video
-gdpr_supported: true
+tcfeu_supported: false
+sidebarType: 1
---
diff --git a/dev-docs/bidders/aceex.md b/dev-docs/bidders/aceex.md
index e380d3aa54..68968333f1 100644
--- a/dev-docs/bidders/aceex.md
+++ b/dev-docs/bidders/aceex.md
@@ -3,7 +3,7 @@ layout: bidder
title: Aceex
description: Prebid Aceex Bidder Adaptor
biddercode: aceex
-gdpr_supported: true
+tcfeu_supported: false
usp_supported: true
coppa_supported: true
schain_supported: true
@@ -13,11 +13,12 @@ safeframes_ok: true
deals_supported: true
pbjs: false
pbs: true
+sidebarType: 1
---
-### Note:
+### Note
-The Example Bidding adapter requires setup before beginning. Please contact us at tech@aceex.com
+The Example Bidding adapter requires setup before beginning. Please contact us at
### Bid Params
diff --git a/dev-docs/bidders/acuityads.md b/dev-docs/bidders/acuityads.md
index 95d4784821..fc30eeaf58 100644
--- a/dev-docs/bidders/acuityads.md
+++ b/dev-docs/bidders/acuityads.md
@@ -3,26 +3,37 @@ layout: bidder
title: AcuityAds
description: Prebid AcuityAds Bidder Adaptor
biddercode: acuityads
-gdpr_supported: true
+filename: acuityadsBidAdapter
+gvl_id: 231
+tcfeu_supported: true
usp_supported: true
coppa_supported: true
schain_supported: true
+gpp_supported: true
userId: britepoolId, criteo, id5Id, identityLink, liveIntentId, netId, parrableId, pubCommonId, unifiedId
media_types: banner, video, native
safeframes_ok: true
deals_supported: true
-pbjs: false
+pbjs: true
pbs: true
+sidebarType: 1
---
-### Note:
+### Note
-The Example Bidding adapter requires setup before beginning. Please contact us at rafi.babler@acuityads.com
+The Example Bidding adapter requires setup before beginning. Please contact us at
-### Bid Params
+### Prebid.JS Bid Params
+
+{: .table .table-bordered .table-striped }
+| Name | Scope | Description | Example | Type |
+|---------------|----------|-----------------------|-----------|-----------|
+| `placementId` | required | Placement ID | `'123'` | `string` |
+
+### Prebid Server Bid Params
{: .table .table-bordered .table-striped }
| Name | Scope | Description | Example | Type |
|---------------|----------|-----------------------|-----------|-----------|
| `host` | required | Region id | `'ep1'` | `string` |
-| `accountid` | required | Endpoint id | `'hash'` | `string` |
+| `accountid` | required | Endpoint id / Placement id | `'hash'` | `string` |
diff --git a/dev-docs/bidders/ad2iction.md b/dev-docs/bidders/ad2iction.md
new file mode 100644
index 0000000000..ae1300267e
--- /dev/null
+++ b/dev-docs/bidders/ad2iction.md
@@ -0,0 +1,20 @@
+---
+layout: bidder
+title: Ad2iction
+description: Prebid Ad2iction Bidder Adapter
+biddercode: ad2iction
+pbjs: true
+media_types: banner
+safeframes_ok: false
+sidebarType: 1
+---
+
+### Note
+The Ad2iction Bidding adapter requires setup before beginning. Please contact us on [https://www.ad2iction.com](https://www.ad2iction.com).
+
+### Bid Params
+
+{: .table .table-bordered .table-striped }
+| Name | Scope | Description | Example | Type |
+|---------------|--------------------|--------------------|----------------|----------|
+| `id` | required(pbjs) | ad2iction id | `example-uuid` | `string` |
diff --git a/dev-docs/bidders/adWMG.md b/dev-docs/bidders/adWMG.md
index 0b9ff3c933..65709dfc74 100644
--- a/dev-docs/bidders/adWMG.md
+++ b/dev-docs/bidders/adWMG.md
@@ -5,10 +5,13 @@ description: Prebid adWMG Bidder Adapter
pbjs: true
biddercode: adWMG
media_types: banner
-gdpr_supported: true
+gvl_id: 959
+tcfeu_supported: true
+sidebarType: 1
---
### BidParams
+
{: .table .table-bordered .table-striped }
| Name | Scope | Description | Example | Type |
|-----------------|----------|---------------------------------|------------------------------|--------------------|
@@ -16,8 +19,8 @@ gdpr_supported: true
| `IABCategories` | optional | IAB ad categories for adUnit | `['IAB1', 'IAB5']` | `array of strings` |
| `floorCPM` | optional | Floor price for adUnit | `0.5` | `float` |
-
### Ad Unit Setup for Banner
+
```javascript
var adUnits = [
{
diff --git a/dev-docs/bidders/adagio.md b/dev-docs/bidders/adagio.md
index 220d544cf7..1aa7b00cf4 100644
--- a/dev-docs/bidders/adagio.md
+++ b/dev-docs/bidders/adagio.md
@@ -5,49 +5,92 @@ description: Prebid Adagio Bidder Adaptor
pbjs: true
biddercode: adagio
media_types: banner, native, video
-userIds: britepoolId, criteo, id5Id, identityLink, liveIntentId, netId, parrableId, pubCommonId, pubProvidedId, sharedId, unifiedId
+userIds: all
floors_supported: true
-gdpr_supported: true
+tcfeu_supported: true
+dsa_supported: true
usp_supported: true
+gpp_supported: true
coppa_supported: true
schain_supported: true
gvl_id: 617
prebid_member: true
fpd_supported: false
+sidebarType: 1
---
### Note
-The Adagio bidder adaptor requires setup and approval from the Adagio team. Please reach out to [contact@adagio.io](mailto:contact@adagio.io) for more information.
+The Adagio bidder adapter requires setup and approval from the Adagio team. Please reach out to [contact@adagio.io](mailto:contact@adagio.io) for more information.
+
+### Configuration
+
+#### User Sync
+
+Adagio strongly recommends enabling user syncing through iFrames. This functionality improves DSP user match rates and increases the bid rate and bid price. Make sure to call `pbjs.setConfig()` only once. This configuration is optional in Prebid, but required by Adagio.
+
+```js
+// https://docs.prebid.org/dev-docs/publisher-api-reference/setConfig.html#setConfig-Configure-User-Syncing
+pbjs.setConfig({
+ userSync: {
+ filterSettings: {
+ iframe: {
+ bidders: ['adagio'],
+ filter: 'include'
+ }
+ }
+ }
+});
+```
+
+#### Bidder Settings
+
+The Adagio bid adapter uses browser local storage. Since Prebid.js 7.x, the access to it must be explicitly set.
+
+```js
+// https://docs.prebid.org/dev-docs/publisher-api-reference/bidderSettings.html
+pbjs.bidderSettings = {
+ adagio: {
+ storageAllowed: true
+ }
+}
+```
### Bid Params
**Important**: Adagio needs to collect attention data about the ads displayed on a page and must listen to some specifics ad-server events. Please refer to the [Adagio user guide](https://adagioio.notion.site/Adagio-Account-Setup-Guide-fbcd940649224cdfa10393d2f008792e) for details.
{: .table .table-bordered .table-striped }
-
-| Name | Scope | Description | Example | Type |
-|--------------------|--------------------|----------------------------------------------------------------------------------------------------------------------|-----------------|-----------|
-| `organizationId` | required | Id of the Organization. Handed out by Adagio. | `'1010'` | `string` |
-| `site` | required | Name of the site. Handed out by Adagio.- max length: 50 | `'mysite-com'` | `string` |
-| `placement`* | required | Refers to the placement of an adunit in a page. Must not contain any information about the type of device.- max length: 30 - max distinctives values: 10 | `'ban_atf'` | `string` |
-| `adUnitElementId` | required | Refers to the adunit html attribute id in a page. | `'gpt-ban-atf'` | `string` |
-| `pagetype`* | highly recommended | Describes what kind of content will be present in the page.- max length: 30 - max distinctives values: 50 | `'article'` | `string` |
-| `environment`* | recommended | Environment where the page is displayed.- max length: 30 - max distinctives values: 10 | `'desktop'` | `string` |
-| `category`* | recommended | Category of the content displayed in the page.- max length: 30 - max distinctives values: 50 | `'sport'` | `string` |
-| `subcategory`* | optional | Subcategory of the content displayed in the page.- max length: 30 - max distinctives values: 50 | `'handball'` | `string` |
-| `video` | optional | OpenRTB 2.5 video options object. All options will override ones defined in mediaTypes.video | `{skip: 1, playbackmethod: [6]}` | `object` |
-| `native` | optional | Partial OpenRTB Native 1.2 request object. Supported fields are: - context -plcmttype | `{context: 1, plcmttype: 2}` | `object` |
-
+| Name | Scope | Description | Example | Type |
+| ----------------- | ------------------ | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------ | -------- |
+| `organizationId` | required | Id of the Organization. Handed out by Adagio. | `'1010'` | `string` |
+| `site` | required | Name of the site. Handed out by Adagio.- max length: 50 | `'mysite-com'` | `string` |
+| `placement`* | required | Refers to the placement of an adunit in a page. Must not contain any information about the type of device.- max length: 30 - max distinctives values: 10 | `'ban_atf'` | `string` |
+| `adUnitElementId` | required | Refers to the adunit html attribute id in a page. | `'gpt-ban-atf'` | `string` |
+| `pagetype`* | highly recommended | Describes what kind of content will be present in the page.- max length: 30 - max distinctives values: 50 | `'article'` | `string` |
+| `category`* | recommended | Category of the content displayed in the page.- max length: 30 - max distinctives values: 50 | `'sport'` | `string` |
+| `video` | optional | OpenRTB 2.5 video options object. All options will override ones defined in mediaTypes video. Mandatory: - api (your video player must at least support the value 2) Highly recommended: - playbackmethod Not supported: `protocol`, `companionad`, `companiontype`, `ext` options| `{api: [2], playbackmethod: [6], skip: 1, startdelay: 0}` | `object` |
+| `native` | optional | Partial OpenRTB Native 1.2 request object. Supported fields are: - context - plcmttype | `{context: 1, plcmttype: 2}` | `object` |
+| `splitKeyword` | optional | Keyword that can later be used in a split rule targeting to trigger the rule (especially for Direct Seats AB testing) | `'splitrule-one'` | `string` |
+| `dataLayer` | optional | A set of arbitrary key-value pairs. This can be used to configure mappings. The keys and values must be strings. | `{placement: 'my-placement', siteid: 'my-siteid'}` | `object` |
*These parameters will have its accentuated characters converted to their non-accentuated version: `ĂŠ` => `e`
### Native Custom assets
-| Name | description |
-|--------------|-------------------------------------|
-| `adagio_bvw` | Url to handle Measure beacon |
+| Name | description |
+| ------------ | ---------------------------- |
+| `adagio_bvw` | Url to handle Measure beacon |
### First Party Data
-Adagio does not support FPD for now. It will be added soon.
+Adagio will use FPD data as fallback for the params below:
+
+- pagetype
+- category
+
+If the FPD value is an array, the 1st value of this array will be used.
+
+### Video outstream
+
+The AdagioBidAdapter includes a default video player powered by [Blue Billywig](https://www.bluebillywig.com). This default player is used when no renderer is configured for the adUnit.
diff --git a/dev-docs/bidders/adasta.md b/dev-docs/bidders/adasta.md
index e69fbeef33..bcd9002420 100644
--- a/dev-docs/bidders/adasta.md
+++ b/dev-docs/bidders/adasta.md
@@ -5,6 +5,7 @@ description: Prebid Adasta Media Bidder Adaptor
pbjs: true
biddercode: adasta
aliasCode : appnexus
+sidebarType: 1
---
### Bid Params
diff --git a/dev-docs/bidders/adbite.md b/dev-docs/bidders/adbite.md
index 07b2aa749f..7774c3aefb 100644
--- a/dev-docs/bidders/adbite.md
+++ b/dev-docs/bidders/adbite.md
@@ -2,17 +2,28 @@
layout: bidder
title: Adbite
description: Adbite LLC
+biddercode: adbite
pbjs: true
pbs: false
-biddercode: adbite
media_types: banner, native, video
-gdpr_supported: true
+gvl_id: 14
+tcfeu_supported: true
usp_supported: true
+coppa_supported: true
+gpp_supported: true
+pbs_app_supported: true
schain_supported: true
-aliasCode : adkernel
+userIds: all
+fpd_supported: true
+prebid_member: false
+ortb_blocking_supported: true
+multiformat_supported: will-bid-on-one
+floors_supported: true
+aliasCode: adkernel
+sidebarType: 1
---
-### Note:
+### Note
The adbite Bidding adaptor requires setup and approval before beginning. Please reach out to for more details
@@ -22,4 +33,4 @@ The adbite Bidding adaptor requires setup and approval before beginning. Please
| Name | Scope | Description | Example | Type |
|----------|----------|-----------------------|---------------------------|----------|
| `host` | required | Our Host | `'cpm.adbite.com'` | `string` |
-| `zoneId` | required | Example RTB zone id | `'12345'`| `string` |
+| `zoneId` | required | Example RTB zone id | `12345`| `integer` |
diff --git a/dev-docs/bidders/adblender.md b/dev-docs/bidders/adblender.md
index 6f3edddf6a..f6c9af50a6 100644
--- a/dev-docs/bidders/adblender.md
+++ b/dev-docs/bidders/adblender.md
@@ -6,8 +6,10 @@ pbjs: true
biddercode: adblender
aliasCode: admixer
media_types: video
-gdpr_supported: true
+gvl_id: 511 (admixer)
+tcfeu_supported: true
usp_supported: true
+sidebarType: 1
---
### Bid Params
diff --git a/dev-docs/bidders/adbookpsp.md b/dev-docs/bidders/adbookpsp.md
index 333c258630..edef5f1ed2 100644
--- a/dev-docs/bidders/adbookpsp.md
+++ b/dev-docs/bidders/adbookpsp.md
@@ -4,16 +4,17 @@ title: AdBookPSP
description: Prebid AdBookPSP Bidder Adapter
biddercode: adbookpsp
media_types: banner, video
-gdpr_supported: true
+tcfeu_supported: false
prebid_member: false
schain_supported: true
coppa_supported: true
usp_supported: true
pbjs: true
pbs: false
+sidebarType: 1
---
-*NOTE*: The AdBookPSP Bidder Adapter requires setup and approval before use. The adapter uses custom targeting keys that require a dedicated Google Ad Manager setup to work. Please reach out to your AdbookPSP representative for more details.
+*NOTE*: The AdBookPSP Bidder Adapter requires setup and approval before use. The adapter uses custom targeting keys that require a dedicated Google Ad Manager setup to work. Please reach out to your AdbookPSP representative for more details.
### Bid Params
@@ -117,7 +118,7 @@ var adUnits = [
#### Testing params
-To test the adapter, either `placementId: 'example-placement-id'` or `orgId: 'example-org-id'` can be used.
+To test the adapter, either `placementId: 'example-placement-id'` or `orgId: 'example-org-id'` can be used.
*NOTE*: If any adUnit uses the testing params, all adUnits will receive testing responses.
diff --git a/dev-docs/bidders/adbutler.md b/dev-docs/bidders/adbutler.md
index 478bcc4db1..846b15be98 100644
--- a/dev-docs/bidders/adbutler.md
+++ b/dev-docs/bidders/adbutler.md
@@ -1,22 +1,27 @@
---
layout: bidder
title: AdButler
-description: Prebid AdButler Bidder Adaptor
-pbjs: true
+description: AdButler Bid Adapter
biddercode: adbutler
-enable_download: false
-pbjs_version_notes: not ported to 5.x
+pbjs: true
+sidebarType: 1
+media_types: banner
+safeframes_ok: true
+tcfeu_supported: false
+usp_supported: false
+coppa_supported: false
---
-
-### Bid Params
+### Bid params
{: .table .table-bordered .table-striped }
-| Name | Scope | Description | Example | Type |
-|-------------|----------|------------------------------------------------------|------------------|----------|
-| `accountID` | required | Account ID | `'167283'` | `string` |
-| `zoneID` | required | Zone ID | `'210093'` | `string` |
-| `keyword` | optional | Keyword(s) used for custom targeting | `'green,orange'` | `string` |
-| `minCPM` | optional | Minimum CPM value to accept | `'1.00'` | `string` |
-| `maxCPM` | optional | Maximum CPM value to accept | `'5.00'` | `string` |
-| `extra` | optional | Pass other AdButler parameters like 'tuid' or 'kw' | `{kw: "green"}` | `object` |
+
+| Name | Scope | Description | Example | Type |
+|-------------|----------|--------------------------------------------------------------------------------------------------------------|-------------------------------|---------------|
+| `accountID` | required | Account ID | `'181556'` | `string` |
+| `zoneID` | required | Zone ID | `'705374'` | `string` |
+| `domain` | optional | Ad serving domain (set if using custom domains) | `'servedbyadbutler.com'` | `string` |
+| `keyword` | optional | Keyword(s) used for custom targeting | `'green,orange'` | `string` |
+| `minCPM` | optional | Minimum CPM value to accept | `'1.00'` | `string` |
+| `maxCPM` | optional | Maximum CPM value to accept | `'5.00'` | `string` |
+| `extra` | optional | Other ad request parameters [(API Docs)](https://www.adbutler.com/docs/api/#tag/AdServe/paths/~1adserve/get) | `{ _abdk: { bird: "duck" } }` | `object` |
diff --git a/dev-docs/bidders/addefend.md b/dev-docs/bidders/addefend.md
index 7f44121a4f..f0f7e1f5f3 100644
--- a/dev-docs/bidders/addefend.md
+++ b/dev-docs/bidders/addefend.md
@@ -5,13 +5,14 @@ description: AdDefend Prebid Adapter
biddercode: addefend
pbjs: true
media_types: banner
-gdpr_supported: true
+tcfeu_supported: true
gvl_id: 539
+sidebarType: 1
---
-### Note:
+### Note
-The bidder requires setup before usage. Please get in touch with our publisher team at publisher@addefend.com to get started.
+The bidder requires setup before usage. Please get in touch with our publisher team at to get started.
### Bid Params
diff --git a/dev-docs/bidders/adelement.md b/dev-docs/bidders/adelement.md
new file mode 100644
index 0000000000..380269c670
--- /dev/null
+++ b/dev-docs/bidders/adelement.md
@@ -0,0 +1,30 @@
+---
+layout: bidder
+title: AdElement
+description: Prebid AdElement Bidder Adapter
+biddercode: adelement
+tcfeu_supported: true
+gvl_id: 196
+usp_supported: true
+coppa_supported: true
+schain_supported: true
+media_types: banner, native, video, audio
+pbjs: false
+pbs: true
+pbs_app_supported: true
+prebid_member: false
+multiformat_supported: will-bid-on-one
+sidebarType: 1
+---
+
+### Note
+
+Bidding adapter requires setup before beginning.
+Please contact us at
+
+### Bid Params
+
+{: .table .table-bordered .table-striped }
+| Name | Scope | Description | Example | Type |
+|---------------|----------|-----------------------|-----------|-----------|
+| `supply_id` | required | Supply Id | `'1'` | `string` |
diff --git a/dev-docs/bidders/adf.md b/dev-docs/bidders/adf.md
index 7b5b1e6b73..fb79528c66 100644
--- a/dev-docs/bidders/adf.md
+++ b/dev-docs/bidders/adf.md
@@ -4,7 +4,9 @@ title: AdformOpenRTB
description: Prebid Adform Bidder Adaptor
biddercode: adf
media_types: banner, native, video
-gdpr_supported: true
+coppa_supported: true
+tcfeu_supported: true
+dsa_supported: true
usp_supported: true
prebid_member: true
pbjs: true
@@ -14,7 +16,8 @@ userIds: all
gvl_id: 50
prevBiddercode: adformOpenRTB
floors_supported: true
-fpd_supported: true
+multiformat_supported: will-bid-on-one
+sidebarType: 1
---
### Bid params
diff --git a/dev-docs/bidders/adfinity.md b/dev-docs/bidders/adfinity.md
deleted file mode 100644
index ce9b16a758..0000000000
--- a/dev-docs/bidders/adfinity.md
+++ /dev/null
@@ -1,19 +0,0 @@
----
-layout: bidder
-title: Adfinity
-description: Prebid Adfinity Bidder Adaptor
-pbjs: true
-biddercode: adfinity
-media_types: banner, video, native
-gdpr_supported: true
-enable_download: false
-pbjs_version_notes: not ported to 5.x
----
-
-### Bid Params
-
-{: .table .table-bordered .table-striped }
-| Name | Scope | Description | Example | Type |
-|----------------|----------|----------------------------------------------------------|------------|-----------|
-| `placement_id` | required | Placement Id will be generated on Adfinity Platform. | `0` | `integer` |
-| `traffic` | optional | Type traffic | `'banner'` | `string` |
diff --git a/dev-docs/bidders/adform.md b/dev-docs/bidders/adform.md
deleted file mode 100644
index 3676871ca8..0000000000
--- a/dev-docs/bidders/adform.md
+++ /dev/null
@@ -1,50 +0,0 @@
----
-layout: bidder
-title: Adform
-description: Prebid Adform Bidder Adaptor
-biddercode: adform
-media_types: banner, video
-gdpr_supported: true
-usp_supported: true
-prebid_member: true
-pbjs: true
-pbs: true
-userIds: all
-gvl_id: 50
-enable_download: false
-pbjs_version_notes: not ported to 5.x
----
-
-**Adform bid adapter is deprecated since Prebid 5.0. Please refer to [AdformOpenRTB adapter](#adf) documentation to fetch bids from Adform demand sources.**
-
-### Bid Params
-
-{: .table .table-bordered .table-striped }
-| Name | Scope | Description | Example | Type |
-|-------------|----------|-----------------------------------------------|----------------------------|-----------|
-| `mid` | required | | `12345` | `integer` |
-| `adxDomain` | optional | The Adform domain | `'adx.adform.net'` | `string` |
-| `priceType` | optional | An expected price type (net or gross) of bids | `'net'` | `string` |
-| `mkv` | optional | Comma-separated key-value pairs | `'city:NY'` | `string` |
-| `mkw` | optional | Comma-separated keywords | `'news,sport'` | `string` |
-| `minp` | optional | Minimum CPM price | `2.55` | `number` |
-| `cdims` | optional | Comma-separated creative dimentions | `'300x250'` | `string` |
-| `url` | optional | Custom targeting URL | `'https://some.app/?home'` | `string` |
-
-Note: Spaces are not allowed between comma-separated list values. For example:
-```
-// valid params
-{
- mid: 12345,
- mkv: 'city:NY,city:London',
- mkv: 'news,sport',
- cdims: '300x250,250x300'
-}
-// invalid params
-{
- mid: 12345,
- mkv: 'city:NY, city:London',
- mkv: 'news, sport',
- cdims: '300x250, 250x300'
-}
-```
diff --git a/dev-docs/bidders/adfusion.md b/dev-docs/bidders/adfusion.md
new file mode 100644
index 0000000000..9d3c71ddbe
--- /dev/null
+++ b/dev-docs/bidders/adfusion.md
@@ -0,0 +1,35 @@
+---
+layout: bidder
+title: AdFusion
+biddercode: adfusion
+tcfeu_supported: true
+gvl_id: 844
+usp_supported: false
+coppa_supported: false
+gpp_supported: false
+schain_supported: false
+dchain_supported: false
+safeframes_ok: false
+deals_supported: true
+userId: all
+media_types: display, video
+floors_supported: true
+fpd_supported: false
+pbjs: true
+pbs: false
+prebid_member: false
+multiformat_supported: will-bid-on-one
+ortb_blocking_supported: true
+sidebarType: 1
+---
+
+### Note
+
+The AdFusion Bidding adapter requires setup from the AdFusion team. Please contact us at [prebid@adfusion.pl](mailto:prebid@adfusion.pl).
+
+### Bid Params
+
+{: .table .table-bordered .table-striped }
+| Name | Scope | Description | Example | Type |
+|---------------|----------|-----------------------|-----------|-----------|
+| `accountId` | required | The account ID provided by AdFusion | `1234` | `number` |
diff --git a/dev-docs/bidders/adgeneration.md b/dev-docs/bidders/adgeneration.md
index 8ff03a0902..b998883a3f 100644
--- a/dev-docs/bidders/adgeneration.md
+++ b/dev-docs/bidders/adgeneration.md
@@ -5,7 +5,9 @@ description: Prebid Ad Generation Bidder Adaptor
pbjs: true
pbs: true
biddercode: adgeneration
+userIds: novatiq, criteo, id5Id
media_types: native
+sidebarType: 1
---
diff --git a/dev-docs/bidders/adglare.md b/dev-docs/bidders/adglare.md
deleted file mode 100644
index 7e8f6db2d7..0000000000
--- a/dev-docs/bidders/adglare.md
+++ /dev/null
@@ -1,19 +0,0 @@
----
-layout: bidder
-title: AdGlare Ad Server
-description: Prebid Adapter for AdGlare Ad Server
-pbjs: true
-biddercode: adglare
-media_types: banner
-enable_download: false
-pbjs_version_notes: not ported to 5.x
----
-
-### Bid Params
-
-{: .table .table-bordered .table-striped }
-| Name | Scope | Description | Example | Type |
-|-------------|----------|--------------------------------------|--------------------------------------|----------|
-| `domain ` | required | Your (white label) ad serving domain | `'try.engine.adglare.net'` | `string` |
-| `zID` | required | The zone ID | `'475579334'` | `string` |
-| `type` | required | The zone type | `'banner'` | `string` |
diff --git a/dev-docs/bidders/adhash.md b/dev-docs/bidders/adhash.md
index f341d3e6de..cd1f26c285 100644
--- a/dev-docs/bidders/adhash.md
+++ b/dev-docs/bidders/adhash.md
@@ -4,27 +4,33 @@ title: AdHash
description: Prebid AdHash Bidder Adapter
pbjs: true
biddercode: adhash
+media_types: display, video
safeframes_ok: false
-gdpr_supported: true
+tcfeu_supported: false
+multiformat_supported: will-bid-on-any
+sidebarType: 1
---
### Note
Here is what you need for Prebid integration with AdHash:
+
1. Register with AdHash.
2. Once registered and approved, you will receive a Publisher ID and Platform URL.
3. Use the Publisher ID and Platform URL as parameters in params.
Please note that a number of AdHash functionalities are not supported in the Prebid.js integration:
-* Cookie-less frequency and recency capping;
-* Audience segments;
-* Price floors and passback tags, as they are not needed in the Preebid.js setup;
-* Reservation for direct deals only, as bids are evaluated based on their price.
+
+* Price floors and passback tags, as they are not needed in the Prebid.js setup;
+* Reservation for direct deals only, as bids are evaluated based on their price;
+* Fill rate reporting, as unfilled impressions can be filled by any other bidder;
+* CPC deals, as bidding happens only on CPM pricing.
### Bid Params
{: .table .table-bordered .table-striped }
-| Name | Scope | Description | Example | Type |
-|---------------|----------|--------------|------------------------------------------------|----------|
-| `publisherId` | required | Publisher ID | `'0x1234567890123456789012345678901234567890'` | `string` |
-| `platformURL` | required | Platform URL | `'https://adhash.org/p/example/'` | `string` |
+| Name | Scope | Description | Example | Type |
+|----------------|----------|----------------|------------------------------------------------|-----------|
+| `publisherId` | required | Publisher ID | `'0x1234567890123456789012345678901234567890'` | `string` |
+| `platformURL` | required | Platform URL | `'https://adhash.com/p/example/'` | `string` |
+| `bidderURL` | optional | Bidder URL | `'https://bidder.adhash.com'` | `string` |
diff --git a/dev-docs/bidders/adhese.md b/dev-docs/bidders/adhese.md
index d0bcaea03c..cc2d9499f0 100644
--- a/dev-docs/bidders/adhese.md
+++ b/dev-docs/bidders/adhese.md
@@ -6,18 +6,19 @@ pbjs: true
pbs: true
biddercode: adhese
media_types: banner, video
-gdpr_supported: true
+tcfeu_supported: true
userIds: id5Id
gvl_id: 553
pbs_app_supported: true
+sidebarType: 1
---
### Registration
-The Adhese bid adapter may require an additional setup from the Adhese team, even for existing Adhese customers. Please reach out to your support team or info@adhese.com for more information.
+The Adhese bid adapter may require an additional setup from the Adhese team, even for existing Adhese customers. Please reach out to your support team or for more information.
Prebid Server host companies need to work with Adhese for each additional publisher.
-
+
### Bid Params
{: .table .table-bordered .table-striped }
@@ -30,7 +31,7 @@ Prebid Server host companies need to work with Adhese for each additional publis
### Configuration
-Adhese supports 'iframe' UserSync configuration only.
+Adhese supports 'iframe' UserSync configuration only.
For Prebid.js v1.15.0 and later:
diff --git a/dev-docs/bidders/adkernel.md b/dev-docs/bidders/adkernel.md
index 83dc8256c2..5c2be852bf 100644
--- a/dev-docs/bidders/adkernel.md
+++ b/dev-docs/bidders/adkernel.md
@@ -6,16 +6,23 @@ pbjs: true
pbs: true
biddercode: adkernel
media_types: banner, native, video
-gdpr_supported: true
+tcfeu_supported: true
usp_supported: true
coppa_supported: true
+gpp_supported: true
pbs_app_supported: true
gvl_id: 14
schain_supported: true
userIds: all
+fpd_supported: true
+prebid_member: false
+ortb_blocking_supported: true
+multiformat_supported: will-bid-on-one
+floors_supported: true
+sidebarType: 1
---
-### Note:
+### Note
The Adkernel Bidding adaptor requires setup and approval before beginning. Please reach out to for more details
@@ -25,4 +32,4 @@ The Adkernel Bidding adaptor requires setup and approval before beginning. Pleas
| Name | Scope | Description | Example | Type |
|----------|----------|-----------------------|---------------------------|----------|
| `host` | required | Ad network's RTB host | `'cpm.metaadserving.com'` | `string` |
-| `zoneId` | required | RTB zone id | `'30164'` | `string` |
+| `zoneId` | required | RTB zone id | `30164` | `integer` |
diff --git a/dev-docs/bidders/adkernelAdn.md b/dev-docs/bidders/adkernelAdn.md
index 0971133f06..3380c05df3 100644
--- a/dev-docs/bidders/adkernelAdn.md
+++ b/dev-docs/bidders/adkernelAdn.md
@@ -6,14 +6,15 @@ pbjs: true
pbs: true
biddercode: adkernelAdn
media_types: banner, video
-gdpr_supported: true
+tcfeu_supported: true
usp_supported: true
coppa_supported: true
pbs_app_supported: true
gvl_id: 14
+sidebarType: 1
---
-### Note:
+### Note
The AdkernelAdn Header Bidding adaptor requires setup and approval before beginning. Please reach out to for more details
diff --git a/dev-docs/bidders/adlive.md b/dev-docs/bidders/adlive.md
deleted file mode 100644
index 3501fa5b02..0000000000
--- a/dev-docs/bidders/adlive.md
+++ /dev/null
@@ -1,16 +0,0 @@
----
-layout: bidder
-title: Adlive
-description: adlive bid adapter
-pbjs: true
-biddercode: adlive
-enable_download: false
-pbjs_version_notes: not ported to 5.x
----
-
-### Bid Params
-
-{: .table .table-bordered .table-striped }
-| Name | Scope | Description | Example | Type |
-|------------+----------+-------------------------------------------+----------------------------------------------|------|
-| `hashes` | required | Array of hashes, provided by adlive | ['1e100887dd614b0909bf6c49ba7f69fdd1360437'] | Array of strings |
diff --git a/dev-docs/bidders/adliveconnect.md b/dev-docs/bidders/adliveconnect.md
new file mode 100644
index 0000000000..d52f486b17
--- /dev/null
+++ b/dev-docs/bidders/adliveconnect.md
@@ -0,0 +1,38 @@
+---
+layout: bidder
+title: Adliveconnect
+description: Adliveconnect Bidder Adaptor
+biddercode: adliveconnect
+pbjs: true
+pbs: false
+media_types: banner, native, video
+gvl_id: 14 (adkernel)
+tcfeu_supported: true
+gpp_supported: true
+usp_supported: true
+coppa_supported: true
+pbs_app_supported: false
+schain_supported: true
+userIds: all
+fpd_supported: true
+prebid_member: false
+ortb_blocking_supported: true
+multiformat_supported: will-bid-on-one
+floors_supported: true
+aliasCode: adkernel
+sidebarType: 1
+enable_download: false
+pbjs_version_notes: removed in 8.14
+---
+
+### Note
+
+The Adlive bidding adapter requires setup and approval before implementation. Please reach out to for more details.
+
+### Bid Params
+
+{: .table .table-bordered .table-striped }
+| Name | Scope | Description | Example | Type |
+|----------|----------|-----------------------|---------------------------|----------|
+| `host` | required | RTB host | `'cpm.adlive.io'` | `string` |
+| `zoneId` | required | Zone Id | 30164 | `integer` |
diff --git a/dev-docs/bidders/adliveplus.md b/dev-docs/bidders/adliveplus.md
new file mode 100644
index 0000000000..242e3931e7
--- /dev/null
+++ b/dev-docs/bidders/adliveplus.md
@@ -0,0 +1,53 @@
+---
+layout: bidder
+title: Adlive Plus
+description: Adlive Plus adapter
+biddercode: adliveplus
+aliasCode: lucead
+tcfeu_supported: false
+gvl_id: none
+usp_supported: false
+coppa_supported: false
+schain_supported: false
+dchain_supported: false
+media_types: banner
+safeframes_ok: true
+deals_supported: true
+floors_supported: true
+fpd_supported: true
+pbjs: true
+pbs: false
+prebid_member: true/false
+ortb_blocking_supported: false
+privacy_sandbox: paapi
+sidebarType: 1
+---
+### Note
+
+The Adlive Plus adapter requires setup before beginning. Please contact us at [support@adlive.io](mailto:support@adlive.io).
+
+### Bid Params
+
+{: .table .table-bordered .table-striped }
+| Name | Scope | Description | Example | Type |
+|---------------|----------|-----------------------|-----------|-----------|
+| `placementId` | required | Placement id | `'11111'` | `string` |
+
+### Test Parameters
+
+```javascript
+const adUnits = [
+ {
+ code: 'test-div',
+ sizes: [[300, 250]],
+ bids: [
+ {
+ bidder: 'adliveplus',
+ params: {
+ placementId: '1',
+ }
+ }
+ ]
+ }
+ ];
+```
diff --git a/dev-docs/bidders/adlivetech.md b/dev-docs/bidders/adlivetech.md
index 5d4a40b8c2..7e6ffe90f4 100644
--- a/dev-docs/bidders/adlivetech.md
+++ b/dev-docs/bidders/adlivetech.md
@@ -6,7 +6,8 @@ pbjs: true
biddercode: adlivetech
aliasCode: grid
media_types: banner, video
-gdpr_supported: true
+gvl_id: 686 (grid)
+tcfeu_supported: true
usp_supported: true
schain_supported: true
floors_supported: true
@@ -14,8 +15,17 @@ userIds: all
tcf2_supported: true
coppa_supported: true
fpd_supported: true
+sidebarType: 1
---
+### Table of Contents
+
+- [Table of Contents](#table-of-contents)
+- [Bid Params](#bid-params)
+- [Bidder Config](#bidder-config)
+- [First Party Data](#first-party-data)
+
+
### Bid Params
@@ -25,3 +35,41 @@ fpd_supported: true
| `uid` | required | Represents the Adlivetech bidder system Ad Slot ID associated with the respective div id from the site page. | `1` | `integer` |
| `keywords` | optional | A set of key-value pairs applied to all ad slots on the page. Values can be empty. | `keywords: { topic: ['stress', 'fear'] }` | `object` |
| `bidFloor` | optional | Floor of the impression opportunity. If present in the request overrides XML info. | `0.8` | `float` |
+
+
+
+### Bidder Config
+
+You can allow writing in localStorage `pbjs.setBidderConfig` for the bidder `adlivetech`
+
+```javascript
+pbjs.setBidderConfig({
+ bidders: ["adlivetech"],
+ config: {
+ localStorageWriteAllowed: true
+ }
+})
+```
+
+If it will be "true" this allow Adlivetech Bid Adapter to write userId in first party localStorage
+
+
+
+### First Party Data
+
+Publishers should use the `ortb2` method of setting [First Party Data](https://docs.prebid.org/features/firstPartyData.html).
+
+Global site or user data using `setConfig()`, or Bidder-specific using `setBidderConfig()` supports following fields:
+
+- `ortb2.user.data[]`: Standard IAB segment taxonomy user data
+- `ortb2.user.ext.device`: Non standard arbitrary user device
+- `ortb2.user.keywords`: Standard IAB OpenRTB 2.5 user.keywords field. It will be included in ext.keywords.user.ortb2
+- `ortb2.site.keywords`: Standard IAB OpenRTB 2.5 site.keywords field. It will be included in ext.keywords.site.ortb2
+- `ortb2.site.cat[]`: Standard IAB OpenRTB 2.5 site.cat field. It will be sent as part of site.cat array
+- `ortb2.site.pagecat[]`: Standard IAB OpenRTB 2.5 site.pagecat field. It will be sent as part of site.cat array
+- `ortb2.site.content.genre`: Standard IAB OpenRTB 2.5 site.content.genre field
+
+AdUnit-specific data using `AdUnit.ortb2Imp` supports following fields:
+
+- `ortb2.imp[].ext.data.*`
+- `ortb2.imp[].instl`
diff --git a/dev-docs/bidders/adman.md b/dev-docs/bidders/adman.md
index 82de98d951..e132b58f40 100644
--- a/dev-docs/bidders/adman.md
+++ b/dev-docs/bidders/adman.md
@@ -5,15 +5,18 @@ description: Prebid Adman Bidder Adapter
pbjs: true
pbs: true
biddercode: adman
-gdpr_supported: true
+gvl_id: 149
+tcfeu_supported: true
usp_supported: true
+schain_supported: true
media_types: banner, video, native
-userIds: uid2, lotamePanoramaId
+userIds: uid2, lotamePanoramaId, idx
+sidebarType: 1
---
-### Note:
+### Note
-The Adman Bidding adapter requires setup before beginning. Please contact us at prebid@admanmedia.com
+The Adman Bidding adapter requires setup before beginning. Please contact us at
Due to different integration API prebid.js and prebid-server api params are different
### Prebid.JS Bid Params
@@ -23,7 +26,6 @@ Due to different integration API prebid.js and prebid-server api params are diff
|---------------|----------|-----------------------|-----------|-----------|
| `placementId` | required | Adman placement id | `'1234asdf'` | `'string'` |
-
### Prebid server Bid Params
{: .table .table-bordered .table-striped }
diff --git a/dev-docs/bidders/admaru.md b/dev-docs/bidders/admaru.md
new file mode 100644
index 0000000000..1809b52ece
--- /dev/null
+++ b/dev-docs/bidders/admaru.md
@@ -0,0 +1,45 @@
+---
+layout: bidder
+title: Admaru
+description: Admaru Bidder Adapter
+pbjs: true
+biddercode: admaru
+media_types: banner
+tcfeu_supported: false
+schain_supported: false
+usp_supported: false
+sidebarType: 1
+---
+
+
+### Bid Params
+
+{: .table .table-bordered .table-striped }
+| Name | Scope | Description | Example | Type |
+|------------------|----------|------------------|------------------------------|----------|
+| `pub_id` | required | Publisher id | `'ap4m2b6m8'` | `string` |
+| `adspace_id` | required | Adspace id | `'a3j5n6b1'` | `string` |
+
+### Test Parameters
+
+```
+var adUnits = [
+ {
+ code: 'test-div',
+ mediaTypes: {
+ banner: {
+ sizes: [[300, 250]], // a display size
+ }
+ },
+ bids: [
+ {
+ bidder: "admaru",
+ params: {
+ pub_id: '1234', // string - required
+ adspace_id: '1234' // string - required
+ }
+ }
+ ]
+ }
+];
+```
diff --git a/dev-docs/bidders/admatic.md b/dev-docs/bidders/admatic.md
new file mode 100644
index 0000000000..5f34a21702
--- /dev/null
+++ b/dev-docs/bidders/admatic.md
@@ -0,0 +1,89 @@
+---
+layout: bidder
+title: AdMatic
+description: Prebid AdMatic Bidder Adapter.
+pbjs: true
+pbs: true
+biddercode: admatic
+media_types: banner,video,native
+gvl_id: 1281
+tcfeu_supported: true
+usp_supported: true
+coppa_supported: true
+gpp_sids: tcfeu, tcfca, usnat, usstate_all, usp
+schain_supported: true
+dchain_supported: false
+userIds: criteo, id5Id, sharedId, unifiedId
+safeframes_ok: true
+floors_supported: true
+multiformat_supported: will-bid-on-any
+sidebarType: 1
+---
+
+### Description
+
+AdMatic header bidding adapter connects with AdMatic demand sources to fetch bids for banner network ID. Please reach out to your account manager or for more information.
+
+### Bid params
+
+{: .table .table-bordered .table-striped }
+| Name | Scope | Description | Example | Type |
+|--------------|----------|------------------------------------|------------|----------|
+| `networkId` | required | The network ID from AdMatic | `12345` | `number` |
+| `host` | required | RTB Host | `layer.serve.admatic.com.tr` | `string` |
+
+### Test Parameters
+
+300x250 banner test
+
+```javascript
+var adUnits = [{
+ code: 'your-slot_1-div',
+ mediaTypes: {
+ banner: { sizes: [[300, 250]] },
+ },
+ bids: [{
+ bidder: 'admatic',
+ params: {
+ networkId: 12345,
+ host: 'layer.serve.admatic.com.tr'
+ }
+ }]
+},{
+ code: 'your-slot_2-div',
+ mediaTypes: {
+ native: { ... },
+ },
+ bids: [{
+ bidder: 'admatic',
+ params: {
+ networkId: 12345,
+ host: 'layer.serve.admatic.com.tr'
+ }
+ }]
+},{
+ code: 'your-slot_3-div',
+ mediaTypes: {
+ video: { ... },
+ },
+ bids: [{
+ bidder: 'admatic',
+ params: {
+ networkId: 12345,
+ host: 'layer.serve.admatic.com.tr'
+ }
+ }]
+}];
+```
+
+## UserSync example
+
+```javascript
+pbjs.setConfig({
+ userSync: {
+ iframeEnabled: true,
+ syncEnabled: true,
+ syncDelay: 1
+ }
+});
+```
diff --git a/dev-docs/bidders/admedia.md b/dev-docs/bidders/admedia.md
index d9530b2d31..03553c404f 100644
--- a/dev-docs/bidders/admedia.md
+++ b/dev-docs/bidders/admedia.md
@@ -1,19 +1,19 @@
---
layout: bidder
-title: AdMedia
-description: Prebid AdMedia Bidder Adaptor
+title: admedia
+description: Prebid admedia Bidder Adaptor
pbjs: true
biddercode: admedia
media_types: banner
-gdpr_supported: false
-enable_download: false
-pbjs_version_notes: not ported to 5.x
+sidebarType: 1
---
### Bid Params
{: .table .table-bordered .table-striped }
-| Name | Scope | Description | Example | Type |
-|-------|----------|------------------------------------|----------|----------|
-| `aid` | required | The Affiliate ID for the Publisher | `'1234'` | `string` |
+| Name | Scope | Description | Example | Type |
+|-----------------|----------|--------------------------|--------------|----------|
+| `placementId` | required | The placement ID provided by admedia | `'1234567'` | `string` |
+| `aid` | required | The aid provided by admedia | `'1234'` | `string` |
+| `referrrInfo` | required | The referring page url to be sent by the publisher | `'https://test.com/abc'` | `string` |
diff --git a/dev-docs/bidders/admixer.md b/dev-docs/bidders/admixer.md
index 28d99d7c9f..f7271f31f3 100644
--- a/dev-docs/bidders/admixer.md
+++ b/dev-docs/bidders/admixer.md
@@ -6,13 +6,14 @@ pbjs: true
pbs: true
biddercode: admixer
media_types: banner, video, native
-gdpr_supported: true
+tcfeu_supported: true
usp_supported: true
schain_supported: true
-fpd_supported: true
gvl_id: 511
userIds: AdmixerID
prebid_member: true
+floors_supported: true
+sidebarType: 1
---
### Bid Params
diff --git a/dev-docs/bidders/admixeradx.md b/dev-docs/bidders/admixeradx.md
new file mode 100644
index 0000000000..d07a13e283
--- /dev/null
+++ b/dev-docs/bidders/admixeradx.md
@@ -0,0 +1,24 @@
+---
+layout: bidder
+title: AdmixerADX
+description: Prebid AdmixerADX Bidder Adaptor
+pbjs: true
+biddercode: admixeradx
+aliasCode: admixer
+media_types: banner, video, native
+tcfeu_supported: true
+usp_supported: true
+schain_supported: true
+gvl_id: 511
+userIds: AdmixerID
+prebid_member: true
+floors_supported: true
+---
+
+### Bid Params
+
+{: .table .table-bordered .table-striped }
+| Name | Scope | Description | Example | Type |
+|---------------|----------|------------------------------------------------------------------------------------------------------------------|----------------------------------------|----------|
+| `zone` | required | The unique identifier of the ad placement. Could be obtained from the AdBlender UI or from your account manager. | "e5ff8e48-4bd0-4a2c-9236-55530ab8981d" | `string` |
+| `kvTargeting` | optional | Key/Value - a pair of the unique values that will be used for the custom targeting option. | {key1: value2, key2: value2} | `object` |
diff --git a/dev-docs/bidders/admixerwl.md b/dev-docs/bidders/admixerwl.md
new file mode 100644
index 0000000000..8232989500
--- /dev/null
+++ b/dev-docs/bidders/admixerwl.md
@@ -0,0 +1,28 @@
+---
+layout: bidder
+title: AdmixerWL
+description: Prebid AdMixer Bidder Adaptor
+pbjs: true
+biddercode: admixerwl
+aliasCode: admixer
+media_types: banner, video, native
+tcfeu_supported: true
+usp_supported: true
+schain_supported: true
+gvl_id: 511
+userIds: AdmixerID
+prebid_member: true
+floors_supported: true
+sidebarType: 1
+multiformat_supported: will-bid-on-any
+safeframes_ok: true
+---
+
+### Bid Params
+
+{: .table .table-bordered .table-striped }
+| Name | Scope | Description | Example | Type |
+|---------------------|----------|--------------------------------------------------------------------------------------------|------------------------------|----------|
+| `endpointId` | required | Unique Entity ID. Could be obtained from your account manager. | 51772 | `int` |
+| `clientId` | required | Unique Entity ID. Could be obtained from your account manager. | 312 | `int` |
+| `kvTargeting` | optional | Key/Value - a pair of the unique values that will be used for the custom targeting option. | {key1: value2, key2: value2} | `object` |
diff --git a/dev-docs/bidders/adnow.md b/dev-docs/bidders/adnow.md
index be7944b160..f8c65c1a26 100644
--- a/dev-docs/bidders/adnow.md
+++ b/dev-docs/bidders/adnow.md
@@ -5,9 +5,12 @@ description: Prebid AdNow Bidder Adaptor
biddercode: adnow
pbjs: true
media_types: native, banner
+sidebarType: 1
---
-### Note:
-The Example Bidding adapter requires setup before beginning. Please contact us at support@adnow.com
+
+### Note
+
+The Example Bidding adapter requires setup before beginning. Please contact us at
### Bid Params
diff --git a/dev-docs/bidders/adnuntius.md b/dev-docs/bidders/adnuntius.md
index 1ddbe27415..d0a04091e8 100644
--- a/dev-docs/bidders/adnuntius.md
+++ b/dev-docs/bidders/adnuntius.md
@@ -5,10 +5,16 @@ description: Prebid Adnuntius Bidder Adaptor
pbjs: true
pbs: true
biddercode: adnuntius
-media_types: banner
-gdpr_supported: true
+media_types: banner, video
+tcfeu_supported: true
fpd_supported: true
gvl_id: 855
+safeframes_ok: false
+multiformat_supported: will-bid-on-any
+ortb_blocking_supported: false
+floors_supported: false
+sidebarType: 1
+
---
### Bid Params
@@ -18,7 +24,12 @@ gvl_id: 855
|-------------|----------|----------------------------------------------------------------------|----------|----------|
| `auId` | required | The ad unit ID `'0000000000072345'` leading zeros can be omitted. | `'0000000000072345'` | `string` |
| `network` | optional | Used if you want to make requests to multiple networks in adnuntius. | `'adnuntius'` | `string`|
+| `userId` | optional | Allows you to set a specific user id in the request. | `'userId'` | `string`|
| `targeting` | optional | Targeting to be sent through to adnuntius with the request. | `{ c: ['prebids'] }` | `string`|
+| `maxDeals` | optional | The maximum number of deal bids to include. Default 0. | `1` | `Integer` |
+| `bidType` | optional | Whether to use `grossBid` or `netBid` from the server response as the cpm bid. Default is `grossBid`. | `grossBid` | `string` |
+
+The `bidType` can also be set under `config` in the bidderSettings.
#### Targeting
@@ -28,22 +39,23 @@ The [Adnuntius Documentation](https://docs.adnuntius.com/adnuntius-advertising/r
Here's an example of sending targeting information about categories to adnuntius via the bid request:
-```
+```json
{
- code: "0000000000072345",
- mediaTypes: {
- banner: {
- sizes: [[980, 360], [980, 300], [980, 240], [980, 120]]
+ "code": "0000000000072345",
+ "mediaTypes": {
+ "banner": {
+ "sizes": [[980, 360], [980, 300], [980, 240], [980, 120]]
}
},
- bids: [
+ "bids": [
{
- bidder: "adnuntius",
- params: {
- auId: "8b6bc",
- network: "adnuntius",
- targeting: {
- c: ['prebids']
+ "bidder": "adnuntius",
+ "params": {
+ "auId": "8b6bc",
+ "network": "adnuntius",
+ "userId": "",
+ "targeting": {
+ "c": ["prebids"]
}
}
}
@@ -55,7 +67,7 @@ Here's an example of sending targeting information about categories to adnuntius
There's an option to send segment id in the bidder config that will be picked up and sent to the ad server. Below is an example on how to do this:
-```
+```js
pbjs.setBidderConfig({
bidders: ['adnuntius', 'bidderB'],
config: {
@@ -78,8 +90,7 @@ pbjs.setBidderConfig({
You have the option to tell adnuntius not to set cookies in your browser. This does not mean that third party ads being served through the ad server will not set cookies. Just that Adnuintius will not set it for internal ads.
-```
-
+```js
pbjs.setBidderConfig({
bidders: ['adnuntius'],
config: {
@@ -94,22 +105,75 @@ Use cookie will always be set to true by default. Changing it to false will disa
The following test parameters can be used to verify that Prebid Server is working properly with the server-side Adnuntius adapter. the `auId` below will not return a creative. Please substitute it with your own.
+```json
+{
+ "imp": [{
+ "id": "impression-id",
+ "banner": {
+ "format": [{
+ "w": 980,
+ "h": 240
+ }, {
+ "w": 980,
+ "h": 360
+ }]
+ },
+ "ext": {
+ "adnuntius": {
+ "auId": "abc123",
+ "maxDeals": 2 // Optional
+ }
+ }
+ }]
+}
```
-"imp": [{
- "id": "impression-id",
- "banner": {
- "format": [{
- "w": 980,
- "h": 240
- }, {
- "w": 980,
- "h": 360
- }]
- },
- "ext": {
- "adnuntius": {
- "auId": "abc123"
+
+### Passing no Cookie in Prebid Server request
+
+As a publisher you have the option to set no cookie in the device request to let Adnuntius adserver know not to set cookies in the client's browser. In order to do that you just need to pass this in the request:
+
+```json
+{
+ "device": {
+ "ext": {
+ "noCookies": true
}
}
-}]
+}
+```
+
+### First Party Data
+
+publishers can use the `ortb2` configuration parameter to provide First Party Data. We accept all standard OpenRTB fields for both:
+
+- `ortb2.site`
+- `ortb2.user`
+
+These fields are optional and only needed for user identification and contextual targeting. How to use it can be read here: [Prebid ortb2](https://docs.prebid.org/features/firstPartyData.html). Currently we only support this for our prebid server bidder, but will add it to the client bidder in the future.
+
+### Video requests
+
+Currently we only support client requests and instream context. An example request would look like this:
+
+```json
+{
+ "code": "video1",
+ "mediaTypes": {
+ "video": {
+ "playerSize": [640, 480],
+ "context": "instream"
+ }
+ },
+ "bids": [{
+ "bidder": "adnuntius",
+ "params": {
+ "auId": "00000000001cd429", //put your placement id here
+
+ "video": {
+ "skippable": true,
+ "playback_method": ["auto_play_sound_off"]
+ }
+ }
+ }]
+};
```
diff --git a/dev-docs/bidders/adocean.md b/dev-docs/bidders/adocean.md
index 0396275100..689ea32ecf 100644
--- a/dev-docs/bidders/adocean.md
+++ b/dev-docs/bidders/adocean.md
@@ -5,13 +5,16 @@ description: Prebid AdOcean Bidder Adaptor
pbjs: true
pbs: true
biddercode: adocean
-gdpr_supported: true
+tcfeu_supported: true
+gvl_id: 328
+sidebarType: 1
---
### Note
+
The AdOcean bid adapter may require an additional setup from the AdOcean team. Please contact with your local Technical Support team or by visiting [AdOcean website](https://adocean-global.com/en/contact/).
-### Bid Params
+### Prebid.JS Bid Params
{: .table .table-bordered .table-striped }
| Name | Scope | Description | Example | Type |
@@ -19,3 +22,12 @@ The AdOcean bid adapter may require an additional setup from the AdOcean team. P
| slaveId | required | slave ID | `'adoceanmyaozpniqismex'` | `string` |
| masterId | required | master ID | `'tmYF.DMl7ZBq.Nqt2Bq4FutQTJfTpxCOmtNPZoQUDcL.G7'` | `string` |
| emiter | required | traffic source id | `'myao.adocean.pl'` | `string` |
+
+### Prebid Server Bid Params
+
+{: .table .table-bordered .table-striped }
+| Name | Scope | Description | Example | Type |
+|---------------|----------|-------------------------------------------------------|----------------------------------------------------|----------|
+| slaveId | required | slave ID | `'adoceanmyaozpniqismex'` | `string` |
+| masterId | required | master ID | `'tmYF.DMl7ZBq.Nqt2Bq4FutQTJfTpxCOmtNPZoQUDcL.G7'` | `string` |
+| emitterPrefix | required | AdOcean emitter prefix | `'myao'` | `string` |
diff --git a/dev-docs/bidders/adomega.md b/dev-docs/bidders/adomega.md
index 96d8301c51..a5493d68ea 100644
--- a/dev-docs/bidders/adomega.md
+++ b/dev-docs/bidders/adomega.md
@@ -2,19 +2,28 @@
layout: bidder
title: adOmega
description: adOmega Bidder Adaptor
-pbjs: true
-pbs: true
biddercode: adomega
+pbjs: true
+pbs: false
media_types: banner, native, video
-gdpr_supported: true
+gvl_id: 14 (adkernel)
+tcfeu_supported: true
+gpp_supported: true
usp_supported: true
coppa_supported: true
pbs_app_supported: true
schain_supported: true
-aliasCode : adkernel
+userIds: all
+fpd_supported: true
+prebid_member: false
+ortb_blocking_supported: true
+multiformat_supported: will-bid-on-one
+floors_supported: true
+aliasCode: adkernel
+sidebarType: 1
---
-### Note:
+### Note
The adOmega bidding adapter requires setup and approval before implementation. Please reach out to for more details.
diff --git a/dev-docs/bidders/adoppler.md b/dev-docs/bidders/adoppler.md
index ed306762b6..9a3e39ad5e 100644
--- a/dev-docs/bidders/adoppler.md
+++ b/dev-docs/bidders/adoppler.md
@@ -4,6 +4,7 @@ title: Adoppler
pbs: true
media_types: video
biddercode: adoppler
+sidebarType: 1
---
### Bid Params
diff --git a/dev-docs/bidders/adot.md b/dev-docs/bidders/adot.md
index a7aa51a606..5fcb375f3a 100644
--- a/dev-docs/bidders/adot.md
+++ b/dev-docs/bidders/adot.md
@@ -4,10 +4,14 @@ title: Adot
description: Prebid Adot Bidder Adapter
biddercode: adot
media_types: banner, video, native
-gdpr_supported: true
+userIds: pubProvidedId
+tcfeu_supported: true
gvl_id: 272
pbjs: true
pbs: true
+floors_supported: true
+schain_supported: true
+sidebarType: 1
---
### Prebid JS
@@ -18,22 +22,17 @@ pbs: true
| Name | Scope | Description | Example | Type |
|---------------------|-----------------------------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|-------------------------------------------------------|------------------|
| `placementId` | optional | The placement ID from Adot. | `'adot_placement_224521'` | `string` |
-| `position` | optional | Specify the position of the ad as a relative measure of visibility or prominence. Allowed values: Unknown: `0` (default); Above the fold: `1` ; Below the fold: `3`. | `0` | `integer-` |
-| `video` | required if the adUnit is a video | Object containing video targeting parameters. See [Video Object](#adot-video-object) for details. | `video: { mimes: ['video/mp4'] }` | `object` |
+| `video` | optional | Object containing video targeting parameters. See [Video Object](#adot-video-object) for details. | | `object` |
#### Video Object
{: .table .table-bordered .table-striped }
| Name | Scope | Description | Type |
|-------------------|-------------------------------------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|------------------|
-| `mimes` | required | Array of strings listing the content MIME types supported, e.g., `['video/mp4']`. | `Array` |
-| `minduration` | optional | Integer that defines the minimum video ad duration in seconds. | `integer` |
-| `maxduration` | optional | Integer that defines the maximum video ad duration in seconds. | `integer` |
-| `protocols` | required | Array of supported video protocols, e.g., `[2, 3]` | `Array` |
| `container` | optional | Selector used for finding the element in which the video player will be displayed, e.g., `#div-1`. The `ad unit code` will be used if no `container` is provided. | `string` |
-| `instreamContext` | required if `video.context` is `instream` | String used to define the type of instream video. Allowed values: Pre-roll: `pre-roll`; Mid-roll: `mid-roll` ; Post-roll: `post-roll`. | `string` |
#### Bid Config
+
#### PublisherId
You can set a publisherId using `pbjs.setBidderConfig` for the bidder `adot`
@@ -69,7 +68,6 @@ pbjs.setBidderConfig({
});
```
-
### Prebid server
#### Bid Params
@@ -79,10 +77,11 @@ pbjs.setBidderConfig({
|---------------------|----------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|-------------------------------------------------------|------------------|
| `placementId` | optional | An ID which identifies this placement of the impression. | `'adot_placement_224521'` | `string` |
| `parallax` | optional (only for prebid-server) | Specify if the wanted advertising's creative is a parallax. | `true/false` | `boolean` |
+| `publisherPath` | optional | Specific to each integration. Do not use until asked by someone from adot. | `/hubvisor` | `string` |
#### Testing Bid Request
-The following test parameters can be used to verify that Prebid Server is working properly with the
+The following test parameters can be used to verify that Prebid Server is working properly with the
server-side adot adapter. This is a mobile Bid-request example.
```
diff --git a/dev-docs/bidders/adpartner.md b/dev-docs/bidders/adpartner.md
index ead43860ca..91ba3353bc 100644
--- a/dev-docs/bidders/adpartner.md
+++ b/dev-docs/bidders/adpartner.md
@@ -5,6 +5,7 @@ description: Prebid AdPartner Bidder Adaptor
pbjs: true
biddercode: adpartner
media_types: banner
+sidebarType: 1
---
### Bid Params
@@ -12,4 +13,4 @@ media_types: banner
{: .table .table-bordered .table-striped }
| Name | Scope | Description | Example | Type |
|-------------|----------|-------------|----------------------|-----------|
-| `partnerId` | required | Partner ID. | `5809` | `integer` |
+| `partnerId` | required | Partner ID. | `5809` | `integer` |
diff --git a/dev-docs/bidders/adplus.md b/dev-docs/bidders/adplus.md
index 976e0131d5..58112efcb7 100644
--- a/dev-docs/bidders/adplus.md
+++ b/dev-docs/bidders/adplus.md
@@ -5,10 +5,12 @@ description: Prebid AdPlus Bidder Adapter
biddercode: adplus
media_types: banner
pbjs: true
+sidebarType: 1
---
-### Note:
-The AdPlus Bidding adapter requires setup before beginning. Please contact us at adplus.destek@yaani.com.tr
+### Note
+
+The AdPlus Bidding adapter requires setup before beginning. Please contact us at .
### Bid Params
@@ -16,4 +18,4 @@ The AdPlus Bidding adapter requires setup before beginning. Please contact us at
| Name | Scope | Description | Example | Type |
|---------------|----------|---------------|-------------------------------------------|-----------|
| `adUnitId` | required | Ad Unit ID | `'-3'` | `string` |
-| `inventoryId` | required | Inventory ID | `'-1'` | `string` |
\ No newline at end of file
+| `inventoryId` | required | Inventory ID | `'-1'` | `string` |
diff --git a/dev-docs/bidders/adpluto.md b/dev-docs/bidders/adpluto.md
new file mode 100644
index 0000000000..af0212872d
--- /dev/null
+++ b/dev-docs/bidders/adpluto.md
@@ -0,0 +1,35 @@
+---
+layout: bidder
+title: AdPluto
+description: AdPluto Bidder Adaptor
+biddercode: adpluto
+pbjs: true
+pbs: false
+media_types: banner, native, video
+tcfeu_supported: false
+gpp_supported: true
+usp_supported: true
+coppa_supported: true
+pbs_app_supported: false
+schain_supported: true
+userIds: all
+fpd_supported: true
+prebid_member: false
+ortb_blocking_supported: true
+multiformat_supported: will-bid-on-one
+floors_supported: true
+aliasCode: adkernel
+sidebarType: 1
+---
+
+### Note
+
+The AdPluto bidding adapter requires setup and approval before implementation. Please reach out to for more details.
+
+### Bid Params
+
+{: .table .table-bordered .table-striped }
+| Name | Scope | Description | Example | Type |
+|----------|----------|-----------------------|---------------------------|----------|
+| `host` | required | RTB host | `'cpm.adpluto.com'` | `string` |
+| `zoneId` | required | Zone Id | 30164 | `integer` |
diff --git a/dev-docs/bidders/adpluto_dsp.md b/dev-docs/bidders/adpluto_dsp.md
new file mode 100644
index 0000000000..26210e0aae
--- /dev/null
+++ b/dev-docs/bidders/adpluto_dsp.md
@@ -0,0 +1,36 @@
+---
+layout: bidder
+title: AdPluto DSP
+description: AdPluto DSP Bidder Adaptor
+biddercode: adpluto_dsp
+pbjs: true
+pbs: false
+media_types: banner, native, video
+tcfeu_supported: true
+gvl_id: 14 (adkernel)
+gpp_supported: true
+usp_supported: true
+coppa_supported: true
+pbs_app_supported: false
+schain_supported: true
+userIds: all
+fpd_supported: true
+prebid_member: false
+ortb_blocking_supported: true
+multiformat_supported: will-bid-on-one
+floors_supported: true
+aliasCode: adkernelAdn
+sidebarType: 1
+---
+
+### Note
+
+The AdPluto DSP bidding adapter requires setup and approval before implementation. Please reach out to for more details.
+
+### Bid Params
+
+{: .table .table-bordered .table-striped }
+| Name | Scope | Description | Example | Type |
+|---------|----------|-----------------|----------------------|-----------|
+| `host` | optional | Ad network host | `'rtb2-useast.adpluto.com'` | `string` |
+| `pubId` | required | Publisher Id | `102` | `integer` |
diff --git a/dev-docs/bidders/adpone.md b/dev-docs/bidders/adpone.md
index c2da708ebd..5813e37280 100644
--- a/dev-docs/bidders/adpone.md
+++ b/dev-docs/bidders/adpone.md
@@ -8,6 +8,7 @@ biddercode: adpone
deals_supported: false
media_types: banner
gvl_id: 799
+sidebarType: 1
---
diff --git a/dev-docs/bidders/adprime.md b/dev-docs/bidders/adprime.md
index 4452ddfc97..e8e43a74c2 100644
--- a/dev-docs/bidders/adprime.md
+++ b/dev-docs/bidders/adprime.md
@@ -3,25 +3,34 @@ layout: bidder
title: Adprime
description: Prebid Adprime Bidder Adapter
biddercode: adprime
-gdpr_supported: true
+tcfeu_supported: false
usp_supported: true
media_types: banner, video, native
tcf2_supported: true
pbjs: true
pbs: true
pbs_app_supported: true
+sidebarType: 1
---
-### Note:
+### Note
-The Adprime Bidding adapter requires setup before beginning. Please contact us at rafal@adprime.com
+The Adprime Bidding adapter requires setup before beginning. Please contact us at
-### Bid Params
+### Prebid.js Bid Params
{: .table .table-bordered .table-striped }
| Name | Scope | Description | Example | Type |
|---------------|----------|-----------------------|-----------|-----------|
-| `placementId` | required | Adprime placement id | `'1234asdf'` | `string` |
+| `placementId` | required | Adprime placement id | `'1234asdf'` | `string` |
| `keywords` | optional | page context keywords | ['car','sport'] | `array` |
-| `audiences` | optional | publisher audiences | ['aud1','aud2'] | `array` |
+| `audiences` | optional | publisher audiences | ['aud1','aud2'] | `array` |
+### Prebid Server Bid Params
+
+{: .table .table-bordered .table-striped }
+| Name | Scope | Description | Example | Type |
+|---------------|----------|-----------------------|-----------|-----------|
+| `TagID` | required | Adprime ad tag id | `'1234asdf'` | `string` |
+| `keywords` | optional | page context keywords | ['car','sport'] | `array` |
+| `audiences` | optional | publisher audiences | ['aud1','aud2'] | `array` |
diff --git a/dev-docs/bidders/adquery.md b/dev-docs/bidders/adquery.md
index 8ab327d42b..c7099a031b 100644
--- a/dev-docs/bidders/adquery.md
+++ b/dev-docs/bidders/adquery.md
@@ -3,17 +3,21 @@ layout: bidder
title: Adquery
description: Prebid Adquery Bidder Adaptor
pbjs: true
+pbs: true
biddercode: adquery
-gdpr_supported: true
+tcfeu_supported: true
usp_supported: true
schain_supported: true
gvl_id: 902
+userIds: adQuery QiD
+sidebarType: 1
---
### Bid Params
{: .table .table-bordered .table-striped }
-| Name | Scope | Description | Example | Type |
-|---------------|----------|---------------|-------------------------------------------|-----------|
-| `placementId` | required | Placement ID | `6d93f2a0e5f0fe2cc3a6e9e3ade964b43b07f897`| `string` |
-| `type` | required | Ad Type | `banner300x250` | `string` |
+| Name | Scope | Description | Example | Type |
+|---------------|----------|---------------|--------------------------------------------------------------------------|-----------|
+| `placementId` | required | Placement ID | `6d93f2a0e5f0fe2cc3a6e9e3ade964b43b07f897` | `string` |
+| `type` | required | Ad Type | `banner` | `string` |
+| `sizes` | required | Allowed sizes | `320x100,300x250,336x280,300x50,300x100,320x50,320x480,300x150,320x180` | `string` |
diff --git a/dev-docs/bidders/adrelevantis.md b/dev-docs/bidders/adrelevantis.md
index 1d132f2b03..b3d7d00978 100644
--- a/dev-docs/bidders/adrelevantis.md
+++ b/dev-docs/bidders/adrelevantis.md
@@ -6,10 +6,12 @@ biddercode: adrelevantis
media_types: banner, video, native
fpd_supported: true
pbjs: true
+sidebarType: 1
---
-### Note:
-This adapter is for displaying ads relevant to page content. Page content is analyzed dynamically in realtime to get its IAB Categories and keywords. The IAB Categories and keywords are sent as First Party Data of the bidder. DSP can, then, bid on the IAB Categories and keywords. You can find more info at (https://adrelevantis.xyz/2020/06/28/content-driven-header-bidding-with-prebid-js/).
+### Note
+
+This adapter is for displaying ads relevant to page content. Page content is analyzed dynamically in realtime to get its IAB Categories and keywords. The IAB Categories and keywords are sent as First Party Data of the bidder. DSP can, then, bid on the IAB Categories and keywords. You can find more info at ( ).
### Bid Params
@@ -20,18 +22,23 @@ This adapter is for displaying ads relevant to page content. Page content is ana
| `cpm` | optional | forces bidder to insert custom cpm bid | 0.50 | `decimal` |
#### First Party Data
+
Page content is analyzed at DOMContentLoaded event. The results (keywords and categories) are set as fpd of the bidder prior to requesting bids.
-```
+```javascript
pbjs.setBidderConfig({
- bidders: ['adrelevantis'],
- config: {
- ortb2: {
- context: {
- keywords: keywords,
- category: categories
- }
- }
- }
+ bidders: ['adrelevantis'],
+ config: {
+ ortb2: {
+ site: {
+ keywords: keywords,
+ ext: {
+ data: {
+ category: categories
+ }
+ }
+ }
+ }
+ }
});
```
diff --git a/dev-docs/bidders/adrino.md b/dev-docs/bidders/adrino.md
new file mode 100644
index 0000000000..2f1f0a32c0
--- /dev/null
+++ b/dev-docs/bidders/adrino.md
@@ -0,0 +1,57 @@
+---
+layout: bidder
+title: Adrino
+description: Prebid Adrino Bidder Adapter
+pbjs: true
+pbs: true
+biddercode: adrino
+media_types: banner, native
+tcfeu_supported: true
+gvl_id: 1072
+sidebarType: 1
+---
+
+### Note
+
+The Adrino bidder adapter requires setup and approval from the Adrino team. Please reach out to [wydawcy@adrino.pl](mailto:wydawcy@adrino.pl) for more information.
+
+### Bid Params
+
+{: .table .table-bordered .table-striped }
+| Name | Scope | Description | Example | Type |
+|--------|----------|--------------------------------------|------------------|----------|
+| `hash` | required | Identifier for specific ad placement | `'abcdef123456'` | `string` |
+
+### Native example
+
+```
+var adUnits = [
+ code: '/12345678/prebid_native_example_1',
+ mediaTypes: {
+ native: {
+ image: {
+ required: true,
+ sizes: [[300, 210],[300,150],[140,100]]
+ },
+ title: {
+ required: true
+ },
+ sponsoredBy: {
+ required: false
+ },
+ body: {
+ required: false
+ },
+ icon: {
+ required: false
+ }
+ }
+ },
+ bids: [{
+ bidder: 'adrino',
+ params: {
+ hash: 'abcdef123456'
+ }
+ }]
+];
+```
diff --git a/dev-docs/bidders/adriver.md b/dev-docs/bidders/adriver.md
index 1a69fb4108..48efba8e07 100644
--- a/dev-docs/bidders/adriver.md
+++ b/dev-docs/bidders/adriver.md
@@ -5,8 +5,9 @@ description: Adriver adapter
biddercode: adriver
pbjs: true
deals_supported: true
-userIds: sharedId, id5Id, uid2Id
+userIds: sharedId, id5Id, uid2Id, adriverId
floors_supported: true
+sidebarType: 1
---
diff --git a/dev-docs/bidders/adsinteractive.md b/dev-docs/bidders/adsinteractive.md
new file mode 100644
index 0000000000..5cc2695efb
--- /dev/null
+++ b/dev-docs/bidders/adsinteractive.md
@@ -0,0 +1,36 @@
+---
+layout: bidder
+title: AdsInteractive
+description: Prebid AdsInteractive Bidder Adapter
+biddercode: adsinteractive
+media_types: banner
+pbjs: true
+pbs: true
+deals_supported: false
+gpp_supported: true
+tcfeu_supported: true
+gvl_id: 1212
+usp_supported: false
+coppa_supported: false
+userIds: all
+schain_supported: false
+dchain_supported: false
+safeframes_ok: false
+floors_supported: false
+fpd_supported: false
+pbs_app_supported: false
+prebid_member: false
+multiformat_supported: will-not-bid
+ortb_blocking_supported: false
+---
+
+### Registration
+
+The AdsInteractive adapter requires setup and approval. Please reach out to to setup your account.
+
+### Bid Params
+
+{: .table .table-bordered .table-striped }
+| Name | Scope | Description | Example | Type |
+|---------------|----------|--------------|-----------|----------|
+| `adUnit` | required | adUnit tag name | `'example_adunit_1'` | `string` |
diff --git a/dev-docs/bidders/adsolut.md b/dev-docs/bidders/adsolut.md
index 95fc34dd89..6019899486 100644
--- a/dev-docs/bidders/adsolut.md
+++ b/dev-docs/bidders/adsolut.md
@@ -2,12 +2,28 @@
layout: bidder
title: adsolut
description: Prebid adsolut Bidder Adaptor
-pbjs: true
biddercode: adsolut
+pbjs: true
+pbs: false
+media_types: banner, native, video
+gvl_id: 14 (adkernel)
+tcfeu_supported: true
+usp_supported: true
+coppa_supported: true
+gpp_supported: true
+pbs_app_supported: true
+schain_supported: true
+userIds: all
+fpd_supported: true
+prebid_member: false
+ortb_blocking_supported: true
+multiformat_supported: will-bid-on-one
+floors_supported: true
aliasCode: adkernel
+sidebarType: 1
---
-### Note:
+### Note
The adsolut Bidding adaptor requires setup and approval before beginning. Please reach out to for more details
@@ -17,4 +33,4 @@ The adsolut Bidding adaptor requires setup and approval before beginning. Please
| Name | Scope | Description | Example | Type |
|----------|----------|-----------------------|---------------------------|----------|
| `host` | required | Ad network's RTB host | `'cpm.adsolut.in'` | `string` |
-| `zoneId` | required | RTB zone id | `'30164'` | `string` |
+| `zoneId` | required | RTB zone id | `30164` | `integer` |
diff --git a/dev-docs/bidders/adsparc.md b/dev-docs/bidders/adsparc.md
index 5893688282..b4006e58bb 100644
--- a/dev-docs/bidders/adsparc.md
+++ b/dev-docs/bidders/adsparc.md
@@ -5,6 +5,7 @@ description: Prebid Adsparc Bidder Adaptor
pbjs: true
biddercode: adsparc
aliasCode: aardvark
+sidebarType: 1
---
### bid params
diff --git a/dev-docs/bidders/adspend.md b/dev-docs/bidders/adspend.md
deleted file mode 100644
index bc836ffd91..0000000000
--- a/dev-docs/bidders/adspend.md
+++ /dev/null
@@ -1,23 +0,0 @@
----
-layout: bidder
-title: AdSpend
-description: Prebid AdSpend Bidder Adaptor
-pbjs: true
-biddercode: adspend
-media_types: banner
-gdpr_supported: false
-enable_download: false
-pbjs_version_notes: not ported to 5.x
----
-
-
-### Bid Params
-
-{: .table .table-bordered .table-striped }
-
-| Name | Scope | Description | Example | Type |
-|---------------|----------|----------------------------------------------------------------------------|------------------------|-----------------|
-| `pubcid` | required | Publisher ID. | `0` | `string` |
-| `bidfloor` | required | Minimum bid for this impression expressed in CPM. | `0.03` | `float` |
-
-Please note that cookie support is required
diff --git a/dev-docs/bidders/adspirit.md b/dev-docs/bidders/adspirit.md
index b94887380f..4bf7ec15a0 100644
--- a/dev-docs/bidders/adspirit.md
+++ b/dev-docs/bidders/adspirit.md
@@ -4,6 +4,7 @@ title: AdSpirit
description: Prebid AdSpirit Bidder Adapter
pbjs: true
biddercode: adspirit
+sidebarType: 1
---
### Bid Params
diff --git a/dev-docs/bidders/adstir.md b/dev-docs/bidders/adstir.md
new file mode 100644
index 0000000000..463b0f6878
--- /dev/null
+++ b/dev-docs/bidders/adstir.md
@@ -0,0 +1,36 @@
+---
+layout: bidder
+title: adstir
+description: Prebid adstir Bidder Adapter
+pbjs: true
+pbs: false
+biddercode: adstir
+media_types: banner
+tcfeu_supported: false
+gvl_id: none
+usp_supported: false
+coppa_supported: false
+schain_supported: true
+dchain_supported: false
+safeframes_ok: false
+deals_supported: true
+floors_supported: true
+fpd_supported: false
+prebid_member: false
+ortb_blocking_supported: true
+sidebarType: 1
+---
+
+### Note
+
+The adstir Bidding adapter is available from Prebid.js version 8.24.0 and above.
+
+It requires setup before beginning. Please contact us at [sales@ad-stir.com](mailto:sales@ad-stir.com)
+
+### Bid Params
+
+{: .table .table-bordered .table-striped }
+| Name | Scope | Description | Example | Type |
+|-------|----------|---------------------------|----------|----------|
+| `appId` | required | The AppID from adstir | `'TEST-MEDIA'` | `string` |
+| `adSpaceNo` | required | The AdSpaceNo from adstir | `1` | `integer` |
diff --git a/dev-docs/bidders/adsyield.md b/dev-docs/bidders/adsyield.md
index f8e7b1b758..e1968b5567 100644
--- a/dev-docs/bidders/adsyield.md
+++ b/dev-docs/bidders/adsyield.md
@@ -2,17 +2,40 @@
layout: bidder
title: AdsYield
description: Prebid AdsYield Bidder Adaptor
-pbjs: true
biddercode: adsyield
-aliasCode: admixer
-media_types: video
-gdpr_supported: true
+pbjs: true
+pbs: true
+media_types: video, banner
+userIds: all
+fpd_supported: false
+tcfeu_supported: false
usp_supported: true
+coppa_supported: true
+schain_supported: true
+prebid_member: false
+ortb_blocking_supported: true
+multiformat_supported: will-bid-on-one
+floors_supported: false
+aliasCode: limelightDigital
+sidebarType: 1
---
### Bid Params
{: .table .table-bordered .table-striped }
-| Name | Scope | Description | Example | Type |
-|---------------|----------|------------------------------------------------------------------------------------------------------------------|----------------------------------------|----------|
-| `zone` | required | The unique identifier of the ad placement. Could be obtained from the AdsYield UI or from your account manager. | "e5ff8e48-4bd0-4a2c-9236-55530ab8981d" | `string` |
+
+| Name | Scope | Description | Example | Type |
+|---------------|----------|----------------------------------------------------|-----------------------|-----------|
+| `host` | required | Ad network's RTB host | `'open-adsyield.com'` | `string` |
+| `adUnitId` | required | Ad Unit Id will be generated on AdsYield Platform. | `42` | `integer` |
+| `adUnitType` | required | Type of Ad Unit (`'video'`, `'banner'`) | `'banner'` | `string` |
+| `publisherId` | required | Publisher ID | `12345` | `integer` |
+| `custom1` | optional | Custom targeting field 1 | `'custom1'` | `string` |
+| `custom2` | optional | Custom targeting field 2 | `'custom2'` | `string` |
+| `custom3` | optional | Custom targeting field 3 | `'custom3'` | `string` |
+| `custom4` | optional | Custom targeting field 4 | `'custom4'` | `string` |
+| `custom5` | optional | Custom targeting field 5 | `'custom5'` | `string` |
+
+Adsyield server-side Prebid Server adapter requires only `publisherId` and `host` parameters. But Adsyield client-side Prebid.js adapter requires only `host`, `adUnitId`, `adUnitType`.
+
+Adsyield server-side Prebid Server adapter supports only `banner`, `video`, `audio`, `native` media types. But Adsyield client-side Prebid.js adapter supports only `banner` and `video` media types, doesn't support `audio` and `native`.
diff --git a/dev-docs/bidders/adtarget.md b/dev-docs/bidders/adtarget.md
index f8e832bfff..2dcadd245f 100644
--- a/dev-docs/bidders/adtarget.md
+++ b/dev-docs/bidders/adtarget.md
@@ -4,18 +4,20 @@ title: Adtarget
description: Adtarget Bidder Adapter
biddercode: adtarget
media_types: banner, video
-gdpr_supported: true
+gvl_id: 779
+tcfeu_supported: true
userIds: britepoolId, criteo, id5Id, identityLink, liveIntentId, netId, parrableId, pubCommonId, unifiedId
schain_supported: true
coppa_supported: true
usp_supported: true
pbjs: true
pbs: true
+sidebarType: 1
---
### Registration
-To use the Adtarget bidder you will need an aid from an exchange account on [https://adtarget.com.tr](https://adtarget.com.tr). For further information, please contact kamil@adtarget.com.tr.
+To use the Adtarget bidder you will need an aid from an exchange account on [adtarget.com.tr](https://adtarget.com.tr). For further information, please contact .
### Bid params
@@ -24,62 +26,61 @@ To use the Adtarget bidder you will need an aid from an exchange account on [htt
|-------|----------|---------------------------------|----------|-----------|
| `aid` | required | The source ID from Adtarget platform. | `529814` | `integer` |
-
-# Description
+### Description
Provides a solution for accessing Video demand and display demand from Adtarget
### Test Parameters
-```
- var adUnits = [
+```javascript
+var adUnits = [
- // Video adUnit
- {
- code: 'videoPlayer',
- mediaTypes: {
- video: {
- playerSize:[640,480]
- context: 'instream'
- }
- },
- bids: [{
- bidder: 'adtarget',
- params: {
- aid: 331133
- }
- }]
- },
+ // Video adUnit
+ {
+ code: 'videoPlayer',
+ mediaTypes: {
+ video: {
+ playerSize:[640,480]
+ context: 'instream'
+ }
+ },
+ bids: [{
+ bidder: 'adtarget',
+ params: {
+ aid: 331133
+ }
+ }]
+ },
- // Banner adUnit
- {
- code: 'bannerAd',
- mediaTypes: {
- banner: {
- sizes: [[300, 250]]
- }
- },
- bids: [{
- bidder: 'adtarget',
- params: {
- aid: 529814
- }
- }]
+ // Banner adUnit
+ {
+ code: 'bannerAd',
+ mediaTypes: {
+ banner: {
+ sizes: [[300, 250]]
+ }
+ },
+ bids: [{
+ bidder: 'adtarget',
+ params: {
+ aid: 529814
}
- ];
+ }]
+ }
+];
```
### Additional Configuration
-It is possible to configure requests to be splitted in chunks to have less bid requests in single http request
+It is possible to configure requests to be splitted in chunks to have less bid requests in single http request
(default value is 10)
-```
- pbjs.setBidderConfig({
- config: {
- adtarget: {
- chunkSize: 1 // makes 1 http request per 1 adunit configured
- }
+```javascript
+pbjs.setBidderConfig({
+ config: {
+ adtarget: {
+ chunkSize: 1 // makes 1 http request per 1 adunit configured
}
- });
+ }
+});
```
diff --git a/dev-docs/bidders/adtelligent.md b/dev-docs/bidders/adtelligent.md
index dba4b76aa0..dc0d80ef12 100644
--- a/dev-docs/bidders/adtelligent.md
+++ b/dev-docs/bidders/adtelligent.md
@@ -4,8 +4,9 @@ title: Adtelligent
description: Prebid Adtelligent Bidder Adapter
biddercode: adtelligent
media_types: video,banner
-gdpr_supported: true
-userIds: britepoolId, criteo, id5Id, identityLink, liveIntentId, netId, parrableId, pubCommonId, unifiedId
+tcfeu_supported: true
+gpp_supported: true
+userIds: all (with commercial activation)
schain_supported: true
coppa_supported: true
usp_supported: true
@@ -14,8 +15,13 @@ prebid_member: true
pbjs: true
pbs: true
gvl_id: 410
+sidebarType: 1
---
+### Prebid Server Note
+
+{% include dev-docs/pbjs-adapter-required-for-pbs.md %}
+
### Bid params
{: .table .table-bordered .table-striped }
@@ -24,15 +30,17 @@ gvl_id: 410
| `aid` | required | The source ID from Adtelligent. | `350975` | `integer` |
### Description
+
Get access to multiple demand partners across Adtelligent AdExchange and maximize your yield with Adtelligent header bidding adapter.
Adtelligent header bidding adapter connects with Adtelligent demand sources in order to fetch bids.
This adapter provides a solution for accessing Video demand and display demand.
-Adtelligent now supports adpod.
+Adtelligent now supports adpod.
### Test Parameters
-```
+
+``` javascript
var adUnits = [
// Video instream adUnit
@@ -107,10 +115,10 @@ Adtelligent now supports adpod.
### Additional Configuration
-It is possible to configure requests to be split into chunks so as to have fewer bid requests in a single http request
+It is possible to configure requests to be split into chunks so as to have fewer bid requests in a single http request
(default value is 10).
-```
+``` javascript
pbjs.setBidderConfig({
config: {
adtelligent: {
diff --git a/dev-docs/bidders/adtrgtme.md b/dev-docs/bidders/adtrgtme.md
new file mode 100644
index 0000000000..4b03e6916f
--- /dev/null
+++ b/dev-docs/bidders/adtrgtme.md
@@ -0,0 +1,34 @@
+---
+layout: bidder
+title: Adtarget.me
+description: Prebid Adtarget.me bidder adapter
+biddercode: adtrgtme
+tcfeu_supported: false
+usp_supported: false
+coppa_supported: false
+schain_supported: false
+dchain_supported: false
+media_types: banner
+safeframes_ok: true
+deals_supported: false
+floors_supported: false
+fpd_supported: true
+pbjs: true
+pbs: true
+pbs_app_supported: true
+prebid_member: false
+multiformat_supported: will-bid-on-one
+sidebarType: 1
+---
+
+### Note
+
+The Adtrgtme bidding adapter requires setup before beginning. Please contact us at
+
+### Bid Params
+
+{: .table .table-bordered .table-striped }
+
+| Name | Scope | Description | Example | Type |
+|-----------|----------|-------------|--------------|----------|
+| `site_id` | required | Site ID | `1234567890` | `uint64` |
diff --git a/dev-docs/bidders/adtrue.md b/dev-docs/bidders/adtrue.md
index c01ea18ef5..f55019420c 100644
--- a/dev-docs/bidders/adtrue.md
+++ b/dev-docs/bidders/adtrue.md
@@ -5,9 +5,10 @@ description: AdTrue Exchange Bidder Adapter
pbjs: true
biddercode: adtrue
media_types: banner
-gdpr_supported: true
+tcfeu_supported: false
schain_supported: true
usp_supported: true
+sidebarType: 1
---
diff --git a/dev-docs/bidders/aduptech.md b/dev-docs/bidders/aduptech.md
index 2e1a092b21..4a935edf43 100644
--- a/dev-docs/bidders/aduptech.md
+++ b/dev-docs/bidders/aduptech.md
@@ -3,17 +3,18 @@ layout: bidder
title: AdUp Technology
description: Prebid Bidder Adapter for AdUp Technology
biddercode: aduptech
-gdpr_supported: true
+tcfeu_supported: true
+floors_supported: true
gvl_id: 647
media_types: banner, native
pbjs: true
+sidebarType: 1
---
### Registration
To use, our bidding adapter requires proper setup, including an existing publisher account, as well as approval from AdUp Technology. For more information visit [www.adup-tech.com](https://www.adup-tech.com/en) or contact [info@adup-tech.com](mailto:info@adup-tech.com).
-
### Bid params
{: .table .table-bordered .table-striped }
diff --git a/dev-docs/bidders/advangelists.md b/dev-docs/bidders/advangelists.md
index 79fdaca310..36436023c4 100644
--- a/dev-docs/bidders/advangelists.md
+++ b/dev-docs/bidders/advangelists.md
@@ -5,17 +5,19 @@ description: Prebid Advangelists Bidder Adapter
pbjs: true
pbs: true
biddercode: advangelists
+sidebarType: 1
---
-### Note:
-For more information about [Advangelists https://advangelists.com], please contact lokesh@advangelists.com
+### Note
+
+For more information about [Advangelists https://advangelists.com], please contact
### Bid Params
{: .table .table-bordered .table-striped }
| Name | Scope | Description | Example | Type |
|------------------|----------|------------------|------------------------------------------|-------------------|
-| `placement ` | required | | `'263'` | `string` |
+| `placement` | required | | `'263'` | `string` |
| `pubid` | required | | `'0cf8d6d643e13d86a5b6374148a4afac'` | `string` |
| `mimes` | optional | video only | `['video/mp4', 'application/javascript']`| `array of strings`|
| `playbackmethod` | optional | video only | `[2,6]` | `array of numbers`|
diff --git a/dev-docs/bidders/advenue.md b/dev-docs/bidders/advenue.md
deleted file mode 100644
index 7e4559328c..0000000000
--- a/dev-docs/bidders/advenue.md
+++ /dev/null
@@ -1,17 +0,0 @@
----
-layout: bidder
-title: Advenue
-description: Prebid Advenue Bidder Adaptor
-pbjs: true
-biddercode: advenue
-enable_download: false
-pbjs_version_notes: not ported to 5.x
----
-
-### Bid Params
-
-{: .table .table-bordered .table-striped }
-| Name | Scope | Description | Example |type|
-| :----------- | :--------- | :------------ | :----------------- |:---|
-| `placementId` | required | Placement Id will be generated on Advenue Platform. | 0 |integer|
-| `traffic` | optional | Type traffic | 'banner' |string|
diff --git a/dev-docs/bidders/advertly.md b/dev-docs/bidders/advertly.md
deleted file mode 100644
index 016a67b285..0000000000
--- a/dev-docs/bidders/advertly.md
+++ /dev/null
@@ -1,17 +0,0 @@
----
-layout: bidder
-title: advertly
-description: Prebid ADVERTLY Bidder Adapter
-pbjs: true
-biddercode: advertly
-enable_download: false
-pbjs_version_notes: not ported to 5.x
----
-
-
-### Bid Params
-
-{: .table .table-bordered .table-striped }
-| Name | Scope | Description | Example | Type |
-|-----------------|----------|----------------------------------------------------------------------------------------|-----------------------------|-----------|
-| `publisherId` | required | Publisher id associated with Advertly | `1` | `integer` |
diff --git a/dev-docs/bidders/adview.md b/dev-docs/bidders/adview.md
index a69b21ce4b..221dd52c0c 100644
--- a/dev-docs/bidders/adview.md
+++ b/dev-docs/bidders/adview.md
@@ -3,27 +3,29 @@ layout: bidder
title: AdView
description: Prebid AdView Bidder Adapter
biddercode: AdView
-gdpr_supported: true
+tcfeu_supported: true
gvl_id: 1022
usp_supported: true
coppa_supported: true
+gpp_sids: tcfeu, usca
schain_supported: true
dchain_supported: false
-userId:
media_types: banner, video, native
-safeframes_ok: true
+floors_supported: true
bidder_supports_deals: true
pbjs: false
pbs: true
pbs_app_supported: true
prebid_member: false
+safeframes_ok: true
+multiformat_supported: will-bid-on-any
+ortb_blocking_supported: true
+sidebarType: 1
---
-### Note:
-
-Currently adapter doesnât support multi impression and can not perform impression splitting, so only the first impression will be delivered.
+### Note
-The Example Bidding adapter requires setup before beginning. Please contact us at partner@adview.com
+The Example Bidding adapter requires setup before beginning. Please contact us at
### Bid Params
@@ -31,4 +33,4 @@ The Example Bidding adapter requires setup before beginning. Please contact us a
| Name | Scope | Description | Example | Type |
|---------------|----------|--------------|-----------|----------|
| `placementId` | required | Placement ID | `'posid00001'` | `string` |
-| `accountId` | required | Account ID | `'accountid01'` | `string` |
\ No newline at end of file
+| `accountId` | required | Account ID | `'accountid01'` | `string` |
diff --git a/dev-docs/bidders/adxcg.md b/dev-docs/bidders/adxcg.md
index f7803f0ac5..1bf59ed8af 100644
--- a/dev-docs/bidders/adxcg.md
+++ b/dev-docs/bidders/adxcg.md
@@ -8,13 +8,16 @@ pbs: true
pbs_app_supported: true
biddercode: adxcg
media_types: native, video
-gdpr_supported: true
+tcfeu_supported: false
userIds: id5Id, identityLink, pubCommonId, unifiedId
+sidebarType: 1
---
### Note
-Prebid-server activation requires setup and approval before beginning. Please reach out to your account manager or info@adxcg.com for more details.
+{% include dev-docs/pbjs-adapter-required-for-pbs.md %}
+
+Prebid-server activation requires setup and approval before beginning. Please reach out to your account manager or for more details.
### Bid Params
diff --git a/dev-docs/bidders/adyoulike.md b/dev-docs/bidders/adyoulike.md
index a8f6b5a454..156146f52e 100644
--- a/dev-docs/bidders/adyoulike.md
+++ b/dev-docs/bidders/adyoulike.md
@@ -6,20 +6,24 @@ pbjs: true
pbs: true
media_types: banner, video, native
biddercode: adyoulike
-gdpr_supported: true
+userIds: criteo, sharedId
+tcfeu_supported: true
+gvl_id: 259
usp_supported: true
floors_supported: true
+schain_supported: true
+sidebarType: 1
---
-### Note:
-The Adyoulike Header Bidding adaptor requires setup and approval from the Adyoulike team. Please reach out to your account manager or prebid@adyoulike.com for more information.
+### Note
+
+The Adyoulike Header Bidding adaptor requires setup and approval from the Adyoulike team. Please reach out to your account manager or for more information.
### Bid Params
{: .table .table-bordered .table-striped }
-| Name | Scope | Description | Example | Type |
+| Name | Scope | Description | Example | Type |
|-------------|----------|----------------------------------|--------------------------------------|----------|
| `placement` | required | The placement ID from Adyoulike. | `'194f787b85c829fb8822cdaf1ae64435'` | `string` |
-
Same 'placement' parameter can be used from either prebid JS or prebid server.
diff --git a/dev-docs/bidders/afp.md b/dev-docs/bidders/afp.md
index 07e3d197ea..3525385197 100644
--- a/dev-docs/bidders/afp.md
+++ b/dev-docs/bidders/afp.md
@@ -6,6 +6,7 @@ pbjs: true
media_types: banner, video
biddercode: afp
safeframes_ok: false
+sidebarType: 1
---
### Note
@@ -14,7 +15,6 @@ You can use this adapter to get a bid from AFP.
Please reach out to your AFP account team before using this plugin to get placeId.
The code below returns a demo ad.
-
### Bid Params
{: .table .table-bordered .table-striped }
@@ -23,178 +23,177 @@ The code below returns a demo ad.
| `placeId` | required | Place id. | '5af45ad34d506ee7acad0c26' | `string` |
| `placeType` | required | Place type. | 'In-image', 'In-image Max', 'In-content Banner', 'In-content Video', 'Out-content Video', 'In-content Stories', 'Action Scroller', 'Action Scroller Light', 'Just Banner' | `string` |
| `placeContainer` | required (if the frame is not safe) | The container of the place where the ad will be displayed. The css selector is specified as the value. | '#container' | `string` |
-| `imageUrl` | required (for 'In-image', 'In-image Max' placeType) | URL of the image on which the banner will be displayed. | 'https://creative.astraone.io/files/default_image-1-600x400.jpg' | `string` |
+| `imageUrl` | required (for 'In-image', 'In-image Max' placeType) | URL of the image on which the banner will be displayed. | '' | `string` |
| `imageWidth` | required (for 'In-image', 'In-image Max' placeType) | Image width. | 600 | `integer` |
| `imageHeight` | required (for 'In-image', 'In-image Max' placeType) | Image height. | 400 | `integer` |
-
### InImage Example page
-
```html
-
- Prebid.js In-image Example
-
-
+
+ Prebid.js In-image Example
+
+
In-image
-
-
-
-
+
+
+
+
Just Banner
```
+
### InImage Example page with GPT
```html
-
- Prebid.js In-image Example
-
-
-
+
+ Prebid.js In-image Example
+
+
+
In-image
-
-
-
-
-
-
+
+
+
+
+
+
diff --git a/dev-docs/bidders/aidem.md b/dev-docs/bidders/aidem.md
new file mode 100644
index 0000000000..ea8ba9b2ed
--- /dev/null
+++ b/dev-docs/bidders/aidem.md
@@ -0,0 +1,218 @@
+---
+layout: bidder
+title: AIDEM
+description: AIDEM Bidder Adapter
+biddercode: aidem
+tcfeu_supported: true
+gvl_id: 1218
+usp_supported: true
+coppa_supported: true
+schain_supported: false
+dchain_supported: false
+userId: none
+media_types: banner, video
+safeframes_ok: true
+deals_supported: true
+floors_supported: true
+fpd_supported: true
+pbjs: true
+pbs: true
+prebid_member: true
+ortb_blocking_supported: false
+sidebarType: 1
+---
+
+## Description
+
+This module connects publishers to AIDEM demand.
+
+This module is GDPR and CCPA compliant, and no 3rd party userIds are allowed.
+
+### Global Bid Params
+
+{: .table .table-bordered .table-striped }
+| Name | Scope | Description | Example | Type |
+|---------------|----------|---------------------|------------|----------|
+| `siteId` | required | Unique site ID | `'ABCDEF'` | `String` |
+| `publisherId` | required | Unique publisher ID | `'FEDCBA'` | `String` |
+| `placementId` | optional | Unique publisher tag ID | `'ABCDEF'` | `String` |
+| `rateLimit` | optional | Limit the volume sent to AIDEM. Must be between 0 and 1 | `0.6` | `Number` |
+
+#### Banner Bid Params
+
+{: .table .table-bordered .table-striped }
+| Name | Scope | Description | Example | Type |
+|------------|----------|--------------------------|---------------------------|---------|
+| `sizes` | required | List of the sizes wanted | `[[300, 250], [300,600]]` | `Array` |
+
+#### Video Bid Params
+
+{: .table .table-bordered .table-striped }
+| Name | Scope | Description | Example | Type |
+|---------------|----------|-----------------------------------------|-----------------|-----------|
+| `context` | required | One of instream, outstream, adpod | `'instream'` | `String` |
+| `playerSize` | required | Width and height of the player | `'[640, 480]'` | `Array` |
+| `maxduration` | required | Maximum video ad duration, in seconds | `30` | `Integer` |
+| `minduration` | required | Minimum video ad duration, in seconds | `5` | `Integer` |
+| `mimes` | required | List of the content MIME types supported by the player | `["video/mp4"]` | `Array` |
+| `protocols` | required | An array of supported video protocols. At least one supported protocol must be specified, where: `2` = VAST 2.0 `3` = VAST 3.0 `5` = VAST 2.0 wrapper `6` = VAST 3.0 wrapper | `2` | `Array` |
+
+#### Additional Config
+
+{: .table .table-bordered .table-striped }
+| Name | Scope | Description | Example | Type |
+|---------------------|----------|---------------------------------------------------------|---------|-----------|
+| `coppa` | optional | Child Online Privacy Protection Act | `true` | `Boolean` |
+| `consentManagement` | optional | [Consent Management Object](#consent-management-object) | `{}` | `Object` |
+
+#### Consent Management Object
+
+{: .table .table-bordered .table-striped }
+| Name | Scope | Description | Example | Type |
+|--------|----------|--------------------------------------------------------------------------------------------------|---------|----------|
+| `gdpr` | optional | GDPR Object see [Prebid.js doc](https://docs.prebid.org/dev-docs/modules/consentManagement.html) | `{}` | `Object` |
+| `usp` | optional | USP Object see [Prebid.js doc](https://docs.prebid.org/dev-docs/modules/consentManagementUsp.html) | `{}` | `Object` |
+
+#### Example Banner ad unit
+
+```javascript
+var adUnits = [{
+ code: 'banner-prebid-test-site',
+ mediaTypes: {
+ banner: {
+ sizes: [
+ [300, 600],
+ [300, 250]
+ ]
+ }
+ },
+ bids: [{
+ bidder: 'aidem',
+ params: {
+ siteId: 'prebid-test-siteId',
+ publisherId: 'prebid-test-publisherId',
+ },
+ }]
+}];
+```
+
+#### Example Video ad unit
+
+```javascript
+var adUnits = [{
+ code: 'video-prebid-test-site',
+ mediaTypes: {
+ video: {
+ context: 'instream',
+ playerSize: [640, 480],
+ maxduration: 30,
+ minduration: 5,
+ mimes: ["video/mp4"],
+ protocols: 2
+ }
+ },
+ bids: [{
+ bidder: 'aidem',
+ params: {
+ siteId: 'prebid-test-siteId',
+ publisherId: 'prebid-test-publisherId',
+ },
+ }]
+}];
+```
+
+#### Example GDPR Consent Management
+
+```javascript
+var pbjs = pbjs || {};
+pbjs.que = pbjs.que || [];
+
+pbjs.que.push(function (){
+ pbjs.setConfig({
+ consentManagement: {
+ gdpr:{
+ cmpApi: 'iab'
+ }
+ }
+ });
+})
+```
+
+#### Example USP Consent Management
+
+```javascript
+var pbjs = pbjs || {};
+pbjs.que = pbjs.que || [];
+
+pbjs.que.push(function (){
+ pbjs.setConfig({
+ consentManagement: {
+ usp:{
+ cmpApi: 'static',
+ consentData:{
+ getUSPData:{
+ uspString: '1YYY'
+ }
+ }
+ }
+ }
+ });
+})
+```
+
+#### Setting First Party Data (FPD)
+
+```javascript
+var pbjs = pbjs || {};
+pbjs.que = pbjs.que || [];
+
+pbjs.que.push(function (){
+ pbjs.setConfig({
+ ortb2: {
+ site: {
+ cat: ['IAB2'],
+ sectioncat: ['IAB2-2'],
+ keywords: 'power tools, drills'
+ },
+ }
+ });
+})
+```
+
+### Supported Media Types
+
+{: .table .table-bordered .table-striped }
+| Type | Support |
+|--------|--------------------------------------------------------------------|
+| Banner | Support all [AIDEM Sizes](https://kb.aidem.com/ssp/lists/adsizes/) |
+| Video | Support all [AIDEM Sizes](https://kb.aidem.com/ssp/lists/adsizes/) |
+
+## Setup / Dev Guide
+
+```shell
+nvm use
+
+npm install
+
+gulp build --modules=aidemBidAdapter
+
+gulp serve --modules=aidemBidAdapter
+
+# Open a chrome browser with no ad blockers enabled, and paste in this URL. The `pbjs_debug=true` is needed if you want to enable `loggerInfo` output on the `console` tab of Chrome Developer Tools.
+http://localhost:9999/integrationExamples/gpt/hello_world.html?pbjs_debug=true
+```
+
+If you need to run the tests suite but do *not* want to have to build the full adapter and serve it, simply run:
+
+```shell
+gulp test --file "test/spec/modules/aidemBidAdapter_spec.js"
+```
+
+For video: gulp serve --modules=aidemBidAdapter,dfpAdServerVideo
+
+## FAQs
+
+#### How do I view AIDEM bid request?
+
+Navigate to a page where AIDEM is setup to bid. In the network tab,
+search for requests to `zero.aidemsrv.com/bid/request`.
diff --git a/dev-docs/bidders/aja.md b/dev-docs/bidders/aja.md
index 11233433ec..419d28e224 100644
--- a/dev-docs/bidders/aja.md
+++ b/dev-docs/bidders/aja.md
@@ -2,11 +2,23 @@
layout: bidder
title: AJA
description: Prebid AJA Bidder Adaptor
-userIds: criteo, unifiedId, imuid
pbjs: true
pbs: true
biddercode: aja
-media_types: video, native
+media_types: banner
+tcfeu_supported: false
+floors_supported: false
+schain_supported: true
+dchain_supported: false
+usp_supported: false
+gpp_supported: false
+coppa_supported: false
+fpd_supported: false
+multiformat_supported: false
+safeframes_ok: true
+deals_supported: false
+userIds: criteo, unifiedId, imuid
+sidebarType: 1
---
### Note
diff --git a/dev-docs/bidders/algorix.md b/dev-docs/bidders/algorix.md
index 1ac9335c56..705586e6c0 100644
--- a/dev-docs/bidders/algorix.md
+++ b/dev-docs/bidders/algorix.md
@@ -3,7 +3,7 @@ layout: bidder
title: AlgoriX
description: Prebid AlgoriX Bidder Adapter
biddercode: algorix
-gdpr_supported: false
+tcfeu_supported: true
gvl_id:
usp_supported: true
coppa_supported: true
@@ -13,11 +13,12 @@ pbjs: false
pbs: true
pbs_app_supported: true
prebid_member: true
+sidebarType: 1
---
-### Note:
+### Note
-AlgoriX adapter requires setup and approval from the AlgoriX team, even for existing in-app developers and publishers. Please reach out to your account team or email to prebid@algorix.co for more information.
+AlgoriX adapter requires setup and approval from the AlgoriX team, even for existing in-app developers and publishers. Please reach out to your account team or email to for more information.
### Bid Params
@@ -28,9 +29,10 @@ AlgoriX adapter requires setup and approval from the AlgoriX team, even for exis
| `token` | required | Token | `'028bca2d3b5c4f0ba155fa34864b0c4d'` | `string` |
| `placementId` | optional | Placement Id | `'123456'` | `string` |
| `appId` | optional | App Id | `'asdasdasd'` | `string` |
-| `region` | optional | Server Region | `'APAC' or 'USE'` | `string` |
+| `region` | optional | Server Region | `'APAC', 'USE', 'EUC'` | `string` |
Note:
+
* Prebid Server adapter only checks for and uses first imp bid params. All other imp bid params are ignored.
* placementId and appId will be generated on AlgoriX Platform.
-* region is optional param, which determine the AlgoriX server. APAC for SG endpoint, USE for US endpoint, Other for Global endpoint.
+* region is optional param, which determine the AlgoriX server. APAC for SG endpoint, USE for US endpoint, EUC for EU endpoint, Other for Global endpoint.
diff --git a/dev-docs/bidders/alkimi.md b/dev-docs/bidders/alkimi.md
new file mode 100644
index 0000000000..cd90e9a85b
--- /dev/null
+++ b/dev-docs/bidders/alkimi.md
@@ -0,0 +1,30 @@
+---
+layout: bidder
+title: Alkimi
+description: Prebid Alkimi Bidder Adapter
+biddercode: alkimi
+media_types: banner, video
+pbjs: true
+pbs: true
+schain_supported: true
+gvl_id: 1169
+tcfeu_supported: true
+usp_supported: true
+coppa_supported: true
+userIds: all
+floors_supported: true
+multiformat_supported: will-bid-on-any
+sidebarType: 1
+---
+
+
+
+### Bid Params
+
+{: .table .table-bordered .table-striped }
+| Name | Scope | Description | Example | Type |
+|-------------|----------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------|------------------------------------------|-----------|
+| `token` | required | The ID issued by Alkimi to the publisher | `'8a80d8e9-0cf9-4329-8486-6f5bbcd8a61a'` | `string` |
+| `bidFloor` | optional | Minimum bid for this impression expressed in CPM. | `0` | `float` |
+| `instl` | optional | Set to 1 if using interstitial (default: 0) | `1` | `integer` |
+| `exp` | optional | Advisory as to the number of seconds that may elapse between the auction and the actual impression. | `10` | `integer` |
diff --git a/dev-docs/bidders/ampliffy.md b/dev-docs/bidders/ampliffy.md
new file mode 100644
index 0000000000..653794a1fd
--- /dev/null
+++ b/dev-docs/bidders/ampliffy.md
@@ -0,0 +1,108 @@
+---
+layout: bidder
+title: Ampliffy
+description: Prebid Ampliffy Bidder Adapter
+biddercode: ampliffy
+pbjs: true
+tcfeu_supported: true
+gvl_id: 1258
+media_types: banner, video, native
+sidebarType: 1
+multiformat_supported: will-bid-on-one
+safeframes_ok: true
+---
+
+## Table of contents
+
+* [Table of contents](#table-of-contents)
+* [Introduction](#introduction)
+* [Supported media types](#supported-media-types)
+* [Modules to include in your build process](#modules-to-include-in-your-build-process)
+* [Bid request parameters](#bid-request-parameters)
+ * [Banner](#banner)
+ * [Video](#video)
+* [Examples](#examples)
+
+## Introduction
+
+Publishers can use Prebid.js to call Ampliffy through our client-side adapter: Prebid.js calls ampliffy directly from the browser using our client-side adapter. For configuration instructions, see the below on this page.
+
+### Example
+
+## Supported media types
+
+The following table lists the media types that Ampliffy supports.
+
+{: .table .table-bordered .table-striped }
+
+| Type |
+|--------|
+| banner |
+| video |
+| native |
+
+## Modules to include in your build process
+
+If you are building the JS binary on your own from source code, follow the instructions in [Prebid.js project README](https://github.com/prebid/Prebid.js/blob/master/README.md#build-optimization). You will need to include the `ampliffyBidAdapter`. To show video ads with Google Ad Manager, you need to include the `dfpAdServerVideo` module. We highly recommend adding the `gptPreAuction` module as well, which improves a DSP's ability to bid accurately on your supply. The following is an example build command that include these modules:
+`gulp build --modules=ampliffyBidAdapter,dfpAdServerVideo,gptPreAuction`
+
+If you are using a JSON file to specify modules, add `ampliffyBidAdapter` and `dfpAdServerVideo` to the modules array as follows:
+
+```javascript
+[
+ "ampliffyBidAdapter",
+ "dfpAdServerVideo",
+ "gptPreAuction"
+]
+```
+
+## Bid request parameters
+
+### Banner
+
+You must include these parameters at the bidder level.
+
+{: .table .table-bordered .table-striped }
+
+| Name | Scope | Type | Description |
+|---|----------|---|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
+| `placementId` | Required | String | An Ampliffy-specific identifier that is associated with this ad unit. This is similar to a placement ID or an ad unit ID that some other modules have. For example, `'3723'`, `'6482'`, `'3639'` |
+| `format` | Required | String | specify 'display' for this kind of inventory` |
+| `server` | Optional | String | An Ampliffy-specific identifier that is associated with this ad unit` |
+
+### Video
+
+You must include these parameters at the bidder level.
+
+{: .table .table-bordered .table-striped }
+
+| Name | Scope | Type | Description |
+|---|---|---|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
+| `placementId` | Required | String | An Ampliffy-specific identifier that is associated with this ad unit. It will be associated with the single size, if the size is provided. This is similar to a placement ID or an ad unit ID that some other modules have. For example, `'3723'`, `'6482'`, `'3639'` **Note:** You can re-use the existing `siteId` within the same flex position or video size, if the video adapts to the containing `` element. |
+| `format` | Required | String | specify 'video' for this kind of inventory` |
+| `server` | Optional | String | An Ampliffy-specific identifier that is associated with this ad unit` |
+
+## Examples
+
+**Video (instream):**
+
+```javascript
+var adUnits = [{
+ code: 'video1',
+ mediaTypes: {
+ video: {
+ playerSize: [[640, 480]],
+ context: 'instream'
+ },
+ },
+ bids: [{
+ bidder: 'ampliffy',
+ params: {
+ server: 'bidder.ampliffy.com',
+ placementId: '1213213/example/vrutal_/',
+ format: 'video'
+ }
+ }]
+}];
+
+```
diff --git a/dev-docs/bidders/amx-server.md b/dev-docs/bidders/amx-server.md
new file mode 100644
index 0000000000..31d232b5e9
--- /dev/null
+++ b/dev-docs/bidders/amx-server.md
@@ -0,0 +1,81 @@
+---
+layout: bidder
+title: AMX RTB
+description: AMX RTB Bid Adapter
+hide: true
+schain_supported: true
+tcfeu_supported: true
+usp_supported: true
+coppa_supported: true
+userIds: all
+biddercode: amx
+safeframes_ok: true
+media_types: banner, video, native
+pbjs: false
+pbs: true
+pbs_app_supported: true
+fpd_supported: true
+multiformat_supported: true
+ortb_blocking_supported: true
+gpp_supported: true
+gvl_id: 737
+sidebarType: 1
+---
+
+### Bid Params
+
+{: .table .table-bordered .table-striped }
+| Name | Scope | Description | Example | Type |
+|-------------|----------|-----------------------------------------------------------------|---------------------------------|----------|
+| `tagId` | required | Tag ID | `'cHJlYmlkLm9yZw'` | `string` |
+| `testMode` | optional | Activate 100% fill ads | `true` | `boolean`|
+| `adUnitId` | optional | Ad Unit ID used in reporting. Will default to `bid.adUnitCode` | `'sticky_banner'` | `string` |
+
+### Test Parameters
+
+To enable 100% fill test ads, you can use the following `params`:
+
+```javascript
+{
+ testMode: true,
+ tagId: "cHJlYmlkLm9yZw"
+}
+```
+
+This will produce a bid at $10 with a test creative.
+
+Note that the `tagId` is case-sensitive. Do not use `cHJlYmlkLm9yZw` in production environments: this ID is for testing only.
+
+### First Party Data
+
+From Prebid.js >= 4.30, publishers can use the `ortb2` configuration parameter to provide First Party Data. We accept all standard OpenRTB fields for both:
+
+- `ortb2.site`
+- `ortb2.user`
+
+Note that all fields are optional. For contextual data (e.g. categories), standard IAB taxonomies are supported. We do not support passing first party data via bid parameters.
+
+#### Example - Setting ortb2.site and ortb2.user fields
+
+```javascript
+pbjs.setBidderConfig({
+ bidders: ["amx"],
+ config: {
+ ortb2: {
+ site: {
+ keywords: "kw1,kw2",
+ cat: ["IAB2"],
+ sectioncat: ["IAB2-1"],
+ pagecat: ["IAB2-22"],
+ content: {
+ context: 5,
+ },
+ },
+ user: {
+ yob: 1981,
+ keywords: "kw3",
+ },
+ },
+ },
+});
+```
diff --git a/dev-docs/bidders/amx.md b/dev-docs/bidders/amx.md
index f8f3ff6574..b19d3bdce9 100644
--- a/dev-docs/bidders/amx.md
+++ b/dev-docs/bidders/amx.md
@@ -1,31 +1,48 @@
---
layout: bidder
title: AMX RTB
-description: AMX RTB Prebid Bid Adapter
+description: AMX RTB Bid Adapter
hide: true
schain_supported: true
-gdpr_supported: true
+tcfeu_supported: true
+floors_supported: true
usp_supported: true
coppa_supported: true
-userIds: britepoolId, criteo, id5Id, identityLink, liveIntentId, netId, parrableId, pubCommonId, unifiedId, amxId
+userIds: all
biddercode: amx
safeframes_ok: true
media_types: banner, video
pbjs: true
-pbs: true
-pbs_app_supported: true
+pbs: false
fpd_supported: true
+gpp_supported: true
+multiformat_supported: true
+ortb_blocking_supported: true
gvl_id: 737
+sidebarType: 1
---
### Bid Params
{: .table .table-bordered .table-striped }
-| Name | Scope | Description | Example | Type |
+| Name | Scope | Description | Example | Type |
|-------------|----------|-----------------------------------------------------------------|---------------------------------|----------|
-| `tagId` | required | Tag ID | `'cHJlYmlkLm9yZw'` | `string` |
-| `testMode` | optional | Activate 100% fill ads | `true` | `boolean`|
-| `adUnitId` | optional | Ad Unit ID used in reporting. Will default to `bid.adUnitCode` | `'sticky_banner'` | `string` |
+| `tagId` | required | Tag ID | `'cHJlYmlkLm9yZw'` | `string` |
+| `testMode` | optional | Activate 100% fill ads | `true` | `boolean`|
+| `adUnitId` | optional | Ad Unit ID used in reporting. Will default to `bid.adUnitCode` | `'sticky_banner'` | `string` |
+
+### Bidder Settings
+
+The AMX RTB bid adapter uses local storage. Please add `storageAllowed` in your bidder settings:
+
+```js
+// https://docs.prebid.org/dev-docs/publisher-api-reference/bidderSettings.html
+pbjs.bidderSettings = {
+ amx: {
+ storageAllowed: true,
+ },
+};
+```
### Test Parameters
@@ -41,3 +58,37 @@ To enable 100% fill test ads, you can use the following `params`:
This will produce a bid at $10 with a test creative.
Note that the `tagId` is case-sensitive. Do not use `cHJlYmlkLm9yZw` in production environments: this ID is for testing only.
+
+### First Party Data
+
+From Prebid.js >= 4.30, publishers can use the `ortb2` configuration parameter to provide First Party Data. We accept all standard OpenRTB fields for both:
+
+- `ortb2.site`
+- `ortb2.user`
+
+Note that all fields are optional. For contextual data (e.g. categories), standard IAB taxonomies are supported. We do not support passing first party data via bid parameters.
+
+#### Example - Setting ortb2.site and ortb2.user fields
+
+```javascript
+pbjs.setBidderConfig({
+ bidders: ["amx"],
+ config: {
+ ortb2: {
+ site: {
+ keywords: "kw1,kw2",
+ cat: ["IAB2"],
+ sectioncat: ["IAB2-1"],
+ pagecat: ["IAB2-22"],
+ content: {
+ context: 5,
+ },
+ },
+ user: {
+ yob: 1981,
+ keywords: "kw3",
+ },
+ },
+ },
+});
+```
diff --git a/dev-docs/bidders/andBeyondMedia.md b/dev-docs/bidders/andBeyondMedia.md
new file mode 100644
index 0000000000..edb9066190
--- /dev/null
+++ b/dev-docs/bidders/andBeyondMedia.md
@@ -0,0 +1,22 @@
+---
+layout: bidder
+title: AndBeyond.Media
+description: Prebid AndBeyond.Media Bidder Adapter
+biddercode: beyondmedia
+usp_supported: true
+tcfeu_supported: false
+coppa_supported: true
+schain_supported: true
+floors_supported: true
+media_types: banner, video, native
+pbjs: true
+pbs: true
+sidebarType: 1
+---
+
+### Prebid Bid Params
+
+{: .table .table-bordered .table-striped }
+| Name | Scope | Description | Example | Type |
+|---------------|----------|-----------------------|-----------|-----------|
+| `placementId` | required | Placement Id | `'0'` | `'string'` |
diff --git a/dev-docs/bidders/andbeyond.md b/dev-docs/bidders/andbeyond.md
deleted file mode 100644
index 66964793fc..0000000000
--- a/dev-docs/bidders/andbeyond.md
+++ /dev/null
@@ -1,25 +0,0 @@
----
-layout: bidder
-title: Andbeyond Media
-description: Andbeyond Media
-pbjs: true
-pbs: true
-biddercode: andbeyond
-media_types: banner, native, video
-gdpr_supported: true
-usp_supported: true
-schain_supported: true
-aliasCode : adkernel
----
-
-### Note:
-
-The andbeyond Bidding adaptor requires setup and approval before beginning. Please reach out to
for more details
-
-### Bid Params
-
-{: .table .table-bordered .table-striped }
-| Name | Scope | Description | Example | Type |
-|----------|----------|-----------------------|---------------------------|----------|
-| `host` | required | Our Host | `'cpm.andbeyond.media'` | `string` |
-| `zoneId` | required | Example RTB zone id | `'12345'` | `string` |
diff --git a/dev-docs/bidders/aniview.md b/dev-docs/bidders/aniview.md
index a51cc6f840..bf101762d3 100644
--- a/dev-docs/bidders/aniview.md
+++ b/dev-docs/bidders/aniview.md
@@ -5,15 +5,17 @@ description: Prebid ANIVIEW Bidder Adapter
pbjs: true
biddercode: aniview
media_types: banner, video
-gdpr_supported: true
+tcfeu_supported: true
usp_supported: true
schain_supported: true
safeframes_ok: true
gvl_id: 780
+sidebarType: 1
---
-### Note:
-For more information about [Aniview Ad Server](https://www.aniview.com/), please contact info@aniview.com.
+### Note
+
+For more information about [Aniview Ad Server](https://www.aniview.com/), please contact .
### Bid Params
@@ -24,8 +26,9 @@ For more information about [Aniview Ad Server](https://www.aniview.com/), please
| `AV_CHANNELID` | required | Channel id | `'5a5f17a728a06102d14c2718'` | `string` |
### Test Parameters
-```
-videoAdUnit = [
+
+```javascript
+const videoAdUnit = [
{
code: 'video1',
mediaTypes: {
diff --git a/dev-docs/bidders/anyclip.md b/dev-docs/bidders/anyclip.md
new file mode 100644
index 0000000000..e4ae4913cb
--- /dev/null
+++ b/dev-docs/bidders/anyclip.md
@@ -0,0 +1,61 @@
+---
+layout: bidder
+title: AnyClip
+description: AnyClip Bidder Adapter
+biddercode: anyclip
+tcfeu_supported: false
+usp_supported: true
+coppa_supported: true
+gpp_sids: usp
+schain_supported: true
+dchain_supported: false
+userId: pubProvidedId, unifiedId
+media_types: banner
+floors_supported: true
+fpd_supported: false
+pbjs: true
+pbs: false
+prebid_member: false
+multiformat_supported: will-not-bid
+ortb_blocking_supported: true
+privacy_sandbox: no
+safeframes_ok: true
+sidebarType: 1
+---
+
+### Note
+
+For more information about [AnyClip](https://www.anyclip.com), please contact [support@anyclip.com](support@anyclip.com).
+
+### Bid Params
+
+{: .table .table-bordered .table-striped }
+| Name | Scope | Description | Example | Type |
+|---------------|----------|-----------------------|--------------------------|-----------|
+| `publisherId` | required | Publisher ID | `'12345'` | `string` |
+| `supplyTagId` | required | Supply Tag ID | `'-mptNo0BycUG4oCDgGrU'` | `string` |
+| `floor` | optional | Floor Price | `0.5` | `float` |
+
+#### Sample Banner only Ad Unit
+
+```js
+var adUnits = [{
+ code: 'adunit1', // ad slot HTML element ID
+ mediaTypes: {
+ banner: {
+ sizes: [
+ [300, 250],
+ [728, 90]
+ ]
+ }
+ },
+ bids: [{
+ bidder: 'anyclip',
+ params: {
+ publisherId: '12345', // required, string
+ supplyTagId: '-mptNo0BycUG4oCDgGrU', // required, string
+ floor: 0.5 // optional, floor
+ }
+ }]
+}]
+```
diff --git a/dev-docs/bidders/aol.md b/dev-docs/bidders/aol.md
index 6e162546aa..bb5afc9aee 100644
--- a/dev-docs/bidders/aol.md
+++ b/dev-docs/bidders/aol.md
@@ -4,16 +4,23 @@ title: AOL
description: Prebid AOL Bidder Adaptor
pbjs: true
biddercode: aol
-gdpr_supported: true
+tcfeu_supported: false
usp_supported: true
gvl_id: 25
userIds: connectId
+sidebarType: 1
---
-### IMPORTANT NOTICE!
+### Disclosure
+
+This adapter may not handle user syncs for TCF2 or GPP correctly. The user sync consent querystring parameters are generated at the time of the bid request and might be stale at the time of the user sync. See
+
+### IMPORTANT NOTICE
+
**TL;DR**
-1. The `aol` adapter is scheduled to be depreciated.
-2. Our New `yahoossp` is available for early adoption.
+
+1. The `aol` adapter is scheduled to be deprecated.
+2. Our New `yahoossp` is available for adoption.
3. Please contact your Account Manager/Executive for migration details.
Dear Publishers & Partners,
@@ -24,7 +31,8 @@ FYI - The oneVideo adapter is scheduled for depreciation in the upcoming months.
Thanks in advance,
Yahoo SSP
-### Note:
+### Note
+
This adapter allows use of both ONE by AOL: Display and ONE by AOL: Mobile platforms. In order to differentiate these sources of demand in your ad server and reporting, you may use the optional `onedisplay` and `onemobile` adapter aliases instead.
### Bid Params
diff --git a/dev-docs/bidders/apacdex.md b/dev-docs/bidders/apacdex.md
index 9a29acd80c..cb9ad73772 100644
--- a/dev-docs/bidders/apacdex.md
+++ b/dev-docs/bidders/apacdex.md
@@ -5,25 +5,27 @@ description: Prebid APAC Digital Exchange Bidder Adapter
pbjs: true
biddercode: apacdex
media_types: banner, video
-gdpr_supported: true
+tcfeu_supported: false
schain_supported: true
usp_supported: true
userIds: all
floors_supported: true
pbs: true
pbs_app_supported: true
+sidebarType: 1
---
### Table of Contents
-- [Bid Params](#apacdex-bid-params)
-- [Geo Object](#apacdex-geo-object)
-- [Video Ad Unit](#apacdex-video-ad-unit)
-- [Sample Banner Ad Unit](#apacdex-sample-banner-ad-unit)
-- [Sample Video Ad Unit: Instream](#apacdex-sample-instream-ad-unit)
-- [Sample Video Ad Unit: Outstream](#apacdex-sample-outstream-ad-unit)
+- [Table of Contents](#table-of-contents)
+- [Bid Params](#bid-params)
+- [Geo Object](#geo-object)
+- [Video Ad Unit](#video-ad-unit)
+- [Sample Banner Ad Unit](#sample-banner-ad-unit)
+- [Sample Video Ad Unit: Instream](#sample-video-ad-unit-instream)
+- [Sample Video Ad Unit: Outstream](#sample-video-ad-unit-outstream)
-
+
### Bid Params
@@ -37,7 +39,7 @@ pbs_app_supported: true
(*) Please do not use `placementId` and `siteId` at the same time.
-
+
### Geo Object
@@ -52,7 +54,7 @@ If the publisher has GEO data of the user's device. Make it available through th
| `lastfix` | optional | Number of seconds since this geolocation fix was established. Note that devices may cache location data across multiple fetches. Ideally, this value should be from the time the actual fix was taken. | `30` | `integer` |
| `utcoffset` | optional | Local time as the number +/- of minutes from UTC. | `-420` | `integer` |
-
+
### Video Ad Unit
@@ -78,10 +80,11 @@ Publishers declare video inventory by passing the following parameters via media
Lists of values are in the [OpenRTB 2.5](https://www.iab.com/wp-content/uploads/2016/03/OpenRTB-API-Specification-Version-2-5-FINAL.pdf) documentation as referenced above.
-
+
### Sample Banner Ad Unit
-```
+
+```javascript
var adUnits = [
{
code: 'test-div',
@@ -103,10 +106,11 @@ var adUnits = [
];
```
-
+
### Sample Video Ad Unit: Instream
-```
+
+```javascript
var instreamAdUnit = {
code: 'test-div',
sizes: [[640, 480]],
@@ -137,13 +141,15 @@ var instreamAdUnit = {
]
};
```
-mediaTypes.video object reference to section 3.2.7 Object: Video in the OpenRTB 2.5 document
+
+`mediaTypes.video` object reference to section 3.2.7 Object: Video in the OpenRTB 2.5 document
You must review all video parameters to ensure validity for your player and DSPs
-
+
### Sample Video Ad Unit: Outstream
-```
+
+```javascript
var outstreamAdUnit = {
code: 'test-div',
sizes: [[410, 231]],
@@ -173,5 +179,6 @@ var outstreamAdUnit = {
]
};
```
-mediaTypes.video object reference to section 3.2.7 Object: Video in the OpenRTB 2.5 document
+
+`mediaTypes.video` object reference to section 3.2.7 Object: Video in the OpenRTB 2.5 document
You must review all video parameters to ensure validity for your player and DSPs
diff --git a/dev-docs/bidders/apester.md b/dev-docs/bidders/apester.md
new file mode 100644
index 0000000000..068a7cb90c
--- /dev/null
+++ b/dev-docs/bidders/apester.md
@@ -0,0 +1,36 @@
+---
+layout: bidder
+title: Apester
+description: Apester Bidder Adaptor
+biddercode: apester
+pbjs: true
+pbs: false
+media_types: video, banner
+userIds: all
+fpd_supported: false
+tcfeu_supported: false
+usp_supported: true
+coppa_supported: true
+schain_supported: true
+prebid_member: false
+ortb_blocking_supported: true
+multiformat_supported: will-bid-on-one
+floors_supported: false
+aliasCode: limelightDigital
+sidebarType: 1
+---
+
+### Bid Params
+
+{: .table .table-bordered .table-striped }
+
+| Name | Scope | Description | Example | Type |
+|:-------------|:---------|:--------------------------------------------------|:-------------------------|:----------|
+| `host` | required | Ad network's RTB host | `'apester-exchange.com'` | `string` |
+| `adUnitId` | required | Ad Unit Id will be generated on Apester Platform. | `42` | `integer` |
+| `adUnitType` | required | Type of Ad Unit (`'video'`, `'banner'`) | `'banner'` | `string` |
+| `custom1` | optional | Custom targeting field 1 | `'custom1'` | `string` |
+| `custom2` | optional | Custom targeting field 2 | `'custom2'` | `string` |
+| `custom3` | optional | Custom targeting field 3 | `'custom3'` | `string` |
+| `custom4` | optional | Custom targeting field 4 | `'custom4'` | `string` |
+| `custom5` | optional | Custom targeting field 5 | `'custom5'` | `string` |
diff --git a/dev-docs/bidders/appaloosa.md b/dev-docs/bidders/appaloosa.md
deleted file mode 100644
index 442af1934e..0000000000
--- a/dev-docs/bidders/appaloosa.md
+++ /dev/null
@@ -1,123 +0,0 @@
----
-layout: bidder
-title: Appaloosa
-description: Prebid Appaloosa Bidder Adapter
-biddercode: appaloosa
-aliasCode: adtelligent
-media_types: video,banner
-gdpr_supported: true
-userIds: britepoolId, criteo, id5Id, identityLink, liveIntentId, netId, parrableId, pubCommonId, unifiedId
-schain_supported: true
-coppa_supported: true
-usp_supported: true
-safeframes_ok: true
-prebid_member: true
-pbjs: true
-pbs: false
----
-
-### Bid params
-
-{: .table .table-bordered .table-striped }
-| Name | Scope | Description | Example | Type |
-|-------|----------|---------------------------------|----------|-----------|
-| `aid` | required | The source ID from Appaloosa. | `529814` | `integer` |
-
-### Description
-Get access to multiple demand partners across Appaloosa AdExchange and maximize your yield with Appaloosa header bidding adapter.
-
-Appaloosa header bidding adapter connects with Appaloosa demand sources in order to fetch bids.
-This adapter provides a solution for accessing Video demand and display demand.
-
-Appaloosa now supports adpod.
-
-### Test Parameters
-```
- var adUnits = [
-
- // Video instream adUnit
- {
- code: 'test-div',
- mediaTypes: {
- video: {
- context: 'instream',
- playerSize: [640, 480]
- }
- },
- bids: [{
- bidder: 'appaloosa',
- params: {
- aid: 472386
- }
- }]
- },
-
- // Video outstream adUnit
- {
- code: 'test-div',
- mediaTypes: {
- video: {
- context: 'outstream',
- playerSize: [640, 480]
- }
- },
- bids: [{
- bidder: 'appaloosa',
- params: {
- aid: 472386
- }
- }]
- },
-
- // Video ADPOD adUnit
- {
- code: 'test-div',
- sizes: [[640, 480]],
- mediaTypes: {
- video: {
- context: 'adpod',
- playerSize: [640, 480]
- }
- },
- bids: [{
- bidder: 'appaloosa',
- params: {
- aid: 472386
- }
- }]
- },
-
- // Banner adUnit
- {
- code: 'test-div',
- mediaTypes:{
- banner:{
- sizes: [[300, 250]]
- }
- }
- bids: [{
- bidder: 'appaloosa',
- params: {
- aid: 529814
- }
- }]
- }
- ];
-```
-
-### Additional Configuration
-
-It is possible to configure requests to be split into chunks so as to have fewer bid requests in a single http request
-(default value is 10).
-
-```
- pbjs.setBidderConfig({
- config: {
- appaloosa: {
- chunkSize: 1 // makes 1 http request per 1 adunit configured
- }
- }
- });
-```
-
-Appaloosa is an aliased bidder for Adtelligent
diff --git a/dev-docs/bidders/appier.md b/dev-docs/bidders/appier.md
index b34eb02690..c442883abf 100644
--- a/dev-docs/bidders/appier.md
+++ b/dev-docs/bidders/appier.md
@@ -5,10 +5,12 @@ description: Prebid Appier Bidder Adapter
biddercode: appier
pbjs: true
media_types: banner
-gdpr_supported: true
+gvl_id: 728
+tcfeu_supported: true
+sidebarType: 1
---
-
+
#### Bid Params
@@ -17,14 +19,13 @@ gdpr_supported: true
|-----------|----------|---------------------------|------------|----------|
| `hzid` | required | The zone ID from Appier. | `"WhM5WIOp"` | `string` |
-
-
+
#### Custom Settings (Optional)
Set the "farm" to use region-specific server
-```
+```javascript
pbjs.que.push(function() {
// use the bid server in Taiwan (country code: tw)
pbjs.setConfig({
@@ -37,7 +38,7 @@ pbjs.que.push(function() {
Explicitly override the bid server used for bidding
-```
+```javascript
pbjs.que.push(function() {
pbjs.setConfig({
appier: {
diff --git a/dev-docs/bidders/appierBR.md b/dev-docs/bidders/appierBR.md
index acb2e213f2..789c7b1bb0 100644
--- a/dev-docs/bidders/appierBR.md
+++ b/dev-docs/bidders/appierBR.md
@@ -6,7 +6,9 @@ biddercode: appierBR
aliasCode: appier
pbjs: true
media_types: banner
-gdpr_supported: true
+gvl_id: 728 (appier)
+tcfeu_supported: true
+sidebarType: 1
---
#### Bid Params
@@ -20,7 +22,7 @@ gdpr_supported: true
Set the "farm" to use region-specific server
-```
+```javascript
pbjs.que.push(function() {
// use the bid server in Taiwan (country code: tw)
pbjs.setConfig({
@@ -33,7 +35,7 @@ pbjs.que.push(function() {
Explicitly override the bid server used for bidding
-```
+```javascript
pbjs.que.push(function() {
pbjs.setConfig({
appier: {
@@ -42,4 +44,5 @@ pbjs.que.push(function() {
});
});
```
+
AppierBR is an aliased bidder for Appier
diff --git a/dev-docs/bidders/appierExt.md b/dev-docs/bidders/appierExt.md
index b016d3098b..8814803c60 100644
--- a/dev-docs/bidders/appierExt.md
+++ b/dev-docs/bidders/appierExt.md
@@ -6,7 +6,9 @@ biddercode: appierExt
aliasCode: appier
pbjs: true
media_types: banner
-gdpr_supported: true
+gvl_id: 728 (appier)
+tcfeu_supported: true
+sidebarType: 1
---
#### Bid Params
@@ -20,7 +22,7 @@ gdpr_supported: true
Set the "farm" to use region-specific server
-```
+```javascript
pbjs.que.push(function() {
// use the bid server in Taiwan (country code: tw)
pbjs.setConfig({
@@ -33,7 +35,7 @@ pbjs.que.push(function() {
Explicitly override the bid server used for bidding
-```
+```javascript
pbjs.que.push(function() {
pbjs.setConfig({
appier: {
@@ -42,4 +44,5 @@ pbjs.que.push(function() {
});
});
```
+
AppierExt is an aliased bidder for Appier
diff --git a/dev-docs/bidders/appierGM.md b/dev-docs/bidders/appierGM.md
index e7d87e0de4..0fc448edc9 100644
--- a/dev-docs/bidders/appierGM.md
+++ b/dev-docs/bidders/appierGM.md
@@ -6,7 +6,9 @@ biddercode: appierGM
aliasCode: appier
pbjs: true
media_types: banner
-gdpr_supported: true
+gvl_id: 728 (appier)
+tcfeu_supported: true
+sidebarType: 1
---
#### Bid Params
@@ -20,7 +22,7 @@ gdpr_supported: true
Set the "farm" to use region-specific server
-```
+```javascript
pbjs.que.push(function() {
// use the bid server in Taiwan (country code: tw)
pbjs.setConfig({
@@ -33,7 +35,7 @@ pbjs.que.push(function() {
Explicitly override the bid server used for bidding
-```
+```javascript
pbjs.que.push(function() {
pbjs.setConfig({
appier: {
@@ -42,4 +44,5 @@ pbjs.que.push(function() {
});
});
```
+
AppierGM is an aliased bidder for Appier
diff --git a/dev-docs/bidders/applogy.md b/dev-docs/bidders/applogy.md
index 6042fb4da2..c78d97e67c 100644
--- a/dev-docs/bidders/applogy.md
+++ b/dev-docs/bidders/applogy.md
@@ -4,6 +4,7 @@ title: Applogy
pbs: true
media_types: banner
biddercode: applogy
+sidebarType: 1
---
### Bid Params
diff --git a/dev-docs/bidders/appnexus.md b/dev-docs/bidders/appnexus.md
index 676b133110..a8dff8af88 100644
--- a/dev-docs/bidders/appnexus.md
+++ b/dev-docs/bidders/appnexus.md
@@ -4,32 +4,40 @@ title: AppNexus
description: Prebid AppNexus Bidder Adaptor
biddercode: appnexus
media_types: banner, video, native
-gdpr_supported: true
+tcfeu_supported: true
+dsa_supported: true
prebid_member: true
-userIds: criteo, unifiedId, netId, identityLink, flocId, uid2
+userIds: all (with commercial activation)
schain_supported: true
coppa_supported: true
usp_supported: true
+gpp_supported: true
floors_supported: true
-fpd_supported: true
+fpd_supported: false
pbjs: true
+pbjs_version_notes: please avoid using v7.15 and v7.16
pbs: true
gvl_id: 32
+sidebarType: 1
---
### Table of Contents
-- [Bid Params](#appnexus-bid-params)
-- [Video Object](#appnexus-video-object)
-- [User Object](#appnexus-user-object)
-- [App Object](#appnexus-app-object)
-- [Custom Targeting keys](#custom-targeting-keys)
-- [Auction Level Keywords](#appnexus-auction-keywords)
-- [Passing Keys Without Values](#appnexus-no-value)
-- [User Sync in AMP](#appnexus-amp)
-- [Debug Auction](#appnexus-debug-auction)
-
-
+- [Table of Contents](#table-of-contents)
+ - [Bid Params](#bid-params)
+ - [Video Object](#video-object)
+ - [User Object](#user-object)
+ - [App Object](#app-object)
+ - [Custom Targeting keys](#custom-targeting-keys)
+ - [Auction Level Keywords](#auction-level-keywords)
+ - [Passing Keys Without Values](#passing-keys-without-values)
+ - [First Party Data](#first-party-data)
+ - [User Sync in AMP](#user-sync-in-amp)
+ - [Mobile App Display Manager Version](#mobile-app-display-manager-version)
+ - [Debug Auction](#debug-auction)
+ - [Prebid Server Test Request](#prebid-server-test-request)
+
+
{: .alert.alert-danger :}
All AppNexus (Xandr) placements included in a single call to `requestBids` must belong to the same parent Publisher. If placements from two different publishers are included in the call, the AppNexus bidder will not return any demand for those placements.
@@ -37,31 +45,35 @@ All AppNexus (Xandr) placements included in a single call to `requestBids` must
#### Bid Params
+{: .alert.alert-danger :}
+Starting with Prebid.js version 7.36.0, an update was made to the `appnexusBidAdapter.js` file to support bid params in a lower-case underscore format (eg `invCode` to `inv_code`) similar to how the params are formatted for the Prebid Server AppNexus bidder. This change was implemented to streamline publisher setups for both projects instead of maintaining separate versions of the same params depending on what setup is used.
+To avoid breaking changes, the old 'camelCase' format is still currently supported for all AppNexus bid params in the `appnexusBidAdapter.js` file. If you are using an older version of Prebid.js, you will need to continue to use the older 'camelCase' format as appropriate.
+The table below will reflect both formats, though it's recommended to use the lower-case underscore format where possible going forward (assuming you're using a compatible version of Prebid.js).
+
{: .table .table-bordered .table-striped }
| Name | Scope | Description | Example | Type |
|---------------------|----------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|-------------------------------------------------------|------------------|
-| `placement_id` (PBS) or `placementID` (PBJS) | required | The placement ID from AppNexus. You may identify a placement using the `invCode` and `member` instead of a placement ID. This parameter can be either a `string` or `integer` for Prebid.js, however `integer` is preferred. Legacy code can retain the `string` value. **Prebid Server requires an integer value.** | `234234` | `integer` |
+| `placement_id` (PBS+PBJS) or `placementId` (PBJS) | required | The placement ID from AppNexus. You may identify a placement using the `invCode` and `member` instead of a placement ID. This parameter can be either a `string` or `integer` for Prebid.js, however `integer` is preferred. Legacy code can retain the `string` value. **Prebid Server requires an integer value.** | `234234` | `integer` |
| `member` | optional | The member ID from AppNexus. Must be used with `invCode`. | `'12345'` | `string` |
-| `invCode` | optional | The inventory code from AppNexus. Must be used with `member`. | `'abc123'` | `string` |
-| `publisherId` | optional | The publisher ID from AppNexus. It is used by the AppNexus end point to identify the publisher when placement id is not provided and `invCode` goes wrong. The `publisherId` parameter can be either a `string` or `integer` for Prebid.js, however `integer` is preferred. | `12345` | `integer` |
-| `frameworks` | optional | Array of integers listing API frameworks for Banner supported by the publisher. | `integer` |
+| `invCode` or `inv_code` | optional | The inventory code from AppNexus. Must be used with `member`. | `'abc123'` | `string` |
+| `publisherId` or `publisher_id` | optional | The publisher ID from AppNexus. It is used by the AppNexus end point to identify the publisher when placement id is not provided and `invCode` goes wrong. The `publisherId` parameter can be either a `string` or `integer` for Prebid.js, however `integer` is preferred. | `12345` | `integer` |
+| `frameworks` | optional | Array of integers listing API frameworks for Banner supported by the publisher. | `[1,2]` | `array of integer` |
| `user` | optional | Object that specifies information about an external user. See [User Object](#appnexus-user-object) for details. | `user: { age: 25, gender: 0, dnt: true}` | `object` |
-| `allowSmallerSizes` | optional | If `true`, ads smaller than the values in your ad unit's `sizes` array will be allowed to serve. Defaults to `false`. | `true` | `boolean` |
-| `usePaymentRule` (PBJS) or `use_pmt_rule` (PBS) | optional | If `true`, Appnexus will return net price to Prebid.js after publisher payment rules have been applied. | `true` | `boolean` |
-| `keywords` | optional | A set of key-value pairs applied to all ad slots on the page. Mapped to [buy-side segment targeting](https://monetize.xandr.com/docs/segment-targeting) (login required). Values can be empty. See [Passing Keys Without Values](#appnexus-no-value) below for examples. If you want to pass keywords for all adUnits, see [Auction Level Keywords](#appnexus-auction-keywords) for an example. Note that to use keyword with the Prebid Server adapter, that feature must be enabled for your account by an AppNexus account manager. | `keywords: { genre: ['rock', 'pop'] }` | `object` |
+| `allowSmallerSizes` or `allow_smaller_sizes` | optional | If `true`, ads smaller than the values in your ad unit's `sizes` array will be allowed to serve. Defaults to `false`. | `true` | `boolean` |
+| `usePaymentRule` (PBJS) or `use_pmt_rule` (PBS+PBJS) | optional | If `true`, Appnexus will return net price to Prebid.js after publisher payment rules have been applied. | `true` | `boolean` |
+| `keywords` | optional | A set of key-value pairs applied to all ad slots on the page. Mapped to [buy-side segment targeting](https://monetize.xandr.com/docs/segment-targeting) (login required). A maximum of 100 key/value pairs can be defined at the page level. Each tag can have up to 100 additional key/value pairs defined. Values can be empty. See [Passing Keys Without Values](#appnexus-no-value) below for examples. If you want to pass keywords for all adUnits, see [Auction Level Keywords](#appnexus-auction-keywords) for an example. Note that to use keyword with the Prebid Server adapter, that feature must be enabled for your account by an AppNexus account manager. | `keywords: { genre: ['rock', 'pop'] }` | `object` |
| `video` | optional | Object containing video targeting parameters. See [Video Object](#appnexus-video-object) for details. | `video: { playback_method: ['auto_play_sound_off'] }` | `object` |
| `app` | optional | Object containing mobile app parameters. See the [App Object](#appnexus-app-object) for details. | `app : { id: 'app-id'}` | `object` |
| `reserve` | optional | Sets a floor price for the bid that is returned. If floors have been configured in the AppNexus Console, those settings will override what is configured here unless 'Reserve Price Override' is checked. See [Xandr docs](https://docs.xandr.com/bundle/monetize_monetize-standard/page/topics/create-a-floor-rule.html) | `0.90` | `float` |
| `position` | optional | Identify the placement as above or below the fold. Allowed values: Unknown: `unknown`; Above the fold: `above`; Below the fold: `below` | `'above'` | `string` |
-| `trafficSourceCode` | optional | Specifies the third-party source of this impression. | `'my_traffic_source'` | `string` |
-| `supplyType` | optional | Indicates the type of supply for this placement. Possible values are `web`, `mobile_web`, `mobile_app` | `'web'` | `string` |
-| `supplyType` | optional | Indicates the type of supply for this placement. Possible values are `web`, `mobile_web`, `mobile_app` | `'web'` | `string` |
-| `pubClick` | optional | Specifies a publisher-supplied URL for third-party click tracking. This is just a placeholder into which the publisher can insert their own click tracker. This parameter should be used for an unencoded tracker. This parameter is expected to be the last parameter in the URL. Please note that the click tracker placed in this parameter will only fire if the creative winning the auction is using AppNexus click tracking properly. | `'http://click.adserver.com/'` | `string` |
-| `extInvCode` | optional | Specifies predefined value passed on the query string that can be used in reporting. The value must be entered into the system before it is logged. | `'10039'` | `string` |
-| `externalImpId` | optional | Specifies the unique identifier of an externally generated auction. | `'bacbab02626452b097f6030b3c89ac05'` | `string` |
+| `trafficSourceCode` or `traffic_source_code` | optional | Specifies the third-party source of this impression. | `'my_traffic_source'` | `string` |
+| `supplyType` or `supply_type` | optional | Indicates the type of supply for this placement. Possible values are `web`, `mobile_web`, `mobile_app` | `'web'` | `string` |
+| `pubClick` or `pub_click` | optional | Specifies a publisher-supplied URL for third-party click tracking. This is just a placeholder into which the publisher can insert their own click tracker. This parameter should be used for an unencoded tracker. This parameter is expected to be the last parameter in the URL. Please note that the click tracker placed in this parameter will only fire if the creative winning the auction is using AppNexus click tracking properly. | `'http://click.adserver.com/'` | `string` |
+| `extInvCode` or `ext_inv_code` | optional | Specifies predefined value passed on the query string that can be used in reporting. The value must be entered into the system before it is logged. | `'10039'` | `string` |
+| `externalImpId` or `external_imp_id` | optional | Specifies the unique identifier of an externally generated auction. | `'bacbab02626452b097f6030b3c89ac05'` | `string` |
| `generate_ad_pod_id` | optional | Signal to AppNexus to split impressions by ad pod and add unique ad pod id to each request. Specific to long form video endpoint only. Supported by Prebid Server, not Prebid JS. | `true` | `boolean` |
-
+
#### Video Object
@@ -76,8 +88,7 @@ All AppNexus (Xandr) placements included in a single call to `requestBids` must
| `playback_method` | A string that sets the playback method supported by the publisher. Allowed values: `"auto_play_sound_on"`; `"auto_play_sound_off"`; `"click_to_play"`; `"mouse_over"`; `"auto_play_sound_unknown"`. | `string` |
| `frameworks` | Array of integers listing API frameworks supported by the publisher. Allowed values: None: `0`; VPAID 1.0: `1`; VPAID 2.0: `2`; MRAID 1.0: `3`; MRAID 2.0: `4`; ORMMA: `5`; OMID 1.0 `6`. | `Array` |
-
-
+
#### User Object
@@ -85,14 +96,13 @@ All AppNexus (Xandr) placements included in a single call to `requestBids` must
| Name | Description | Example | Type |
|-------------------|---------------------------------------------------------------------------------------------------------------------------------|--------------------------------------------------------------------------|------------------|
| `age` | The age of the user. | `35` | `integer` |
-| `externalUid` | Specifies a string that corresponds to an external user ID for this user. | `'1234567890abcdefg'` | `string` |
+| `externalUid` or `external_uid` | Specifies a string that corresponds to an external user ID for this user. | `'1234567890abcdefg'` | `string` |
| `segments` | Specifies the segments to which the user belongs. | `[1, 2]` | `Array` |
| `gender` | Specifies the gender of the user. Allowed values: Unknown: `0`; Male: `1`; Female: `2` | `1` | `integer` |
| `dnt` | Do not track flag. Indicates if tracking cookies should be disabled for this auction | `true` | `boolean` |
| `language` | Two-letter ANSI code for this user's language. | `EN` | `string` |
-
-
+
#### App Object
@@ -105,13 +115,13 @@ AppNexus supports using prebid within a mobile app's webview. If you are interes
| `device_id` | Object that contains the advertising identifiers of the user (`idfa`, `aaid`, `md5udid`, `sha1udid`, or `windowsadid`). | `{ aaid: "38400000-8cf0-11bd-b23e-10b96e40000d" }` | `object` |
| `geo` | Object that contains the latitude (`lat`) and longitude (`lng`) of the user. | `{ lat: 40.0964439, lng: -75.3009142 }` | `object` |
-
+
#### Custom Targeting keys
AppNexus returns custom keys that can be sent to the adserver through bidderSettings: buyerMemberId, dealPriority, and dealCode. The following snippet demonstrates how to add these custom keys as key-value pairs.
-```
+```javascript
pbjs.bidderSettings = {
appnexus: {
adserverTargeting: [
@@ -137,14 +147,15 @@ pbjs.bidderSettings = {
}
```
-
+
#### Auction Level Keywords
It's possible to pass a set of keywords for the whole request, rather than a particular adUnit. Though they would apply to all adUnits (which include the appnexus bidder) in an auction, these keywords can work together with the bidder level keywords (if for example you want to have specific targeting for a particular adUnit).
Below is an example of how to define these auction level keywords for the appnexus bidder:
-```
+
+```javascript
pbjs.setConfig({
appnexusAuctionKeywords: {
genre: ['classical', 'jazz'],
@@ -155,14 +166,13 @@ pbjs.setConfig({
Like in the bidder.params.keywords, the values here can be empty. Please see the section immediately below for more details.
-
+
#### Passing Keys Without Values
It's possible to use the `keywords` parameter to define keys that do not have any associated values. Keys with empty values can be created in Prebid.js and can also be sent through Prebid Server to AppNexus. The following are examples of sending keys with empty values:
-
-```
+```javascript
keywords: {
myKeyword: '',
myOtherKeyword: ['']
@@ -173,20 +183,30 @@ The preceding example passes the key `myKeyword` with an empty value. The key `m
You can define keys with values and without values in the same `keywords` definition. In this next example, we've defined the key `color` with an array of values: `red`, `blue`, and `green`. We've followed that with the key `otherKeyword` with an empty value array.
-```
+```javascript
keywords: {
color: ['red', 'blue', 'green'],
otherKeyword: ['']
}
```
-
+
+
+#### First Party Data
+
+Publishers should use the `ortb2` method of setting [First Party Data](https://docs.prebid.org/features/firstPartyData.html).
+
+At this time however, the `appnexus` bidder fully reads the First Party Data when using the Prebid Server and Prebid Server Premium endpoints. The client-side version of the `appnexus` bidder has partial support to read all the various keywords parameters from the First Party Data fields. There is also some special support with the segment fields but only from known sources which are specifically configured. All other First Party Data fields are not read at this time.
+
+PBS/PSP supports all first party data fields: site, user, segments, and imp-level first party data.
+
+
#### User Sync in AMP
If you are syncing user id's with Prebid Server and are using AppNexus' managed service, see [AMP Implementation Guide cookie-sync instructions](/dev-docs/show-prebid-ads-on-amp-pages.html#user-sync) for details.
-
+
#### Mobile App Display Manager Version
@@ -204,9 +224,9 @@ Enabling the AppNexus Debug Auction feature should only be done for diagnosing t
To understand what is happening behind the scenes during an auction, you can enable a debug auction by adding an `apn_prebid_debug` cookie with a JSON string. For example:
-{% highlight js %}
+```javascript
{ "enabled": true, "dongle": "QWERTY", "debug_timeout": 1000, "member_id": 958 }
-{% endhighlight %}
+```
To view the results of the debug auction, add the `pbjs_debug=true` query string parameter and open your browser's developer console.
@@ -224,22 +244,22 @@ The following test parameters can be used to verify that Prebid Server is workin
server-side Appnexus adapter. This example includes an `imp` object with an Appnexus test placement ID and sizes
that would match with the test creative.
-```
- "imp": [{
- "id": "some-impression-id",
- "banner": {
- "format": [{
- "w": 600,
- "h": 500
- }, {
- "w": 300,
- "h": 600
- }]
- },
- "ext": {
- "appnexus": {
- "placement_id": 13144370
- }
- }
- }]
+```json
+"imp": [{
+ "id": "some-impression-id",
+ "banner": {
+ "format": [{
+ "w": 600,
+ "h": 500
+ }, {
+ "w": 300,
+ "h": 600
+ }]
+ },
+ "ext": {
+ "appnexus": {
+ "placement_id": 13144370
+ }
+ }
+}]
```
diff --git a/dev-docs/bidders/appstock.md b/dev-docs/bidders/appstock.md
new file mode 100644
index 0000000000..5c3601f48e
--- /dev/null
+++ b/dev-docs/bidders/appstock.md
@@ -0,0 +1,34 @@
+---
+layout: bidder
+title: Appstock
+description: Prebid Appstock Bidder Adaptor
+biddercode: appstock
+pbjs: false
+pbs: true
+media_types: banner, video, audio, native
+userIds: all
+fpd_supported: false
+tcfeu_supported: false
+usp_supported: true
+coppa_supported: true
+schain_supported: true
+prebid_member: false
+ortb_blocking_supported: true
+multiformat_supported: will-bid-on-one
+floors_supported: false
+aliasCode: limelightDigital
+sidebarType: 1
+---
+
+### Note
+
+The Appstock Bidding adapter requires setup before beginning. Please contact us at
+
+### Bid Params
+
+{: .table .table-bordered .table-striped }
+
+| Name | Scope | Description | Example | Type |
+|:--------------|:---------|:----------------------|:------------------|:----------|
+| `host` | required | Ad network's RTB host | `'pre.vr-tb.com'` | `string` |
+| `publisherId` | required | Publisher ID | `12345` | `integer` |
diff --git a/dev-docs/bidders/appush.md b/dev-docs/bidders/appush.md
new file mode 100644
index 0000000000..94bb59ced3
--- /dev/null
+++ b/dev-docs/bidders/appush.md
@@ -0,0 +1,24 @@
+---
+layout: bidder
+title: Appush
+description: Prebid Appush Bidder Adapter
+biddercode: appush
+media_types: banner, video, native
+pbjs: true
+pbs: true
+gvl_id: 879
+safeframes_ok: true
+floors_supported: true
+fpd_supported: false
+multiformat_supported: will-not-bid
+ortb_blocking_supported: partial
+sidebarType: 1
+---
+
+### Prebid Params
+
+{: .table .table-bordered .table-striped }
+| Name | Scope | Description | Example | Type |
+|---------------|----------|-----------------------|-----------|-----------|
+| `placementId` | optional | Placement Id | `'0'` | `'string'` |
+| `endpointId` | optional | Endpoint Id | `'0'` | `'string'` |
diff --git a/dev-docs/bidders/apstream.md b/dev-docs/bidders/apstream.md
index ce01e7f18d..a0463382c8 100644
--- a/dev-docs/bidders/apstream.md
+++ b/dev-docs/bidders/apstream.md
@@ -5,10 +5,15 @@ description: AP Stream Bidder Adapter
biddercode: apstream
pbjs: true
media_types: banner
-gdpr_supported: true
+tcfeu_supported: false
gvl_id: 394
+sidebarType: 1
---
+### Disclosure
+
+Note: This bidder passes consent strings but not the gdprApplies flag to its backend. This may result in some incorrect TCF2 processing, such as when the consent string is not yet available but the publisher has decided GDPR always applies. See
+
### Bid Params
{: .table .table-bordered .table-striped }
diff --git a/dev-docs/bidders/arteebee.md b/dev-docs/bidders/arteebee.md
index a37182738a..658187ee56 100644
--- a/dev-docs/bidders/arteebee.md
+++ b/dev-docs/bidders/arteebee.md
@@ -4,8 +4,9 @@ title: Arteebee
description: Prebid Arteebee Bidder Adaptor
pbjs: true
biddercode: arteebee
-gdpr_supported: true
+tcfeu_supported: false
coppa_supported: true
+sidebarType: 1
---
### Bid Params
diff --git a/dev-docs/bidders/aseal.md b/dev-docs/bidders/aseal.md
index 604623a724..76d476693a 100644
--- a/dev-docs/bidders/aseal.md
+++ b/dev-docs/bidders/aseal.md
@@ -5,6 +5,7 @@ description: Prebid Aseal Bidder Adapter
pbjs: true
biddercode: aseal
media_types: banner
+sidebarType: 1
---
### BidParams
@@ -14,7 +15,7 @@ media_types: banner
|-----------------|----------|---------------------------------|------------------------------------------|--------------------|
| `placeUid` | required | The Place UID from Aotter | `'f4a74f73-9a74-4a87-91c9-545c6316c23d'` | `string` |
-# Configuration
+### Configuration
Following configuration is required:
@@ -26,7 +27,7 @@ pbjs.setConfig({
});
```
-# Ad Unit Example
+### Ad Unit Example
```js
var adUnits = [
diff --git a/dev-docs/bidders/aso.md b/dev-docs/bidders/aso.md
index 8e4fae6934..3f87d72d84 100644
--- a/dev-docs/bidders/aso.md
+++ b/dev-docs/bidders/aso.md
@@ -3,25 +3,32 @@ layout: bidder
title: Adserver.Online
description: Prebid Adserver.Online Bidder Adapter
biddercode: aso
-gdpr_supported: true
+tcfeu_supported: false
usp_supported: true
-media_types: video
+media_types: video, native
safeframes_ok: true
-deals_supported: false
pbjs: true
-pbs: false
+pbs: true
+pbs_app_supported: true
floors_supported: true
+schain_supported: true
+fpd_supported: true
+ortb_blocking_supported: true
+multiformat_supported: will-bid-on-one
+userIds: all
+sidebarType: 1
---
-### Note:
+### Note
-For more information about [Adserver.Online](https://adserver.online), please contact support@adsrv.org.
+For more information about [Adserver.Online](https://adserver.online), please contact .
### Bid Params
{: .table .table-bordered .table-striped }
-| Name | Scope | Description | Example | Type |
-|---------------|----------|-----------------------|-----------|-----------|
-| `zone` | required | Zone ID | `73815` | `integer` |
+| Name | Scope | Description | Example | Type |
+|---------------|----------|-------------------------|--------------------------|-----------|
+| `zone` | required | Zone ID | `73815` | `Integer` |
+| `server` | optional | Custom bidder endpoint | `https://endpoint.url` | `String` |
### Test Parameters
@@ -50,7 +57,6 @@ Note that the Adserver.Online adapter expects a client-side Prebid Cache to be e
```js
pbjs.setConfig({
- usePrebidCache: true,
cache: {
url: 'https://prebid.adnxs.com/pbc/v1/cache'
}
diff --git a/dev-docs/bidders/astraone.md b/dev-docs/bidders/astraone.md
index 4db8f5dc7f..e0950adc4b 100644
--- a/dev-docs/bidders/astraone.md
+++ b/dev-docs/bidders/astraone.md
@@ -5,7 +5,8 @@ description: Prebid AstraOne Bidder Adapter
pbjs: true
media_types: banner
biddercode: astraone
-gdpr_supported: true
+tcfeu_supported: false
+sidebarType: 1
---
### Note
@@ -14,28 +15,25 @@ You can use this adapter to get a bid from AstraOne.
Please reach out to your AstraOne account team before using this plugin to get placeId.
The code below returns a demo ad.
-
### Bid Params
{: .table .table-bordered .table-striped }
| Name | Scope | Description | Example | Type |
|---------------------|---------------------|-------------------------------------------------------------------|-------------------------------------------------------------------------------|----------|
| `placeId` | required | The place id. | '5af45ad34d506ee7acad0c26' | `string` |
-| `imageUrl` | required | URL of the image on which the banner will be displayed. | 'https://creative.astraone.io/files/default_image-1-600x400.jpg' | `string` |
+| `imageUrl` | required | URL of the image on which the banner will be displayed. | `'https://creative.astraone.io/files/default_image-1-600x400.jpg'` | `string` |
| `placement` | required | Adunit placement, possible values: inImage | 'inImage' | `string` |
-
### InImage Example page
-
```html
-
- Prebid.js Banner Example
-
-
-
+
+ Prebid.js Banner Example
+
+
+
+
- Prebid.js InImage Banner Test
+ Prebid.js InImage Banner Test
-
-
+
+
-
-
-
-
+
+
+
+
```
diff --git a/dev-docs/bidders/atomx.md b/dev-docs/bidders/atomx.md
deleted file mode 100644
index ddca88bbbc..0000000000
--- a/dev-docs/bidders/atomx.md
+++ /dev/null
@@ -1,16 +0,0 @@
----
-layout: bidder
-title: Atomx
-description: Prebid Atomx Bidder Adaptor
-pbjs: true
-biddercode: atomx
-enable_download: false
-pbjs_version_notes: not ported to 5.x
----
-
-### Bid Params
-
-{: .table .table-bordered .table-striped }
-| Name | Scope | Description | Example | Type |
-|------|----------|--------------------|---------|-----------|
-| `id` | required | Atomx placement ID | `1234` | `integer` |
diff --git a/dev-docs/bidders/audienceNetwork.md b/dev-docs/bidders/audienceNetwork.md
index 2eab49eb69..b383836360 100644
--- a/dev-docs/bidders/audienceNetwork.md
+++ b/dev-docs/bidders/audienceNetwork.md
@@ -5,6 +5,7 @@ description: Prebid Audience Network Bidder Adaptor
pbs: true
biddercode: audienceNetwork
media_types: native, video
+sidebarType: 1
---
### Registration
diff --git a/dev-docs/bidders/audiencemedia.md b/dev-docs/bidders/audiencemedia.md
index 67c3b6a83b..c81575e8ee 100644
--- a/dev-docs/bidders/audiencemedia.md
+++ b/dev-docs/bidders/audiencemedia.md
@@ -2,11 +2,25 @@
layout: bidder
title: Audience Media
description: Prebid Audience Media Bidder Adaptor
-pbjs: true
-media_types: banner, video
-gdpr_supported: true
biddercode: audiencemedia
-aliasCode : adkernel
+pbjs: true
+pbs: false
+media_types: banner, native, video
+gvl_id: 14 (adkernel)
+tcfeu_supported: true
+usp_supported: true
+coppa_supported: true
+gpp_supported: true
+pbs_app_supported: true
+schain_supported: true
+userIds: all
+fpd_supported: true
+prebid_member: false
+ortb_blocking_supported: true
+multiformat_supported: will-bid-on-one
+floors_supported: true
+aliasCode: adkernel
+sidebarType: 1
---
### Bid Params
@@ -15,4 +29,4 @@ aliasCode : adkernel
| Name | Scope | Description | Example | Type |
|----------|----------|-----------------------|---------------------------|----------|
| `host` | required | Ad network's RTB host | `'cpm.audience.media'` | `string` |
-| `zoneId` | required | Zone ID | `'76156'` | `string` |
+| `zoneId` | required | Zone ID | `76156` | `integer` |
diff --git a/dev-docs/bidders/audiencerun.md b/dev-docs/bidders/audiencerun.md
index d582380046..4e74836c77 100644
--- a/dev-docs/bidders/audiencerun.md
+++ b/dev-docs/bidders/audiencerun.md
@@ -5,34 +5,46 @@ description: Prebid AudienceRun Bidder Adaptor
pbjs: true
biddercode: audiencerun
media_types: banner
-gdpr_supported: true
+gvl_id: 944
+tcfeu_supported: true
+usp_supported: true
+schain_supported: true
+safeframes_ok: false
+prebid_member: false
+userIds: all
+floors_supported: true
+sidebarType: 1
---
### Bid Params
{: .table .table-bordered .table-striped }
-| Name | Scope | Description | Example | Type |
-|---------------|----------|-------------|---------|----------|
-| `zoneId` | required | | | `string` |
+| Name | Scope | Description | Example | Type |
+| ---------- | -------- | --------------------------------------------------------------------------- | -------------- | -------- |
+| `zoneId` | required | The zone id provided by AudienceRun | `'xtov2mgij0'` | `string` |
+| `bidfloor` | optional | The bid floor for the zone id provided by AudienceRun in USD (default: 0.0) | `0.5` | `float` |
-### Description
+### Registration
-Module that connects to AudienceRun demand sources.
+The AudienceRun Header Bidding adaptor requires setup and approval from the AudienceRun team. Please reach out to our team on for more details.
-Use `audiencerun` as bidder.
+### Example
-`zoneId` is required and must be 10 alphanumeric characters.
+Use `audiencerun` as bidder. Note that `zoneId` is required and must be 10 alphanumeric characters.
-### AdUnits configuration example
-```
- var adUnits = [{
- code: 'test-div',
- sizes: [[300, 600]],
- bids: [{
- bidder: 'audiencerun',
- params: {
- zoneId: 'xtov2mgij0'
- }
- }]
- }];
+```js
+var adUnits = [
+ {
+ code: "test-div",
+ sizes: [[300, 600]],
+ bids: [
+ {
+ bidder: "audiencerun",
+ params: {
+ zoneId: "xtov2mgij0",
+ },
+ },
+ ],
+ },
+];
```
diff --git a/dev-docs/bidders/automatad.md b/dev-docs/bidders/automatad.md
index e7f7a9c860..d5038a7776 100644
--- a/dev-docs/bidders/automatad.md
+++ b/dev-docs/bidders/automatad.md
@@ -4,15 +4,25 @@ title: Automatad OpenRTB Bid Adapter
description: Automatad OpenRTB Bid Adapter
biddercode: automatad
pbjs: true
+pbs: true
media_types: banner
fpd_supported: false
+sidebarType: 1
---
-#### Bid Params
+#### Prebid.js Bid Params
{: .table .table-bordered .table-striped }
| Name | Scope | Description | Example | Type |
|-----------|----------|---------------------------|------------|----------|
| `siteId` | required | The site ID from automatad. | `"12adf45c"` | `string` |
-| `placementId` | required | The placement ID from automatad. | `"a34gh6d"` | `string` |
+| `placementId` | optional | The placement ID from automatad. | `"a34gh6d"` | `string` |
+
+### Prebid-Server Bid Params
+
+{: .table .table-bordered .table-striped }
+| Name | Scope | Description | Example | Type |
+|---------------|----------|-------------|---------|----------|
+| `position` | optional | Position field from automatad | `22390678` | `string` |
+| `placementId` | optional | The placement ID from automatad. | `"a34gh6d"` | `string` |
diff --git a/dev-docs/bidders/avantisvideo.md b/dev-docs/bidders/avantisvideo.md
index bdc5ae4dd9..6ce3a41fdb 100644
--- a/dev-docs/bidders/avantisvideo.md
+++ b/dev-docs/bidders/avantisvideo.md
@@ -6,14 +6,17 @@ pbjs: true
biddercode: avantisvideo
aliasCode: aniview
media_types: banner, video
-gdpr_supported: true
+gvl_id: 780 (aniview)
+tcfeu_supported: true
usp_supported: true
schain_supported: true
safeframes_ok: true
+sidebarType: 1
---
-### Note:
-For more information about [Avantis Video](https://www.avantisvideo.com/), please contact contact@avantisvideo.com.
+### Note
+
+For more information about [Avantis Video](https://www.avantisvideo.com/), please contact .
### Bid Params
@@ -24,9 +27,9 @@ For more information about [Avantis Video](https://www.avantisvideo.com/), pleas
| `AV_CHANNELID` | required | Channel id | `'5a5f17a728a06102d14c2718'` | `string` |
### Test Parameters
-```
-videoAdUnit = [
-{
+
+```javascript
+const videoAdUnit = [{
code: 'video1',
mediaTypes: {
video: {
diff --git a/dev-docs/bidders/avct.md b/dev-docs/bidders/avct.md
index c3bff8e441..41d0ae0141 100644
--- a/dev-docs/bidders/avct.md
+++ b/dev-docs/bidders/avct.md
@@ -6,15 +6,16 @@ pbjs: true
pbs: true
biddercode: avct
aliasCode: avocet
-gdpr_supported: true
+tcfeu_supported: false
media_types: banner, video
schain_supported: true
usp_supported: true
+sidebarType: 1
---
### Registration
-Please contact Avocet at info@avocet.io if you would like to get started selling inventory via the Avocet platform.
+Please contact Avocet at if you would like to get started selling inventory via the Avocet platform.
### Bid Params
diff --git a/dev-docs/bidders/axis.md b/dev-docs/bidders/axis.md
new file mode 100644
index 0000000000..7ada3260f2
--- /dev/null
+++ b/dev-docs/bidders/axis.md
@@ -0,0 +1,33 @@
+---
+layout: bidder
+title: Axis
+description: Prebid Axis Bidder Adapter
+biddercode: axis
+media_types: banner, video, native
+pbjs: true
+pbs: true
+safeframes_ok: true
+fpd_supported: false
+multiformat_supported: will-not-bid
+ortb_blocking_supported: partial
+usp_supported: true
+tcfeu_supported: true
+coppa_supported: true
+schain_supported: true
+floors_supported: true
+gvl_id: 1197
+sidebarType: 1
+---
+
+### Overview
+
+For more information, visit the [axis-marketplace website](https://platform.axis-marketplace.com)
+
+### Bid Params
+
+{: .table .table-bordered .table-striped }
+| Name | Scope | Description | Example | Type |
+|---------------|----------|--------------------|------------|------------|
+| `integration` | required | Integration | `'000000'` | `'string'` |
+| `token` | required | Token | `'000000'` | `'string'` |
+| `iabCat` | optional | (Prebid.js only) Array of IAB content categories that describe the content producer | `['IAB1-1', 'IAB3-1', 'IAB4-3']` | `Array(string)` |
diff --git a/dev-docs/bidders/axonix.md b/dev-docs/bidders/axonix.md
index 84ffe5dcd6..9d9c16f6a5 100644
--- a/dev-docs/bidders/axonix.md
+++ b/dev-docs/bidders/axonix.md
@@ -7,16 +7,19 @@ media_types: banner, video
pbjs: true
pbs: true
gvl_id: 678
+sidebarType: 1
---
-### Prebid Server Note:
-The Axonix Bidding adapter requires setup before beginning. Please contact us at support.axonix@emodoinc.com.
+### Prebid Server Note
+
+The Axonix Bidding adapter requires setup before beginning. Please contact us at .
### Bid Params
-| Name | Scope | Description | Example |
-| :------------ | :------- | :---------------------------------------------- | :------------------------------------- |
-| `supplyId` | required | Supply UUID | `'2c426f78-bb18-4a16-abf4-62c6cd0ee8de'` |
-| `region` | optional | Cloud region | `'us-east-1'` |
-| `endpoint` | optional | Supply custom endpoint | `'https://open-rtb.axonix.com/custom'` |
-| `instl` | optional | Set to 1 if using interstitial (default: 0) | `1` |
+{: .table .table-bordered .table-striped }
+| Name | Scope | Description | Example | Type |
+|------------|-------|----------------------------------------------|-------------------------------------|------|
+| `supplyId` | required | Supply UUID | `'2c426f78-bb18-4a16-abf4-62c6cd0ee8de'` | string |
+| `region` | optional | Cloud region | `'us-east-1'` | string |
+| `endpoint` | optional | Supply custom endpoint | `'https://open-rtb.axonix.com/custom'` | string |
+| `instl` | optional | Set to 1 if using interstitial (default: 0) | `1` | integer |
diff --git a/dev-docs/bidders/bcm.md b/dev-docs/bidders/bcm.md
index 18b02bcafd..1f1de2e6b9 100644
--- a/dev-docs/bidders/bcm.md
+++ b/dev-docs/bidders/bcm.md
@@ -2,19 +2,30 @@
layout: bidder
title: BCM
description: BCM Bid Adapter
-pbjs: true
biddercode: bcm
+pbjs: true
+pbs: false
media_types: banner, native, video
-gdpr_supported: true
+gvl_id: 14 (adkernel)
+tcfeu_supported: true
usp_supported: true
+coppa_supported: true
+gpp_supported: true
+pbs_app_supported: true
schain_supported: true
-aliasCode : adkernel
+userIds: all
+fpd_supported: true
+prebid_member: false
+ortb_blocking_supported: true
+multiformat_supported: will-bid-on-one
+floors_supported: true
+aliasCode: adkernel
+sidebarType: 1
---
-### Note:
-
-The BCM adapter requires approval and setup. Please reach out to contact@bcm.ltd or visit us at bcm.ltd for more details.
+### Note
+The BCM adapter requires approval and setup. Please reach out to or visit us at bcm.ltd for more details.
### Bid Params
@@ -22,4 +33,4 @@ The BCM adapter requires approval and setup. Please reach out to contact@bcm.ltd
| Name | Scope | Description | Example | Type |
|----------|----------|-----------------------|---------------------------|----------|
| `host` | required | Our Host - Do Not Change | `'serve.datacygnal.io'` | `string` |
-| `zoneId` | required | Example RTB zone id | `'12345'` | `string` |
+| `zoneId` | required | Example RTB zone id | `12345` | `integer` |
diff --git a/dev-docs/bidders/bcmint.md b/dev-docs/bidders/bcmint.md
new file mode 100644
index 0000000000..2fd3001dac
--- /dev/null
+++ b/dev-docs/bidders/bcmint.md
@@ -0,0 +1,44 @@
+---
+layout: bidder
+title: BCM International
+description: BCM International Bid Adapter
+biddercode: bcmint
+tcfeu_supported: false
+usp_supported: true
+media_types: video, native
+safeframes_ok: true
+pbjs: true
+pbs: true
+pbs_app_supported: true
+floors_supported: true
+schain_supported: true
+fpd_supported: true
+ortb_blocking_supported: true
+multiformat_supported: will-bid-on-one
+userIds: all
+sidebarType: 1
+aliasCode: aso
+---
+### Note
+
+The BCM International adapter requires approval and setup. Please reach out to or visit us at [bcm.ltd](https://bcm.ltd) for more details.
+
+### Bid Params
+
+{: .table .table-bordered .table-striped }
+| Name | Scope | Description | Example | Type |
+|---------------|----------|------------------|-----------------------------|-----------|
+| `server` | required | Server endpoint | `https://srv.datacygnal.io` | `String` |
+| `zone` | required | Zone ID | `73815` | `Integer` |
+
+#### Video Caching
+
+Note that the BCM International adapter expects a client-side Prebid Cache to be enabled for video bidding.
+
+```js
+pbjs.setConfig({
+ cache: {
+ url: 'https://prebid.adnxs.com/pbc/v1/cache'
+ }
+});
+```
diff --git a/dev-docs/bidders/beachfront.md b/dev-docs/bidders/beachfront.md
index 02885121b9..afd897fdfd 100644
--- a/dev-docs/bidders/beachfront.md
+++ b/dev-docs/bidders/beachfront.md
@@ -6,8 +6,9 @@ biddercode: beachfront
media_types: video
floors_supported: true
fpd_supported: true
-gdpr_supported: true
+tcfeu_supported: true
usp_supported: true
+gpp_supported: true
userIds: unifiedId, identityLink, uid2, hadronId
schain_supported: true
prebid_member: true
@@ -15,6 +16,7 @@ pbjs: true
pbs: true
pbs_app_supported: true
gvl_id: 335
+sidebarType: 1
---
### Registration
@@ -22,64 +24,93 @@ gvl_id: 335
To use the beachfront bidder you will need an appId (Exchange Id) from an exchange
account on [platform.beachfront.io](https://platform.beachfront.io).
-For further information, please contact adops@beachfront.com.
+For further information, please contact .
### Bid Params
{: .table .table-bordered .table-striped }
-| Name | Scope | Description | Example | Type |
+| Name | Scope | Description | Example | Type |
|------------|----------|---------------------------------------------------------------------------------------------|------------------------------------------|----------|
-| `appId` | required | Beachfront Exchange ID | `'11bc5dd5-7421-4dd8-c926-40fa653bec76'` | `string` |
-| `bidfloor` | required | Bid floor | `0.01` | `float` |
-| `video` | optional | Object with video parameters. See the [video section below](#beachfront-video) for details. | | `object` |
-| `banner` | optional | Object with banner parameters. See the [banner section below](#beachfront-banner) for details. | | `object` |
-| `player` | optional | Object with outstream player parameters. See the [player section below](#beachfront-player) for details. | | `object` |
+| `appId` | required | Beachfront Exchange ID | `'11bc5dd5-7421-4dd8-c926-40fa653bec76'` | `string` |
+| `bidfloor` | required | Bid floor. The floor price module will take priority over this value. | `0.01` | `float` |
+| `video` | optional | Object with video parameters. See the [video section below](#beachfront-video) for details. | | `object` |
+| `banner` | optional | Object with banner parameters. See the [banner section below](#beachfront-banner) for details. | | `object` |
+| `player` | optional | Object with outstream player parameters. See the [player section below](#beachfront-player) for details. | | `object` |
-### video params
+#### video params
{: .table .table-bordered .table-striped }
-| Name | Scope | Description | Example | Type |
+| Name | Scope | Description | Example | Type |
|------------------|----------|------------------------------------------------|-------------------------------------------|-----------------|
-| `appId` | optional | Beachfront Exchange ID for video bids. | `'11bc5dd5-7421-4dd8-c926-40fa653bec76'` | `string` |
-| `bidfloor` | optional | Bid floor for video bids. | `0.01` | `float` |
-| `tagid` | optional | Tag ID | `'placement-name'` | `string` |
-| `responseType` | optional | Video response type. `both`: VAST URL and VAST XML `nurl`: VAST URL only `adm`: VAST XML only | `'both'` | `string` |
-| `mimes` | optional | Array of strings listing supported MIME types. | `["video/mp4", "application/javascript"]` | `Array` |
+| `appId` | optional | Beachfront Exchange ID for video bids. | `'11bc5dd5-7421-4dd8-c926-40fa653bec76'` | `string` |
+| `bidfloor` | optional | Bid floor for video bids. | `0.01` | `float` |
+| `tagid` | optional | Tag ID | `'placement-name'` | `string` |
+| `responseType` | optional | Video response type. `both`: VAST URL and VAST XML `nurl`: VAST URL only `adm`: VAST XML only | `'both'` | `string` |
+| `mimes` | optional | Array of strings listing supported MIME types. | `["video/mp4", "application/javascript"]` | `Array` |
| `playbackmethod` | optional | Playback method supported by the publisher. `1`: Auto-play sound on `2`: Auto-play sound off `3`: Click-to-play `4`: Mouse-over | `1` | `integer` |
-| `maxduration` | optional | Maximum video ad duration in seconds. | `30` | `integer` |
-| `placement` | optional | Placement type for the impression. `1`: In-Stream `2`: In-Banner `3`: In-Article `4`: In-Feed `5`: Interstitial/Slider/Floating | `1` | `integer` |
-| `skip` | optional | Indicates if the player will allow the video to be skipped. | `1` | `integer` |
-| `skipmin` | optional | Videos of total duration greater than this number of seconds can be skippable. | `15` | `integer` |
-| `skipafter` | optional | Number of seconds a video must play before skipping is enabled. | `5` | `integer` |
+| `maxduration` | optional | Maximum video ad duration in seconds. | `30` | `integer` |
+| `placement` | optional | Placement type for the impression. `1`: In-Stream `2`: In-Banner `3`: In-Article `4`: In-Feed `5`: Interstitial/Slider/Floating | `1` | `integer` |
+| `skip` | optional | Indicates if the player will allow the video to be skipped. | `1` | `integer` |
+| `skipmin` | optional | Videos of total duration greater than this number of seconds can be skippable. | `15` | `integer` |
+| `skipafter` | optional | Number of seconds a video must play before skipping is enabled. | `5` | `integer` |
-### banner params
+#### banner params
{: .table .table-bordered .table-striped }
-| Name | Scope | Description | Example | Type |
+| Name | Scope | Description | Example | Type |
|------------|----------|-----------------------------------------|------------------------------------------|----------|
-| `appId` | optional | Beachfront Exchange ID for banner bids. | `'3b16770b-17af-4d22-daff-9606bdf2c9c3'` | `string` |
+| `appId` | optional | Beachfront Exchange ID for banner bids. | `'3b16770b-17af-4d22-daff-9606bdf2c9c3'` | `string` |
| `bidfloor` | optional | Bid floor for banner bids. | `0.01` | `float` |
-| `tagid` | optional | Tag ID | `'placement-name'` | `string` |
+| `tagid` | optional | Tag ID | `'placement-name'` | `string` |
-### player params
+#### player params
{: .table .table-bordered .table-striped }
-| Name | Scope | Description | Example | Type |
+| Name | Scope | Description | Example | Type |
|------------|----------|-----------------------------------------|------------------------------------------|----------|
| `progressColor` | optional | The color of the progress bar formatted as a CSS value. | `'#50A8FA'` | `string` |
| `adPosterColor` | optional | The color of the ad poster formatted as a CSS value. | `'#FFFFFF'` | `string` |
| `expandInView` | optional | Defines whether to expand the player when the ad slot is in view. Defaults to `false`. | `false` | `boolean` |
| `collapseOnComplete` | optional | Defines whether to collapse the player when ad playback has completed. Defaults to `true`. | `true` | `boolean` |
+### First Party Data
+
+Publishers should use the `ortb2` method of setting First Party Data. The following fields are supported:
+
+- ortb2.site.\*
+- ortb2.app.\*
+- ortb2.user.\*
+
+Example first party data that's available to all bidders and all adunits:
+
+```javascript
+pbjs.setConfig({
+ ortb2: {
+ site: {
+ keywords: "kw1,kw2",
+ content: {
+ title: "title1",
+ series: "series1"
+ }
+ },
+ user: {
+ keywords: "a,b",
+ gender: "M",
+ yob: 1984
+ }
+ }
+});
+```
+
### Prebid Server
-As seen in the JSON response from \{your PBS server\}\/bidder\/params [(example)](https://prebid.adnxs.com/pbs/v1/bidders/params), the beachfront
+As seen in the JSON response from \{your PBS server\}\/bidder\/params, the beachfront
bidder can take either an "appId" parameter, or an "appIds" parameter. If the request is for one media type, the appId parameter should be used
with the value of the Exchange Id on the Beachfront platform.
@@ -88,4 +119,4 @@ configured exchanges on the platform. The appIds parameter can be sent with just
If the request includes an appId configured for a video response, the videoResponseType parameter can be defined as "nurl", "adm" or "both".
These will apply to all video returned. If it is not defined, the response type will be a nurl. The definitions for "nurl" vs. "adm" are
-here: (https://github.com/mxmCherry/openrtb/blob/master/openrtb2/bid.go).
+here: ().
diff --git a/dev-docs/bidders/bedigitech.md b/dev-docs/bidders/bedigitech.md
new file mode 100644
index 0000000000..a1e7719567
--- /dev/null
+++ b/dev-docs/bidders/bedigitech.md
@@ -0,0 +1,23 @@
+---
+layout: bidder
+title: BEdigitech
+description: Prebid BEdigitech Bidder Adapter
+pbjs: true
+pbs: false
+biddercode: bedigitech
+tcfeu_supported: false
+usp_supported: false
+media_types: banner, native
+---
+
+### Note
+
+The BEdigitech Bidding adapter requires setup before beginning. Please contact us at
+Due to different integration API prebid.js and prebid-server api params are different
+
+### Prebid.JS Bid Params
+
+{: .table .table-bordered .table-striped }
+| Name | Scope | Description | Example | Type |
+|---------------|----------|-----------------------|-----------|-----------|
+| `placementId` | required | bedigitech placement | `'1234'` | `'string'`|
diff --git a/dev-docs/bidders/beintoo.md b/dev-docs/bidders/beintoo.md
index 613575934d..c5b20e07f3 100644
--- a/dev-docs/bidders/beintoo.md
+++ b/dev-docs/bidders/beintoo.md
@@ -7,9 +7,11 @@ pbs: true
biddercode: beintoo
aliasCode : appnexus
gvl_id: 618
+sidebarType: 1
---
### Bid Params
+
{: .table .table-bordered .table-striped }
| Name | Scope | Description | Example | Type |
|---------------|----------|-------------|---------|----------|
diff --git a/dev-docs/bidders/bematterfull b/dev-docs/bidders/bematterfull
new file mode 100644
index 0000000000..8119a83509
--- /dev/null
+++ b/dev-docs/bidders/bematterfull
@@ -0,0 +1,25 @@
+---
+layout: bidder
+title: Bematterfull
+description: Bematterfull Bidder Adapter
+biddercode: bematterfull
+media_types: banner, video, native
+coppa_supported: true
+tcfeu_supported: false
+usp_supported: true
+prebid_member: false
+pbjs: false
+pbs: true
+schain_supported: true
+floors_supported: true
+multiformat_supported: will-bid-on-any
+sidebarType: 1
+---
+
+### Prebid Server Bid Params
+
+{: .table .table-bordered .table-striped }
+| Name | Scope | Description | Example | Type |
+|-------------|----------|-------------------------------|------------------------------------|-----------|
+| `env` | required | Environment name | `mtflll-stage` | `string` |
+| `pid` | required | unique placement ID | `cs230510321b516f0eb9a10e5913d3b1` | `string` |
diff --git a/dev-docs/bidders/beop.md b/dev-docs/bidders/beop.md
index 3f7786d8b7..ef0799f8ac 100644
--- a/dev-docs/bidders/beop.md
+++ b/dev-docs/bidders/beop.md
@@ -3,14 +3,25 @@ layout: bidder
title: BeOp
description: BeOp Bidder Adaptor
pbjs: true
+pbs: false
+media_types: banner
biddercode: beop
-fpd_supported: true
+tcfeu_supported: true
+gvl_id: 666
+usp_supported: false
+floors_supported: true
+schain_supported: true
+sidebarType: 1
---
+### Disclosure
+
+The BeOp bidder adaptor needs an account id that you can find as a publisher, a reseller or a media group directly in your BeOp platform access. We also need to approve your account to be available for BeOp demand, so don't hesitate to reach your account manager or for more information.
+
### Bid Params
{: .table .table-bordered .table-striped }
-| Name | Scope | Description | Example | Type |
+| Name | Scope | Description | Example | Type |
|---------------|----------|-------------|---------|----------|
-| `accountId` or `networkId` | required | Your BeOp account ID | `'5a8af500c9e77c00017e4cad'` | `string` |
-| `currency` | optional | Your currency | `'EUR'` (default) or `'USD'` | `string` |
+| `accountId` or `networkId` | required | Your BeOp account ID | `'5a8af500c9e77c00017e4cad'` | `string` |
+| `currency` | optional | Your currency | `'EUR'` (default) or `'USD'` | `string` |
diff --git a/dev-docs/bidders/between.md b/dev-docs/bidders/between.md
index b37304b1b5..67caef4dfc 100644
--- a/dev-docs/bidders/between.md
+++ b/dev-docs/bidders/between.md
@@ -6,12 +6,13 @@ pbjs: true
pbs: true
biddercode: between
schain_supported: true
-gdpr_supported: true
+tcfeu_supported: true
pbs_app_supported: true
userIds: all
gvl_id: 724
usp_supported: true
safeframes_ok: false
+sidebarType: 1
---
### Prebid.js Bid Params
@@ -20,6 +21,7 @@ safeframes_ok: false
| Name | Scope | Description | Example | Type |
|---------------|----------|-------------|---------|----------|
| `s` | required | Section ID from Between SSP control panel | 999999 | `integer` |
+| `cur` | optional | 3-letter ISO 4217 code defining the currency of the bid (currently support USD and EUR), default is USD | `'USD'` | `string` |
### Prebid-Server Bid Params
@@ -28,4 +30,3 @@ safeframes_ok: false
|---------------|----------|-------------|---------|----------|
| `host` | required | Between SSP host url prefix. Defines data center where requests will be sent. Choose the closest one to the prebid-server you are using. Allowed values: `lbs-eu1.ads`, `lbs-ru1.ads`, `lbs-asia1.ads`, `lbs-us-east1.ads` | `'lbs-eu1.ads'` | `string` |
| `publisher_id` | required | Publisher ID from Between SSP control panel | `'123'` | `string` |
-
diff --git a/dev-docs/bidders/bidbuddy.md b/dev-docs/bidders/bidbuddy.md
new file mode 100644
index 0000000000..0cafaa8a77
--- /dev/null
+++ b/dev-docs/bidders/bidbuddy.md
@@ -0,0 +1,36 @@
+---
+layout: bidder
+title: Bidbuddy
+description: Bidbuddy Bidder Adaptor
+biddercode: bidbuddy
+pbjs: true
+pbs: false
+media_types: banner, native, video
+gvl_id: 14 (adkernel)
+tcfeu_supported: true
+gpp_supported: true
+usp_supported: true
+coppa_supported: true
+pbs_app_supported: true
+schain_supported: true
+userIds: all
+fpd_supported: true
+prebid_member: false
+ortb_blocking_supported: true
+multiformat_supported: will-bid-on-one
+floors_supported: true
+aliasCode: adkernel
+sidebarType: 1
+---
+
+### Note
+
+The Bidbuddy bidding adapter requires setup and approval before implementation. Please reach out to for more details.
+
+### Bid Params
+
+{: .table .table-bordered .table-striped }
+| Name | Scope | Description | Example | Type |
+|----------|----------|-----------------------|---------------------------|----------|
+| `host` | required | RTB host | `'cpm.bidbuddy.co.in'` | `string` |
+| `zoneId` | required | Zone Id | 30164 | `integer` |
diff --git a/dev-docs/bidders/biddo.md b/dev-docs/bidders/biddo.md
new file mode 100644
index 0000000000..b23d03ef6d
--- /dev/null
+++ b/dev-docs/bidders/biddo.md
@@ -0,0 +1,24 @@
+---
+layout: bidder
+title: Biddo
+description: Prebid Biddo Bidder Adapter
+pbjs: true
+biddercode: biddo
+safeframes_ok: false
+sidebarType: 1
+---
+
+### Note
+
+Here is what you need for Prebid integration with Biddo:
+
+1. Register with Biddo.
+2. Once registered and approved, you will receive a Zone ID.
+3. Use the Zone ID as parameters in params.
+
+### Bid Params
+
+{: .table .table-bordered .table-striped }
+| Name | Scope | Description | Example | Type |
+|---------------|----------|--------------|------------------------------------------------|----------|
+| `zoneId` | required | Zone ID | `379783` | `number` |
diff --git a/dev-docs/bidders/bidfluence.md b/dev-docs/bidders/bidfluence.md
deleted file mode 100644
index 4b90d41086..0000000000
--- a/dev-docs/bidders/bidfluence.md
+++ /dev/null
@@ -1,19 +0,0 @@
----
-layout: bidder
-title: Bidfluence
-description: Bidfluence Adaptor for Prebidjs
-pbjs: true
-biddercode: bidfluence
-gdpr_supported: true
-enable_download: false
-pbjs_version_notes: not ported to 5.x
----
-
-### Bid Params
-
-{: .table .table-bordered .table-striped }
-| Name | Scope | Description | Example | Type |
-|----------------|----------|--------------|------------------------------------------|----------|
-| `placementId` | required | Placement Id | `'1000'` | `string` |
-| `publisherId` | required | Publisher Id | `'1000'` | `string` |
-| `reservePrice` | optional | Floor price | `'0.5"` | `string` |
diff --git a/dev-docs/bidders/bidgency.md b/dev-docs/bidders/bidgency.md
new file mode 100644
index 0000000000..541557fc33
--- /dev/null
+++ b/dev-docs/bidders/bidgency.md
@@ -0,0 +1,44 @@
+---
+layout: bidder
+title: Bidgency Group
+description: Bidgency Group Bid Adapter
+biddercode: bidgency
+tcfeu_supported: false
+usp_supported: true
+media_types: video, native
+safeframes_ok: true
+pbjs: true
+pbs: true
+pbs_app_supported: true
+floors_supported: true
+schain_supported: true
+fpd_supported: true
+ortb_blocking_supported: true
+multiformat_supported: will-bid-on-one
+userIds: all
+sidebarType: 1
+aliasCode: aso
+---
+### Note
+
+The Bidgency Group adapter requires approval and setup. Please reach out to or visit us at [bidgency.com](https://bidgency.com) for more details.
+
+### Bid Params
+
+{: .table .table-bordered .table-striped }
+| Name | Scope | Description | Example | Type |
+|---------------|----------|------------------|-----------------------------|-----------|
+| `server` | required | Server endpoint | `https://srv.bidgx.com` | `String` |
+| `zone` | required | Zone ID | `73815` | `Integer` |
+
+#### Video Caching
+
+Note that the Bidgency Group adapter expects a client-side Prebid Cache to be enabled for video bidding.
+
+```js
+pbjs.setConfig({
+ cache: {
+ url: 'https://prebid.adnxs.com/pbc/v1/cache'
+ }
+});
+```
diff --git a/dev-docs/bidders/bidglass.md b/dev-docs/bidders/bidglass.md
index a5bc551eef..2cf1087082 100644
--- a/dev-docs/bidders/bidglass.md
+++ b/dev-docs/bidders/bidglass.md
@@ -4,6 +4,7 @@ title: Bid Glass
description: Bid Glass Bidder Adaptor
pbjs: true
biddercode: bidglass
+sidebarType: 1
---
diff --git a/dev-docs/bidders/bidlab.md b/dev-docs/bidders/bidlab.md
deleted file mode 100644
index 0dbc539640..0000000000
--- a/dev-docs/bidders/bidlab.md
+++ /dev/null
@@ -1,22 +0,0 @@
----
-layout: bidder
-title: Bidlab
-description: Prebid Bidlab Bidder Adapter
-pbjs: true
-biddercode: bidlab
-gdpr_supported: true
-media_types: banner, video
-enable_download: false
-pbjs_version_notes: not ported to 5.x
----
-
-### Note:
-
-The Bidlab Bidding adapter requires setup before beginning. Please contact us at hello@bidlab.ai
-
-### Bid Params
-
-{: .table .table-bordered .table-striped }
-| Name | Scope | Description | Example | Type |
-|---------------|----------|-----------------------|-----------|-----------|
-| `placementId` | required | Bidlab placement id | `'1234asdf'` | `'string'` |
diff --git a/dev-docs/bidders/bidmachine.md b/dev-docs/bidders/bidmachine.md
index 82f1dd997e..627c29d249 100644
--- a/dev-docs/bidders/bidmachine.md
+++ b/dev-docs/bidders/bidmachine.md
@@ -3,7 +3,7 @@ layout: bidder
title: Bidmachine
description: Prebid Bidmachine Bidder Adapter
biddercode: bidmachine
-gdpr_supported: true
+tcfeu_supported: true
gvl_id: 736
usp_supported: true
coppa_supported: true
@@ -16,10 +16,12 @@ pbjs: false
pbs: true
pbs_app_supported: true
prebid_member: false
+sidebarType: 1
---
-### Prebid Server Note:
-The Bidmachine Bidding adapter requires setup before beginning. Please contact us at hi@bidmachine.io .
+### Prebid Server Note
+
+The Bidmachine Bidding adapter requires setup before beginning. Please contact us at .
### Bid Params
diff --git a/dev-docs/bidders/bidmyadz.md b/dev-docs/bidders/bidmyadz.md
new file mode 100644
index 0000000000..d5a67523f7
--- /dev/null
+++ b/dev-docs/bidders/bidmyadz.md
@@ -0,0 +1,24 @@
+---
+layout: bidder
+title: BidMyAdz
+description: Prebid Bidmyadz Bidder Adapter
+biddercode: bidmyadz
+usp_supported: true
+schain_supported: true
+media_types: banner, video, native
+tcfeu_supported: false
+pbjs: false
+pbs: true
+pbs_app_supported: true
+pbjs_version_notes: not in 5.x
+sidebarType: 1
+---
+
+### Prebid Server Bid Params
+
+Currently adapter doesn't support multiimpression, so only the first impression will be delivered
+
+{: .table .table-bordered .table-striped }
+| Name | Scope | Description | Example | Type |
+|----------------|----------|----------------------------------------------------------|------------|-----------|
+| `placementId` | required | Placement Id will be generated on BidMyAdz Platform. | `'1234'` | `string` |
diff --git a/dev-docs/bidders/bidphysics.md b/dev-docs/bidders/bidphysics.md
deleted file mode 100644
index d9dae7f143..0000000000
--- a/dev-docs/bidders/bidphysics.md
+++ /dev/null
@@ -1,24 +0,0 @@
----
-layout: bidder
-title: BidPhysics
-description: Prebid BidPhysics Bidder Adaptor
-pbjs: true
-biddercode: bidphysics
-gdpr_supported: true
-enable_download: false
-pbjs_version_notes: not ported to 5.x
----
-
-### Note:
-
-The BidPhysics Header Bidding adaptor requires approval from the BidPhysics team. Please reach out to for more information.
-
-
-### Bid Params
-
-{: .table .table-bordered .table-striped }
-| Name | Scope | Description | Example | Type |
-|------|----------|--------------------|-------------|-----------|
-| `unitId` | optional | Unit Id | `'13000'` | `string` |
-| `networkId` | optional | Network Id | `'2300000'` | `string` |
-| `publisherId` | optional | Publisher Id | `'8ba96b13-540d-4f8a-9f1b-2a7e804769cc'` | `string` |
diff --git a/dev-docs/bidders/bidscube.md b/dev-docs/bidders/bidscube.md
index 594f454522..cf094e4b62 100644
--- a/dev-docs/bidders/bidscube.md
+++ b/dev-docs/bidders/bidscube.md
@@ -6,13 +6,14 @@ pbs: true
pbjs: true
biddercode: bidscube
media_types: banner, video, native
-gdpr_supported: true
+tcfeu_supported: false
pbs_app_supported: true
+sidebarType: 1
---
-### Note:
+### Note
-The BidsCube Bidding adapter requires setup before beginning. Please contact us at support@bidscube.com
+The BidsCube Bidding adapter requires setup before beginning. Please contact us at
### Bid Params
diff --git a/dev-docs/bidders/bidstack.md b/dev-docs/bidders/bidstack.md
new file mode 100644
index 0000000000..763b295dd8
--- /dev/null
+++ b/dev-docs/bidders/bidstack.md
@@ -0,0 +1,35 @@
+---
+layout: bidder
+title: Bidstack
+description: Prebid Bidstack Bidder Adapter
+biddercode: bidstack
+tcfeu_supported: true
+gvl_id: 462
+usp_supported: false
+coppa_supported: false
+schain_supported: true
+dchain_supported: false
+media_types: video
+safeframes_ok: false
+deals_supported: false
+floors_supported: true
+fpd_supported: false
+pbjs: false
+pbs: true
+pbs_app_supported: true
+prebid_member: false
+sidebarType: 1
+---
+
+### Registration
+
+The Bidstack Bidding adapter requires setup before beginning. Please contact us at
+
+### Bid Params
+
+{: .table .table-bordered .table-striped }
+| Name | Scope | Description | Example | Type |
+|---------------|----------|--------------|-----------|----------|
+| `publisherId` | required | Publisher ID | `'be224bf2-fd3f-4afb-b6fc-4a97718be2f5'` | `string` |
+| `placementId` | optional | Placement ID | `'some_placement_id'` | `string` |
+| `consent` | optional | User EULA consent | `true` | `boolean` |
diff --git a/dev-docs/bidders/bidsxchange.md b/dev-docs/bidders/bidsxchange.md
index 2c8484db9b..f06f2c4bb1 100644
--- a/dev-docs/bidders/bidsxchange.md
+++ b/dev-docs/bidders/bidsxchange.md
@@ -5,7 +5,9 @@ description: Prebid Bidsxchange Bidder Adapter
biddercode: bidsxchange
aliasCode: adtelligent
media_types: video,banner
-gdpr_supported: true
+gvl_id: 410 (adtelligent)
+tcfeu_supported: true
+gpp_supported: true
userIds: britepoolId, criteo, id5Id, identityLink, liveIntentId, netId, parrableId, pubCommonId, unifiedId
schain_supported: true
coppa_supported: true
@@ -14,6 +16,9 @@ safeframes_ok: true
prebid_member: true
pbjs: true
pbs: false
+sidebarType: 1
+enable_download: false
+pbjs_version_notes: removed in 8.13.0
---
### Bid params
@@ -24,15 +29,17 @@ pbs: false
| `aid` | required | The source ID from bidsxchange. | `529814` | `integer` |
### Description
+
Get access to multiple demand partners across Bidsxchange AdExchange and maximize your yield with Bidsxchange header bidding adapter.
Bidsxchange header bidding adapter connects with Bidsxchange demand sources in order to fetch bids.
This adapter provides a solution for accessing Video demand and display demand.
-Bidsxchange now supports adpod.
+Bidsxchange now supports adpod.
### Test Parameters
-```
+
+``` javascript
var adUnits = [
// Video instream adUnit
@@ -107,15 +114,15 @@ Bidsxchange now supports adpod.
### Additional Configuration
-It is possible to configure requests to be split into chunks so as to have fewer bid requests in a single http request
+It is possible to configure requests to be split into chunks so as to have fewer bid requests in a single http request
(default value is 10).
-```
- pbjs.setBidderConfig({
- config: {
- bidsxchange: {
- chunkSize: 1 // makes 1 http request per 1 adunit configured
- }
+``` javascript
+pbjs.setBidderConfig({
+ config: {
+ bidsxchange: {
+ chunkSize: 1 // makes 1 http request per 1 adunit configured
}
- });
+ }
+});
```
diff --git a/dev-docs/bidders/big-richmedia.md b/dev-docs/bidders/big-richmedia.md
new file mode 100644
index 0000000000..48c41a3599
--- /dev/null
+++ b/dev-docs/bidders/big-richmedia.md
@@ -0,0 +1,56 @@
+---
+layout: bidder
+title: BigRichMedia
+description: Prebid Big Richmedia Bidder Adapter
+biddercode: big-richmedia
+pbjs: true
+media_types: banner, video
+userIds: criteo, unifiedId, netId, identityLink, uid2
+schain_supported: true
+coppa_supported: true
+usp_supported: true
+floors_supported: true
+fpd_supported: true
+tcfeu_supported: true
+gvl_id: 32
+sidebarType: 1
+---
+
+#### Global Settings
+
+Set the publisherId for using bigRichemedia
+
+```
+pbjs.que.push(function() {
+ // use the bid server in Taiwan (country code: tw)
+ pbjs.setConfig({
+ bigRichmedia: {
+ 'publisherId': 'A7FN99NZ98F5ZD4G'
+ }
+ });
+});
+```
+
+#### Bid Params
+
+{: .table .table-bordered .table-striped }
+| Name | Scope | Description | Example | Type |
+|-----------|----------|---------------------------|------------|----------|
+| `placementId` | required | The placement ID. You may identify a placement using the `invCode` and `member` instead of a placement ID. | `234234` | `integer` |
+| `member` | optional | The member ID from AppNexus. Must be used with `invCode`. | `'12345'` | `string` |
+| `invCode` | optional | The inventory code from AppNexus. Must be used with `member`. | `'abc123'` | `string` |
+| `keywords` | optional | A set of key-value pairs applied to all ad slots on the page. | `keywords: { genre: ['rock', 'pop'] }` | `object` |
+
+#### Video Object
+
+Those configuration parameters are read from mediaTypes.video
+
+{: .table .table-bordered .table-striped }
+| Name | Description | Type |
+|-------------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|------------------|
+| `minduration` | Integer that defines the minimum video ad duration in seconds. | `integer` |
+| `maxduration` | Integer that defines the maximum video ad duration in seconds. | `integer` |
+|`context` | A string that indicates the type of video ad requested. Allowed values: `"pre_roll"`; `"mid_roll"`; `"post_roll"`; `"outstream"`. | `string` |
+| `skippable` | Boolean which, if `true`, means the user can click a button to skip the video ad. Defaults to `false`. | `boolean` |
+|`skipoffset`| Integer that defines the number of seconds until an ad can be skipped. Assumes `skippable` setting was set to `true`. | `integer` |
+| `frameworks` | Array of integers listing API frameworks supported by the publisher. Allowed values: None: `0`; VPAID 1.0: `1`; VPAID 2.0: `2`; MRAID 1.0: `3`; MRAID 2.0: `4`; ORMMA: `5`; OMID 1.0 `6`. | `Array` |
diff --git a/dev-docs/bidders/bizzclick.md b/dev-docs/bidders/bizzclick.md
index 694d56e3b0..15872a4126 100644
--- a/dev-docs/bidders/bizzclick.md
+++ b/dev-docs/bidders/bizzclick.md
@@ -3,7 +3,7 @@ layout: bidder
title: BizzClick
description: Prebid BizzClick Bidder Adaptor
biddercode: bizzclick
-gdpr_supported: true
+tcfeu_supported: false
usp_supported: true
coppa_supported: true
schain_supported: true
@@ -12,16 +12,36 @@ safeframes_ok: true
deals_supported: true
pbjs: true
pbs: true
+pbs_app_supported: true
+sidebarType: 1
+floors_supported: true
+prebid_member: false
+fpd_supported: false
+gvl_id: none
+multiformat_supported: will-bid-on-one
+ortb_blocking_supported: true
+userIds: all
---
-### Note:
+### Note
-The Example Bidding adapter requires setup before beginning. Please contact us at support@bizzclick.com .BizzClick will only respond to the first impression and that multiple ad formats of that single impression are not supported.
+The Example Bidding adapter requires setup before beginning. Please contact us at .BizzClick will only respond to the first impression and that multiple ad formats of that single impression are not supported.
-### Bid Params
+### Bid Params for Prebid Server and Prebid Mobile
{: .table .table-bordered .table-striped }
-| Name | Scope | Description | Example | Type |
+| Name | Scope | Description | Example | Type |
|---------------|----------|-----------------------|-----------|-----------|
-| `placementId` | required | placement id | `'hash'` | `string` |
-| `accountId` | required | account id | `'bizzclickTest'` | `string` |
+| `sourceId` | required | Unique hash provided by bizzclick | `'6dllcEHSxYdSb6yLmCqE'` | `string` |
+| `accountId` | required | Unique name provided by bizzclick | `'bizzclick-test'` | `string` |
+| `host` | optional | Bizzclick server region. US East by default | `'us-e-node1'` | `string` |
+| `placementId` | required | Deprecated parameter. Please use sourceId instead |`'6dllcEHSxYdSb6yLmCqE'`|`string` |
+
+### Bid Params for Prebid.js
+
+{: .table .table-bordered .table-striped }
+| Name | Scope | Description | Example | Type |
+|---------------|----------|-----------------------|-----------|-----------|
+| `sourceId` | required | Unique hash provided by bizzclick | `'6dllcEHSxYdSb6yLmCqE'` | `string` |
+| `accountId` | required | Unique name provided by bizzclick | `'bizzclick-test'` | `string` |
+| `host` | optional | Bizzclick server region. US East by default | `'us-e-node1'` | `string` |
diff --git a/dev-docs/bidders/bliink.md b/dev-docs/bidders/bliink.md
index 5344187d2b..3d96886874 100644
--- a/dev-docs/bidders/bliink.md
+++ b/dev-docs/bidders/bliink.md
@@ -3,14 +3,17 @@ layout: bidder
title: BLIINK
description: Prebid BLIINK Bidder Adaptor
pbjs: true
-pbs: false
+pbs: true
media_types: video, banner
biddercode: bliink
-gdpr_supported: true
+gvl_id: 658
+tcfeu_supported: true
usp_supported: false
+sidebarType: 1
---
-### Note:
+### Note
+
The BLIINK Header Bidding adaptor requires setup and approval from the BLIINK team. Please reach out to your account manager for more informations.
### Bid Params
@@ -19,7 +22,5 @@ The BLIINK Header Bidding adaptor requires setup and approval from the BLIINK te
| Name | Scope | Description | Example | Type |
|-------------|----------|----------------------------------|--------------------------------------|----------|
| `tagId` | required | The TagID from BLIINK. | `'32'` | `string` |
-| `placement` | required | The placement from BLIINK. | `'video'` | `string` |
-
-
-Same 'placement' parameter can be used from either prebid JS or prebid server.
+| `imageUrl` | optional | The image url on which the ad is displayed in case of in-image ad. | `'https://image.png'` | `string` |
+| `videoUrl` | optional | The Video url on which the ad is displayed in case of video ad. | `'https://video.mp4'` | `string` |
diff --git a/dev-docs/bidders/blockthrough.md b/dev-docs/bidders/blockthrough.md
new file mode 100644
index 0000000000..fbb9f4e845
--- /dev/null
+++ b/dev-docs/bidders/blockthrough.md
@@ -0,0 +1,94 @@
+---
+layout: bidder
+title: Blockthrough
+description: Prebid BT Bidder Adapter
+biddercode: blockthrough
+gvl_id: 815
+usp_supported: true
+coppa_supported: false
+gpp_sids: usp
+schain_supported: true
+dchain_supported: false
+userId: pubProvidedId, id5Id, criteo, sharedId, identityLink, unifiedId, userId
+media_types: banner
+floors_supported: true
+fpd_supported: true
+pbjs: true
+pbs: true
+multiformat_supported: will-not-bid
+ortb_blocking_supported: false
+sidebarType: 1
+---
+
+### Note
+
+The BT Bid Adapter makes requests to the BT Server which supports OpenRTB.
+
+Publishers should use the `ortb2` method of setting [First Party Data](https://docs.prebid.org/features/firstPartyData.html). The BT adapter requires setup and approval from the Blockthrough team. Please reach out to [marketing@blockthrough.com](mailto:marketing@blockthrough.com) for more information.
+
+### Prebid JS
+
+#### Bid Params
+
+{: .table .table-bordered .table-striped }
+| Name | Scope | Description | Example | Type |
+| -------- | -------- | --------------------------- | ------- | --------- |
+| `bidderCode` | required | Bidder configuration. Could configure several bidders this way. | `bidderA: {publisherId: 55555}` | `object` |
+
+#### Bid Config
+
+Make sure to set required orgID, websiteID values received after approval using `pbjs.setBidderConfig`.
+
+{: .table .table-bordered .table-striped }
+| Name | Scope | Description | Example | Type |
+| ----------- | -------- | ---------------------------------- | ------------------ | --------- |
+| `orgID` | required | A unique ID for your organization provided by the Blockthrough team. | `4829301576428910` | `string` |
+| `websiteID` | required | A unique ID for your site provided by the Blockthrough team. | `5654012389765432` | `string` |
+
+#### Example
+
+```javascript
+pbjs.setBidderConfig({
+ bidders: ['blockthrough'],
+ config: {
+ ortb2: {
+ site: {
+ ext: {
+ blockthrough: {
+ orgID: '4829301576428910',
+ websiteID: '5654012389765432',
+ },
+ },
+ },
+ },
+ },
+});
+```
+
+#### AdUnits configuration example
+
+```javascript
+var adUnits = [
+ {
+ code: 'banner-div-1',
+ mediaTypes: {
+ banner: {
+ sizes: [[728, 90]],
+ },
+ },
+ bids: [
+ {
+ bidder: 'blockthrough',
+ params: {
+ bidderA: {
+ publisherId: 55555,
+ },
+ bidderB: {
+ zoneId: 12,
+ },
+ },
+ },
+ ],
+ },
+];
+```
diff --git a/dev-docs/bidders/blue.md b/dev-docs/bidders/blue.md
new file mode 100644
index 0000000000..f7200c9154
--- /dev/null
+++ b/dev-docs/bidders/blue.md
@@ -0,0 +1,29 @@
+---
+layout: bidder
+title: Blue
+description: Prebid Blue Bidder Adapter
+tcfeu_supported: true
+pbjs: true
+pbs: true
+biddercode: blue
+prebid_member: false
+floors_supported: true
+safeframes_ok: true
+media_types: banner
+schain_supported: true
+userIds: id5Id, identityLink, pubProvidedId
+pbs_app_supported: true
+gvl_id: 620
+sidebarType: 1
+---
+
+### Note
+
+The bidder requires setup before usage. Please get in touch with our publisher team at to get started.
+
+### Bid Params
+
+{: .table .table-bordered .table-striped }
+| Name | Scope | Description | Example | Type |
+|---------------|----------|---------------------|---------------|----------|
+| `publisherId` | required | Unique publisher ID | `'ABCDEF'` | `string` |
diff --git a/dev-docs/bidders/bluebillywig.md b/dev-docs/bidders/bluebillywig.md
index de7698da89..33c8a43772 100644
--- a/dev-docs/bidders/bluebillywig.md
+++ b/dev-docs/bidders/bluebillywig.md
@@ -5,11 +5,13 @@ description: Prebid Blue Billywig Bidder Adaptor
biddercode: bluebillywig
pbjs: true
media_types: video
-gdpr_supported: true
+gvl_id: 684
+tcfeu_supported: true
schain_supported: true
coppa_supported: true
usp_supported: true
userIds: britepoolId, criteo, id5Id, identityLink, liveIntentId, netId, parrableId, pubCommonId, unifiedId
+sidebarType: 1
---
#### Bid Params
diff --git a/dev-docs/bidders/bluesea.md b/dev-docs/bidders/bluesea.md
new file mode 100644
index 0000000000..3f6bbd7839
--- /dev/null
+++ b/dev-docs/bidders/bluesea.md
@@ -0,0 +1,39 @@
+---
+layout: bidder
+title: Bluesea
+description: Prebid Bluesea Bidder Adapter
+biddercode: bluesea
+tcfeu_supported: true
+usp_supported: true
+coppa_supported: true
+schain_supported: true
+media_types: banner, video, native
+safeframes_ok: false
+floors_supported: true
+pbjs: false
+pbs: true
+pbs_app_supported: true
+fpd_supported: true
+prebid_member: false
+multiformat_supported: will-bid-on-one
+ortb_blocking_supported: true
+---
+
+### Registration
+
+If you have any question regarding the set up, please reach out to your account manager or for more information.
+
+### Bid Params
+
+{: .table .table-bordered .table-striped }
+| Name | Scope | Description | Example | Type |
+|---------------|----------|--------------|-----------|----------|
+| `pubid` | required | Unique partner account id | `'254673'` | `string` |
+| `token` | required | Token for certification | `'3l2l2mbl2knw2ggc'` | `string` |
+
+### First Party Data
+
+Publishers can use the ortb2 configuration to provide First Party Data. The following fields are supported:
+
+* ortb2.site.*
+* ortb2.user.*
diff --git a/dev-docs/bidders/bmtm.md b/dev-docs/bidders/bmtm.md
index 3d99a82779..5e218bcfe9 100644
--- a/dev-docs/bidders/bmtm.md
+++ b/dev-docs/bidders/bmtm.md
@@ -9,6 +9,7 @@ schain_supported: true
pbjs: true
pbs: true
userIds: id5Id, sharedId
+sidebarType: 1
---
### Bid Params
diff --git a/dev-docs/bidders/boldwin.md b/dev-docs/bidders/boldwin.md
index 084e923814..b0fdb9fb11 100644
--- a/dev-docs/bidders/boldwin.md
+++ b/dev-docs/bidders/boldwin.md
@@ -3,18 +3,31 @@ layout: bidder
title: Boldwin
description: Prebid Boldwin Bidder Adapter
pbjs: true
+pbs: true
biddercode: boldwin
-gdpr_supported: true
+gvl_id: 1151
+tcfeu_supported: true
+usp_supported: true
+coppa_supported: true
+floors_supported: true
+pbs_app_supported: true
+gpp_supported: true
media_types: banner, video, native
+multiformat_supported: will-bid-on-one
+safeframes_ok: true
+sidebarType: 1
---
-### Note:
+### Note
-The Boldwin Bidding adapter requires setup before beginning. Please contact us at wls_team@smartyads.com
+The Boldwin Bidding adapter requires setup before beginning. Please contact us at
### Bid Params
{: .table .table-bordered .table-striped }
| Name | Scope | Description | Example | Type |
|---------------|----------|-----------------------|-----------|-----------|
-| `placementId` | required | Boldwin placement id | `'1234asdf'` | `'string'` |
+| `endpointId` | required | Endpoint Id | `'0'` | `string` |
+
+For both the Prebid Server and Prebid.js integrations it is required to use only one parameter: `endpointId`.
+`endpointId` - should be sent in the Prebid bid request to Boldwin in case you integrate with Boldwin bidder.
diff --git a/dev-docs/bidders/brainy.md b/dev-docs/bidders/brainy.md
index 39ee2f3be3..c265e031ac 100644
--- a/dev-docs/bidders/brainy.md
+++ b/dev-docs/bidders/brainy.md
@@ -4,6 +4,7 @@ title: brainy
description: Prebid brainy Bidder Adaptor
pbjs: true
biddercode: brainy
+sidebarType: 1
---
### Bid Params
diff --git a/dev-docs/bidders/brave.md b/dev-docs/bidders/brave.md
index e26f0f7249..6b4d155256 100644
--- a/dev-docs/bidders/brave.md
+++ b/dev-docs/bidders/brave.md
@@ -3,7 +3,7 @@ layout: bidder
title: Brave
description: Prebid Brave Bidder Adapter
biddercode: brave
-gdpr_supported: true
+tcfeu_supported: true
usp_supported: true
coppa_supported: true
schain_supported: true
@@ -11,16 +11,22 @@ media_types: banner, video, native
safeframes_ok: true
deals_supported: true
pbjs: true
-pbs: false
+pbs: true
+gvl_id: 869
+floors_supported: true
+pbs_app_supported: true
+fpd_supported: false
+dchain_supported: false
+ortb_blocking_supported: true
+sidebarType: 1
---
-### Note:
+### Note
-The Brave Header Bidding adapter requires setup and approval from the Brave team. Please reach out to your account manager or support@thebrave.io for more information
+The Brave Header Bidding adapter requires setup and approval from the Brave team. Please reach out to your account manager or for more information
### Bid Params
-{: .table .table-bordered .table-striped }
| Name | Scope | Description | Example | Type |
|---------------|----------|-------------------------------|-------------------------------------|-----------|
| `placementId` | required | Brave's platform placement id | `'to0QI2aPgkbBZq6vgf0oHitouZduz0qw'` | `string` |
diff --git a/dev-docs/bidders/brid.md b/dev-docs/bidders/brid.md
new file mode 100644
index 0000000000..b9daa92dae
--- /dev/null
+++ b/dev-docs/bidders/brid.md
@@ -0,0 +1,20 @@
+---
+layout: bidder
+title: Brid
+description: Prebid Brid Bidder Adapter
+biddercode: brid
+media_types: video
+tcfeu_supported: true
+usp_supported: true
+schain_supported: true
+pbjs: true
+gvl_id: 934
+sidebarType: 1
+---
+
+#### Bid Params
+
+{: .table .table-bordered .table-striped }
+| Name | Scope | Description | Example | Type |
+|---------------------|----------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|-------------------------------------------------------|------------------|
+| `placementId` | required | The placement ID from Brid. The `placementID` parameter can be either a `string` or `integer` for Prebid.js, however `integer` is preferred. Legacy code can retain the `string` value. **Prebid Server requires an integer value.** | `12345` | `integer` |
diff --git a/dev-docs/bidders/bridgewell.md b/dev-docs/bidders/bridgewell.md
index 4ee73587de..8b66d069b4 100644
--- a/dev-docs/bidders/bridgewell.md
+++ b/dev-docs/bidders/bridgewell.md
@@ -6,6 +6,7 @@ pbjs: true
biddercode: bridgewell
media_types: display, native
userIds: all
+sidebarType: 1
---
### Bid Params
diff --git a/dev-docs/bidders/brightcom.md b/dev-docs/bidders/brightcom.md
index 1b89899157..2953aba6a7 100644
--- a/dev-docs/bidders/brightcom.md
+++ b/dev-docs/bidders/brightcom.md
@@ -6,16 +6,18 @@ top_nav_section: dev_docs
nav_section: reference
pbjs: true
biddercode: brightcom
-gdpr_supported: true
+gvl_id: 883
+tcfeu_supported: true
+sidebarType: 1
---
-### Note:
+### Note
The Brightcom bidder adapter requires setup and approval from the Brightcom team. Please reach out to your account manager for more information and to start using it.
### Bid params
-{: .table .table-bordered .table-striped }
+{: .table .table-bordered .table-striped }
| Name | Scope | Description | Example | Type |
| ---- | ----- | ----------- | ------- | ---- |
diff --git a/dev-docs/bidders/brightcomssp.md b/dev-docs/bidders/brightcomssp.md
new file mode 100644
index 0000000000..d78e661a67
--- /dev/null
+++ b/dev-docs/bidders/brightcomssp.md
@@ -0,0 +1,30 @@
+---
+layout: bidder
+title: Brightcom SSP
+description: Prebid Brightcom SSP Bidder Adaptor
+top_nav_section: dev_docs
+nav_section: reference
+pbjs: true
+biddercode: bcmssp
+filename: brightcomSSPBidAdapter
+tcfeu_supported: true
+usp_supported: true
+coppa_supported: true
+schain_supported: true
+sidebarType: 1
+gvl_id: 883
+floors_supported: true
+---
+
+### Note
+
+The Brightcom SSP bidder adapter requires setup and approval from the Brightcom team. Please reach out to your account manager for more information and to start using it.
+
+### Bid params
+
+{: .table .table-bordered .table-striped }
+
+| Name | Scope | Description | Example | Type |
+| ---- | ----- | ----------- | ------- | ---- |
+| `publisherId` | required | The publisher ID from Brightcom | `2141020` | `integer` |
+| `bidFloor` | optional | The minimum bid value desired | `1.23` | `float` |
diff --git a/dev-docs/bidders/brightroll.md b/dev-docs/bidders/brightroll.md
index aa67bc4598..c6dfc0d3f4 100644
--- a/dev-docs/bidders/brightroll.md
+++ b/dev-docs/bidders/brightroll.md
@@ -2,21 +2,25 @@
layout: bidder
title: Brightroll
description: Prebid Brightroll(Verizon Media) S2S Bidder Adaptor
-pbs: true
+pbs: false
media_types: display, video
biddercode: brightroll
prebid_member: true
-gdpr_supported: true
+tcfeu_supported: false
coppa_supported: true
ccpa_supported: true
schain_supported: true
pbs_app_supported: false
+sidebarType: 1
---
+{: .alert.alert-warning :}
+The brightroll bid adapter is no longer supported and will not respond to bids.
+
### Registration
Brightroll requires registration for each Prebid Server host company
-and each publisher. Contact dsp-supply-prebid@verizonmedia.com
+and each publisher. Contact
### Bid Params
diff --git a/dev-docs/bidders/browsi.md b/dev-docs/bidders/browsi.md
new file mode 100644
index 0000000000..7f548f0b90
--- /dev/null
+++ b/dev-docs/bidders/browsi.md
@@ -0,0 +1,48 @@
+---
+layout: bidder
+title: Browsi
+description: Prebid Browsi Bidder Adapter
+biddercode: browsi
+pbjs: true
+gvl_id: 329
+tcfeu_supported: true
+usp_supported: true
+media_types: no-display, video
+schain_supported: true
+safeframes_ok: true
+sidebarType: 1
+---
+
+### Note
+
+For more information about [Browsi](https://www.browsi.com), please contact [support@browsi.com](mailto:support@browsi.com).
+
+### Bid Params
+
+{: .table .table-bordered .table-striped }
+| Name | Scope | Description | Example | Type |
+|------------------|----------|------------------|------------------------------|----------|
+| `pubId` | required | Publisher ID | `'117a476f-9791-4a82-80db-4c01c1683db0'` | `string` |
+| `tagId` | required | Tag ID | `'1'` | `string` |
+
+# Sample Ad Unit: For Publishers
+
+```javascript
+let videoAdUnit = [
+ {
+ code: 'videoAdUnit',
+ mediaTypes: {
+ video: {
+ playerSize: [[300, 250]],
+ context: 'outstream'
+ },
+ },
+ bids: [{
+ bidder: 'browsi',
+ params: {
+ pubId: '117a476f-9791-4a82-80db-4c01c1683db0', // Publisher ID provided by Browsi
+ tagId: '1' // Tag ID provided by Browsi
+ }
+ }]
+ }];
+```
diff --git a/dev-docs/bidders/bucksense.md b/dev-docs/bidders/bucksense.md
index e276f7724b..7471157988 100644
--- a/dev-docs/bidders/bucksense.md
+++ b/dev-docs/bidders/bucksense.md
@@ -4,6 +4,9 @@ title: Bucksense
description: Prebid Bucksense Bidder Adapter
pbjs: true
biddercode: bucksense
+gvl_id: 235
+tcfeu_supported: true
+sidebarType: 1
---
### Bid params
diff --git a/dev-docs/bidders/buzzoola.md b/dev-docs/bidders/buzzoola.md
index fa1107c611..e03c0cea32 100644
--- a/dev-docs/bidders/buzzoola.md
+++ b/dev-docs/bidders/buzzoola.md
@@ -5,10 +5,11 @@ description: Prebid Buzzoola Bidder Adaptor
pbjs: true
biddercode: buzzoola
media_types: banner, video, native
-gdpr_supported: false
+tcfeu_supported: false
+sidebarType: 1
---
-### Note:
+### Note
* The Buzzoola Header Bidding adaptor requires setup and approval before beginning. Please reach out to for more details.
* Please note that cookie support is required.
diff --git a/dev-docs/bidders/bwx.md b/dev-docs/bidders/bwx.md
new file mode 100644
index 0000000000..fd3b2e9cac
--- /dev/null
+++ b/dev-docs/bidders/bwx.md
@@ -0,0 +1,26 @@
+---
+layout: bidder
+title: BoldwinX
+description: BoldwinX Bidder Adapter
+biddercode: bwx
+media_types: banner, video, native
+coppa_supported: true
+tcfeu_supported: false
+usp_supported: true
+prebid_member: false
+pbjs: false
+pbs: true
+schain_supported: true
+floors_supported: true
+multiformat_supported: will-bid-on-any
+sidebarType: 1
+safeframes_ok: true
+---
+
+### Prebid Server Bid Params
+
+{: .table .table-bordered .table-striped }
+| Name | Scope | Description | Example | Type |
+|-------------|----------|-------------------------------|------------------------------------|-----------|
+| `pid` | required | unique placement ID | `aa8210e2013wc095fe9dba67981040b0` | `string` |
+| `env` | optional | Environment name | `bwx-stage` | `string` |
diff --git a/dev-docs/bidders/byplay.md b/dev-docs/bidders/byplay.md
deleted file mode 100644
index 0cd4a92035..0000000000
--- a/dev-docs/bidders/byplay.md
+++ /dev/null
@@ -1,17 +0,0 @@
----
-layout: bidder
-title: ByPlay
-description: Prebid ByPlay Bidder Adaptor
-pbjs: true
-biddercode: byplay
-media_types: video
-enable_download: false
-pbjs_version_notes: not ported to 5.x
----
-
-### Bid Params
-
-{: .table .table-bordered .table-striped }
-| Name | Scope | Description | Example | Type |
-|-------------|----------|----------------|----------|----------|
-| `sectionId` | required | The section ID | `'7986'` | `string` |
diff --git a/dev-docs/bidders/c1x.md b/dev-docs/bidders/c1x.md
index af3a99716e..93868aee3f 100644
--- a/dev-docs/bidders/c1x.md
+++ b/dev-docs/bidders/c1x.md
@@ -2,24 +2,26 @@
layout: bidder
title: C1X
description: Prebid C1X Bidder Adaptor
+pbs: false
pbjs: true
biddercode: c1x
-gdpr_supported: true
-enable_download: false
-pbjs_version_notes: not ported to 5.x
+media_types: banner
+tcfeu_supported: false
+pbs_app_supported: false
+enable_download: true
---
-### Note:
+### Note
The C1X Header Bidding adaptor requires approval from the C1X team. Please reach out to for more information.
### Bid params
{: .table .table-bordered .table-striped }
-| Name | Scope | Description | Example | Type |
-|-----------------|----------|-----------------------------------------------------------------|-------------------------------------|----------|
-| `siteId` | required | Site ID from which the request is originating | `'999'` | `string` |
-| `pixelId` | optional | Publisher's pixel ID | `'12345'` | `string` |
-| `floorPriceMap` | optional | Minimum floor prices needed from the DSP's to enter the auction | `{"300x250": 4.00,"300x600": 3.00}` | `object` |
-| `dspid` | optional | DSP ID | `'4321'` | `string` |
-| `pageurl` | optional | Url of the webpage where the request is originating from | `'4321'` | `string` |
+| Name | Scope | Description | Example | Type |
+|----------------|----------|-----------------------------------------------------------------|-------------------------------------|----------|
+| `placementId` | required | Placement ID | `'12345'` | `string` |
+| `siteId` | required | Site ID from which the request is originating | `'999'` | `string` |
+| `dealId` | optional | Deal ID to get the specific deal from our DSP | `'123456'` | `string` |
+| `floorPriceMap`| optional | Minimum floor prices needed from the DSP's to enter the auction | `{"300x250": 4.00,"300x600": 3.00}` | `object` |
+| `pageurl` | optional | Url of the webpage where the request is originating from | `'www.example.com'` | `string` |
diff --git a/dev-docs/bidders/cadent_aperture_mx.md b/dev-docs/bidders/cadent_aperture_mx.md
new file mode 100644
index 0000000000..e1f4c0e950
--- /dev/null
+++ b/dev-docs/bidders/cadent_aperture_mx.md
@@ -0,0 +1,30 @@
+---
+layout: bidder
+title: Cadent Aperture MX
+description: Prebid Cadent Aperture MX Bidder Adaptor
+pbjs: true
+pbs: true
+biddercode: cadent_aperture_mx
+filename: cadentApertureMXBidAdapter
+media_types: banner, video
+tcfeu_supported: true
+gvl_id: 183
+gpp_supported: true
+usp_supported: true
+schain_supported: true
+floors_supported: true
+userIds: identityLink, uid2
+sidebarType: 1
+---
+
+### Registration
+
+To use this bidder you will need an account and a valid tagid from our exchange. For further information, please contact your Account Manager or .
+
+### Bid Params
+
+{: .table .table-bordered .table-striped }
+| Name | Scope | Description | Example | Type |
+|-------------------|----------|----------------------------------------------------------------------------------------------------------------------|-----------------------------------------------|------------|
+| `tagid` | required | The Tag ID from Cadent Aperture MX. | `test1` | `string` |
+| `bidfloor` | optional | The CPM bid floor | `0.25` | `string` |
diff --git a/dev-docs/bidders/caroda.md b/dev-docs/bidders/caroda.md
new file mode 100644
index 0000000000..2b20b41273
--- /dev/null
+++ b/dev-docs/bidders/caroda.md
@@ -0,0 +1,48 @@
+---
+layout: bidder
+title: Caroda
+description: Prebid Caroda Bidder Adaptor
+biddercode: caroda
+media_types: banner, video
+coppa_supported: true
+tcfeu_supported: true
+usp_supported: true
+prebid_member: false
+pbjs: true
+pbs: false
+schain_supported: true
+userIds: all
+gvl_id: 954
+floors_supported: true
+multiformat_supported: will-bid-on-any, will-bid-on-one
+fpd_supported: true
+safeframes_ok: true
+ortb_blocking_supported: false
+deals_supported: false
+sidebarType: 1
+---
+
+### Bid params
+
+The Caroda Bidding adapter requires setup before beginning. Please contact us on
+
+{: .table .table-bordered .table-striped }
+| Name | Scope | Description | Example | Type |
+|---------------|----------------------------|-----------------------------------------------------------------|-------------------|-----------|
+| `ctok` | required | id unique to a customer | `"abcdef"` | `string` |
+| `placementId` | optional | used when there are multiple placements configured per domain | `"opzabc123"` | `string` |
+| `priceType` | optional | price type | `"gross"` | `string` |
+
+### OpenRTB request config
+
+OpenRTB bid request `app`, `site`, `device` properties configured using prebid config.
+
+``` javascript
+pbjs.setConfig({
+ ortb2: {
+ app: {
+ name: 'My APP'
+ }
+ }
+});
+```
diff --git a/dev-docs/bidders/catapultx.md b/dev-docs/bidders/catapultx.md
deleted file mode 100644
index abb551bf81..0000000000
--- a/dev-docs/bidders/catapultx.md
+++ /dev/null
@@ -1,23 +0,0 @@
----
-layout: bidder
-title: CatapultX
-description: CatapultX Bidder Adaptor
-pbjs: true
-pbs: true
-biddercode: catapultx
-aliasCode : adkernel
-media_types: banner, video
-gdpr_supported: true
-usp_supported: true
-coppa_supported: true
-pbs_app_supported: true
-schain_supported: true
----
-
-### Bid Params
-
-{: .table .table-bordered .table-striped }
-| Name | Scope | Description | Example | Type |
-|----------|----------|-----------------------|---------------------------|----------|
-| `host` | required | RTB host | `'cpm.catapultx.com'` | `string` |
-| `zoneId` | required | Zone Id | 76156 | `integer`|
diff --git a/dev-docs/bidders/ccx.md b/dev-docs/bidders/ccx.md
index 895fc9036d..d769c89bff 100644
--- a/dev-docs/bidders/ccx.md
+++ b/dev-docs/bidders/ccx.md
@@ -1,11 +1,14 @@
---
layout: bidder
title: Clickonometrics
-description: Prebid Clickonometrics Bidder Adaptor
+description: Prebid Clickonometrics Bidder Adapter
pbjs: true
+pbs: true
biddercode: ccx
-media_types: video
-gdpr_supported: true
+media_types: banner, video
+gvl_id: 773
+tcfeu_supported: true
+sidebarType: 1
---
diff --git a/dev-docs/bidders/cedato.md b/dev-docs/bidders/cedato.md
deleted file mode 100644
index 2aa6857b46..0000000000
--- a/dev-docs/bidders/cedato.md
+++ /dev/null
@@ -1,27 +0,0 @@
----
-layout: bidder
-title: Cedato
-description: Prebid Cedato Bidder Adapter
-top_nav_section: dev_docs
-media_types: banner, video
-gdpr_supported: true
-usp_supported: true
-nav_section: reference
-pbjs: true
-biddercode: cedato
-enable_download: false
-pbjs_version_notes: not ported to 5.x
----
-
-### Bid params
-
-{: .table .table-bordered .table-striped }
-| Name | Scope | Description | Example | Type |
-| ---- | ----- | ----------- | ------- | ---- |
-| `player_id` | required | The player ID from Cedato | `1450133326` | `integer` |
-| `bidfloor` | optional | Bid floor value | `0.01` | `integer` |
-
-### Note
-
-The Cedato adapter requires setup and approval from the Cedato team.
-Please reach out to your account team or publishers@cedato.com for more information.
diff --git a/dev-docs/bidders/chtnw.md b/dev-docs/bidders/chtnw.md
new file mode 100644
index 0000000000..505d1ce140
--- /dev/null
+++ b/dev-docs/bidders/chtnw.md
@@ -0,0 +1,23 @@
+---
+layout: bidder
+title: chtnw
+description: Prebid CHTNW Bidder Adaptor
+pbjs: true
+biddercode: chtnw
+media_types: banner, video, native
+gvl_id: none
+tcfeu_supported: false
+usp_supported: false
+coppa_supported: false
+schain_supported: false
+dchain_supported: false
+prebid_member: false
+sidebarType: 1
+---
+
+### Bid Params
+
+{: .table .table-bordered .table-striped }
+| Name | Scope | Description | Example | Type |
+|---------------|----------|----------------------|----------------------|----------|
+| `placementId` | required | The CHT placement ID | `'38EL412LO82XR9O6'` | `string` |
diff --git a/dev-docs/bidders/cleanmedianet.md b/dev-docs/bidders/cleanmedianet.md
new file mode 100644
index 0000000000..2035fd58e0
--- /dev/null
+++ b/dev-docs/bidders/cleanmedianet.md
@@ -0,0 +1,33 @@
+---
+layout: bidder
+title: Clean Media Net
+description: Clean Media Bidder Adapter
+biddercode: cleanmedianet
+pbjs: true
+media_types: banner, video
+tcfeu_supported: false
+usp_supported: true
+coppa_supported: false
+schain_supported: true
+floors_supported: true
+userIds:
+prebid_member: false
+safeframes_ok: true
+deals_supported: false
+pbs_app_supported: false
+fpd_supported: false
+ortb_blocking_supported: false
+gvl_id:
+multiformat_supported: will-bid-on-any
+---
+
+### Disclosure
+
+Note: This bidder appears to only consider gdprApplies if a consent string is available. This may result in some incorrect GDPR processing, such as when the consent string is not yet available but the publisher has decided GDPR always applies. See
+
+### Bid params
+
+{: .table .table-bordered .table-striped }
+| Name | Scope | Description | Example | Type |
+|-------------------+----------+--------------------------------------------------------+-------------------------+---------|
+| `supplyPartnerId` | required | The supply account's ID in your Clean Media dashboard. | `"1253"`, `"1254"`, etc | string |
diff --git a/dev-docs/bidders/clickforce.md b/dev-docs/bidders/clickforce.md
index 2b961b28b7..0aae55bd0f 100644
--- a/dev-docs/bidders/clickforce.md
+++ b/dev-docs/bidders/clickforce.md
@@ -5,6 +5,7 @@ description: Prebid Clickforce Bidder Adaptor
pbjs: true
biddercode: clickforce
media_types: native
+sidebarType: 1
---
### Bid Params (display ad)
@@ -20,4 +21,3 @@ media_types: native
| Name | Scope | Description | Example | Type |
|--------|----------|------------------------|----------|----------|
| `zone` | required | The CLICKFORCE zone ID | `'6878'` | `string` |
-
diff --git a/dev-docs/bidders/clicktripz.md b/dev-docs/bidders/clicktripz.md
deleted file mode 100644
index a7a175df80..0000000000
--- a/dev-docs/bidders/clicktripz.md
+++ /dev/null
@@ -1,18 +0,0 @@
----
-layout: bidder
-title: Clicktripz
-description: Prebid Clicktripz Bidder Adaptor
-pbjs: true
-biddercode: clicktripz
-media_types: banner
-enable_download: false
-pbjs_version_notes: not ported to 5.x
----
-
-### Bid Params
-
-{: .table .table-bordered .table-striped }
-| Name | Scope | Description | Example | Type |
-|---------------|----------|-------------|---------|----------|
-| `placementId` | required | The Placement ID from Clicktripz | `'4312c63f'` | `string` |
-| `siteId` | required | The site ID from Clicktripz | `'prebid'` | `string` |
diff --git a/dev-docs/bidders/codefuel.md b/dev-docs/bidders/codefuel.md
index f2b9b20833..a32e6dee7a 100644
--- a/dev-docs/bidders/codefuel.md
+++ b/dev-docs/bidders/codefuel.md
@@ -6,9 +6,10 @@ pbjs: true
pbs: true
media_types: banner
biddercode: CodeFuel
-gdpr_supported: false
+tcfeu_supported: false
usp_supported: false
floors_supported: false
+sidebarType: 1
---
### Description
@@ -17,15 +18,14 @@ Module that connects to Codefuel bidder to fetch bids.
Display format is supported but not native format. Using OpenRTB standard.
### Bid Params
+
{: .table .table-bordered .table-striped }
| Name | Scope | Description | Example | Type |
|---------------|----------|-------------------------------------|------------------------------------------|----------|
| `placementId` | required | Placement-Id defined by the caller | `'0111f8ac-2d40-4613-8557-b47dbf622fff'` | `string` |
-
### Configuration
-
```javascript
pbjs.setConfig({
codefuel: {
diff --git a/dev-docs/bidders/cointraffic.md b/dev-docs/bidders/cointraffic.md
index 03f3974f41..336d71f251 100644
--- a/dev-docs/bidders/cointraffic.md
+++ b/dev-docs/bidders/cointraffic.md
@@ -4,6 +4,7 @@ title: Cointraffic
description: Prebid Cointraffic Bidder Adaptor
pbjs: true
biddercode: cointraffic
+sidebarType: 1
---
diff --git a/dev-docs/bidders/coinzilla.md b/dev-docs/bidders/coinzilla.md
index 7e77dee719..dd324b9273 100644
--- a/dev-docs/bidders/coinzilla.md
+++ b/dev-docs/bidders/coinzilla.md
@@ -5,6 +5,7 @@ description: Prebid Coinzilla Bidder Adaptor
pbjs: true
pbs: true
biddercode: coinzilla
+sidebarType: 1
---
diff --git a/dev-docs/bidders/collectcent.md b/dev-docs/bidders/collectcent.md
index 78e42374aa..0fafa1587a 100644
--- a/dev-docs/bidders/collectcent.md
+++ b/dev-docs/bidders/collectcent.md
@@ -6,6 +6,7 @@ pbjs: true
biddercode: collectcent
enable_download: false
pbjs_version_notes: not in 5.x
+sidebarType: 1
---
### Bid Params
diff --git a/dev-docs/bidders/colombia.md b/dev-docs/bidders/colombia.md
deleted file mode 100644
index 10ea4fe7ea..0000000000
--- a/dev-docs/bidders/colombia.md
+++ /dev/null
@@ -1,17 +0,0 @@
----
-layout: bidder
-title: COLOMBIA
-description: Prebid COLOMBIA Bidder Adaptor
-pbjs: true
-biddercode: colombia
-enable_download: false
-pbjs_version_notes: not ported to 5.x
----
-
-
-### Bid Params
-
-{: .table .table-bordered .table-striped }
-| Name | Scope | Description | Example | Type |
-|---------------|----------|------------------|---------|----------|
-| `placementId` | required | The placement ID(Adunit Id) | | `string` |
diff --git a/dev-docs/bidders/colossus.md b/dev-docs/bidders/colossus.md
index e7b322df75..a377f317eb 100644
--- a/dev-docs/bidders/colossus.md
+++ b/dev-docs/bidders/colossus.md
@@ -11,13 +11,21 @@ gdpr: true
pbjs: false
pbs: true
pbs_app_supported: true
+sidebarType: 1
---
+### Disclosure
+
+This adapter is known to use an HTTP 1 endpoint. Header bidding often generates multiple requests to the same host and bidders are encouraged to change to HTTP 2 or above to help improve publisher page performance via multiplexing.
+
### Prebid.Server Bid Params
{: .table .table-bordered .table-striped }
| Name | Scope | Description | Example | Type |
|----------------|----------|----------------------------------------------------------|------------|-----------|
-| `TagID` | required | Placement Id will be generated on Colossus SSP Platform. | `'0'` | `string` |
+| `TagID` | optional | Placement Id will be generated on Colossus SSP Platform. | `'0'` | `string` |
+| `groupId` | optional | Group Id will be generated on Colossus SSP Platform. | `'0'` | `string` |
+
+You only need to use one parameter: either TagID or groupId
*For prebidJS parametres, look into colossusssp.md*
diff --git a/dev-docs/bidders/colossusssp.md b/dev-docs/bidders/colossusssp.md
index 26d6da21c0..4edb102200 100644
--- a/dev-docs/bidders/colossusssp.md
+++ b/dev-docs/bidders/colossusssp.md
@@ -8,9 +8,9 @@ schain_supported: true
media_types: banner, video, native
userIds: britepoolid, identityLink, unifiedId, id5Id, uid2
gdpr: true
-fpd_supported: true
pbjs: true
pbs: false
+sidebarType: 1
---
### Prebid.JS Bid Params
diff --git a/dev-docs/bidders/compass.md b/dev-docs/bidders/compass.md
index ac2506bc9a..49b7428af3 100644
--- a/dev-docs/bidders/compass.md
+++ b/dev-docs/bidders/compass.md
@@ -4,7 +4,7 @@ title: Compass
description: Prebid Compass Bidder Adapter
biddercode: compass
usp_supported: true
-gdpr_supported: true
+tcfeu_supported: true
coppa_supported: true
schain_supported: true
floors_supported: true
@@ -13,6 +13,7 @@ pbjs: true
pbs: true
pbs_app_supported: true
gvl_id: 883
+sidebarType: 1
---
### Bid Params
diff --git a/dev-docs/bidders/conceptx.md b/dev-docs/bidders/conceptx.md
new file mode 100644
index 0000000000..eb5520af43
--- /dev/null
+++ b/dev-docs/bidders/conceptx.md
@@ -0,0 +1,46 @@
+---
+layout: bidder
+title: Conceptx
+description: Conceptx bidder adapter
+biddercode: conceptx
+tcfeu_supported: false
+usp_supported: false
+coppa_supported: false
+schain_supported: false
+floors_supported: true
+media_types: banner
+userIds: all
+pbjs: true
+pbs: false
+pbs_app_supported: false
+sidebarType: 1
+safeframes_ok: true
+---
+
+
+### Bid Params
+
+{: .table .table-bordered .table-striped }
+| Name | Scope | Description | Example | Type |
+|-------------|----------|----------------------------------------------------------------------|----------|----------|
+| `site` | required | The site `'your-page-name'`. | `'your-page-name'` | `string` |
+| `adunit` | required | The specific adunit | `'some-id-3'` | `string`|
+
+#### Banner example
+
+```js
+var adUnits = [
+ code: 'your-banner-container-id',
+ mediaTypes: {
+ banner: {
+ sizes: [[930, 180]]
+ }
+ },
+ bids: [{
+ bidder: 'conceptx',
+ params: {
+ site: "example", adunit: "some-id-3"
+ }
+ }]
+];
+```
diff --git a/dev-docs/bidders/concert.md b/dev-docs/bidders/concert.md
index 130ee510f9..40f627720a 100644
--- a/dev-docs/bidders/concert.md
+++ b/dev-docs/bidders/concert.md
@@ -6,8 +6,11 @@ hide: true
pbjs: true
biddercode: concert
media_types: banner
-gdpr_supported: true
+tcfeu_supported: false
usp_supported: true
+gpp_supported: true
+userIds: sharedId, unifiedId, uid2
+sidebarType: 1
---
### Bid Params
diff --git a/dev-docs/bidders/connatix.md b/dev-docs/bidders/connatix.md
new file mode 100644
index 0000000000..d961bb7cac
--- /dev/null
+++ b/dev-docs/bidders/connatix.md
@@ -0,0 +1,80 @@
+---
+layout: bidder
+title: Connatix
+description: Connatix Bidder Adapter
+biddercode: connatix
+tcfeu_supported: true
+gvl_id: 143
+usp_supported: true
+coppa_supported: false
+gpp_sids: tcfeu, usp
+schain_supported: false
+dchain_supported: false
+userId: none
+media_types: banner
+safeframes_ok: true
+deals_supported: true
+floors_supported: true
+fpd_supported: false
+pbjs: true
+pbs: false
+prebid_member: false
+multiformat_supported: will-bid-on-one
+ortb_blocking_supported: true
+sidebarType: 1
+---
+
+### Bid Params
+
+{: .table .table-bordered .table-striped }
+| Name | Scope | Description | Example | Type |
+|---------------|----------|-----------------------|-----------|-----------|
+| `placementId` | required | Placement id | `'ed8a9c16-88ea-4724-aa0d-013c3e595e49'` | `string` |
+| `bidfloor` | optional | Floor price | `2.5` | `float` |
+
+#### Example
+
+```js
+var adUnits = [
+ {
+ code: '1',
+ mediaTypes: {
+ banner: {
+ sizes: [[640, 480], [320, 180]],
+ },
+ },
+ bids: [
+ {
+ bidder: 'connatix',
+ params: {
+ placementId: 'e4984e88-9ff4-45a3-8b9d-33aabcad634e', // required
+ bidfloor: 2.5, // optional
+ },
+ },
+ // Add more bidders and their parameters as needed
+ ],
+ },
+ // Define more ad units here if necessary
+];
+```
+
+### Configuration
+
+To maximize revenue efficiency, please enable ```iframe``` user syncing.
+
+Connatix strongly recommends enabling user syncing through iFrames. This functionality improves DSP user match rates and increases the bid rate and bid price. Make sure to call `pbjs.setConfig()` only once. This configuration is optional in Prebid, but required by Connatix.
+
+#### Example configuration
+
+```js
+pbjs.setConfig({
+ userSync: {
+ filterSettings: {
+ iframe: {
+ bidders: ['connatix'],
+ filter: 'include'
+ }
+ }
+ }
+});
+```
diff --git a/dev-docs/bidders/connectad.md b/dev-docs/bidders/connectad.md
index b5f67acab3..ec7418a887 100644
--- a/dev-docs/bidders/connectad.md
+++ b/dev-docs/bidders/connectad.md
@@ -4,7 +4,7 @@ title: ConnectAd
description: ConnectAd Prebid Adaptor
biddercode: connectad
media_types: banner
-gdpr_supported: true
+tcfeu_supported: true
usp_supported: true
coppa_supported: true
schain_supported: true
@@ -15,9 +15,13 @@ floors_supported: true
pbjs: true
pbs: true
gvl_id: 138
+sidebarType: 1
---
-### Prebid Server Note:
+### Prebid Server Note
+
+{% include dev-docs/pbjs-adapter-required-for-pbs.md %}
+
Please reach out to your ConnectAd Account Manager before configuring the S2S adapter for approval and setup.
### Bid Params
diff --git a/dev-docs/bidders/consumable-server.md b/dev-docs/bidders/consumable-server.md
new file mode 100644
index 0000000000..5f5119652f
--- /dev/null
+++ b/dev-docs/bidders/consumable-server.md
@@ -0,0 +1,360 @@
+---
+layout: bidder
+title: Consumable
+description: Prebid Consumable Bidder adapter
+userIds: all
+pbjs: false
+pbs: true
+pbs_app_supported: true
+schain_supported: true
+coppa_supported: true
+tcfeu_supported: true
+floors_supported: true
+usp_supported: true
+gpp_supported: true
+biddercode: consumable
+media_types: banner, video, audio
+gvl_id: 591
+deals_supported: true
+fpd_supported: true
+sidebarType: 1
+multiformat_supported: will-bid-on-one
+safeframes_ok: true
+---
+
+### Note
+
+The Consumable adapter requires setup and approval from your Consumable account manager, even for existing Consumable publishers. Please reach out to your account manager to enable Prebid for your account.
+
+### Disclosure
+
+The Consumable bid adapter may cycle the ad initially shown with a new one at various intervals. This means the advertiser meta-data accompanying the bid response may be incomplete at the time of response.
+
+### Bid Params
+
+{: .table .table-bordered .table-striped }
+| Name | Scope | Description | Example | Type |
+|-------------|----------|--------------------------------|---------|-----------|
+| `siteId` | required | The site ID from Consumable. | `12345` | `integer` |
+| `networkId` | required | The network ID from Consumable. | `9969` | `integer` |
+| `unitId` | required | The unit ID from Consumable. | `987654` | `integer` |
+| `unitName` | required | The unit name from Consumable. | `cnsmbl-unit` | `string` |
+| `placementId` | required | the placementid from Consumable. | `0421008445828ceb46f496700a5fa65e` | `string` |
+
+## Table of contents
+
+* [Table of contents](#table-of-contents)
+* [Introduction](#introduction)
+* [Supported media types](#supported-media-types)
+* [Setup instructions to call Consumable through Prebid Server](#setup-instructions-to-call-consumable-through-prebid-server)
+ * [Call Consumable from a web browser](#call-consumable-from-a-web-browser)
+ * [Call Consumable from Prebid Mobile SDK](#call-consumable-from-prebid-mobile-sdk)
+ * [Call Consumable from CTV/long-form video environment](#call-consumable-from-ctvlong-form-video-environment)
+* [Bid request parameters](#bid-request-parameters)
+ * [Site](#site-banner-video-audio)
+ * [App](#app-or-ctv-banner-video-audio)
+* [Examples](#examples)
+
+## Introduction
+
+Publishers can use Prebid Server in any of the following ways with Consumable. Consumable's adapter supports all of the following methods:
+
+* If you want to call Consumable from a web environment, you can use Prebid.js to call Prebid Server, and then Prebid Server uses our server-side adapter to call Consumable. This reduces workload on the browser. For set up instructions, see [Call Consumable from a web browser](#call-consumable-from-a-web-browser) section on this page.
+* In mobile apps, you can use the Prebid Mobile SDK to call Prebid Server and then Prebid Server uses our server-side adapter to call Consumable. For set up instructions, see [Call Consumable from Prebid Mobile SDK](#call-consumable-from-prebid-mobile-sdk) section on this page.
+* In CTV apps and other long-form video environments, you (or the SSAI vendor) can make a call to Prebid Server using OpenRTB, and then Prebid Server uses our server-side adapter to call Consumable. For set up instructions, see [Call Consumable from CTV/long-form video environment](#call-consumable-from-ctvlong-form-video-environment) section on this page.
+
+## Supported media types
+
+The following table lists the media types that Consumable supports. For information about the the Time-To-Live (TTL) for each media type, see [How Consumable counts impressions](https://kb.Consumableexchange.com/publishers/billing/how_Consumable_counts_impressions.htm) in our Knowledge Base.
+
+{: .table .table-bordered .table-striped }
+| Type | Prebid Server support |
+| ----------- | ----------- |
+| banner | Supported |
+| video | Supported, including ad pods for OTT |
+| audio | Supported |
+
+## Setup instructions to call Consumable through Prebid Server
+
+**Note:** If you are hosting your own Prebid Server instance, you must contact your Consumable Exchange Representative to get an endpoint and setup instructions.
+
+If you are using an existing Prebid Server instance that is already configured to call Consumable, depending on whether you want to call Consumable from the browser, mobile app, CTV, or long-form video, follow any of the below sections to complete the Consumable-specific configuration.
+
+### Call Consumable from a web browser
+
+To call Consumable from a web browser using Prebid Server, you must first configure Prebid.js to call Consumable directly from the browser using our client-side adapter. Follow the quick start instructions provided in Prebid's [Getting Started for Developers](/dev-docs/getting-started.html) documentation. Complete the following steps to complete the Consumable-specific configuration:
+
+1. Build the binary in one of the following ways:
+ [Download Prebid.js](/download.html) from the Prebid site to use the standard compiled binary that Prebid includes in the download process and select **Consumable Exchange** as an adapter.
+2. Define the Consumable-specific parameters at the bidder level which include adding `consumable` as the bidder and the `siteId`. For Consumable's bidder-specific parameters, see the [Bid request parameters](#bid-request-parameters) section below.
+
+ ```javascript
+ {
+ bidder: 'consumable',
+ params: {
+ "networkId": 11,
+ "siteId": 32,
+ "unitId": 42,
+ "unitName": "cnsmbl-audio-728x90-slider"
+ }
+ }
+ ```
+
+3. Define your ad units in the `adUnit` object. This includes the details about the ad slots such as the media types, ad size, and ad code. For more information about this object, see Prebid's [Ad Unit Reference](/dev-docs/adunit-reference.html) documentation.
+4. Enable user syncing by adding the following code in the [pbjs.setConfig()](/dev-docs/publisher-api-reference/setConfig.html) function. Consumable strongly recommends enabling user syncing through iFrames, though we do also support image-based syncing. This functionality improves DSP user match rates and increases the Consumable bid rate and bid price. Make sure to call `pbjs.setConfig()` only once. This configuration is optional in Prebid, but required by Consumable.
+
+ ```javascript
+ pbjs.setConfig({
+ userSync: {
+ iframeEnabled: true,
+ filterSettings: {
+ iframe: {
+ bidders: ['consumable'],
+ filter: 'include'
+ }
+ }
+ }
+ });
+ ```
+
+5. (Optional) Set up First Party Data (FPD). For more information about the data types we support and the instructions for each option, see the [Set up First Party Data (FPD)](/dev-docs/bidders/consumable.html#set-up-first-party-data-fpd) section in our Prebid.js documentation on the Prebid site.
+6. (Optional) If you want to monetize instream video, you need to enable a cache endpoint in the [pbjs.setConfig()](/dev-docs/publisher-api-reference/setConfig.html) function as follows:
+
+ ```javascript
+ pbjs.setConfig({
+ cache: {
+ url: 'https://prebid.adnxs.com/pbc/v1/cache'
+ }
+ });
+ ```
+
+### Call Consumable from Prebid Mobile SDK
+
+**Before you begin:** Contact your Consumable Exchange representative to get your `placementId`. You must provide this placementID to your Prebid Server host company.
+
+**Note:** To implement Prebid Mobile SDK, follow Prebid's [Getting Started with Prebid Mobile](/prebid-mobile/prebid-mobile-getting-started.html) documentation.
+
+To add Consumable as a bidder to your mobile app:
+
+1. Inform your Prebid Server hosting company to add `consumable` as a bidder in the configuration and include the `placementId` that Consumable provides to you at the time of integration.
+2. Define the Consumable-specific parameters at the bidder level. For information about these parameters, see the [Bid request parameters](#bid-request-parameters) section below.
+3. Include any ad unit level required or optional parameters provided in Prebid's [Prebid Mobile API - iOS](/prebid-mobile/pbm-api/ios/ios-sdk-integration-gam-original-api.html) and [Prebid Mobile API - Android](/prebid-mobile/pbm-api/android/android-sdk-integration-gam-original-api.html) documentation.
+
+### Call Consumable from CTV/long-form video environment
+
+**Before you begin:** Contact your Consumable Exchange Representative to get the `placementId`. You must provide this placement ID to your Prebid Server host company.
+
+**Note:** To implement CTV and long-form video using Prebid Server, follow Prebid's [Long Form Video](/prebid-server/use-cases/pbs-lfv.html) documentation.
+
+To add Consumable as a bidder:
+
+1. Inform your Prebid Server hosting company to add `consumable`as a bidder in the configuration and include the `placementId` that Consumable provides to you at the time of integration.
+2. Define the Consumable-specific parameters at the bidder level. For information about these parameters, see the [Bid request parameters](#bid-request-parameters) section below.
+3. Include any ad unit level required or optional parameters provided in Prebid's [/openrtb2/video](/prebid-server/endpoints/openrtb2/pbs-endpoint-video.html) documentation.
+
+## Bid request parameters
+
+For a list of the OpenRTB fields that Consumable supports in bid requests, see [List of supported OpenRTB bid request fields for sellers](https://kb.Consumableexchange.com/publishers/openrtb_integration/list_of_supported_openrtb_bid_request_fields_for_sellers.htm#List_of_supported_OpenRTB_bid_request_fields_for_sellers). The following are the required fields for the various supported media types.
+### Site (Banner, Video, Audio)
+
+You must include these parameters at the bidder level.
+
+{: .table .table-bordered .table-striped }
+| Name | Scope | Description | Example | Type |
+|-------------|----------|--------------------------------|---------|-----------|
+| `siteId` | required | The site ID from Consumable. | `12345` | `integer` |
+| `networkId` | required | The network ID from Consumable. | `9969` | `integer` |
+| `unitId` | required | The unit ID from Consumable. | `987654` | `integer` |
+| `unitName` | required | The unit name from Consumable. | `cnsmbl-unit` | `string` |
+
+### App or CTV (Banner, Video, Audio)
+
+You must include these parameters at the bidder level.
+
+{: .table .table-bordered .table-striped }
+| Key | Scope | Type | Description |
+|---|---|---|---|
+| `placementId` | Required | String | An Consumable-specific identifier that is associated with this ad unit. It will be associated with the single size, if the size is provided. This is similar to a placement ID or an ad unit ID that some other modules have. For example, `'0421008445828ceb46f496700a5fa65e'`|
+
+## Examples
+
+**Banner**
+
+```json
+{
+ "id": "cons-banner-id",
+ "imp": [
+ {
+ "id": "imp-id",
+ "banner": {
+ "w": 300,
+ "h": 250,
+ "id": "1",
+ "pos": 0,
+ "format": [
+ {
+ "w": 300,
+ "h": 250
+ },
+ {
+ "w": 300,
+ "h": 600
+ }
+ ]
+ },
+ "instl": 0,
+ "tagid": "5602709",
+ "bidfloor": 0.02,
+ "bidfloorcur": "USD",
+ "secure": 1,
+ "ext": {
+ "consumable": {
+ "placementId": "0421008445828ceb46f496700a5fa65e"
+ }
+ }
+ }
+ ],
+ "app": {
+ "bundle": "555555555",
+ "storeurl": "https://apps.apple.com/us/app/test-app/id555555555",
+ "publisher": {
+ "id": "123456"
+ },
+ "content": {
+ "title": "Entertainment",
+ "genre": "IAB9-30,IAB6,IAB9-7,IAB1"
+ }
+ },
+ "device": {
+ "ua": "Mozilla/5.0 (iPhone; CPU iPhone OS 15_6_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148",
+ "ip": "10.20.30.40",
+ "ifa": "2E2E2E2E-3B3B-4141-8A8A-181818181818"
+ },
+ "at": 1,
+ "tmax": 200
+}
+```
+
+**Video**
+
+```json
+{
+ "id": "cons-video-example",
+ "imp": [
+ {
+ "id": "imp-id",
+ "video": {
+ "mimes": [
+ "video/mp4",
+ "video/3gpp",
+ "video/webm"
+ ],
+ "minduration": 15,
+ "maxduration": 60,
+ "startdelay": -1,
+ "protocols": [
+ 2,
+ 3,
+ 5,
+ 6
+ ],
+ "w": 320,
+ "h": 480,
+ "placement": 1,
+ "linearity": 1,
+ "minbitrate": 1000,
+ "api": [
+ 1,
+ 2,
+ 3,
+ 5
+ ]
+ },
+ "secure": 1,
+ "ext": {
+ "consumable": {
+ "placementId": "0421008445828ceb46f496700a5fa65e"
+ }
+ }
+ }
+ ],
+ "app": {
+ "bundle": "555555555",
+ "storeurl": "https://apps.apple.com/us/app/test-app/id555555555",
+ "publisher": {
+ "id": "123456"
+ },
+ "content": {
+ "title": "Entertainment",
+ "genre": "IAB9-30,IAB6,IAB9-7,IAB1"
+ }
+ },
+ "device": {
+ "ua": "Mozilla/5.0 (iPhone; CPU iPhone OS 15_6_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E18",
+ "ip": "10.20.30.40",
+ "ifa": "2E2E2E2E-3B3B-4141-8A8A-181818181818"
+ },
+ "at": 1,
+ "tmax": 1000
+}
+```
+
+**Audio**
+
+```json
+{
+ "id": "cons-audio-example",
+ "imp": [
+ {
+ "id": "imp-id",
+ "video": {
+ "mimes": [
+ "video/mp3"
+ ],
+ "minduration": 15,
+ "maxduration": 60,
+ "startdelay": -1,
+ "protocols": [
+ 2,
+ 3,
+ 5,
+ 6
+ ],
+ "placement": 1,
+ "linearity": 1,
+ "minbitrate": 1000,
+ "api": [
+ 1,
+ 2,
+ 3,
+ 5
+ ]
+ },
+ "secure": 1,
+ "ext": {
+ "consumable": {
+ "placementId": "0421008445828ceb46f496700a5fa65e"
+ }
+ }
+ }
+ ],
+ "app": {
+ "bundle": "555555555",
+ "storeurl": "https://apps.apple.com/us/app/test-app/id555555555",
+ "publisher": {
+ "id": "123456"
+ },
+ "content": {
+ "title": "Entertainment",
+ "genre": "IAB9-30,IAB6,IAB9-7,IAB1"
+ }
+ },
+ "device": {
+ "ua": "Mozilla/5.0 (iPhone; CPU iPhone OS 15_6_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E18",
+ "ip": "10.20.30.40",
+ "ifa": "2E2E2E2E-3B3B-4141-8A8A-181818181818"
+ },
+ "at": 1,
+ "tmax": 1000
+}
+```
diff --git a/dev-docs/bidders/consumable.md b/dev-docs/bidders/consumable.md
index 9f56640166..52009f80cf 100644
--- a/dev-docs/bidders/consumable.md
+++ b/dev-docs/bidders/consumable.md
@@ -1,17 +1,34 @@
---
layout: bidder
title: Consumable
-description: Prebid Consumable Bidder Adaptor
+description: Prebid Consumable Bidder adapter
+userIds: all
pbjs: true
-pbs: true
+pbs: false
pbs_app_supported: true
+schain_supported: true
+coppa_supported: true
+tcfeu_supported: true
+floors_supported: true
+usp_supported: true
+gpp_supported: true
biddercode: consumable
-gdpr_supported: true
+media_types: banner, video, audio
gvl_id: 591
+deals_supported: true
+fpd_supported: true
+sidebarType: 1
+multiformat_supported: will-bid-on-one
+safeframes_ok: true
---
-### Note:
-The Consumable adaptor requires setup and approval from your Consumable account manager, even for existing Consumable publishers. Please reach out to your account manager to enable Prebid.js for your account.
+### Note
+
+The Consumable adapter requires setup and approval from your Consumable account manager, even for existing Consumable publishers. Please reach out to your account manager to enable Prebid.js for your account.
+
+### Disclosure
+
+The Consumable bid adapter may cycle the ad initially shown with a new one at various intervals. This means the advertiser meta-data accompanying the bid response may be incomplete at the time of response.
### Bid Params
@@ -22,3 +39,236 @@ The Consumable adaptor requires setup and approval from your Consumable account
| `networkId` | required | The network ID from Consumable. | `9969` | `integer` |
| `unitId` | required | The unit ID from Consumable. | `987654` | `integer` |
| `unitName` | required | The unit name from Consumable. | `cnsmbl-unit` | `string` |
+
+## Table of contents
+
+* [Table of contents](#table-of-contents)
+* [Introduction](#introduction)
+* [Supported media types](#supported-media-types)
+* [Set up Prebid.js to call Consumable directly from the browser](#set-up-prebidjs-to-call-consumable-directly-from-the-browser-client-side-adapter)
+* [Set up Prebid.js to call Consumable through Prebid Server](#set-up-prebidjs-to-call-consumable-through-prebid-server-server-side-adapter)
+* [Set up First Party Data (FPD)](#set-up-first-party-data-fpd)
+ * [Global data](#set-up-first-party-data-fpd)
+ * [Consumable bidder-specific data](#consumable-bidder-specific-data)
+ * [AdUnit-specific data](#adunit-specific-data)
+* [Bid request parameters](#bid-request-parameters)
+ * [Banner](#banner)
+ * [Video](#video)
+* [Examples](#examples)
+
+## Introduction
+
+Publishers can use Prebid.js to call Consumable Exchange (Consumable) in any of the following ways:
+
+* **Call through our client-side adapter:** Prebid.js calls Consumable directly from the browser using our client-side adapter. This option tends to have a better cookie match rate. For configuration instructions, see the [Set up Prebid.js to call Consumable directly from the browser (client-side adapter)](#set-up-prebidjs-to-call-consumable-directly-from-the-browser-client-side-adapter) on this page.
+* **Call through our server-side adapter**: Prebid.js makes a call to Prebid Server and then Prebid Server uses our server-side adapter to call Consumable. This reduces workload on the browser. For configuration instructions, see the [Set up Prebid.js to call Consumable through Prebid Server (server-side adapter)](#set-up-prebidjs-to-call-consumable-through-prebid-server-server-side-adapter) on this page.
+
+**Notes:**
+
+* **Recommended Global Bidder settings:** For our adapter, Consumable recommends enabling local storage. As of Prebid.js 7.x, local storage access must be explicitly specified. By leveraging local storage, Consumable is able to take advantage of the latest features our exchange has to offer. For instructions on enabling local storage, see Prebidâs [pbjs.bidderSettings](/dev-docs/publisher-api-reference/bidderSettings.html) documentation.
+
+### Example
+
+```javascript
+pbjs.bidderSettings = {
+ consumable: {
+ storageAllowed: true
+ }
+};
+```
+
+## Supported media types
+
+The following table lists the media types that Consumable supports.
+
+{: .table .table-bordered .table-striped }
+
+| Type | Prebid Server support |
+|--------| ----------- |
+| banner | Supported |
+| video | Supported |
+
+## Set up Prebid.js to call Consumable directly from the browser (client-side adapter)
+
+To call Consumable from a web browser environment using a Prebid Server integration, see the Consumable-specific configuration steps in [Setup instructions to call Consumable through Prebid Server](/dev-docs/bidders/consumable-server.html#setup-instructions-to-call-consumable-through-prebid-server) in our Prebid Server documentation on the Prebid site.
+
+## Set up Prebid.js to call Consumable through Prebid Server (server-side adapter)
+
+In this configuration, Prebid.js makes a call to Prebid Server and then Prebid Server uses our server-side adapter to call Consumable. Complete the following steps to configure Consumable as a demand source:
+
+1. If you are hosting your own Prebid Server instance, see [Setup instructions to call Consumable through Prebid Server](/dev-docs/pbs-bidders.html#setup-instructions-to-call-consumable-through-prebid-server).
+2. In the `[pbjs.setConfig()]` function, within the `s2sConfig` property, add `consumable` to the `bidders` attribute.
+3. Define the Consumable-specific parameters at the bidder level. For Consumable's bidder-specific parameters, see the [Bid request parameters](#bid-request-parameters) section below.
+4. Define your ad units in the `adUnit` object. For more information about this object, see Prebid's [Ad Unit Reference](/dev-docs/adunit-reference.html) documentation.
+5. Enable user syncing by adding the following code in the [pbjs.setConfig()](/dev-docs/publisher-api-reference/setConfig.html) function. Consumable strongly recommends enabling user syncing through iFrames, though we do also support image-based syncing. This functionality improves DSP user match rates and increases the Consumable bid rate and bid price. Be sure to call `pbjs.setConfig()` only once. This configuration is optional in Prebid, but required by Consumable.
+
+ ```javascript
+ pbjs.setConfig({
+ userSync: {
+ iframeEnabled: true,
+ filterSettings: {
+ iframe: {
+ bidders: ['consumable'],
+ filter: 'include'
+ }
+ }
+ }
+ });
+ ```
+
+6. (Optional) Set up First Party Data (FPD). For more information about the data types we support and the instructions for each option, see the [Set up First Party Data (FPD)](#set-up-first-party-data-fpd) section below.
+7. (Optional) If you want to monetize instream video, you need to enable a cache endpoint in the `[pbjs.setConfig()]` function as follows:
+
+ ```javascript
+ pbjs.setConfig({
+ cache: {
+ url: 'https://prebid.adnxs.com/pbc/v1/cache'
+ }
+ });
+ ```
+
+## Set up First Party Data (FPD)
+
+You can set up the Prebid.js FPD module using Global data, Consumable bidder-specific site data, or ad unit-specific data. Consumable supports deal targeting in all the three FPD types.
+
+### Global data
+
+Use this data type to allow all bid adapters to have access to first party data that might be useful in ad targeting. This is available from Prebid.js version 4.30 and above.
+
+To supply data that is accessible to all bidders, use the `[pbjs.setConfig()]` object as illustrated below. Use the `[setBidderConfig()]` function to supply bidder-specific data. For more information about the standard or more detailed examples, see Prebid's [First Party Data Feature](/features/firstPartyData.html) documentation.
+
+```javascript
+pbjs.setConfig({
+ ortb2: {
+ site: {
+ ...
+ },
+ user: {
+ ...
+ }
+ }
+});
+```
+
+### Consumable bidder-specific data
+
+This data type is available from Prebid version 7.49.0 and above. You can use it to specify key-value pairs that will be included in your query string when targeting deals. For example, if a user visits a news page, you can pass that information by submitting a key-value pair for `category = news`. You can then create a deal in the Consumable UI and activate the deal only on pages that contain `category = news` as the key-value pair.
+
+To include the FPD in a bid request, in the `[pbjs.setConfig()]` object at the `consumable` bidder level, provide the key-values in the `firstPartyData` parameter. Make sure that you set it before the `pbjs.requestBids` configuration. If you want to change the values, you can update the `pbjs.setConfig` once again. The change will be reflected in all future bid requests.
+
+```javascript
+pbjs.setConfig({
+ consumable: {
+ firstPartyData: {
+ '': '',
+ '': '',
+ // ...
+ }
+ }
+});
+```
+
+### AdUnit-specific data
+
+Use this data type to specify key-value pairs at the ad unit level when targeting deals and apply it to all bidders. This will be available from Prebid.js version 7.46 and above. To include the adUnit-specific data in a bid request, see Prebid's [Supplying AdUnit-Specific Data](/features/firstPartyData.html#supplying-adunit-specific-data) documentation.
+
+```javascript
+ortb2Imp: {
+ ext: {
+ data: {
+ pbadslot: "homepage-top-rect",
+ adUnitSpecificAttribute: "123"
+ }
+ }
+}
+```
+
+## Bid request parameters
+
+### Banner
+
+You must include these parameters at the bidder level.
+
+{: .table .table-bordered .table-striped }
+| Name | Scope | Description | Example | Type |
+|-------------|----------|--------------------------------|---------|-----------|
+| `siteId` | required | The site ID from Consumable. | `12345` | `integer` |
+| `networkId` | required | The network ID from Consumable. | `9969` | `integer` |
+| `unitId` | required | The unit ID from Consumable. | `987654` | `integer` |
+| `unitName` | required | The unit name from Consumable. | `cnsmbl-unit` | `string` |
+
+### Video
+
+You must include these parameters at the bidder level.
+
+{: .table .table-bordered .table-striped }
+| Name | Scope | Description | Example | Type |
+|-------------|----------|--------------------------------|---------|-----------|
+| `siteId` | required | The site ID from Consumable. | `12345` | `integer` |
+| `networkId` | required | The network ID from Consumable. | `9969` | `integer` |
+| `unitId` | required | The unit ID from Consumable. | `987654` | `integer` |
+| `unitName` | required | The unit name from Consumable. | `cnsmbl-unit` | `string` |
+
+## Examples
+
+**Banner**
+
+```javascript
+var adUnits = [{
+ code: 'banner-div-a',
+ mediaTypes: {
+ banner: {
+ sizes: [
+ [300, 250],
+ [300, 600]
+ ]
+ }
+ },
+ bids: [{
+ bidder: 'consumable',
+ params: {
+ "networkId": 11,
+ "siteId": 32,
+ "unitId": 42,
+ "unitName": "the-answer"
+ }
+ }
+ ]
+}];
+
+```
+
+**Video:**
+
+```javascript
+var adUnits = [{
+ code: 'video-div-a',
+ mediaTypes: {
+ video: {
+ // Preferred location as of version 4.43
+ video obj
+ playerSize: [300, 250],
+ api: [2],
+ protocols: [2, 3, 5, 6],
+ minduration: 5,
+ maxduration: 30,
+ mimes: ['video/mp4', 'application/javascript'],
+ placement: 3
+ }
+ },
+ bids: [{
+ bidder: 'consumable',
+ params: {
+ "networkId": 11,
+ "siteId": 32,
+ "unitId": 42,
+ "unitName": "the-answer"
+ video: {
+ // openrtb v2.5 compatible video obj
+ // If required, use this to override mediaTypes.video.XX properties
+ }
+ }
+ }]
+}];
+
+```
diff --git a/dev-docs/bidders/contentexchange.md b/dev-docs/bidders/contentexchange.md
index 364ee93d6f..9930f09b62 100644
--- a/dev-docs/bidders/contentexchange.md
+++ b/dev-docs/bidders/contentexchange.md
@@ -6,10 +6,12 @@ biddercode: contentexchange
usp_supported: true
schain_supported: true
media_types: banner, video, native
-gdpr_supported: true
+gvl_id: 864
+tcfeu_supported: true
pbjs: true
pbs: false
pbs_app_supported: false
+sidebarType: 1
---
### Prebid.JS Bid Params
diff --git a/dev-docs/bidders/contentignite.md b/dev-docs/bidders/contentignite.md
index ef2461a98c..452956a9c7 100644
--- a/dev-docs/bidders/contentignite.md
+++ b/dev-docs/bidders/contentignite.md
@@ -4,6 +4,7 @@ title: Content Ignite
description: Prebid Contnent Ignite Adaptor
pbjs: true
biddercode: contentignite
+sidebarType: 1
---
diff --git a/dev-docs/bidders/converge.md b/dev-docs/bidders/converge.md
index d4a010aad0..02c95c05f9 100644
--- a/dev-docs/bidders/converge.md
+++ b/dev-docs/bidders/converge.md
@@ -2,21 +2,28 @@
layout: bidder
title: Converge-Digital
description: Converge-Digital Bidder Adaptor
-pbjs: true
-pbs: true
biddercode: converge
-aliasCode : adkernel
+pbjs: true
+pbs: false
media_types: banner, native, video
-gdpr_supported: true
+tcfeu_supported: true
+gpp_supported: true
+gvl_id: 248
usp_supported: true
coppa_supported: true
pbs_app_supported: true
-gvl_id: 248
schain_supported: true
userIds: all
+fpd_supported: true
+prebid_member: false
+ortb_blocking_supported: true
+multiformat_supported: will-bid-on-one
+floors_supported: true
+aliasCode: adkernel
+sidebarType: 1
---
-### Note:
+### Note
The Converge-Digital Bidding adapter requires setup and approval before implementation. Please reach out to for more details.
diff --git a/dev-docs/bidders/conversant.md b/dev-docs/bidders/conversant.md
deleted file mode 100644
index 80f142c8f2..0000000000
--- a/dev-docs/bidders/conversant.md
+++ /dev/null
@@ -1,130 +0,0 @@
----
-layout: bidder
-title: Conversant
-description: Prebid Conversant Bidder Adaptor
-pbjs: true
-pbs: true
-biddercode: conversant
-media_types: video
-gdpr_supported: true
-userIds: criteo, id5Id, identityLink, liveIntentId, parrableId, pubCommonId, unifiedId, publinkId
-prebid_member: true
-gvl_id: 24
----
-
-
-
-### Bid Params
-
-{: .table .table-bordered .table-striped }
-
-| Name | Scope | Description | Example | Type |
-|---------------|-----------------------------|---------------------------------------------------------------------------------------------------------------------------|-------------------|------------------|
-| `site_id` | optional | The site ID from Conversant. | `'87293'` | `string` |
-| `secure` | required (for secure pages) | If impression requires secure HTTPS URL creative assets and markup. 0 for non-secure, 1 for secure. Default is non-secure | `1` | `integer` |
-| `bidfloor` | optional | Bid floor | `0.50` | `float` |
-| `tag_id` | optional | Identifies specific ad placement. | `'cnvr-test-tag'` | `string` |
-| `white_label_url`| optional | Override the destination URL the request is sent to. | `'https://mydomain.com/hbendpoint'` | `string` |
-| `pubcid_name` | optional | Name of the pub common id. Conversant adapter can read the id directly if the UserID module is absent. Default is _pubcid.| `'_pubcid'` | `string` |
-
-### Video Params
-
-{: .table .table-bordered .table-striped }
-
-| Name | Scope | Description | Example | Type |
-|---------------|-----------------------------|---------------------------------------------------------------------------------------------------------------------------|-------------------|------------------|
-| `position` | optional | Ad position on screen. See details below. Only supported in bids.params. | `1` | `integer` |
-| `mimes` | optional | Array of content MIME types supported. Required for video | `['video/mp4']` | `Array` |
-| `maxduration` | optional | Maximum duration in seconds for this video as an integer. | `30` | `integer` |
-| `api` | optional | Array of supported API frameworks. See details below. | `[2]` | `Array` |
-| `protocols` | optional | Array of supported video protocols. See details below. | `[2]` | `Array` |
-
-
-Video parameters can be included in either `mediaTypes.video` or `bids.params` except where noted.
-
-The following values are defined in the [ORTB 2.5 spec](https://www.iab.com/wp-content/uploads/2016/03/OpenRTB-API-Specification-Version-2-5-FINAL.pdf).
-
-### position
-
-+ `0` : Unknown
-+ `1` : Above the Fold
-+ `3` : Below the Fold
-+ `4` : Header
-+ `5` : Footer
-+ `6` : Sidebar
-+ `7` : Full Screen
-
-### api
-
-+ `1` : VPAID 1.0
-+ `2` : VPAID 2.0
-+ `3` : MRAID 1.0
-+ `4` : ORMMA
-+ `5` : MRAID 2.0
-+ `6` : MRAID 3.0
-
-### protocols
-+ `1` : VAST 1.0
-+ `2` : VAST 2.0
-+ `3` : VAST 3.0
-+ `4` : VAST 1.0 Wrapper
-+ `5` : VAST 2.0 Wrapper
-+ `6` : VAST 3.0 Wrapper
-+ `7` : VAST 4.0
-+ `8` : VAST 4.0 Wrapper
-+ `9` : DAAST 1.0
-+ `10` : DAAST 1.0 Wrapper
-
-### First Party Data
-Publishers should use the `ortb2` method of setting for setting First Party Data.
-Example first party data configuration that is available to all adUnits
-```
-pbjs.setConfig({
- debug: true,
- cache: {
- url: 'https://prebid.adnxs.com/pbc/v1/cache'
- },
- ortb2: {
- site: {
- content: {
- series: 'MySeries',
- season: 'My Season',
- episode: 3,
- title: 'My Title'
- }
- }
- }
-});
-```
-
-Example AdUnit specific data using the `ortb2Imp` object
-```
- var videoAdUnit = {
- code: 'video1',
- mediaTypes: {
- video: {
- playerSize: [[640, 480]]
- }
- },
- ortb2Imp: {
- instl: 1,
- ext: {
- data: {
- adUnitSpecificAttribute: "123"
- }
- }
- },
- bids: [{
- bidder: 'conversant',
- params: {
- site_id: '108060',
- mimes: ['video/mp4', 'video/webm']
- }
- }]
- }
-
- pbjs.que.push(function(){
- pbjs.addAdUnits(videoAdUnits);
- }
-```
-
diff --git a/dev-docs/bidders/copper6.md b/dev-docs/bidders/copper6.md
new file mode 100644
index 0000000000..c51e695ae7
--- /dev/null
+++ b/dev-docs/bidders/copper6.md
@@ -0,0 +1,108 @@
+---
+layout: bidder
+title: SSP Copper6
+description: SSP Copper6 Bidder Adapter
+biddercode: copper6
+aliasCode: adtelligent
+media_types: video,banner
+gvl_id: 410 (adtelligent)
+tcfeu_supported: true
+gpp_supported: true
+userIds: britepoolId, criteo, id5Id, identityLink, liveIntentId, netId, parrableId, pubCommonId, unifiedId
+schain_supported: true
+coppa_supported: true
+usp_supported: true
+safeframes_ok: true
+prebid_member: false
+pbjs: true
+pbs: true
+deals_supported: false
+sidebarType: 1
+---
+
+### Bid params
+
+{: .table .table-bordered .table-striped }
+| Name | Scope | Description | Example | Type |
+|-------|----------|---------------------------------|----------|-----------|
+| `aid` | required | The source ID from Copper6 Media. | `12412` | `integer` |
+
+### Description
+
+Copper6 Media header bidding adapter connects with Copper6 Media demand sources in order to fetch bids.
+This adapter provides a solution for accessing Video demand and display demand.
+
+### Test Parameters
+
+``` javascript
+ var adUnits = [
+
+ // Video instream adUnit
+ {
+ code: 'test-div',
+ mediaTypes: {
+ video: {
+ context: 'instream',
+ playerSize: [640, 480]
+ }
+ },
+ bids: [{
+ bidder: 'copper6',
+ params: {
+ aid: 472386
+ }
+ }]
+ },
+
+ // Video outstream adUnit
+ {
+ code: 'test-div',
+ mediaTypes: {
+ video: {
+ context: 'outstream',
+ playerSize: [640, 480]
+ }
+ },
+ bids: [{
+ bidder: 'copper6',
+ params: {
+ aid: 472386
+ }
+ }]
+ },
+
+ // Video ADPOD adUnit
+ {
+ code: 'test-div',
+ sizes: [[640, 480]],
+ mediaTypes: {
+ video: {
+ context: 'adpod',
+ playerSize: [640, 480]
+ }
+ },
+ bids: [{
+ bidder: 'copper6',
+ params: {
+ aid: 472386
+ }
+ }]
+ },
+
+ // Banner adUnit
+ {
+ code: 'test-div',
+ mediaTypes:{
+ banner:{
+ sizes: [[300, 250]]
+ }
+ }
+ bids: [{
+ bidder: 'copper6',
+ params: {
+ aid: 529814
+ }
+ }]
+ }
+ ];
+```
diff --git a/dev-docs/bidders/cosmos.md b/dev-docs/bidders/cosmos.md
deleted file mode 100644
index deb8130dbe..0000000000
--- a/dev-docs/bidders/cosmos.md
+++ /dev/null
@@ -1,23 +0,0 @@
----
-layout: bidder
-title: COSMOS
-description: Prebid COSMOS Bidder Adapter
-pbjs: true
-biddercode: cosmos
-enable_download: false
-pbjs_version_notes: not ported to 5.x
----
-
-### Integration Note:
-
-Cosmos bidder adapter requires setup and approval from the Cosmos team. Please reach out to your account manager for more information and to start using it.
-
-### Bid params
-
-{: .table .table-bordered .table-striped }
-
-| Name | Scope | Description | Example | Type |
-| ------------------- | -------- | ------------------------------------- | ------------ | --------- |
-| `publisherId` | required | The publisher ID from Cosmos | `1001` | `integer` |
-| `tagId` | optional | Identifier for specific ad placement | `1001` | `integer` |
-| `bidFloor` | optional | The minimum bid value | `1.07` | `float` |
diff --git a/dev-docs/bidders/cox.md b/dev-docs/bidders/cox.md
index 625dd157f4..bdc03f787c 100644
--- a/dev-docs/bidders/cox.md
+++ b/dev-docs/bidders/cox.md
@@ -4,6 +4,7 @@ title: Cox
description: Prebid Cox Bidder Adaptor
pbjs: true
biddercode: cox
+sidebarType: 1
---
### Bid Params
diff --git a/dev-docs/bidders/cpmstar.md b/dev-docs/bidders/cpmstar.md
index 3b97562e91..0573d20d60 100644
--- a/dev-docs/bidders/cpmstar.md
+++ b/dev-docs/bidders/cpmstar.md
@@ -6,9 +6,10 @@ pbjs: true
pbs: true
biddercode: cpmstar
media_types: banner, video
-gdpr_supported: true
+tcfeu_supported: false
usp_supported: true
coppa_supported: true
+sidebarType: 1
---
### Bid Params
diff --git a/dev-docs/bidders/craft.md b/dev-docs/bidders/craft.md
index 857213225b..5df97f5875 100644
--- a/dev-docs/bidders/craft.md
+++ b/dev-docs/bidders/craft.md
@@ -4,11 +4,12 @@ title: craft
description: Prebid craft Bidder Adapter
biddercode: craft
media_types: banner
-gdpr_supported: false
+tcfeu_supported: false
coppa_supported: false
usp_supported: false
schain_supported: false
pbjs: true
+sidebarType: 1
---
### Bid Params
diff --git a/dev-docs/bidders/criteo.md b/dev-docs/bidders/criteo.md
index c1797cdd39..58901ad55e 100644
--- a/dev-docs/bidders/criteo.md
+++ b/dev-docs/bidders/criteo.md
@@ -5,28 +5,29 @@ description: Prebid Criteo Bidder Adaptor
pbjs: true
pbs: true
biddercode: criteo
-media_types: display, native, video
-gdpr_supported: true
+media_types: display, video, native (pbjs only)
+tcfeu_supported: true
+dsa_supported: true
usp_supported: true
userIds: britepoolId, criteo, id5Id, identityLink, liveIntentId, netId, parrableId, pubCommonId, pubProvidedId, sharedId, unifiedId
prebid_member: true
-floors_supported: false
+floors_supported: true
fpd_supported: true
schain_supported: true
gvl_id: 91
+coppa_supported: true
+multiformat_supported: will-bid-on-any
+sidebarType: 1
+gpp_supported: true
---
-### Notes
-{: .alert.alert-warning :}
-*Criteo currently only supports getFloor if floors are in USD and if the publisher is enabling the Criteo Publisher Tag external js call.
+### Notes
{: .alert.alert-warning :}
-Prebid-Server support is on alpha test and is currently a non-finished product. Activation requires setup and approval before beginning. Please reach out to your account manager or publishers@criteo.com for more details.
+This bidder adapter automatically includes the Criteo User ID module and performs iFrame syncs.
-### Disclosure
-
-This bidder sets `adId` on the bid response and hasn't responded to the Prebid.js team to confirm uniqueness
-of this value. See [Issue 6381](https://github.com/prebid/Prebid.js/issues/6381).
+{: .alert.alert-warning :}
+Prebid-Server support is on alpha test and is currently a non-finished product. Activation requires setup and approval before beginning. Please reach out to your account manager or for more details.
### Bid Params
@@ -35,8 +36,25 @@ of this value. See [Issue 6381](https://github.com/prebid/Prebid.js/issues/6381)
|-------------------|----------|----------------------------------------------------------------------------------------------------------------------|-----------------------------------------------|------------|
| `zoneId` | required | (deprecated) The zone ID from Criteo. Should be replaced by `networkId` when using zone matching. | `234234` | `integer` |
| `networkId` | required | The network ID from Criteo. Please reach out your Criteo representative for more details. | `456456` | `integer` |
+| `pubid` | required | publisher id | `'ABC123'` | `string` |
| `nativeCallback` | optional | (Prebid.js only) Callback to perform render in native integrations. Please reach out your Criteo representative for more details. | `function(payload) { console.log(payload); }` | `function` |
| `integrationMode` | optional | (Prebid.js only) Integration mode to use for ad render (none or 'AMP'). Please reach out your Criteo representative for more details. | `'AMP'` | `string` |
+| `publisherSubId` | optional | Custom identifier for reporting. Please reach out your Criteo representative for more details. | `'adunit-1'` | `string` |
+
+### First Party Data
+
+Criteo supports both `ortb2` and `ortb2Imp` methods to set [First Party Data](https://docs.prebid.org/features/firstPartyData.html).
+
+The standard Open RTB properties supported from `ortb2` / `ortb2Imp` are described in the following table.
+
+{: .table .table-bordered .table-striped }
+| Name | Scope | Description | Example | Type |
+|-------------------|----------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|---------|-----------|
+| `ortb2.user` | optional | Details via a Open RTB User object about the human user of the device; the advertising audience. | N/A | `object` |
+| `ortb2.site` | optional | Details via a Open RTB Site object about the publisherâs website. | N/A | `object` |
+| `ortb2Imp.rwdd` | optional | Indicates whether the user receives a reward for viewing the ad, where 0 = no, 1 = yes. | `1` | `integer` |
+
+Besides these standard properties, `ext` field can be used to send any publisher specific data which may have been discussed with a Criteo representative.
### Video Object
@@ -57,12 +75,14 @@ In addition, Criteo adapter relies on parameters specified in the mediaTypes.vid
| `context` | required | `outstream`, `instream` or `long-form` | `instream` | `string` |
| `mimes` | required | List of the content MIME types supported by the player | `["video/mp4"]` | `Array` |
| `playerSize` | required | Width and height of the player | `[640, 480]` | `Array` |
-| `protocols` | required | Supported video bid response protocols. VAST 1.0: `1`; VAST 2.0: `2`; VAST 3.0: `3`; VAST 1.0 Wrapper: `4`; VAST 2.0 Wrapper: `5`; VAST 3.0 Wrapper: `6`; | `|5, 6]` | `Array` |
-| `maxduration` | required | Maximum ad duration in seconds | `20` | `integer` |
-| `api` | required | API frameworks supported. VPAID 1.0: `1`; VPAID 2.0: `2`; MRAID-1: `3`; ORMMA: `4`; MRAID-2: `5`; | `[1, 2]` | `Array` |
+| `protocols` | required | Supported video bid response protocols. VAST 1.0: `1`; VAST 2.0: `2`; VAST 3.0: `3`; VAST 1.0 Wrapper: `4`; VAST 2.0 Wrapper: `5`; VAST 3.0 Wrapper: `6`; | `[5, 6]` | `Array` |
+| `maxduration` | required | Maximum ad duration in seconds | `20` | `integer` |
+| `api` | required | API frameworks supported. VPAID 1.0: `1`; VPAID 2.0: `2`; MRAID 1.0: `3`; ORMMA: `4`; MRAID 2.0: `5`; MRAID 3.0: `6`; OMID 1.0: `7`; | `[1, 2]` | `Array` |
+| `plcmt` | optional | 1=in-stream, 2=accompanying content, 3=interstitial, 4=no content/standalone. Highly recommended to comply with new IAB video specifications. | `1` | `integer` |
#### Example of Video Ad-unit
-```
+
+```javascript
var adUnits = [
{
code: 'video1',
@@ -75,8 +95,8 @@ var adUnits = [
api: [1, 2],
playerSize: [640,480],
protocols: [2, 3],
- skip: 0,
- playbackmethod: [1],
+ skip: 0,
+ playbackmethod: [1],
placement: 1
}
},
@@ -88,3 +108,21 @@ var adUnits = [
}]
}];
```
+
+### Additional Config (Optional)
+
+If you don't want to use the FastBid adapter feature, you can disable it via this configuration:
+
+```javascript
+pbjs.setConfig({
+ 'criteo': {
+ fastBidVersion: 'none',
+ }
+});
+```
+
+Criteo teams are planning to completely remove this feature with Prebid 9.0
+
+Criteo Bid Adapter supports the collection of the user's hashed email, if available.
+
+Please consider passing it to the adapter, following [these guidelines](https://publisherdocs.criteotilt.com/prebid/#hashed-emails).
diff --git a/dev-docs/bidders/cwire.md b/dev-docs/bidders/cwire.md
index 9137f50690..5447a41314 100644
--- a/dev-docs/bidders/cwire.md
+++ b/dev-docs/bidders/cwire.md
@@ -3,19 +3,35 @@ layout: bidder
title: C-WIRE
description: C-WIRE Prebid Bidder Adapter
pbjs: true
+pbs: true
biddercode: cwire
-gdpr_supported: false
+tcfeu_supported: true
+gvl_id: 1081
usp_supported: false
schain_supported: false
-userIds: flocId, uid2Id
-media_types: banner, video
+userIds: none
+enable_download: true
+media_types: banner
+sidebarType: 1
+---
---
### Bid Params
{: .table .table-bordered .table-striped }
-| Name | Scope | Description | Example | Type |
-|---------------|----------|-----------------------|-----------|-----------|
-| `pageId` | required | C-WIRE page id | `2453` | `integer` |
-| `placementId` | required | C-WIRE placement id | `113244` | `integer` |
-| `adUnitElementId` | optional | Target div to write to | `'other_div_id'` | `string` |
+| Name | Scope | Description | Example | Type |
+|---------------|:--------:|:-------------------:|:--------:|:---------:|
+| `pageId` | required | C-WIRE page id | `2453` | `integer` |
+| `placementId` | required | C-WIRE placement id | `113244` | `integer` |
+
+### URL parameters
+
+Additionally, the following parameters can be passed by URL parameters for testing.
+
+{: .table .table-bordered .table-striped }
+| Name | Scope | Description | Example | Type |
+|--------------|:--------:|:--------------------------------:|:-------------------------------:|:--------:|
+| `cwcreative` | optional | C-WIRE creative id to force | `&cwcreative=1234` | `string` |
+| `cwgroups` | optional | C-WIRE group name to force | `&cwgroups=test-group` | `string` |
+| `cwfeatures` | optional | Comma separated list of features | `&cwfeatures=feature1,feature2` | `string` |
+| `cwdebug` | optional | Debug flag | `&cwdebug=true` | `string` |
diff --git a/dev-docs/bidders/dailyhunt.md b/dev-docs/bidders/dailyhunt.md
deleted file mode 100644
index 8054d482d2..0000000000
--- a/dev-docs/bidders/dailyhunt.md
+++ /dev/null
@@ -1,117 +0,0 @@
----
-layout: bidder
-title: Dailyhunt
-description: Prebid Dailyhunt Bidder Adaptor
-pbjs: true
-biddercode: dailyhunt
-media_types: display, native, video
-gdpr_supported: true
-enable_download: false
-pbjs_version_notes: not ported to 5.x
----
-
-### Bid Params
-
-{: .table .table-bordered .table-striped }
-| Name | Scope | Description | Example | Type |
-|------|----------|-------------|---------|------|
-| `placement_id` | required | Serving ads based on placement_id. Contact Dailyhunt for placement_id. | `1` | `int` |
-| `publisher_id` | required | Serving ads based on publisher_id. Contact Dailyhunt for publisher_id. | `1` | `int` |
-| `partner_name` | required | Serving ads based on partner_name. Contact Dailyhunt for partner_name. | `dailyhunt` | `string` |
-| `test_mode` | optional | Serving test mode campaign only. | `true` | `bool` |
-| `bidfloor` | optional | Minimum bid for this bid expressed in CPM. | `1.4` | `float` |
-| `video` | optional | A Video object required if this bid is offered as a video ad opportunity. It is ortb video object. | `video: { w: 640, h: 480, mimes: ["video/mp4"] }` | `object` |
-|`site` | optional | Details about the publisherâs website. It is ortb site object. | `site:{id:"102855",cat:["IAB3-1"],domain:"http://m.dailyhunt.in",page:"http://m.dailyhunt.in/1234.html "}` | `object` |
-| `device` | optional | Details about the userâs device to which the impression will be delivered. It is ortb device object. | `device: { ip: "64.124.253.1", os: "OS X", ua: "Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10.6; en-US; rv:1.9.2.16) }` | `object` |
-| `user` | optional | Details about the human user of the device; the advertising audience. It is ortb user object. | `user: { id: "456789876567897654678987656789", gender: "M", gender: 1990, keywords: "marketing,traveling,reading" }` | `object` |
-| `publisher` | optional | Details about the Publisher of the site. It is ortb publisher object. | `publisher: { id: "8953", name: "dailyhunt", "cat": [ "IAB3-1" ], "domain": "m.dailyhunt.in" }` | `object` |
-
-**Notes: The `video`, `site`, `device`, `user`, `publisher` objects are all ORTB objects. Please refer to the [ORTB documentation](https://www.iab.com/wp-content/uploads/2016/03/OpenRTB-API-Specification-Version-2-5-FINAL.pdf) for additional details.**
-
-# Test Parameters
-```
- var adUnits = [
- {
- code: '/83414793/prebid_test_display',
- sizes: [[300, 250], [320, 50]],
- mediaTypes: {
- banner : {
- sizes: [[300, 250], [320, 50]],
- }
- },
- bids: [
- {
- bidder: 'dailyhunt',
- params: {
- placement_id: 1,
- publisher_id: 1,
- partner_name: 'dailyhunt',
- device: {
- ip: "182.23.143.212"
- }
- }
- }
- ]
- },
- {
- code: '/83414793/prebid_test_native',
- sizes: [[300, 250]],
- mediaTypes: {
- native: {
- title: {
- required: true
- },
- body: {
- required: true
- },
- image: {
- required: true
- },
- cta: {
- required: true
- }
- }
- },
- bids: [
- {
- bidder: 'dailyhunt',
- params: {
- placement_id: 1,
- publisher_id: 1,
- partner_name: 'dailyhunt',
- device: {
- ip: "182.23.143.212"
- }
- }
- }
- ]
- },
- {
- code: '/83414793/prebid_test_video',
- mediaTypes: {
- video: {
- playerSize: [1280, 720],
- context: 'instream'
- }
- },
- bids: [
- {
- bidder: 'dailyhunt',
- params: {
- placement_id: 1,
- publisher_id: 1,
- partner_name: 'dailyhunt',
- device: {
- ip: "182.23.143.212"
- },
- video: {
- mimes: [
- 'video/mp4'
- ]
- }
- }
- }
- ]
- }
- ];
-```
diff --git a/dev-docs/bidders/dailymotion.md b/dev-docs/bidders/dailymotion.md
new file mode 100644
index 0000000000..5557b2befb
--- /dev/null
+++ b/dev-docs/bidders/dailymotion.md
@@ -0,0 +1,176 @@
+---
+layout: bidder
+title: Dailymotion
+description: Dailymotion Prebid Bidder Adapter
+pbjs: true
+pbs: false
+biddercode: dailymotion
+media_types: video
+gvl_id: 573
+tcfeu_supported: true
+usp_supported: true
+coppa_supported: true
+gpp_supported: true
+deals_supported: true
+floors_supported: true
+sidebarType: 1
+safeframes_ok: true
+ortb_blocking_supported: false
+---
+
+### Registration
+
+To use the adapter with any non-test request, you first need to ask an API key from Dailymotion. Please contact us through .
+
+This API key will ensure proper identification of your inventory and allow you to get real bids.
+
+# Configuration options
+
+Before calling this adapter, you need to at least set a video adUnit in an instream context and the API key in the bid parameters:
+
+```javascript
+const adUnits = [
+ {
+ bids: [{
+ bidder: 'dailymotion',
+ params: {
+ apiKey: 'fake_api_key'
+ },
+ }],
+ code: 'test-ad-unit',
+ mediaTypes: {
+ video: {
+ context: 'instream',
+ },
+ },
+ }
+];
+```
+
+`apiKey` is your publisher API key. For testing purpose, you can use "dailymotion-testing".
+
+# Test Parameters
+
+By setting the following bid parameters, you'll get a constant response to any request, to validate your adapter integration:
+
+```javascript
+const adUnits = [
+ {
+ bids: [{
+ bidder: 'dailymotion',
+ params: {
+ apiKey: 'dailymotion-testing',
+ },
+ }],
+ code: 'test-ad-unit',
+ mediaTypes: {
+ video: {
+ context: 'instream',
+ },
+ },
+ }
+];
+```
+
+Please note that failing to set these will result in the adapter not bidding at all.
+
+# Sample video AdUnit
+
+To allow better targeting, you should provide as much context about the video as possible.
+There are three ways of doing this depending on if you're using Dailymotion player or a third party one.
+
+If you are using the Dailymotion player, you should only provide the video `xid` in your ad unit, example:
+
+```javascript
+const adUnits = [
+ {
+ bids: [{
+ bidder: 'dailymotion',
+ params: {
+ apiKey: 'dailymotion-testing',
+ video: {
+ xid: 'x123456' // Dailymotion infrastructure unique video ID
+ },
+ }
+ }],
+ code: 'test-ad-unit',
+ mediaTypes: {
+ video: {
+ api: [2, 7],
+ context: 'instream',
+ startdelay: 0,
+ w: 1280,
+ h: 720,
+ },
+ }
+ }
+];
+```
+
+This will automatically fetch the most up-to-date information about the video.
+If you provide any other metadata in addition to the `xid`, they will be ignored.
+
+If you are using a third party video player, you should not provide any `xid` and instead fill the following members:
+
+```javascript
+const adUnits = [
+ {
+ bids: [{
+ bidder: 'dailymotion',
+ params: {
+ apiKey: 'dailymotion-testing',
+ video: {
+ description: 'this is a video description',
+ duration: 556,
+ iabcat1: ['IAB-2'],
+ iabcat2: ['6', '17'],
+ id: '54321',
+ lang: 'FR',
+ livestream: 0,
+ private: false,
+ tags: 'tag_1,tag_2,tag_3',
+ title: 'test video',
+ topics: 'topic_1, topic_2',
+ }
+ }
+ }],
+ code: 'test-ad-unit',
+ mediaTypes: {
+ video: {
+ api: [2, 7],
+ context: 'instream',
+ startdelay: 0,
+ w: 1280,
+ h: 720,
+ },
+ }
+ }
+];
+```
+
+Each of the following video metadata fields can be added in bids.params.video.
+
+* `description` - Video description
+* `duration` - Video duration in seconds
+* `iabcat1` - List of IAB category IDs from the [1.0 taxonomy](https://github.com/InteractiveAdvertisingBureau/Taxonomies/blob/main/Content%20Taxonomies/Content%20Taxonomy%201.0.tsv)
+* `iabcat2` - List of IAB category IDs from the [2.0 taxonomy](https://github.com/InteractiveAdvertisingBureau/Taxonomies/blob/main/Content%20Taxonomies/Content%20Taxonomy%202.0.tsv) and above
+* `id` - Video unique ID in host video infrastructure
+* `lang` - ISO 639-1 code for main language used in the video
+* `livestream` - 0 = not live, 1 = content is live
+* `private` - True if video is not publicly available
+* `tags` - Tags for the video, comma separated
+* `title` - Video title
+* `topics` - Main topics for the video, comma separated
+* `xid` - Dailymotion video identifier (only applicable if using the Dailymotion player)
+
+If you already specify [First-Party data](https://docs.prebid.org/features/firstPartyData.html) through the `ortb2` object when calling [`pbjs.requestBids(requestObj)`](https://docs.prebid.org/dev-docs/publisher-api-reference/requestBids.html), we will fallback to those values when possible. See the mapping below.
+
+| From ortb2 | Metadata fields |
+|---------------------------------------------------------------------------------|-----------------|
+| `ortb2.site.content.cat` OR `ortb2.site.content.data` where `ext.segtax` is `4` | `iabcat1` |
+| `ortb2.site.content.data` where `ext.segtax` is `5`, `6` or `7` | `iabcat2` |
+| `ortb2.site.content.id` | `id` |
+| `ortb2.site.content.language` | `lang` |
+| `ortb2.site.content.livestream` | `livestream` |
+| `ortb2.site.content.keywords` | `tags` |
+| `ortb2.site.content.title` | `title` |
diff --git a/dev-docs/bidders/danmarket.md b/dev-docs/bidders/danmarket.md
index a410fc2f77..ecdad8b81f 100644
--- a/dev-docs/bidders/danmarket.md
+++ b/dev-docs/bidders/danmarket.md
@@ -4,7 +4,8 @@ title: DAN Marketplace
description: Dentsu Aegis Network Marketplace Bidder Adapter
pbjs: true
biddercode: danmarket
-gdpr_supported: true
+tcfeu_supported: false
+sidebarType: 1
---
diff --git a/dev-docs/bidders/datablocks.md b/dev-docs/bidders/datablocks.md
index 58aea81085..7254c9c936 100644
--- a/dev-docs/bidders/datablocks.md
+++ b/dev-docs/bidders/datablocks.md
@@ -7,12 +7,12 @@ description: Prebid Datablocks Bidder Adaptor
media_types: banner,native
biddercode: datablocks
prebid_member: true
-gdpr_supported: true
+tcfeu_supported: false
pbs_app_supported: true
schain_supported: true
usp_supported: true
userIds: criteo,unifiedId,netId,pubcid
-fpd_supported: true
+sidebarType: 1
---
### Bid Params
@@ -20,7 +20,7 @@ fpd_supported: true
{: .table .table-bordered .table-striped }
| Name | Scope | Description | Example | Type |
|------------|----------|------------------------|---------|----------|
-| sourceId | required | Website Source Id | 111 | integer |
-| host | optional | Network Host to request from | 'prebid.datablocks.bet' | string |
+| source_id | required | Website Source Id | 111 | integer |
+| host | optional | Network Host to request from | 'prebid.dblks.net' | string |
| tagid | optional | Placement ID | 'leaderboard_1' | string |
| vis_optout | optional | Opt out of visibility metric | true | boolean |
diff --git a/dev-docs/bidders/datawrkz.md b/dev-docs/bidders/datawrkz.md
new file mode 100644
index 0000000000..7c450f99d0
--- /dev/null
+++ b/dev-docs/bidders/datawrkz.md
@@ -0,0 +1,46 @@
+---
+layout: bidder
+title: Datawrkz
+description: Prebid Datawrkz Bidder Adaptor
+biddercode: datawrkz
+media_types: banner, video, native
+tcfeu_supported: false
+prebid_member: false
+coppa_supported: true
+usp_supported: true
+floors_supported: true
+pbjs: true
+deals_supported: true
+sidebarType: 1
+---
+
+### Note
+
+The Datawrkz Bidding adapter requires setup before beginning. Please contact us at
+
+### Bid Params
+
+{: .table .table-bordered .table-striped }
+| Name | Scope | Type | Description | Example
+| ---- | ----- | ---- | ----------- | -------
+| `site_id` | required | String | Site id | "test_site_id"
+| `deals` | optional | Array | Array of deal objects | `[{id: "deal_1"},{id: "deal_2"}]`
+| `bidfloor` | optional | Float | Minimum bid for this impression expressed in CPM | `0.5`
+| `outstreamType` | optional | String | Type of outstream video to the played. Available options: inline, slider_top_left, slider_top_right, slider_bottom_left, slider_bottom_right, interstitial_close, and listicle | "inline"
+| `outstreamConfig` | optional | Object | Configuration settings for outstream ad unit | `{ad_unit_audio: 1, show_player_close_button_after: 5, hide_player_control: 0}`
+
+### Deal Object
+
+{: .table .table-bordered .table-striped }
+| Name | Scope | Type | Description | Example
+| ---- | ----- | ---- | ----------- | -------
+| `id` | required | String | Deal id | "test_deal_id"
+
+### Outstream Config Object
+
+{: .table .table-bordered .table-striped }
+| Name | Scope | Type | Description | Example
+| ---- | ----- | ---- | ----------- | -------
+| `ad_unit_audio` | optional | Integer | Set default audio option for the player. 0 to play audio on hover and 2 to mute | `0` or `2`
+| `show_player_close_button_after` | optional | Integer | Show player close button after specified seconds | `5`
+| `hide_player_control` | optional | Integer | Show/hide player controls. 0 to show player controls and 1 to hide | `1`
diff --git a/dev-docs/bidders/decenterads.md b/dev-docs/bidders/decenterads.md
deleted file mode 100644
index 206d453ca3..0000000000
--- a/dev-docs/bidders/decenterads.md
+++ /dev/null
@@ -1,24 +0,0 @@
----
-layout: bidder
-title: DecenterAds
-description: Prebid DecenterAds Bidder Adaptor
-pbs: true
-pbjs: true
-biddercode: decenterads
-media_types: banner, video, native
-gdpr_supported: true
-pbs_app_supported: true
-enable_download: false
-pbjs_version_notes: not ported to 5.x
----
-
-### Note:
-
-The Example Bidding adapter requires setup before beginning. Please contact us at support@decenterads.com
-
-### Bid Params
-
-{: .table .table-bordered .table-striped }
-| Name | Scope | Description | Example | Type |
-|---------------|----------|--------------|-----------|----------|
-| `placementId` | required | Placement ID | `'12345'` | `string` |
diff --git a/dev-docs/bidders/deepintent.md b/dev-docs/bidders/deepintent.md
index 762de6591f..edb31fd240 100644
--- a/dev-docs/bidders/deepintent.md
+++ b/dev-docs/bidders/deepintent.md
@@ -6,9 +6,12 @@ pbjs: true
pbs: true
biddercode: deepintent
media_types: banner, video
-gdpr_supported: true
+tcfeu_supported: true
usp_supported: true
+coppa_supported: true
+gpp_sids: usp, usnat, usstate_all
gvl_id: 541
+sidebarType: 1
---
### Bid Params
@@ -22,13 +25,10 @@ gvl_id: 541
| `user` | optional | user params according to IAB standards | `'{"gender":"F"}''`| `object` |
| `pos` | optional | ad position as per IAB standards | `1` | `number` |
-
-
### Configuration
Deepintent recommends the UserSync configuration below. Without it, the Deepintent adapter will not able to perform user syncs, which lowers match rate and reduces monetization.
-
```javascript
pbjs.setConfig({
userSync: {
@@ -41,7 +41,9 @@ pbjs.setConfig({
}
});
```
+
### AdUnit Format for Banner
+
```javascript
var adUnits = [
{
@@ -75,27 +77,30 @@ var adUnits = [
}
];
```
+
### video parameters
+
Deepintent supports video as of Prebid v1.16.0
{: .table .table-bordered .table-striped }
-| Name | Scope | Description | Example |
+| Name | Scope | Description | Example |
| :----------------------| :------- | :---------------------------------------------------------- | :------ |
-| `video.mimes` | required | Video MIME types | `['video/mp4','video/x-flv']` |
-| `video.skippable` | optional | If 'true', user can skip ad | `true` |
-| `video.minduration` | optional | Minimum ad duration in seconds | `5` |
-| `video.maxduration` | optional | Maximum ad duration in seconds | `30` |
-| `video.startdelay` | optional | Start delay in seconds for pre-roll, mid-roll, or post-roll ad placements | `5` |
-| `video.playbackmethod` | optional | Defines whether inventory is user-initiated or autoplay sound on/off Values: `1`: Auto-play, sound on `2`: Auto-play, sound off `3`: Click-to-play `4`: mouse-over | `1` |
-| `video.api` | optional | API frameworks supported Values: `1`: VPAID 1.0 `2`: VPAID 2.0 `3`: MRAID-1 `4`: ORMMA `5`: MRAID-2 | `[1, 2]` |
-| `video.protocols` | optional | Supported video bid response protocols Values `1`: VAST 1.0 `2`: VAST 2.0 `3`: VAST 3.0 `4`: VAST 1.0 Wrapper `5`: VAST 2.0 Wrapper `6`: VAST 3.0 Wrapper | `[5, 6]` |
-| `video.battr` | optional | Blocked creative attributes, See [OpenRTB 2.5 specification](https://www.iab.com/wp-content/uploads/2016/03/OpenRTB-API-Specification-Version-2-5-FINAL.pdf), List 5.3 for values | `[3, 9]` |
-| `video.linearity` | optional | Indicates if the impression is linear or nonlinear Values: `1`: Linear/In-Stream `2`: Non-Linear/Overlay. | `1` |
-| `video.placement` | optional | Video placement type. See [OpenRTB 2.5 specification](https://www.iab.com/wp-content/uploads/2016/03/OpenRTB-API-Specification-Version-2-5-FINAL.pdf), List 5.9 for Values | `1` |
-| `video.minbitrate` | optional | Minumim bit rate in Kbps. | 50 |
-| `video.maxbitrate` | optional | Maximum bit rate in Kbps. | 70 |
+| `video.mimes` | required | Video MIME types | `['video/mp4','video/x-flv']` |
+| `video.skippable` | optional | If 'true', user can skip ad | `true` |
+| `video.minduration` | optional | Minimum ad duration in seconds | `5` |
+| `video.maxduration` | optional | Maximum ad duration in seconds | `30` |
+| `video.startdelay` | optional | Start delay in seconds for pre-roll, mid-roll, or post-roll ad placements | `5` |
+| `video.playbackmethod` | optional | Defines whether inventory is user-initiated or autoplay sound on/off Values: `1`: Auto-play, sound on `2`: Auto-play, sound off `3`: Click-to-play `4`: mouse-over | `1` |
+| `video.api` | optional | API frameworks supported Values: `1`: VPAID 1.0 `2`: VPAID 2.0 `3`: MRAID-1 `4`: ORMMA `5`: MRAID-2 | `[1, 2]` |
+| `video.protocols` | optional | Supported video bid response protocols Values `1`: VAST 1.0 `2`: VAST 2.0 `3`: VAST 3.0 `4`: VAST 1.0 Wrapper `5`: VAST 2.0 Wrapper `6`: VAST 3.0 Wrapper | `[5, 6]` |
+| `video.battr` | optional | Blocked creative attributes, See [OpenRTB 2.5 specification](https://www.iab.com/wp-content/uploads/2016/03/OpenRTB-API-Specification-Version-2-5-FINAL.pdf), List 5.3 for values | `[3, 9]` |
+| `video.linearity` | optional | Indicates if the impression is linear or nonlinear Values: `1`: Linear/In-Stream `2`: Non-Linear/Overlay. | `1` |
+| `video.placement` | optional | Video placement type. See [OpenRTB 2.5 specification](https://www.iab.com/wp-content/uploads/2016/03/OpenRTB-API-Specification-Version-2-5-FINAL.pdf), List 5.9 for Values | `1` |
+| `video.minbitrate` | optional | Minumim bit rate in Kbps. | 50 |
+| `video.maxbitrate` | optional | Maximum bit rate in Kbps. | 70 |
### AdUnit Format for Video
+
```javascript
var videoAdUnits = [
{
@@ -109,6 +114,7 @@ var videoAdUnits = [
bids: [{
bidder: 'deepintent',
params: {
+ tagId: "1399", // required
publisherId: '32572', // required
adSlot: '38519891@300x250' // required
video: {
diff --git a/dev-docs/bidders/definemedia.md b/dev-docs/bidders/definemedia.md
new file mode 100644
index 0000000000..ca38797ff8
--- /dev/null
+++ b/dev-docs/bidders/definemedia.md
@@ -0,0 +1,25 @@
+---
+layout: bidder
+title: DEFINE MEDIA
+description: Prebid DEFINE MEDIA Bidder Adapter
+biddercode: definemedia
+tcfeu_supported: true
+gvl_id: 440
+media_types: banner, native
+pbjs: false
+pbs: true
+pbs_app_supported: false
+prebid_member: false
+---
+
+### Registration
+
+Please reach out to our account management team to get started. Contact information is available under [a link](https://definemedia.de).
+
+### Bid Params
+
+{: .table .table-bordered .table-striped }
+| Name | Scope | Description | Example | Type |
+|---------------|----------|--------------|-----------|----------|
+| `mandantId` | required | Mandant ID | `5` | `integer`|
+| `adslotId` | optional | Adslot ID | `199` | `integer`|
diff --git a/dev-docs/bidders/defymedia.md b/dev-docs/bidders/defymedia.md
index beb21724e2..c20713b198 100644
--- a/dev-docs/bidders/defymedia.md
+++ b/dev-docs/bidders/defymedia.md
@@ -5,6 +5,7 @@ description: Prebid Defy Media Bidder Adaptor
pbjs: true
biddercode: defymedia
aliasCode : appnexus
+sidebarType: 1
---
### Bid Params
diff --git a/dev-docs/bidders/deltaprojects.md b/dev-docs/bidders/deltaprojects.md
index cafcc93ef8..397b461908 100644
--- a/dev-docs/bidders/deltaprojects.md
+++ b/dev-docs/bidders/deltaprojects.md
@@ -3,16 +3,18 @@ layout: bidder
title: Delta Projects
description: Prebid Delta Projects Bidder Adapter
biddercode: deltaprojects
-gdpr_supported: true
+tcfeu_supported: true
gvl_id: 209
media_types: banner
safeframes_ok: false
floors_supported: true
pbjs: true
+sidebarType: 1
---
### Note
-Contact publishers@deltaprojects.com to get a publisher id and to agree on a currency. Delta Projects
+
+Contact to get a publisher id and to agree on a currency. Delta Projects
will always bid and log values in the agreed upon currency, utilizing the currency module if necessary and available.
### Bid Params
@@ -20,14 +22,16 @@ will always bid and log values in the agreed upon currency, utilizing the curren
{: .table .table-bordered .table-striped }
| Name | Scope | Description | Example | Type |
|----------------|----------|--------------------------------------------------------------------------|-----------------|----------|
-| `publisherId` | required | Publisher ID from Delta Projects. Contact publishers@deltaprojects.com | `'4'` | `string` |
+| `publisherId` | required | Publisher ID from Delta Projects. Contact | `'4'` | `string` |
| `currency` | optional | The bid currency agreed with Delta Projects. | `'SEK'` | `string` |
| `siteId` | optional | Site ID from Delta Projects. | `'example.com'` | `string` |
| `tagId` | optional | Identifier for specific ad placement or ad tag. | `'1234'` | `string` |
| `test` | optional | Indicate test model. Don't set anything if it is not in test mode. | `'true'` | `string` |
### Example
+
#### Banner
+
```
var adUnits = [
{
diff --git a/dev-docs/bidders/denakop.md b/dev-docs/bidders/denakop.md
index 0b390e05e4..80a075e07f 100644
--- a/dev-docs/bidders/denakop.md
+++ b/dev-docs/bidders/denakop.md
@@ -2,19 +2,28 @@
layout: bidder
title: Denakop
description: Denakop Bidder Adaptor
-pbjs: true
-pbs: true
biddercode: denakop
+pbjs: true
+pbs: false
media_types: banner, native, video
-gdpr_supported: true
+gvl_id: 14 (adkernel)
+tcfeu_supported: true
+gpp_supported: true
usp_supported: true
coppa_supported: true
pbs_app_supported: true
schain_supported: true
-aliasCode : adkernel
+userIds: all
+fpd_supported: true
+prebid_member: false
+ortb_blocking_supported: true
+multiformat_supported: will-bid-on-one
+floors_supported: true
+aliasCode: adkernel
+sidebarType: 1
---
-### Note:
+### Note
The Denakop bidding adapter requires setup and approval before implementation. Please reach out to for more details.
diff --git a/dev-docs/bidders/dgads.md b/dev-docs/bidders/dgads.md
deleted file mode 100644
index 4575da5bc6..0000000000
--- a/dev-docs/bidders/dgads.md
+++ /dev/null
@@ -1,19 +0,0 @@
----
-layout: bidder
-title: dgads
-description: Prebid dgads Bidder Adapter
-pbjs: true
-biddercode: dgads
-media_types: native
-enable_download: false
-pbjs_version_notes: not ported to 5.x
----
-
-
-### Bid Params
-
-{: .table .table-bordered .table-striped }
-| Name | Scope | Description | Example | Type |
-|---------------|----------|--------------|---------|----------|
-| `site_id` | required | Publisher ID | `'12'` | `string` |
-| `location_id` | required | Placement ID | `'23'` | `string` |
diff --git a/dev-docs/bidders/dianomi.md b/dev-docs/bidders/dianomi.md
new file mode 100644
index 0000000000..6b9a9f8867
--- /dev/null
+++ b/dev-docs/bidders/dianomi.md
@@ -0,0 +1,116 @@
+---
+layout: bidder
+title: Dianomi
+description: Prebid Dianomi Bidder Adaptor
+biddercode: dianomi
+media_types: banner, native, video
+coppa_supported: false
+tcfeu_supported: true
+usp_supported: true
+prebid_member: true
+pbjs: true
+pbs: true
+schain_supported: true
+userIds: all
+gvl_id: 885
+floors_supported: true
+fpd_supported: true
+multiformat_supported: will-bid-on-one
+sidebarType: 1
+---
+
+### Note
+
+- Supports `display` and `banner` formats.
+- Uses `OpenRTB` standard.
+
+### Registration
+
+The Dianomi Adapter requires setup before beginning. Please contact us at .
+
+### Bid params
+
+{: .table .table-bordered .table-striped }
+| Name | Scope | Description | Example | Type |
+|-------------|----------------------------|----------------------|--------------------|-----------|
+| `smartadId` | required | Placement ID | `12345` | `integer` |
+| `endpoint` | optional | for testing only | `www-prebid.dianomi.com` | `string` |
+
+Note: smartadId is a pre agreed ID between the publisher and Dianomi.
+
+#### Native example
+
+```js
+var adUnits = [
+ code: 'your-native-container-id',
+ mediaTypes: {
+ native: {
+ image: {
+ required: false,
+ sizes: [100, 50]
+ },
+ title: {
+ required: false,
+ len: 140
+ },
+ sponsoredBy: {
+ required: false
+ },
+ clickUrl: {
+ required: false
+ },
+ body: {
+ required: false
+ },
+ icon: {
+ required: false,
+ sizes: [50, 50]
+ }
+ }
+ },
+ bids: [{
+ bidder: 'dianomi',
+ params: {
+ smartadId: 9607
+ }
+ }]
+];
+```
+
+#### Banner example
+
+```js
+var adUnits = [
+ code: 'your-banner-container-id',
+ mediaTypes: {
+ banner: {
+ sizes: [[300, 250]]
+ }
+ },
+ bids: [{
+ bidder: 'dianomi',
+ params: {
+ smartadId: 9607
+ }
+ }]
+];
+```
+
+#### Video example
+
+```js
+var adUnits = [
+ code: 'your-video-container-id',
+ mediaTypes: {
+ video: {
+ playerSize: [[640, 480]]
+ }
+ },
+ bids: [{
+ bidder: 'dianomi',
+ params: {
+ smartadId: 9607
+ }
+ }]
+];
+```
diff --git a/dev-docs/bidders/didnadisplay.md b/dev-docs/bidders/didnadisplay.md
new file mode 100644
index 0000000000..fe42c420cd
--- /dev/null
+++ b/dev-docs/bidders/didnadisplay.md
@@ -0,0 +1,36 @@
+---
+layout: bidder
+title: diDNA Display
+description: diDNA Display Bidder Adaptor
+biddercode: didnadisplay
+pbjs: true
+pbs: false
+media_types: banner, native, video
+gvl_id: 14 (adkernel)
+tcfeu_supported: true
+gpp_supported: true
+usp_supported: true
+coppa_supported: true
+pbs_app_supported: false
+schain_supported: true
+userIds: all
+fpd_supported: true
+prebid_member: false
+ortb_blocking_supported: true
+multiformat_supported: will-bid-on-one
+floors_supported: true
+aliasCode: adkernel
+sidebarType: 1
+---
+
+### Note
+
+The diDNA Display bidding adapter requires setup and approval before implementation. Please reach out to for more details.
+
+### Bid Params
+
+{: .table .table-bordered .table-striped }
+| Name | Scope | Description | Example | Type |
+|----------|----------|-----------------------|---------------------------|----------|
+| `host` | required | RTB host | `'cpm.didna.io'` | `string` |
+| `zoneId` | required | Zone Id | 30164 | `integer` |
diff --git a/dev-docs/bidders/didnavideo.md b/dev-docs/bidders/didnavideo.md
index c73e778d06..51e51dbb86 100644
--- a/dev-docs/bidders/didnavideo.md
+++ b/dev-docs/bidders/didnavideo.md
@@ -6,13 +6,16 @@ pbjs: true
biddercode: didnavideo
aliasCode: aniview
media_types: banner, video
-gdpr_supported: true
+gvl_id: 780 (aniview)
+tcfeu_supported: true
usp_supported: true
schain_supported: true
safeframes_ok: true
+sidebarType: 1
---
-### Note:
+### Note
+
For more information about [diDNA](http://didna.io/).
### Bid Params
@@ -24,7 +27,8 @@ For more information about [diDNA](http://didna.io/).
| `AV_CHANNELID` | required | Channel id | `'5a5f17a728a06102d14c2718'` | `string` |
### Test Parameters
-```
+
+```javascript
videoAdUnit = [
{
code: 'video1',
diff --git a/dev-docs/bidders/digiad.md b/dev-docs/bidders/digiad.md
new file mode 100644
index 0000000000..83e0f0f629
--- /dev/null
+++ b/dev-docs/bidders/digiad.md
@@ -0,0 +1,36 @@
+---
+layout: bidder
+title: Digiad DMCC
+description: Digiad DMCC Adaptor
+biddercode: digiad
+pbjs: true
+pbs: false
+media_types: banner, native, video
+gvl_id: 14 (adkernel)
+tcfeu_supported: true
+gpp_supported: true
+usp_supported: true
+coppa_supported: true
+pbs_app_supported: false
+schain_supported: true
+userIds: all
+fpd_supported: true
+prebid_member: false
+ortb_blocking_supported: true
+multiformat_supported: will-bid-on-one
+floors_supported: true
+aliasCode: adkernel
+sidebarType: 1
+---
+
+### Note
+
+The Digiad DMCC bidding adapter requires setup and approval before implementation. Please reach out to for more details.
+
+### Bid Params
+
+{: .table .table-bordered .table-striped }
+| Name | Scope | Description | Example | Type |
+|----------|----------|-----------------------|---------------------------|----------|
+| `host` | required | RTB host | `'cpm.digidayin.com'` | `string` |
+| `zoneId` | required | Zone Id | 30164 | `integer` |
diff --git a/dev-docs/bidders/discovery.md b/dev-docs/bidders/discovery.md
new file mode 100644
index 0000000000..e094aea49c
--- /dev/null
+++ b/dev-docs/bidders/discovery.md
@@ -0,0 +1,82 @@
+---
+layout: bidder
+title: DiscoveryDsp
+description: DiscoveryDsp Prebid Bidder Adapter
+biddercode: discovery
+media_types: banner,native
+pbjs: true
+enable_download: true
+sidebarType: 1
+---
+### Note
+
+The DiscoveryDSP Bidding adapter requires setup before beginning. Please contact us at
+
+### Bid Params
+
+{: .table .table-bordered .table-striped }
+| Name | Scope | Description | Example | Type |
+|---------------|----------|-----------------------|-----------|-----------|
+| `token` | required | publisher token | `'1e100887dd614b7f69fdd1360437'` | `string` |
+| `test` | recommend | 0(default): production env mode. 1: dev env mode and no charge.we will bid Higher frequency to make debug easier. | `1/0` | `Number` |
+| `tagid` | required | tagid | `'abcdefg'` | `string` |
+| `publisher` | required | publisher id | `'abcdefg'` | `string` |
+
+#### Prebid Server Test Request
+
+banner
+
+```
+var adUnits = [
+ {
+ code: "test-div-1",
+ mediaTypes: {
+ banner: {
+ sizes: [[300, 250]],
+ },
+ },
+ bids: [
+ {
+ bidder: "discovery",
+ params: {
+ token: "a4e66b955e3b19b88a357b4ace01ac31",
+ tagid: 'test_tagid',
+ publisher: 'test_publisher'
+ },
+ },
+ ],
+ },
+ ];
+```
+
+native
+
+```
+var adUnits = [
+ {
+ code: "test-div-2",
+ mediaTypes: {
+ native: {
+ title: {
+ required: true
+ },
+ image: {
+ required: true
+ }
+ }
+ },
+ bids: [
+ {
+ bidder: "discovery",
+ params: {
+ token: "03d467db07075683b0c373b6b3d3113c",
+ tagid: 'test_tagid',
+ publisher: 'test_publisher'
+ },
+ },
+ ],
+ },
+ ];
+```
+
+`If the bid interface status code is 200, the bid is successful, if the status code is 204, there is no bid, please send the request parameters to media-support@popin.cc, we will be the first time to feedback`
diff --git a/dev-docs/bidders/displayio.md b/dev-docs/bidders/displayio.md
new file mode 100644
index 0000000000..9eb9d291c8
--- /dev/null
+++ b/dev-docs/bidders/displayio.md
@@ -0,0 +1,39 @@
+---
+layout: bidder
+title: Displayio
+description: Prebid Displayio Bidder Adapter
+biddercode: displayio
+media_types: banner, video
+tcfeu_supported: true
+usp_supported: true
+safeframes_ok: true
+pbjs: true
+pbs: false
+prebid_member: false
+gvl_id: none
+sidebarType: 1
+---
+
+### Note
+
+Before configuring the display.io adapter you must reach out your account manager from display.io team (or send a request to ) for approval and setup steps.
+
+### Bid Params
+
+{: .table .table-bordered .table-striped }
+
+| Name | Scope | Type | Description | Example |
+|----------------| ----- | ---- |----------------------------------------|--------------------------------------------------------------|
+| `siteId` | required | Number | SiteId and PlacementID are your inventory IDs on the display.io platform (please ask your Account Manager for your site and placement IDs). | 7753 |
+| `placementId` | required | Number | SiteId and PlacementID are your inventory IDs on the display.io platform (please ask your Account Manager for your site and placement IDs). | 5375 |
+| `adsSrvDomain` | required | String | | "appsrv.display.io" |
+| `cdnDomain` | required | String | | "cdn.display.io" |
+| `renderURL` | optional | String | | "" |
+| `pageCategory` | optional | String | Comma-separated list of IAB content categories that describe the current page or view of the site, list of available values. | "pageCategory1, pageCategory2" |
+| `keywords` | optional | String | Comma-separated list of keywords describing the content. | "keyword1, keyword2, keyword3" |
+| `custom` | optional | Object | User-defined targeting key-value pairs. custom applies to a specific unit. | `{headerTextColor: "red", fixedHeaderSelector: '.site-header'}` |
+| `custom.headerText`| optional | String | Ad container header text. By default, text is "Scroll to continue with content". Limited to 50 characters. | "Our awesome advertisement" |
+| `custom.headerTextColor`| optional | String | Ad container header text color, "white" by default | "#2196f3" |
+| `custom.headerBackgroundColor`| optional | String | Ad container header background color, "black" by default | "#fff" |
+| `custom.adContainerBackgroundColor`| optional | String | Ad container body background color, "transparent" by default | "#000" |
+| `custom.fixedHeaderSelector`| optional | String | In case your webpage has a fixed header â the header Id attribute or header class attribute should be defined as a value for parameter fixedHeaderSelector. | ".site-header" |
diff --git a/dev-docs/bidders/displayioads.md b/dev-docs/bidders/displayioads.md
new file mode 100644
index 0000000000..ec81d2d8c5
--- /dev/null
+++ b/dev-docs/bidders/displayioads.md
@@ -0,0 +1,36 @@
+---
+layout: bidder
+title: DisplayioAds
+description: DisplayioAds Bidder Adaptor
+biddercode: displayioads
+pbjs: true
+pbs: false
+media_types: banner, native, video
+gvl_id: 14 (adkernel)
+tcfeu_supported: true
+gpp_supported: true
+usp_supported: true
+coppa_supported: true
+pbs_app_supported: true
+schain_supported: true
+userIds: all
+fpd_supported: true
+prebid_member: false
+ortb_blocking_supported: true
+multiformat_supported: will-bid-on-one
+floors_supported: true
+aliasCode: adkernel
+sidebarType: 1
+---
+
+### Note
+
+The DisplayioAds bidding adapter requires setup and approval before implementation. Please reach out to for more details.
+
+### Bid Params
+
+{: .table .table-bordered .table-striped }
+| Name | Scope | Description | Example | Type |
+|----------|----------|-----------------------|---------------------------|----------|
+| `host` | required | RTB host | `'cpm.displayio.cloud'` | `string` |
+| `zoneId` | required | Zone Id | 30164 | `integer` |
diff --git a/dev-docs/bidders/districtm.md b/dev-docs/bidders/districtm.md
index aa75acb5f7..8174d7ac17 100644
--- a/dev-docs/bidders/districtm.md
+++ b/dev-docs/bidders/districtm.md
@@ -6,10 +6,11 @@ top_nav_section: dev_docs
nav_section: reference
pbjs: true
biddercode: districtm
-aliasCode : appnexus
-sidebarType: 1
isBidder: true
gvl_id: 144
+pbjs_version_notes: not supported in 7.0+
+sidebarType: 1
+enable_download: false
---
### Bid Params
diff --git a/dev-docs/bidders/districtmdmx.md b/dev-docs/bidders/districtmdmx.md
index fef2443cc5..b0996aeba9 100644
--- a/dev-docs/bidders/districtmdmx.md
+++ b/dev-docs/bidders/districtmdmx.md
@@ -4,19 +4,20 @@ title: DistrictmDMX
description: Prebid DistrictmDMX Bidder Adaptor
pbjs: true
biddercode: districtmDMX
-gdpr_supported: true
+tcfeu_supported: false
schain_supported: true
floors_supported: true
usp_supported: true
coppa_supported: true
userIds: britepoolId, criteo, id5Id, identityLink, intentiq, liveIntentId, netId, parrableId, pubCommonId, unifiedId
+pbjs_version_notes: not supported in 7.0+
+sidebarType: 1
---
-
### Bid Params
-##### Prebid version 1.0 and above.
+#### Prebid version 1.0 and above
{: .table .table-bordered .table-striped }
| Name | Scope | Description | Example | Type |
@@ -24,7 +25,7 @@ userIds: britepoolId, criteo, id5Id, identityLink, intentiq, liveIntentId, netId
| `dmxid` | required | Placement Id | `100001` | `integer` |
| `memberid` | required | Account id | `100003` | `integer` |
-##### Prebid 0.34~ legacy
+#### Prebid 0.34~ legacy
{: .table .table-bordered .table-striped }
| Name | Scope | Description | Example | Type |
diff --git a/dev-docs/bidders/distroscale.md b/dev-docs/bidders/distroscale.md
new file mode 100644
index 0000000000..380916a4d6
--- /dev/null
+++ b/dev-docs/bidders/distroscale.md
@@ -0,0 +1,50 @@
+---
+layout: bidder
+title: DistroScale
+description: Prebid DistroScale Bidder Adaptor
+biddercode: distroscale
+media_types: banner
+pbjs: true
+pbs: false
+tcfeu_supported: true
+usp_supported: true
+coppa_supported: true
+schain_supported: true
+fpd_supported: true
+userIds: all
+floors_supported: true
+safeframes_ok: false
+prebid_member: true
+gvl_id: 754
+sidebarType: 1
+---
+
+### Bid Params
+
+{: .table .table-bordered .table-striped }
+| Name | Scope | Description | Example | Type |
+|---------------|----------|--------------------|-----------------|----------|
+| `pubid` | required | Publisher ID | `'12345'` | `string` |
+| `zoneid` | optional | Zone ID | `'67890'` | `string` |
+
+### Prebid Test Request
+
+```javascript
+var adUnits = [{
+ code: 'banner-1',
+ mediaTypes: {
+ banner: {
+ sizes: [[300, 250]],
+ }
+ },
+ bids: [{
+ bidder: 'distroscale',
+ params: {
+ pubid: '12345' // required, must be a string
+ ,zoneid: '67890' // optional, must be a string
+ }
+ }]
+}];
+```
+
+These test parameters can be used to verify that the DistroScale adapter is working properly. This example includes a DistroScale test publisher ID, an optional zone ID and sizes that would match with the test creative.
diff --git a/dev-docs/bidders/divreach.md b/dev-docs/bidders/divreach.md
index 463708821b..1dfb682416 100644
--- a/dev-docs/bidders/divreach.md
+++ b/dev-docs/bidders/divreach.md
@@ -6,6 +6,7 @@ pbjs: true
biddercode: divreach
aliasCode: adbutler
media_types: banner
+sidebarType: 1
---
### Bid Params
diff --git a/dev-docs/bidders/djax.md b/dev-docs/bidders/djax.md
deleted file mode 100644
index 477d34f1ec..0000000000
--- a/dev-docs/bidders/djax.md
+++ /dev/null
@@ -1,17 +0,0 @@
----
-layout: bidder
-title: DJAX
-description: Prebid djax Bidder Adapter
-pbjs: true
-biddercode: djax
-enable_download: false
-pbjs_version_notes: not ported to 5.x
----
-
-
-### Bid Params
-
-{: .table .table-bordered .table-striped }
-| Name | Scope | Description | Example | Type |
-|-----------------|----------|----------------------------------------------------------------------------------------|-----------------------------|-----------|
-| `publisherId` | required | Publisher id associated with DJAX | `1` | `integer` |
diff --git a/dev-docs/bidders/dmx.md b/dev-docs/bidders/dmx.md
index 7c34908359..c72bc52953 100644
--- a/dev-docs/bidders/dmx.md
+++ b/dev-docs/bidders/dmx.md
@@ -5,7 +5,9 @@ pbs: true
media_types: banner, video
biddercode: dmx
gvl_id: 144
-gdpr_supported: true
+tcfeu_supported: true
+pbjs_version_notes: not supported in 7.0+
+sidebarType: 1
---
### Bid Params
diff --git a/dev-docs/bidders/doceree.md b/dev-docs/bidders/doceree.md
index f40812868c..555fde4d4b 100644
--- a/dev-docs/bidders/doceree.md
+++ b/dev-docs/bidders/doceree.md
@@ -1,20 +1,22 @@
---
layout: bidder
title: Doceree
-description: Prebid DivReach Bidder Adapter
+description: Prebid Doceree Bidder Adapter
pbjs: true
biddercode: doceree
media_types: banner
+gvl_id: 1063
tcf2_supported: true
-gdpr_supported: true
+tcfeu_supported: true
+sidebarType: 1
---
### Bid Params
{: .table .table-bordered .table-striped }
-| Name | Scope | Description | Example | Type |
+| Name | Scope | Description | Example | Type |
|-------------------|----------|----------------|---------------------------|----------|
-| `placementId` | required | Placement Id | `'DOC_7jm9j5eqkl0xvc5w'` | `string` |
-| `publisherUrl` | optional | Current url | `https://doceree.com` | `string` |
-| `gdpr` | optional | Flag to check if gdpr applies | `1` | `string` |
-| `gdprConsent` | optional | URL-safe base64-encoded Transparency & Consent string | `CPQfU1jPQfU1jG0AAAENAwCAAAAAAAAAAAAAAAAAAAAA.IGLtV_T9fb2vj-_Z99_tkeYwf95y3p-wzhheMs-8NyZeH_B4Wv2MyvBX4JiQKGRgksjLBAQdtHGlcTQgBwIlViTLMYk2MjzNKJrJEilsbO2dYGD9Pn8HT3ZCY70-vv__7v3ff_3g` | `string` |
+| `placementId` | required | Placement Id | `'DOC_7jm9j5eqkl0xvc5w'` | `string` |
+| `publisherUrl` | optional | Current url | `https://doceree.com` | `string` |
+| `gdpr` | optional | Flag to check if gdpr applies | `1` | `string` |
+| `gdprConsent` | optional | URL-safe base64-encoded Transparency & Consent string | `CPQfU1jPQfU1jG0AAAENAwCAAAAAAAAAAAAAAAAAAAAA.IGLtV_T9fb2vj-_Z99_tkeYwf95y3p-wzhheMs-8NyZeH_B4Wv2MyvBX4JiQKGRgksjLBAQdtHGlcTQgBwIlViTLMYk2MjzNKJrJEilsbO2dYGD9Pn8HT3ZCY70-vv__7v3ff_3g` | `string` |
diff --git a/dev-docs/bidders/docereeadmanager.md b/dev-docs/bidders/docereeadmanager.md
new file mode 100644
index 0000000000..b70e45499b
--- /dev/null
+++ b/dev-docs/bidders/docereeadmanager.md
@@ -0,0 +1,29 @@
+---
+layout: bidder
+title: Doceree AdManager
+description: Doceree AdManager Prebid Bidder Adapter
+pbjs: true
+biddercode: docereeAdManager
+media_types: banner
+gvl_id: 1063
+tcfeu_supported: true
+userIds: all (with commercial activation)
+sidebarType: 1
+schain_supported: true
+safeframes_ok: true
+deals_supported: true
+floors_supported: true
+fpd_supported: false
+privacy_sandbox: no
+
+---
+
+### Bid Params
+
+{: .table .table-bordered .table-striped }
+| Name | Scope | Description | Example | Type |
+|-------------------|----------|----------------|---------------------------|----------|
+| `placementId` | required | Placement Id | `'DOC-19-1'` | `string` |
+| `publisherUrl` | optional | Current url | `https://doceree.com` | `string` |
+| `gdpr` | optional | Flag to check if gdpr applies | `1` | `string` |
+| `gdprConsent` | optional | URL-safe base64-encoded Transparency & Consent string | `CPQfU1jPQfU1jG0AAAENAwCAAAAAAAAAAAAAAAAAAAAA.IGLtV_T9fb2vj-_Z99_tkeYwf95y3p-wzhheMs-8NyZeH_B4Wv2MyvBX4JiQKGRgksjLBAQdtHGlcTQgBwIlViTLMYk2MjzNKJrJEilsbO2dYGD9Pn8HT3ZCY70-vv__7v3ff_3g` | `string` |
diff --git a/dev-docs/bidders/dsp_geniee.md b/dev-docs/bidders/dsp_geniee.md
new file mode 100644
index 0000000000..ba35412f0b
--- /dev/null
+++ b/dev-docs/bidders/dsp_geniee.md
@@ -0,0 +1,37 @@
+---
+layout: bidder
+title: Geniee
+description: Geniee Bidder Adapter
+biddercode: dsp_geniee
+userId: imuId
+media_types: banner
+safeframes_ok: false
+floors_supported: true
+multiformat_supported: will-bid-on-one
+ortb_blocking_supported: true
+sidebarType: 1
+tcfeu_supported: false
+gvl_id: none
+usp_supported: false
+coppa_supported: false
+gpp_sids: none
+schain_supported: false
+dchain_supported: false
+deals_supported: false
+fpd_supported: false
+pbjs: true
+pbs: false
+prebid_member: false
+---
+### Note
+
+This is [Geniee](https://geniee.co.jp) Bidder Adapter for Prebid.js.
+
+Please contact us before using the adapter.
+
+### Bid Params
+
+{: .table .table-bordered .table-striped }
+| Name | Scope | Description | Example | Type |
+|--------------|----------|-----------------------|-----------|-----------|
+| `test` | optional | test mode flag | `0` | `integer` |
diff --git a/dev-docs/bidders/dspx.md b/dev-docs/bidders/dspx.md
index 9b9133e49d..44fa5b472c 100644
--- a/dev-docs/bidders/dspx.md
+++ b/dev-docs/bidders/dspx.md
@@ -5,12 +5,17 @@ description: Prebid DSPx Bidder Adapter
pbjs: true
biddercode: dspx
media_types: banner, video
-gdpr_supported: true
-userIds: uid2, netId
+tcfeu_supported: true
+schain_supported: true
+userIds: uid2, netId, id5Id, sharedId
+multiformat_supported: will-bid-on-one
+gvl_id: 602
+sidebarType: 1
---
-### Note:
-The DSPx Bidder Adapter requires setup and approval from DSPx team. Please reach out to your account team or prebid@dspx.tv for more information.
+### Note
+
+The DSPx bidder adapter requires setup and approval from the DSPx team. Please reach out to for more information and start using it.
### Bid Params
@@ -19,13 +24,13 @@ The DSPx Bidder Adapter requires setup and approval from DSPx team. Please reach
| Name | Scope | Description | Example | Type |
|---------------|----------|----------------------------------------------------------------------------|------------------------|-----------------|
| `placement` | required | Placement ID from dspx. | `'101'` | `string` |
-| `pfilter` | optional | Selection filter. E.g. floorprice (min_cpm_micros) | `{"floorprice": 1000000}`| `object` |
+| `pfilter` | optional | Custom filter parameters. | `{"customxy": 1000000}`| `object` |
| `bcat` | optional | List of Blocked Categories (IAB) - comma separated. | `'IAB2,IAB4'` | `string` |
-
**Notice:** The creative type can be checked by the `type` property of `bidResponse` object. E.g.:
+
```js
bidsBackHandler: function(bids) {
- var contentType = bids[0].type // JS InSkin|JS Interscroller Type A|...;
+ var contentType = bids[0].type
}
```
diff --git a/dev-docs/bidders/duration.md b/dev-docs/bidders/duration.md
index 2c2e61cb9a..e3f21964fa 100644
--- a/dev-docs/bidders/duration.md
+++ b/dev-docs/bidders/duration.md
@@ -7,13 +7,14 @@ aliasCode: nobid
pbjs: true
pbs: true
media_types: banner, video
-gdpr_supported: true
+tcfeu_supported: true
gvl_id: 816
usp_supported: true
schain_supported: true
coppa_supported: true
userId: criteo, unifiedId, id5Id
safeframes_ok: true
+sidebarType: 1
---
### Bid Params
@@ -25,51 +26,51 @@ safeframes_ok: true
| `placementId` | optional | placementId is provided by your Duration Media account manager(s). This parameter allows to report on a specific ad unit | | `integer` |
| `video`| optional | Object containing video targeting parameters. Note that this parameter is not used in Prebid Server. See [Video Object](#duration-video-object) for details. | `video: { playback_method: ['auto_play_sound_off'] }` | `object`|
-
### Note
-If you are using Google Ad Manager (GAM), it is highly recommended to make sure the âServe in Safeframeâ box in creative settings is unchecked.
+
+If you are using Google Ad Manager (GAM), it is highly recommended to make sure the âServe in Safeframeâ box in creative settings is unchecked.
If you absolutely want to run Duration Media in a Saferame creative, please contact your Duration Media repsentative to coordinate this setup.
+### Test Parameters
-# Test Parameters
-```
- var adUnits = [
- {
- code: 'test-div1',
- mediaTypes: {
- banner: {
- sizes: [[300, 250]], // a display size
+```javascript
+var adUnits = [
+ {
+ code: 'test-div1',
+ mediaTypes: {
+ banner: {
+ sizes: [[300, 250]], // a display size
+ }
+ },
+ bids: [
+ {
+ bidder: "duration",
+ params: {
+ siteId: 2,
+ placementId: 3
}
- },
- bids: [
- {
- bidder: "duration",
- params: {
- siteId: 2,
- placementId: 3
- }
+ }
+ ]
+ },{
+ code: 'test-div2',
+ mediaTypes: {
+ banner: {
+ sizes: [[320, 50]], // a mobile size
+ }
+ },
+ bids: [
+ {
+ bidder: "duration",
+ params: {
+ siteId: 2
}
- ]
- },{
- code: 'test-div2',
- mediaTypes: {
- banner: {
- sizes: [[320, 50]], // a mobile size
- }
- },
- bids: [
- {
- bidder: "duration",
- params: {
- siteId: 2
- }
- }
- ]
- }
- ];
+ }
+ ]
+ }
+];
```
-
+
#### Video Object
@@ -83,4 +84,3 @@ If you absolutely want to run Duration Media in a Saferame creative, please cont
| `minduration` | Integer that defines the minimum video ad duration in seconds. | `integer` |
| `maxduration` | Integer that defines the maximum video ad duration in seconds. | `integer` |
| `frameworks` | Array of integers listing API frameworks supported by the publisher. Allowed values: None: `0`; VPAID 1.0: `1`; VPAID 2.0: `2`; MRAID 1.0: `3`; ORMMA: `4`; MRAID 2.0: `5`. | `Array` |
-
diff --git a/dev-docs/bidders/dxkulture.md b/dev-docs/bidders/dxkulture.md
new file mode 100644
index 0000000000..2d29640cb4
--- /dev/null
+++ b/dev-docs/bidders/dxkulture.md
@@ -0,0 +1,29 @@
+---
+layout: bidder
+title: DXKulture
+description: Prebid DXKulture Bidder Adapter
+pbjs: true
+pbs: true
+biddercode: dxkulture
+media_types: banner, video
+tcfeu_supported: false
+gdpr_supported: true
+usp_supported: true
+schain_supported: true
+sidebarType: 1
+
+---
+
+### Integration Note
+
+The DXKulture Header Bidding adapter requires approval from the DXKulture team. Please reach out to for more information.
+
+### Bid Params
+
+{: .table .table-bordered .table-striped }
+| Name | Scope | Description | Example | Type |
+|------|----------|--------------------|-------------|-----------|
+| `placementId` | required | Placement Id | `'1234abcd'` | `string` |
+| `publisherId` | required | Publisher Id | `'12345'` | `string` |
+| `bidfloor` | optional | Bid Floor | `2.3` | `float` |
+| `bidfloorcur` | optional | Bid Floor Currency | `'USD'` | `string` |
diff --git a/dev-docs/bidders/e_volution.md b/dev-docs/bidders/e_volution.md
index d5798caaad..5282e7589b 100644
--- a/dev-docs/bidders/e_volution.md
+++ b/dev-docs/bidders/e_volution.md
@@ -4,19 +4,20 @@ title: E-volution tech
description: Prebid E-volution tech Bidder Adapter
pbjs: true
biddercode: e_volution
-gdpr_supported: true
+tcfeu_supported: true
media_types: banner, video, native
gvl_id: 957
pbs: true
pbs_app_supported: true
usp_supported: true
schain_supported: true
-pbjs_version_notes: in 6.8+
+userIds: id5Id
+sidebarType: 1
---
-### Note:
+### Note
-The E-volution Bidding adapter requires setup before beginning. Please contact us at admin@e-volution.ai
+The E-volution Bidding adapter requires setup before beginning. Please contact us at
### Prebid.JS Bid Params
diff --git a/dev-docs/bidders/ebdr.md b/dev-docs/bidders/ebdr.md
index 56036ed355..0fc6be4dd5 100644
--- a/dev-docs/bidders/ebdr.md
+++ b/dev-docs/bidders/ebdr.md
@@ -5,6 +5,7 @@ description: Prebid EngageBDR Bidder Adaptor
biddercode: ebdr
pbjs: true
media_types: video
+sidebarType: 1
---
### Bid params
diff --git a/dev-docs/bidders/edge226.md b/dev-docs/bidders/edge226.md
new file mode 100644
index 0000000000..9eccba455e
--- /dev/null
+++ b/dev-docs/bidders/edge226.md
@@ -0,0 +1,31 @@
+---
+layout: bidder
+title: Edge226
+description: Prebid Edge226 Bidder Adapter
+biddercode: edge226
+usp_supported: true
+tcfeu_supported: false
+coppa_supported: true
+schain_supported: true
+floors_supported: true
+media_types: banner, video, native
+pbjs: true
+pbs: true
+pbs_app_supported: true
+gvl_id: 1202
+sidebarType: 1
+multiformat_supported: will-bid-on-one
+safeframes_ok: true
+---
+
+### Bid Params
+
+{: .table .table-bordered .table-striped }
+| Name | Scope | Description | Example | Type |
+|---------------|----------|-----------------------|-----------|-----------|
+| `placementId` | optional | Placement Id | `'0'` | `'string'` |
+| `endpointId` | optional | Endpoint Id | `'0'` | `'string'` |
+
+### Note
+
+For the prebid server and prebid.js you only need to use one parameter: either placementId or endpointId
diff --git a/dev-docs/bidders/edgequeryx.md b/dev-docs/bidders/edgequeryx.md
deleted file mode 100644
index 11451f6332..0000000000
--- a/dev-docs/bidders/edgequeryx.md
+++ /dev/null
@@ -1,27 +0,0 @@
----
-layout: bidder
-title: Edge Query X
-description: Prebid for Edge Query X Adaptor
-pbjs: true
-biddercode: edgequeryx
-media_types: display
-gdpr_supported: true
-schain_supported: true
-usp_supported: true
-enable_download: false
-pbjs_version_notes: not ported to 5.x
----
-
-### Note:
-The Edge Query bidder adaptor requires setup and approval from the Edge Query team. Please reach out to your account manager for more information and start using it.
-
-### Bid params
-
-{: .table .table-bordered .table-striped }
-| Name | Scope | Description | Example | Type |
-|------------|----------|----------------------------------------------------------------------------------------------------------------|----------------------------------------------------------------------|-----------|
-| `accountId`| required | The account ID | `test` | `string` |
-| `widgetId` | required | The widget ID | `test` | `string` |
-| `domain` | optional | The network domain (default see example) | `'https://deep.edgequery.io'` | `string` |
-| `appName` | optional | Mobile application name | `'Edge Query Preview'` | `string` |
-
diff --git a/dev-docs/bidders/eightPod.md b/dev-docs/bidders/eightPod.md
new file mode 100644
index 0000000000..58dc14f0d3
--- /dev/null
+++ b/dev-docs/bidders/eightPod.md
@@ -0,0 +1,37 @@
+---
+layout: bidder
+title: 8pod
+description: Prebid EightPod Bidder Adaptor
+biddercode: eightPod
+tcfeu_supported: false
+gvl_id: none
+usp_supported: false
+coppa_supported: false
+gpp_sids: none
+schain_supported: false
+dchain_supported: false
+userId: none
+media_types: banner
+deals_supported: false
+floors_supported: false
+fpd_supported: false
+pbjs: true
+pbs: false
+prebid_member: false
+sidebarType: 1
+safeframes_ok: false
+multiformat_supported: will-not-bid
+privacy_sandbox: no
+ortb_blocking_supported: false
+---
+
+### Registration
+
+The EightPod adapter requires setup before beginning. Please contact us at
+
+### Bid Params
+
+| Name | Scope | Description | Example | Type |
+|---------------|----------|-------------------------------------------------------------------------------------------------------------|----------------------------|----------|
+| `placementId` | required | The unique identifier of the ad placement. Could be obtained from the 8pod UI or from your account manager. | "placementId-438753744289" | `string` |
+| `publisherId` | optional | The unique identifier of the publisher. | "publisherId-438753744289" | `string` |
diff --git a/dev-docs/bidders/embimedia.md b/dev-docs/bidders/embimedia.md
new file mode 100644
index 0000000000..59ae7a0225
--- /dev/null
+++ b/dev-docs/bidders/embimedia.md
@@ -0,0 +1,34 @@
+---
+layout: bidder
+title: Embi Media
+description: Prebid Embi Media Bidder Adaptor
+biddercode: embimedia
+pbjs: false
+pbs: true
+media_types: banner, video, audio, native
+userIds: all
+fpd_supported: false
+tcfeu_supported: false
+usp_supported: true
+coppa_supported: true
+schain_supported: true
+prebid_member: false
+ortb_blocking_supported: true
+multiformat_supported: will-bid-on-one
+floors_supported: false
+aliasCode: limelightDigital
+sidebarType: 1
+---
+
+### Note
+
+The Embi Media Bidding adapter requires setup before beginning.
+
+### Bid Params
+
+{: .table .table-bordered .table-striped }
+
+| Name | Scope | Description | Example | Type |
+|:--------------|:---------|:----------------------|:-----------------------|:----------|
+| `host` | required | Ad network's RTB host | `'bidder-embi.media'` | `string` |
+| `publisherId` | required | Publisher ID | `12345` | `integer` |
diff --git a/dev-docs/bidders/emetriq.md b/dev-docs/bidders/emetriq.md
new file mode 100644
index 0000000000..17b59ae32b
--- /dev/null
+++ b/dev-docs/bidders/emetriq.md
@@ -0,0 +1,31 @@
+---
+layout: bidder
+title: emetriq
+description: emetriq Bidder Adapter
+biddercode: emetriq
+aliasCode: appnexus
+tcfeu_supported: true
+gvl_id: 213
+schain_supported: true
+userId: all
+media_types: banner, video, native
+safeframes_ok: true
+deals_supported: true
+pbjs: true
+pbs: true
+prebid_member: false
+multiformat_supported: will-bid-on-any
+sidebarType: 1
+---
+### Bid Params
+
+{: .table .table-bordered .table-striped }
+| Name | Scope | Description | Example | Type |
+|---------------|----------|-----------------------|-----------|-----------|
+| `placement_id` (PBS+PBJS) or `placementId` (PBJS) | required | Placement id | `'32068254'` | `string` |
+
+emetriq is an aliased bidder for AppNexus.
+
+### Note
+
+For setup with emetriq, please reach out to [admins@emetriq.com](mailto:admins@emetriq.com)
diff --git a/dev-docs/bidders/emoteev.md b/dev-docs/bidders/emoteev.md
deleted file mode 100644
index d9731d89ba..0000000000
--- a/dev-docs/bidders/emoteev.md
+++ /dev/null
@@ -1,20 +0,0 @@
----
-layout: bidder
-title: Emoteev
-description: Prebid Emoteev Bidder Adaptor
-pbjs: true
-biddercode: emoteev
-gdpr_supported: true
-userIds: pubCommonId
-enable_download: false
-pbjs_version_notes: not ported to 5.x
----
-
-### Bid Params
-
-{: .table .table-bordered .table-striped }
-| Name | Scope | Description | Example | Type |
-|--------------|----------|--------------------------------------------------------------------------|----------------|---------|
-| `adSpaceId` | required | Provided by Emoteev team | `5084` | Integer |
-| `context` | required | One of `'in-content'`, `'footer'`, `'overlay'`, `'wallpaper'` | `'in-content'` | String |
-| `externalId` | optional | Use it when you want to link your bids to some specific id on your side. | `12` | Integer |
diff --git a/dev-docs/bidders/emtv.md b/dev-docs/bidders/emtv.md
new file mode 100644
index 0000000000..b3fa16078b
--- /dev/null
+++ b/dev-docs/bidders/emtv.md
@@ -0,0 +1,30 @@
+---
+layout: bidder
+title: EMTV
+description: Prebid EMTV Bidder Adapter
+biddercode: emtv
+usp_supported: true
+tcfeu_supported: false
+coppa_supported: true
+schain_supported: true
+floors_supported: true
+media_types: banner, video, native
+multiformat_supported: will-not-bid
+pbjs: true
+pbs: true
+pbs_app_supported: true
+safeframes_ok: true
+sidebarType: 1
+---
+
+### Bid Params
+
+{: .table .table-bordered .table-striped }
+| Name | Scope | Description | Example | Type |
+|---------------|----------|-----------------------|-----------|-----------|
+| `placementId` | optional | Placement Id | `'0'` | `'string'` |
+| `endpointId` | optional | Endpoint Id | `'0'` | `'string'` |
+
+### Note
+
+For the prebid server and prebid.js you only need to use one parameter: either placementId or endpointId
diff --git a/dev-docs/bidders/emx_digital.md b/dev-docs/bidders/emx_digital.md
deleted file mode 100644
index 00acc8c306..0000000000
--- a/dev-docs/bidders/emx_digital.md
+++ /dev/null
@@ -1,26 +0,0 @@
----
-layout: bidder
-title: EMX Digital
-description: Prebid EMX Digital Bidder Adaptor
-pbjs: true
-pbs: true
-biddercode: emx_digital
-media_types: banner, video
-gdpr_supported: true
-gvl_id: 183
-usp_supported: true
-schain_supported: true
-userIds: identityLink, uid2
----
-
-### Registration
-
-To use this bidder you will need an account and a valid tagid from our exchange. For further information, please contact your Account Manager or adops@emxdigital.com.
-
-### Bid Params
-
-{: .table .table-bordered .table-striped }
-| Name | Scope | Description | Example | Type |
-|-------------------|----------|----------------------------------------------------------------------------------------------------------------------|-----------------------------------------------|------------|
-| `tagid` | required | The Tag ID from EMX Digital. | `test1` | `string` |
-| `bidfloor` | optional | The CPM bid floor | `0.25` | `string` |
diff --git a/dev-docs/bidders/engageadx.md b/dev-docs/bidders/engageadx.md
index 9402d71593..d4a88fcd22 100644
--- a/dev-docs/bidders/engageadx.md
+++ b/dev-docs/bidders/engageadx.md
@@ -2,19 +2,28 @@
layout: bidder
title: EngageADX
description: EngageADX Bidder Adaptor
-pbjs: true
-pbs: true
biddercode: engageadx
+pbjs: true
+pbs: false
media_types: banner, native, video
-gdpr_supported: true
+gvl_id: 14 (adkernel)
+tcfeu_supported: true
usp_supported: true
coppa_supported: true
+gpp_supported: true
pbs_app_supported: true
schain_supported: true
-aliasCode : adkernel
+userIds: all
+fpd_supported: true
+prebid_member: false
+ortb_blocking_supported: true
+multiformat_supported: will-bid-on-one
+floors_supported: true
+aliasCode: adkernel
+sidebarType: 1
---
-### Note:
+### Note
The EngageADX bidding adapter requires setup and approval before implementation. Please reach out to for more details.
diff --git a/dev-docs/bidders/engagebdr.md b/dev-docs/bidders/engagebdr.md
index df1cb08c2c..78e6eb36cb 100644
--- a/dev-docs/bidders/engagebdr.md
+++ b/dev-docs/bidders/engagebdr.md
@@ -4,6 +4,7 @@ title: Engage BDR
pbs: true
media_types: banner
biddercode: engagebdr
+sidebarType: 1
---
### Bid Params
diff --git a/dev-docs/bidders/engageya.md b/dev-docs/bidders/engageya.md
index a085c9bd45..7ff89a13f9 100644
--- a/dev-docs/bidders/engageya.md
+++ b/dev-docs/bidders/engageya.md
@@ -5,9 +5,14 @@ description: Prebid Engageya Bidder Adapter
media_type: banner, native
biddercode: engageya
pbjs: true
-gdpr_supported: true
+tcfeu_supported: false
+sidebarType: 1
---
+### Disclosure
+
+Note: This bidder appears to only consider gdprApplies if a consent string is available. This may result in some incorrect TCF2 processing, such as when the consent string is not yet available but the publisher has decided GDPR always applies. See
+
### Bid params
{: .table .table-bordered .table-striped }
@@ -16,4 +21,3 @@ gdpr_supported: true
| widgetId | required | Widget ID, provided by Engageya. | `85610` | integer |
| websiteId | required | Website ID, provided by Engageya. | `91140` | integer |
| pageUrl | optional | Pass current user URL. | `'https://engageya.com'` | String |
-
diff --git a/dev-docs/bidders/envivo.md b/dev-docs/bidders/envivo.md
deleted file mode 100644
index b19dd59148..0000000000
--- a/dev-docs/bidders/envivo.md
+++ /dev/null
@@ -1,17 +0,0 @@
----
-layout: bidder
-title: envivo
-description: Prebid envivo Bidder Adapter
-pbjs: true
-biddercode: envivo
-enable_download: false
-pbjs_version_notes: not ported to 5.x
----
-
-
-### Bid Params
-
-{: .table .table-bordered .table-striped }
-| Name | Scope | Description | Example | Type |
-|-----------------|----------|----------------------------------------------------------------------------------------|-----------------------------|-----------|
-| `publisherId` | required | Publisher id associated with envivo | `1` | `integer` |
diff --git a/dev-docs/bidders/eplanning.md b/dev-docs/bidders/eplanning.md
index b6b0466f71..3938737592 100644
--- a/dev-docs/bidders/eplanning.md
+++ b/dev-docs/bidders/eplanning.md
@@ -4,16 +4,21 @@ title: E-Planning
description: Prebid E-Planning Bidder Adapter
pbjs: true
pbs: true
+media_types: banner, video
biddercode: eplanning
usp_supported: true
-gdpr_supported: true
+tcfeu_supported: true
pbs_app_supported: true
+floors_supported: true
+userIds: all
gvl_id: 90
+sidebarType: 1
---
-### Note:
+### Note
+
The E-Planning Header Bidding adaptor requires setup and approval from the E-Planning team. Please go to [E-Planning website](http://www.e-planning.net) for more details.
### Bid Params
@@ -22,8 +27,8 @@ The E-Planning Header Bidding adaptor requires setup and approval from the E-Pla
| Name | Scope | Description | Example | Type |
|-------|----------|-----------------------------------------------|---------------------------|-----------|
| `ci` | required | Your partner ID (provided by E-Planning) | `'18f66'` | `string` |
-| `sv` | optional | Indicates a bidder URL different than default | `'ads.us.e-planning.net'` | `string` |
-| `isv` | optional | Indicates a CDN URL different than default | `'us.img.e-planning.net'` | `string` |
+| `sv` | optional | Indicates a bidder URL different than default | `'pbjs.e-planning.net'` | `string` |
+| `isv` | optional | Indicates a CDN URL different than default | `'i.e-planning.net'` | `string` |
| `t` | optional | Indicates bidding for testing purposes | `1` | `integer` |
| `ml` | optional |Â Uses placement names as ad unit names instead of sizes | `1` | `integer` |
| `sn` | optional |Â Uses space name instead of sizes | `adunitName` | `string` |
diff --git a/dev-docs/bidders/epom.md b/dev-docs/bidders/epom.md
index d1d5897a28..aa678395db 100644
--- a/dev-docs/bidders/epom.md
+++ b/dev-docs/bidders/epom.md
@@ -3,7 +3,7 @@ layout: bidder
title: Epom
description: Prebid Epom Bidder Adapter
biddercode: epom
-gdpr_supported: false
+tcfeu_supported: false
gvl_id: 849
usp_supported: false
coppa_supported: true
@@ -15,11 +15,12 @@ pbjs: false
pbs: true
pbs_app_supported: true
prebid_member: false
+sidebarType: 1
---
-### Note:
+### Note
-The Epom Bidding adapter requires setup before beginning. Please contact us at support@epom.com
+The Epom Bidding adapter requires setup before beginning. Please contact us at
### Bid Params
diff --git a/dev-docs/bidders/epsilon.md b/dev-docs/bidders/epsilon.md
new file mode 100644
index 0000000000..1c6b3f4645
--- /dev/null
+++ b/dev-docs/bidders/epsilon.md
@@ -0,0 +1,136 @@
+---
+layout: bidder
+title: Epsilon
+description: Epsilon Prebid Bidder Adaptor (formerly Conversant)
+pbjs: true
+pbs: true
+biddercode: conversant
+media_types: video
+tcfeu_supported: true
+userIds: criteo, id5Id, identityLink, liveIntentId, parrableId, pubCommonId, unifiedId, publinkId
+prebid_member: true
+schain_supported: true
+gvl_id: 24
+sidebarType: 1
+---
+
+
+
+### Bid Params
+
+{: .table .table-bordered .table-striped }
+
+| Name | Scope | Description | Example | Type |
+|---------------|-----------------------------|---------------------------------------------------------------------------------------------------------------------------|-------------------|------------------|
+| `site_id` | required | The site ID from Epsilon. | `'87293'` | `string` |
+| `secure` | required (for secure pages) | If impression requires secure HTTPS URL creative assets and markup. 0 for non-secure, 1 for secure. Default is non-secure | `1` | `integer` |
+| `bidfloor` | optional | Bid floor | `0.50` | `float` |
+| `tag_id` | optional | Identifies specific ad placement. | `'cnvr-test-tag'` | `string` |
+| `white_label_url`| optional | Override the destination URL the request is sent to. | `'https://mydomain.com/hbendpoint'` | `string` |
+| `pubcid_name` | optional | Name of the pub common id. Epsilon adapter can read the id directly if the UserID module is absent. Default is _pubcid.| `'_pubcid'` | `string` |
+
+### Video Params
+
+{: .table .table-bordered .table-striped }
+
+| Name | Scope | Description | Example | Type |
+|---------------|-----------------------------|---------------------------------------------------------------------------------------------------------------------------|-------------------|------------------|
+| `position` | optional | Ad position on screen. See details below. Only supported in bids.params. | `1` | `integer` |
+| `mimes` | optional | Array of content MIME types supported. Required for video | `['video/mp4']` | `Array` |
+| `maxduration` | optional | Maximum duration in seconds for this video as an integer. | `30` | `integer` |
+| `api` | optional | Array of supported API frameworks. See details below. | `[2]` | `Array` |
+| `protocols` | optional | Array of supported video protocols. See details below. | `[2]` | `Array` |
+
+Video parameters can be included in either `mediaTypes.video` or `bids.params` except where noted.
+
+The following values are defined in the [ORTB 2.5 spec](https://www.iab.com/wp-content/uploads/2016/03/OpenRTB-API-Specification-Version-2-5-FINAL.pdf).
+
+### position
+
++ `0` : Unknown
++ `1` : Above the Fold
++ `3` : Below the Fold
++ `4` : Header
++ `5` : Footer
++ `6` : Sidebar
++ `7` : Full Screen
+
+### api
+
++ `1` : VPAID 1.0
++ `2` : VPAID 2.0
++ `3` : MRAID 1.0
++ `4` : ORMMA
++ `5` : MRAID 2.0
++ `6` : MRAID 3.0
+
+
+
+### protocols
+
++ `1` : VAST 1.0
++ `2` : VAST 2.0
++ `3` : VAST 3.0
++ `4` : VAST 1.0 Wrapper
++ `5` : VAST 2.0 Wrapper
++ `6` : VAST 3.0 Wrapper
++ `7` : VAST 4.0
++ `8` : VAST 4.0 Wrapper
++ `9` : DAAST 1.0
++ `10` : DAAST 1.0 Wrapper
+
+### First Party Data
+
+Publishers should use the `ortb2` method of setting for setting First Party Data.
+Example first party data configuration that is available to all adUnits
+
+```
+pbjs.setConfig({
+ debug: true,
+ cache: {
+ url: 'https://prebid.adnxs.com/pbc/v1/cache'
+ },
+ ortb2: {
+ site: {
+ content: {
+ series: 'MySeries',
+ season: 'My Season',
+ episode: 3,
+ title: 'My Title'
+ }
+ }
+ }
+});
+```
+
+Example AdUnit specific data using the `ortb2Imp` object
+
+```
+ var videoAdUnit = {
+ code: 'video1',
+ mediaTypes: {
+ video: {
+ playerSize: [[640, 480]]
+ }
+ },
+ ortb2Imp: {
+ instl: 1,
+ ext: {
+ data: {
+ adUnitSpecificAttribute: "123"
+ }
+ }
+ },
+ bids: [{
+ bidder: 'conversant',
+ params: {
+ site_id: '108060',
+ mimes: ['video/mp4', 'video/webm']
+ }
+ }]
+ }
+
+ pbjs.que.push(function(){
+ pbjs.addAdUnits(videoAdUnits);
+ }
+```
diff --git a/dev-docs/bidders/ergadx.md b/dev-docs/bidders/ergadx.md
index 2aedf405a1..02803608c9 100644
--- a/dev-docs/bidders/ergadx.md
+++ b/dev-docs/bidders/ergadx.md
@@ -2,19 +2,28 @@
layout: bidder
title: eRGADX
description: eRGADX Bidder Adaptor
+biddercode: ergadx
pbjs: true
pbs: true
-biddercode: ergadx
-aliasCode : adkernel
media_types: banner, native, video
-gdpr_supported: true
+gvl_id: 14 (adkernel)
+tcfeu_supported: true
+gpp_supported: true
usp_supported: true
coppa_supported: true
pbs_app_supported: true
schain_supported: true
+userIds: all
+fpd_supported: true
+prebid_member: false
+ortb_blocking_supported: true
+multiformat_supported: will-bid-on-one
+floors_supported: true
+aliasCode: adkernel
+sidebarType: 1
---
-### Note:
+### Note
The eRGADX bidding adapter requires setup and approval before implementation. Please reach out to for more details.
diff --git a/dev-docs/bidders/eskimi.md b/dev-docs/bidders/eskimi.md
new file mode 100644
index 0000000000..9b5e9e9be3
--- /dev/null
+++ b/dev-docs/bidders/eskimi.md
@@ -0,0 +1,30 @@
+---
+layout: bidder
+title: Eskimi
+description: Prebid Eskimi Bidder Adapter
+pbjs: true
+pbs: false
+biddercode: eskimi
+deals_supported: false
+media_types: banner, video
+gvl_id: 814
+schain_supported: true
+floors_supported: true
+safeframes_ok: false
+multiformat_supported: will-bid-on-any
+ortb_blocking_supported: true
+sidebarType: 1
+---
+
+### Bid Params
+
+{: .table .table-bordered .table-striped }
+| Name | Scope | Description | Example | Type |
+|-------------------|----------|---------------------------------|------------------------|-----------|
+| `placementId` | required | The placement ID from Eskimi. | `612` | `integer` |
+| `bcat` | optional | ORTB blocked categories | `['IAB-1-1']` | `string[]`|
+| `badv` | optional | ORTB blocked advertiser domains | `['example.com']` | `string[]`|
+| `bapp` | optional | ORTB blocked applications | `['com.example.game']` | `string[]`|
+
+Additionally `battr` ORTB blocking param may be set on `BANNER` and `VIDEO` media types to specify blocked creative
+attributes.
diff --git a/dev-docs/bidders/etarget.md b/dev-docs/bidders/etarget.md
index d68eeb522f..4de459a50e 100644
--- a/dev-docs/bidders/etarget.md
+++ b/dev-docs/bidders/etarget.md
@@ -4,11 +4,12 @@ title: Etarget
description: Prebid Etarget Bidder Adaptor
biddercode: etarget
media_types: banner, video
-gdpr_supported: true
+tcfeu_supported: true
usp_supported: true
pbjs: true
fpd_supported: true
gvl_id: 29
+sidebarType: 1
---
### Bid Params
@@ -24,6 +25,7 @@ gvl_id: 29
#### First Party Data
In release 5.0 and later, publishers should use the `ortb2` method of setting First Party Data. The following fields are supported:
+
- ortb2.site.ext.data.*
- ortb2.site.keywords
- ortb2.site.content.data[]
@@ -33,6 +35,7 @@ In release 5.0 and later, publishers should use the `ortb2` method of setting Fi
The ETARGET exchange supports the IAB standard Audience Taxonomy v1.1 and Content Taxonomy v2.2.
Example first party data that's available to all bidders and all adunits:
+
```
pbjs.setConfig({
ortb2: {
@@ -56,6 +59,7 @@ pbjs.setConfig({
```
Example of first party data available only to the ETARGET bidder. Applies across all ad units.
+
```
pbjs.setBidderConfig({
bidders: ["etarget"],
diff --git a/dev-docs/bidders/evtech.md b/dev-docs/bidders/evtech.md
new file mode 100644
index 0000000000..3565948b84
--- /dev/null
+++ b/dev-docs/bidders/evtech.md
@@ -0,0 +1,30 @@
+---
+layout: bidder
+title: Evolution Technologies
+description: Evolution Technologies Bidder Adaptor
+biddercode: evtech
+pbjs: false
+pbs: true
+media_types: banner, video, audio, native
+userIds: all
+fpd_supported: false
+tcfeu_supported: false
+usp_supported: true
+coppa_supported: true
+schain_supported: true
+prebid_member: false
+ortb_blocking_supported: true
+multiformat_supported: will-bid-on-one
+floors_supported: false
+aliasCode: limelightDigital
+sidebarType: 1
+---
+
+### Bid Params
+
+{: .table .table-bordered .table-striped }
+
+| Name | Scope | Description | Example | Type |
+|:--------------|:---------|:----------------------|:------------------|:----------|
+| `host` | required | Ad network's RTB host | `'e-volution.ai'` | `string` |
+| `publisherId` | required | Publisher ID | `12345` | `integer` |
diff --git a/dev-docs/bidders/exads.md b/dev-docs/bidders/exads.md
new file mode 100644
index 0000000000..6e877ffb1b
--- /dev/null
+++ b/dev-docs/bidders/exads.md
@@ -0,0 +1,404 @@
+---
+layout: bidder
+title: EXADS
+description: EXADS Bidder Adapter
+pbjs: true
+multiformat_supported: will-not-bid
+biddercode: exads
+dsa_supported: true
+gvl_id: 1084
+tcfeu_supported: true
+media_types: banner, video, native
+safeframes_ok: false
+deals_supported: false
+floors_supported: true
+ortb_blocking_supported: true
+---
+
+### Example
+
+A very minimal RTB Banner example that shows how to use the EXADS adapter.
+The most important attributes are: **endpoint**, **fid** and **zoneId**. You can get them after configuring the zones.
+For more details about ad formats and parameters, read it in the next sections.
+
+```js
+
+adUnits = [
+ {
+ code: 'postbid_iframe', // the frame where to render the creative
+ mediaTypes: {
+ banner: {
+ sizes: [300, 250],
+ },
+ },
+ bids: [
+ {
+ bidder: 'exads',
+ params: {
+ zoneId: 12345,
+ fid: '829a896f011475d50da0d82cfdd1af8d9cdb07ff',
+ partner: 'ortb_2_4',
+ siteId: '123',
+ siteName: 'test.com',
+ country: 'IRL,
+ userIp: '0.0.0.0',
+ userId: '1234',
+ impressionId: impression_id.toString(),
+ mimes: ['image/jpg'],
+ endpoint: 'https://your-ad-network.com/rtb.php',
+ },
+ },
+ ],
+ },
+];
+```
+
+### Configuration
+
+#### Video settings
+
+If you will work with video stream ad formats you could choose to use the prebidJS video module to render the video using already supported video players as videoJS.
+Add the `video` config if you need to render videos using the video module.
+For more info navigate to [instructions](/prebid-video/video-module.html).
+
+#### RTB Banner 2.4
+
+{: .table .table-bordered .table-striped }
+| Name | Scope | Description | Example | Type |
+|---------------|----------|-----------------------|-----------|-----------|
+| `zoneID` | required | You can get it from the endpoint created after configuring the zones | `12345` | `integer` |
+| `fid` | required | You can get it from the endpoint created after configuring the zones | `'829a896f011475d50da0d82cfdd1af8d9cdb07ff'` | `string` |
+| `partner` | required | Currently we support rtb 2.4 (âortb_2_4â) only | `'ortb_2_4'` | `string` |
+| `siteId` | recommended | Unique Site ID | `'123'` | `string` |
+| `siteName` | | Site name | `'test.com'` | `string` |
+| `banner.sizes` | required | [width, height] | `[145,256]` | `integer array` |
+| `userIp` | required | IP address of the user, ipv4 or ipv6 | `'0.0.0.0'` | `string` |
+| `userId` | *required | Unique user ID (string). *If you cannot generate a user ID, you can leave it empty (""). The request will get a response as long as âuserâ object is included in the request | `''` | `string` |
+| `country` | required | country ISO3 | `'IRL'` | `string` |
+| `impressionId` | required | Unique impression ID within this bid request | `'abcde'` | `string` |
+| `keywords` | optional | Keywords can be used to ensure ad zones get the right type of advertising. Keywords should be a string of comma-separated words | `'lifestyle, humour'` | `string` |
+| `bidfloor` | optional | Minimum bid for this impression (CPM) / click (CPC) and account currency | `0.00000011` | `float` |
+| `bidfloorcur` | optional | Currency for minimum bid value specified using ISO-4217 alpha codes | `'EUR'` | `string` |
+| `bcat` | optional | Blocked advertiser categories using the IAB content categories | `['IAB25', 'IAB7-39','IAB8-18','IAB8-5','IAB9-9']` | `string array` |
+| `badv` | optional | Block list of advertisers by their domains | `['first.com', 'second.com']` | `string array` |
+| `mimes` | optional | List of supported mime types. We support: image/jpeg, image/jpg, image/png, image/png, image/gif, image/webp, video/mp4 | `['image/jpg']` | `string array` |
+| `dsa` | optional | DSA transparency information. To see the specific paragraph for more details. | `{ dsarequired: 3, pubrender: 0, datatopub: 2 }` | `object` |
+| `endpoint` | required | EXADS endpoint (URL) | `https://your-ad-network.com/rtb.php` | `string` |
+
+##### RTB Banner 2.4 (Image)
+
+```js
+adUnits = [
+ {
+ code: 'postbid_iframe', // the frame where to render the creative
+ mediaTypes: {
+ banner: {
+ sizes: [300, 250],
+ },
+ },
+ bids: [
+ {
+ bidder: 'exads',
+ params: {
+ zoneId: 12345,
+ fid: '829a896f011475d50da0d82cfdd1af8d9cdb07ff',
+ partner: 'ortb_2_4',
+ siteId: '123',
+ siteName: 'test.com',
+ userIp: '0.0.0.0',
+ userId: '1234',
+ country: 'IRL', // optional
+ impressionId: impression_id.toString(),
+ keywords: 'lifestyle, humour', // optional
+ bidfloor: 0.00000011, // optional
+ bidfloorcur: 'EUR', // optional
+ bcat: ['IAB25', 'IAB7-39', 'IAB8-18', 'IAB8-5', 'IAB9-9'], // optional
+ badv: ['first.com', 'second.com'], // optional
+ mimes: ['image/jpg'],
+ dsa: {
+ // optional
+ dsarequired: 3,
+ pubrender: 0,
+ datatopub: 2,
+ },
+ endpoint: 'https://your-ad-network.com/rtb.php',
+ },
+ },
+ ],
+ },
+];
+```
+
+##### RTB Banner 2.4 (Video)
+
+```js
+adUnits = [
+ {
+ code: 'postbid_iframe', // the frame where to render the creative
+ mediaTypes: {
+ banner: {
+ sizes: [900, 250],
+ },
+ },
+ bids: [
+ {
+ bidder: 'exads',
+ params: {
+ zoneId: 12345,
+ fid: '829a896f011475d50da0d82cfdd1af8d9cdb07ff',
+ partner: 'ortb_2_4',
+ siteId: '123',
+ siteName: 'test.com',
+ userIp: '0.0.0.0',
+ userId: '1234',
+ country: 'IRL', // optional
+ impressionId: '1234', // optional
+ keywords: 'lifestyle, humour', // optional
+ bidfloor: 0.00000011, // optional
+ bidfloorcur: 'EUR', // optional
+ bcat: ['IAB25', 'IAB7-39', 'IAB8-18', 'IAB8-5', 'IAB9-9'], // optional
+ badv: ['first.com', 'second.com'], // optional
+ mimes: ['image/jpg'],
+ dsa: {
+ // optional
+ dsarequired: 3,
+ pubrender: 0,
+ datatopub: 2,
+ },
+ endpoint: 'https://your-ad-network.com/rtb.php',
+ },
+ },
+ ],
+ },
+];
+```
+
+#### RTB 2.4 Video (Instream/OutStream/Video Slider) - VAST XML or VAST TAG (url)
+
+{: .table .table-bordered .table-striped }
+| Name | Scope | Description | Example | Type |
+|---------------|----------|-----------------------|-----------|-----------|
+| `zoneID` | required | You can get it from the endpoint created after configuring the zones | `12345` | `integer` |
+| `fid` | required | You can get it from the endpoint created after configuring the zones | `'829a896f011475d50da0d82cfdd1af8d9cdb07ff'` | `string` |
+| `partner` | required | Currently we support rtb 2.4 (âortb_2_4â) only | `'ortb_2_4'` | `string` |
+| `siteId` | recommended | Unique Site ID | `'123'` | `string` |
+| `siteName` | | Site name | `'test.com'` | `string` |
+| `userIp` | required | IP address of the user, ipv4 or ipv6 | `'0.0.0.0'` | `string` |
+| `userId` | *required | Unique user ID (string). *If you cannot generate a user ID, you can leave it empty (""). The request will get a response as long as âuserâ object is included in the request | `''` | `string` |
+| `country` | required | country ISO3 | `'IRL'` | `string` |
+| `impressionId` | required | Unique impression ID within this bid request | `'abcde'` | `string` |
+| `keywords` | optional | Keywords can be used to ensure ad zones get the right type of advertising. Keywords should be a string of comma-separated words | `'lifestyle, humour'` | `string` |
+| `bidfloor` | optional | Minimum bid for this impression (CPM) / click (CPC) and account currency | `0.00000011` | `float` |
+| `bidfloorcur` | optional | Currency for minimum bid value specified using ISO-4217 alpha codes | `'EUR'` | `string` |
+| `bcat` | optional | Blocked advertiser categories using the IAB content categories | `['IAB25', 'IAB7-39','IAB8-18','IAB8-5','IAB9-9']` | `string array` |
+| `badv` | optional | Block list of advertisers by their domains | `['first.com', 'second.com']` | `string array` |
+| `mediaTypes` | required | To see the specific paragraph for details | `{ video: { mimes: ['video/mp4'], context: 'instream', protocols: [3, 6] }}` | `object` |
+| `dsa` | optional | DSA transparency information. To see paragraph for more info | `{ dsarequired: 3, pubrender: 0, datatopub: 2 }` | `object` |
+| `endpoint` | required | EXADS endpoint (URL) | `https://your-ad-network.com/rtb.php` | `string` |
+
+##### MediaTypes.video
+
+{: .table .table-bordered .table-striped }
+| Name | Scope | Description | Example | Type |
+|---------------|----------|-----------------------|-----------|-----------|
+| `mimes` | required | list of supported mime types | `['video/mp4']` | `string array` |
+| `protocols` | required | list of supported video bid response protocols | `[3, 6]` | `integer array` |
+| `context` | recommended | the video context, either âinstreamâ, âoutstreamâ. Defaults to âinstreamâ | `'instream'` | `string` |
+
+```js
+adUnits = [
+ {
+ code: 'postbid_iframe',
+ mediaTypes: {
+ video: {
+ mimes: ['video/mp4'],
+ context: 'instream',
+ protocols: [3, 6],
+ },
+ },
+ bids: [
+ {
+ bidder: 'exads',
+ params: {
+ zoneId: 12345,
+ fid: '829a896f011475d50da0d82cfdd1af8d9cdb07ff',
+ partner: 'ortb_2_4',
+ siteId: '123',
+ siteName: 'test.com',
+ userIp: '0.0.0.0',
+ userId: '1234',
+ impressionId: '1234',
+ imp: {
+ ext: {
+ video_cta: 0,
+ },
+ },
+ dsa: {
+ // optional
+ dsarequired: 3,
+ pubrender: 0,
+ datatopub: 2,
+ },
+ country: 'IRL', // optional
+ keywords: 'lifestyle, humour', // optional
+ bidfloor: 0.00000011, // optional
+ bidfloorcur: 'EUR', // optional
+ bcat: ['IAB25', 'IAB7-39', 'IAB8-18', 'IAB8-5', 'IAB9-9'], // optional
+ badv: ['first.com', 'second.com'], // optional
+ endpoint: 'https://your-ad-network.com/rtb.php',
+ },
+ },
+ ],
+ },
+];
+```
+
+#### RTB 2.4 Native
+
+{: .table .table-bordered .table-striped }
+| Name | Scope | Description | Example | Type |
+|---------------|----------|-----------------------|-----------|-----------|
+| `zoneID` | required | You can get it from the endpoint created after configuring the zones | `12345` | `integer` |
+| `fid` | required | You can get it from the endpoint created after configuring the zones | `'829a896f011475d50da0d82cfdd1af8d9cdb07ff'` | `string` |
+| `partner` | required | Currently we support rtb 2.4 (âortb_2_4â) only | `'ortb_2_4'` | `string` |
+| `siteId` | recommended | Unique Site ID | `'123'` | `string` |
+| `siteName` | | Site name | `'test.com'` | `string` |
+| `userIp` | required | IP address of the user, ipv4 or ipv6 | `'0.0.0.0'` | `string` |
+| `userId` | *required | Unique user ID (string). *If you cannot generate a user ID, you can leave it empty (""). The request will get a response as long as âuserâ object is included in the request | `''` | `string` |
+| `country` | required | country ISO3 | `'IRL'` | `string` |
+| `impressionId` | required | Unique impression ID within this bid request | `'abcde'` | `string` |
+| `keywords` | optional | Keywords can be used to ensure ad zones get the right type of advertising. Keywords should be a string of comma-separated words | `'lifestyle, humour'` | `string` |
+| `bidfloor` | optional | Minimum bid for this impression (CPM) / click (CPC) and account currency | `0.00000011` | `float` |
+| `bidfloorcur` | optional | Currency for minimum bid value specified using ISO-4217 alpha codes | `'EUR'` | `string` |
+| `bcat` | optional | Blocked advertiser categories using the IAB content categories | `['IAB25', 'IAB7-39','IAB8-18','IAB8-5','IAB9-9']` | `string array` |
+| `badv` | optional | Block list of advertisers by their domains | `['first.com', 'second.com']` | `string array` |
+| `native.plcmtcnt` | optional | the number of identical placements in this Layout | `4` | `integer` |
+| `assets` | required | To see the specific paragraph for more info | `{}` | `object` |
+| `dsa` | optional | DSA transparency information. To see paragraph for more info | `{ dsarequired: 3, pubrender: 0, datatopub: 2 }` | `object` |
+| `endpoint` | required | EXADS endpoint (URL) | `https://your-ad-network.com/rtb.php` | `string` |
+
+##### Assets
+
+* **assets (title)**
+ * **id** - unique asset ID, assigned by exchange. Typically a counter for the array (integer):
+ *1 - image asset ID
+ * 2 - title asset ID
+ * 3 - description asset ID
+ * **required** - set to 1 if asset is required or 0 if asset is optional (integer)
+ * **title**
+ * len (required) - maximum length of the text in the title element (integer)
+* **assets (data)**
+ * **id** - unique asset ID, assigned by exchange. Typically a counter for the array (integer):
+ *1 - image asset ID
+ * 2 - title asset ID
+ * 3 - description asset ID
+ * **data**
+ * **type** - type ID of the element supported by the publisher (integer). We support:
+ *1 - sponsored - sponsored By message where response should contain the brand name of the sponsor
+ * 2 - desc - descriptive text associated with the product or service being advertised
+ * **len** - maximum length of the text in the elementâs response (integer)
+* **assets (img)**
+ * **id** - unique asset ID, assigned by exchange. Typically a counter for the array (integer):
+ *1 - image asset ID
+ * 2 - title asset ID
+ * 3 - description asset ID
+ * **required** - set to 1 if asset is required or 0 if asset is optional (integer)
+ * **img**
+ * **type** - type ID of the image element supported by the publisher. We support:
+ *1 - icon image (integer)
+ * 3 - large image preview for the ad (integer)
+ * **w** - width of the image in pixels, optional (integer)
+ * **h** - height of the image in pixels, optional (integer)
+
+```js
+adUnits = [
+ {
+ code: 'postbid_iframe',
+ mediaTypes: {
+ native: {
+ ortb: {
+ assets: [
+ {
+ id: 2,
+ required: 1,
+ title: {
+ len: 124,
+ },
+ },
+ {
+ id: 3,
+ data: {
+ type: 1,
+ len: 50,
+ },
+ },
+ {
+ id: 1,
+ required: 1,
+ img: {
+ type: 3,
+ w: 300,
+ h: 300,
+ },
+ },
+ ],
+ },
+ },
+ },
+ bids: [
+ {
+ bidder: 'exads',
+ params: {
+ zoneId: 12345,
+ fid: '829a896f011475d50da0d82cfdd1af8d9cdb07ff',
+ partner: 'ortb_2_4',
+ siteId: '123',
+ siteName: 'test.com',
+ userIp: '0.0.0.0',
+ userId: '1234',
+ impressionId: '1234',
+ native: {
+ // optional
+ plcmtcnt: 4,
+ },
+ dsa: {
+ dsarequired: 3,
+ pubrender: 0,
+ datatopub: 2,
+ },
+ country: 'IRL', // optional
+ keywords: 'lifestyle, humour', // optional
+ bidfloor: 0.00000011, // optional
+ bidfloorcur: 'EUR', // optional
+ bcat: ['IAB25', 'IAB7-39', 'IAB8-18', 'IAB8-5', 'IAB9-9'], // optional
+ badv: ['first.com', 'second.com'], // optional
+ endpoint: 'https://your-ad-network.com/rtb.php',
+ },
+ },
+ ],
+ },
+];
+```
+
+### DSA Transparency
+
+All DSA information, returned by the ad server, can be found into the **meta** tag of the response. As:
+
+```js
+"meta": {
+ "dsa": {
+ "behalf": "...",
+ "paid": "...",
+ "transparency": [
+ {
+ "params": [
+ ...
+ ]
+ }
+ ],
+ "adrender": ...
+ }
+}
+```
+
+For more information navigate to the [page](/dev-docs/bidder-adaptor.html).
diff --git a/dev-docs/bidders/eywamedia.md b/dev-docs/bidders/eywamedia.md
index e069c77e8d..ee3727b399 100644
--- a/dev-docs/bidders/eywamedia.md
+++ b/dev-docs/bidders/eywamedia.md
@@ -5,7 +5,8 @@ description: Prebid Eywamedia Bidder Adaptor
pbjs: true
biddercode: eywamedia
media_types: display
-gdpr_supported: false
+tcfeu_supported: false
+sidebarType: 1
---
diff --git a/dev-docs/bidders/fairtrade.md b/dev-docs/bidders/fairtrade.md
index d26c7fefc2..cb262e40e9 100644
--- a/dev-docs/bidders/fairtrade.md
+++ b/dev-docs/bidders/fairtrade.md
@@ -4,6 +4,7 @@ title: FairTrade
description: FairTrade Bidder Adapter
pbjs: true
biddercode: fairtrade
+sidebarType: 1
---
diff --git a/dev-docs/bidders/featureforward.md b/dev-docs/bidders/featureforward.md
index 9b6f924fd1..09c470b2fb 100644
--- a/dev-docs/bidders/featureforward.md
+++ b/dev-docs/bidders/featureforward.md
@@ -6,6 +6,7 @@ top_nav_section: dev_docs
nav_section: reference
pbjs: true
biddercode: featureforward
+sidebarType: 1
---
### Bid Params
diff --git a/dev-docs/bidders/feedad.md b/dev-docs/bidders/feedad.md
index bfcf75ec66..64201463b9 100644
--- a/dev-docs/bidders/feedad.md
+++ b/dev-docs/bidders/feedad.md
@@ -4,9 +4,10 @@ title: FeedAd
description: Prebid FeedAd Bidder Adaptor
pbjs: true
biddercode: feedad
-gdpr_supported: true
+tcfeu_supported: true
media_types: banner
gvl_id: 781
+sidebarType: 1
---
### Bid Params
diff --git a/dev-docs/bidders/felixads.md b/dev-docs/bidders/felixads.md
index 9bc6ed33c7..e633e47c44 100644
--- a/dev-docs/bidders/felixads.md
+++ b/dev-docs/bidders/felixads.md
@@ -2,20 +2,28 @@
layout: bidder
title: felixads
description: Prebid felixads Bidder Adaptor
+biddercode: felixads
pbjs: true
pbs: false
-biddercode: felixads
-aliascode: adkernel
media_types: banner, native, video
-gdpr_supported: true
+gvl_id: 14 (adkernel)
+tcfeu_supported: true
+gpp_supported: true
usp_supported: true
coppa_supported: true
pbs_app_supported: true
schain_supported: true
userIds: all
+fpd_supported: true
+prebid_member: false
+ortb_blocking_supported: true
+multiformat_supported: will-bid-on-one
+floors_supported: true
+aliasCode: adkernel
+sidebarType: 1
---
-### Note:
+### Note
The felixads Bidding adaptor requires setup and approval before beginning. Please reach out to for more details
diff --git a/dev-docs/bidders/fidelity.md b/dev-docs/bidders/fidelity.md
deleted file mode 100644
index f18a36bf0b..0000000000
--- a/dev-docs/bidders/fidelity.md
+++ /dev/null
@@ -1,23 +0,0 @@
----
-layout: bidder
-title: Fidelity Media
-description: Prebid Fidelity Media Bidder Adapter
-pbjs: true
-schain_supported: true
-biddercode: fidelity
-media_types: banner
-gdpr_supported: true
-usp_supported: true
-gvl_id: 408
-enable_download: false
-pbjs_version_notes: not ported to 5.x
----
-
-### Bid Params
-
-{: .table .table-bordered .table-striped }
-| Name | Scope | Description | Example | Type |
-|--------|----------|--------------------------------------------------|--------------------------|----------|
-| zoneid | required | The ad zone or tag specific ID | `'27248'` | `string` |
-| floor | optional | The floor CPM price for the request | `0.1234` | `float` |
-| server | optional | Bidder domain (default `'x.fidelity-media.com'`) | `'x.fidelity-media.com'` | `string` |
diff --git a/dev-docs/bidders/finative.md b/dev-docs/bidders/finative.md
new file mode 100644
index 0000000000..0d7df0cde9
--- /dev/null
+++ b/dev-docs/bidders/finative.md
@@ -0,0 +1,18 @@
+---
+layout: bidder
+title: Finative
+description: Prebid Finative Bidder Adaptor
+pbjs: true
+biddercode: finative
+media_types: native
+tcfeu_supported: false
+sidebarType: 1
+---
+
+### Bid params
+
+{: .table .table-bordered .table-striped }
+| Name | Scope | Description | Example | Type |
+|-------------|----------|----------------------|--------------------|-----------|
+| `adUnitId` | required | ID of the Ad Unit | `8ao` | `string` |
+| `url` | optional | URL from the Page | `example.tld` | `string` |
diff --git a/dev-docs/bidders/flipp.md b/dev-docs/bidders/flipp.md
new file mode 100644
index 0000000000..343f7e388f
--- /dev/null
+++ b/dev-docs/bidders/flipp.md
@@ -0,0 +1,43 @@
+---
+layout: bidder
+title: flipp
+description: Prebid Flipp Bidder Adapter
+biddercode: flipp
+media_types: banner
+pbjs: true
+pbs: true
+tcfeu_supported: false
+usp_supported: false
+coppa_supported: false
+schain_supported: false
+floors_supported: false
+userIds: none
+prebid_member: false
+safeframes_ok: true
+deals_supported: false
+pbs_app_supported: false
+fpd_supported: false
+multiformat_supported: will-not-bid
+ortb_blocking_supported: false
+---
+
+### Bid Params
+
+{: .table .table-bordered .table-striped }
+| Name | Scope | Description | Example | Type |
+|---------------|----------|--------------|-----------|----------|
+| `publisherNameIdentifier` | required | Publisher name identifier | `test-publisher-name` | `string` |
+| `creativeType` | required | Type of the creative | `NativeX` | `NativeX\|DTX` |
+| `siteId` | required | ID associated with the site | `123456` | `integer` |
+| `zoneIds` | optional | Zones to request from bidder | `[789, 123]` | `array[integer]` |
+| `userKey` | optional | User Key to power experience optimization and frequency capping. Publishers: please confirm with legal counsel before using this feature. | `4188d8a3-22d1-49cb-8624-8838a22562bd` | `uuidv4` |
+| `options` | optional | Additional integration specific context | `options: { "startCompact": true }` | `map[string]interface{}` |
+
+Current available integration options are as follows:
+
+{: .table .table-bordered .table-striped }
+| Name | Scope | Description | Example | Type |
+|---------------|----------|--------------|-----------|----------|
+| `startCompact` | optional | Height of the experience will be reduced | `true` | `boolean` |
+| `dwellExpand` | optional | Auto expand the experience after a certain time passes | `true` | `boolean` |
+| `contentCode` | optional | Force show a certain experience. Generally used for testing and debugging purposes. | `publisher-test` | `string` |
diff --git a/dev-docs/bidders/fluct.md b/dev-docs/bidders/fluct.md
index 5403970b0d..9ab9184f8d 100644
--- a/dev-docs/bidders/fluct.md
+++ b/dev-docs/bidders/fluct.md
@@ -4,11 +4,12 @@ title: fluct
description: Prebid fluct Bidder Adapter
biddercode: fluct
media_types: banner
-gdpr_supported: false
+tcfeu_supported: false
coppa_supported: false
usp_supported: false
schain_supported: true
pbjs: true
+sidebarType: 1
---
### Bid Params
diff --git a/dev-docs/bidders/freepass.md b/dev-docs/bidders/freepass.md
new file mode 100644
index 0000000000..f86b5c1640
--- /dev/null
+++ b/dev-docs/bidders/freepass.md
@@ -0,0 +1,30 @@
+---
+layout: bidder
+title: freepass
+description: Prebid FreePass Bidder Adapter
+biddercode: freepass
+media_types: banner
+pbjs: true
+userIds: freepassId
+sidebarType: 1
+tcfeu_supported: false
+usp_supported: false
+coppa_supported: false
+schain_supported: false
+floors_supported: false
+prebid_member: false
+safeframes_ok: false
+deals_supported: false
+fpd_supported: true
+ortb_blocking_supported: false
+gvl_id: none
+multiformat_supported: will-not-bid
+---
+
+### Bid Params
+
+{: .table .table-bordered .table-striped }
+| Name | Scope | Description | Example | Type |
+|---------------|----------|-----------------------|-----------|-----------|
+| publisherId | required | publisherId | `'PUBLISHER_ID'` | `string` |
+| publisherUrl | optional | url for publisher | `'PUBLISHER_URL'` | `string` |
diff --git a/dev-docs/bidders/freewheel-ssp.md b/dev-docs/bidders/freewheel-ssp.md
deleted file mode 100644
index f264e52b00..0000000000
--- a/dev-docs/bidders/freewheel-ssp.md
+++ /dev/null
@@ -1,17 +0,0 @@
----
-layout: bidder
-title: FreeWheel-ssp
-description: Freewheel Bidder Adaptor
-pbjs: true
-biddercode: freewheel-ssp
-gdpr_supported: true
-usp_supported: true
-media_types: video
----
-
-### Bid Params
-
-{: .table .table-bordered .table-striped }
-| Name | Scope | Description | Example | Type |
-|----------|----------|-------------|---------|----------|
-| `zoneId` | required | | | `string` |
diff --git a/dev-docs/bidders/freewheelssp.md b/dev-docs/bidders/freewheelssp.md
new file mode 100644
index 0000000000..781c137295
--- /dev/null
+++ b/dev-docs/bidders/freewheelssp.md
@@ -0,0 +1,67 @@
+---
+layout: bidder
+title: FreeWheelssp
+description: Freewheel Bidder Adaptor
+pbjs: true
+pbs: true
+biddercode: freewheelssp
+aliasCode: freewheel-ssp
+gvl_id: 285
+tcfeu_supported: true
+usp_supported: true
+gpp_supported: true
+coppa_supported: true
+schain_supported: true
+media_types: video
+ortb_blocking_supported: partial
+sidebarType: 1
+---
+
+### Bid Params
+
+{: .table .table-bordered .table-striped }
+| Name | Scope | Description | Example | Type |
+|----------|----------|-------------------------|--------|----------|
+| `zoneId` | required | The zone ID for the ad. | "2003" | `string` |
+| `format` | optional | The format to use for displaying the ad. Can be one of the following: *screen-roll * intext-roll *sliderad * floorad *expand-banner * instream * inbanner Note: The screen-roll, intext-roll, sliderad and floorad formats are all FreeWheel outstream formats. Default value: "instream" | "screen-roll" | `string` |
+| `bidfloor` | optional | Bid floor price. | 13.2118 | `float` |
+| `bidfloorcur` | optional | Bid floor currency. | "USD" | `string` |
+| `vastUrlParams` | optional | Add query parameters to the vast request. Should be a single item level JSON. Works with formats: instream, inbanner | { protocolVersion:'3.0' } | `object` |
+
+When the following params are used with instream or inbanner formats, they should be included in the `vastUrlParams` object. For other formats, they should be included directly in the `params` object:
+
+{: .table .table-bordered .table-striped }
+| Name | Scope | Description | Example | Type |
+|----------|----------|-------------------------|--------|----------|
+| `soundButton` | optional | If enabled, the sound will be off by default and the user will be able to turn it on/off by clicking on a button. (disabled on iOS devices) Default value: false | true | `boolean` |
+| `defaultMute` | optional | If "soundButton=true" is set, controls if the video will start with the sound muted. Default value: true | false | `boolean` |
+| `timeline` | optional | Display a progress bar to the bottom of the ad unit. Default value: false | true | `boolean` |
+| `protocolVersion` | optional | Specify the VAST version that will be used for the vastVersion parameter value on AdsSetup request. Default Value: 4.2 | 3 .0 | `float` |
+| `onOver` | optional | Allows to enable the sound only when the mouse is over the ad container. Works with formats: screen-roll, intext-roll, sliderad, floorad, expand-banner Default value: false | true | `boolean` |
+| `closeTimeout` | optional | The duration in milliseconds before displaying the close button. Works with formats: screen-roll, intext-roll, sliderad, floorad Default value: 5000 | 2000 | `integer` |
+| `animated` | optional | Enable an animation on opening and on closing of the video. Works with formats: intext-roll, sliderad Default value: true | false | `boolean` |
+| `animationSpeed` | optional | If the animated parameter is set to true, allows to choose the animation speed in milliseconds. Works with formats: intext-roll, sliderad Default value: 700 | 500 | `integer` |
+| `contentId` | optional | Displays the ad inside the content-id dom element (dom id). Requires an 'auto', 'p' or 'article' param. Works with format: intext-roll | "element-id" | `string` |
+| `auto` | optional | If value is set to "v2", position the intext-roll automatically. If contentId is set, the auto positioning will find a position inside the 'contentId' dom element. If contentId is not set, the auto positionaing will search the best position to display the ad based on the page semantic. It will select several possible position and show the intext-roll at the time one of them is made visible. Works with format: intext-roll Default value: null | "v2" | `string` |
+| `article` | optional | Set the location of the ad just after the given article tag in the page (0 is for the first article tag). If content-id is set, the article index is relative to articles inside the 'content-id' dom element | "element-id" Works with format: intext-roll | `string` |
+| `p` | optional | Set the location of the ad just after the given paragraph tag in the page (0 is for the first p tag). If content-id is set, the p index is relative to paragraphs inside the 'content-id' dom element. Works with format: intext-roll | "element-id" | `string` |
+| `iframeMode` | optional | Indicate to intext-roll that it is served in a friendly hidden iframe. Can be one of the following: *normal - place ad in friendly iframe * dfp - place ad in iframe on dfp platform Works with format: intext-roll | "normal" | `string` |
+| `inRead` | optional | When true, will keep the ad slot window on the page when the ad is done. Works with format: intext-roll Default value: false | true | `boolean` |
+| `lang` | optional | Text language. Can be one of: [fr,en,es,it,de,nl,pt] Works with format: intext-roll Default value: "fr" | "en" | `string` |
+| `openingTime` | optional | The time in milliseconds to display the opening animation. Works with format: intext-roll Default value: 0 | 100 | `integer` |
+| `pauseRatio` | optional | Specify the viewabilityratio where the ad is paused. This can be a float between 0 and 1, or "never" which means never paused. The default value will pause when the ad has less than 50% viewability. Works with formats: intext-roll, expand-banner Default value: 0.5 | 0.9 | `float` \| `string` |
+| `closeAction` | optional | Define what to do for the banner after all ads complete. Can be one of: *collapse - will set the target css display property to "none". * hide - will leave the target element in place, empty. Works with formats: intext-roll, expand-banner Default value: âcollapseâ | "hide" | `string` |
+| `domId` | optional | id of the dom element containing the text. If this targeted div is empty, be sure it has the needed width or a width of 0px will be used. Note that the script tag should be added in the page AFTER the targeted dom element so the target will be ready when the script runs. Works with formats: intext-roll, expand-banner | "element-id" | `string` |
+| `errorAction` | optional | Define what to do for the banner after an ad error. Can be one of: *collapse - will set the target css display property to "none". * hide - will leave the target element in place, empty. Works with formats: intext-roll, expand-banner Default value: âcollapseâ | "hide" | `string` |
+| `stickToTop` | optional | Controls if the ad will stick to the top of the browser window. Can be one of the following: *true - The ad will stick to the top of the browser window upon scroll. * "bottom" - The ad will stick to the top and will be hidden again when reaching the bottom of the page. * number - The ad will stick to the top for the given distance in pixels. Works with formats: intext-roll, expand-banner | 300 | `boolean \| string \| number` |
+| `blurDisplay` | optional | Allow to choose between too blur effects for the sides of the banner. Can be one of: *big - will show the blured video only once in the background. * duplicate - will show the blured video twice: once for each side. Works with format: expand-banner Default value: "big" | "duplicate" | `string` |
+| `expandDirection` | optional | Allows to force the expansion direction. Can be one of the following: *before - Expand to the left if the banner is vertical and to the top if the banner is horizontal. * after - Expand to the right if the banner is vertical and to the bottom if the banner is horizontal. *center - Expand to left and right if the banner is vertical. Expand to the top and bottom if the banner is horizontal. * auto - Expand based on the space available on the page. Expand to the left and/or right if the banner is vertical. and expand to the top and bottom if the banner is horizontal, depending on the space available. * none - Banner will not expand Works with format: expand-banner Default value: "auto" | "before" | `string` |
+| `zIndex` | optional | Force the z-index value on the ad container. The default value is around 4100 (see IAB guidelines). Use this parameter if it doesn't fit your needs. Works with format: expand-banner Default value: ~4100 | 1000 | `integer` |
+| `hAlign` | optional | Horizontal side where to display the video. Can be one of: *left - horizontal align to the left of the page. * middle - horizontal align to the middle of the page. * right - horizontal align to the right of the page. Works with format: sliderad Default value: "right" | "left" | `string` |
+| `hSpacing` | optional | Set a horizontal spacing between the hAlign side and the video. Works with format: sliderad Default value: 10 | 20 | `integer` |
+| `vAlign` | optional | Vertical side where to display the video. Can be one of: *top - vertical align to the top of the page. * middle - vertical align to the middle of the page. * bottom - vertical align to the bottom of the page. Works with format: sliderad Default value: "bottom" | "top" | `string` |
+| `vSpacing` | optional | Set a vertical spacing between the vAlign side and the video. Works with format: sliderad Default value: 10 | 20 | `integer` |
+| `mod` | optional | Ad trigger mode. Can be one of: *asap - play the ad asap * click - play the ad when the user clicks a link * scroll - play the ad when the user scrolls Works with format: screen-roll Default value: "asap" | "click" | `string` |
+| `opacity` | optional | Define the opacity of the background. This is a number between 0 (completely transparent) and 1 (totally black). Works with format: screen-roll Default value: 0.4 | .5 | `float` |
+| `smartPlay` | optional | Enable to use autoPlay on mobile devices. Works with format: screen-roll Default value: false | true | `boolean` |
+| `bannerHeight` | optional | The height in pixel of the bottom banner. The video ad takes this height when its not expanded. Works with format: floorad Default value: 250 | 500 | `integer` |
diff --git a/dev-docs/bidders/frvradn.md b/dev-docs/bidders/frvradn.md
new file mode 100644
index 0000000000..e6dbf8073b
--- /dev/null
+++ b/dev-docs/bidders/frvradn.md
@@ -0,0 +1,32 @@
+---
+layout: bidder
+title: FRVR Ad Network
+description: FRVR Ad Network Prebid Bidder Adapter
+biddercode: frvradn
+tcfeu_supported: true
+usp_supported: true
+coppa_supported: true
+schain_supported: true
+floors_supported: true
+media_types: banner, video, native
+multiformat_supported: will-bid-on-one
+safeframes_ok: true
+userIds: all
+pbjs: false
+pbs: true
+pbs_app_supported: true
+gvl_id: 1107
+sidebarType: 1
+---
+
+### Registration
+
+FRVR Ad Network Bidding adapter requires setup before beginning. Please contact us at
+
+### Bid Params
+
+{: .table .table-bordered .table-striped }
+| Name | Scope | Description | Example | Type |
+|---------------|----------|--------------|-----------|----------|
+| `publisher_id` | required | Publisher ID | `'11111'` | `string` |
+| `ad_unit_id` | required | Ad Unit ID | `'22222'` | `string` |
diff --git a/dev-docs/bidders/futureads.md b/dev-docs/bidders/futureads.md
index bae56ea0f5..6fe057af2f 100644
--- a/dev-docs/bidders/futureads.md
+++ b/dev-docs/bidders/futureads.md
@@ -7,13 +7,13 @@ pbs: true
biddercode: futureads
aliasCode: admixer
media_types: banner, video, native
-gdpr_supported: true
+tcfeu_supported: true
usp_supported: true
schain_supported: true
-fpd_supported: true
gvl_id: 511
userIds: AdmixerID
prebid_member: true
+sidebarType: 1
---
### Bid Params
diff --git a/dev-docs/bidders/fyber.md b/dev-docs/bidders/fyber.md
index fd28322e7e..002b6e8fad 100644
--- a/dev-docs/bidders/fyber.md
+++ b/dev-docs/bidders/fyber.md
@@ -5,8 +5,12 @@ description: Prebid Fyber Bidder Adaptor
pbjs: true
biddercode: fyber
media_types: banner
+sidebarType: 1
---
+{: .alert.alert-warning :}
+Fyber is probably a defunct bidder, as the domain previously registered, inner-active.com, is no-longer-active.
+
### Bid Params
{: .table .table-bordered .table-striped }
@@ -14,4 +18,4 @@ media_types: banner
|----------------|----------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------|--------------------|----------|
| `appId` | required | The app. ID provided by Inneractive | `'Company_App_OS'` | `string` |
| `adSpotType` | required | The ad spot type (`'BANNER'`/`RECTANGLE`) | `'BANNER'` | `string` |
-| `customParams` | optional | Allows passing custom parameters in the bid request. See more details at: https://confluence.inner-active.com/display/DevWiki/IA+Adapter+AdUnit+Bidder+Configuration | | `object` |
+| `customParams` | optional | Allows passing custom parameters in the bid request. | | `object` |
diff --git a/dev-docs/bidders/gambid.md b/dev-docs/bidders/gambid.md
index 36dc5ebb3e..1e2eada831 100644
--- a/dev-docs/bidders/gambid.md
+++ b/dev-docs/bidders/gambid.md
@@ -11,6 +11,7 @@ media_types: banner, video
biddercode: gambid
aliasCode: gamoshi
userIds: id5Id, unifiedId
+sidebarType: 1
---
### Bid params
@@ -19,4 +20,3 @@ userIds: id5Id, unifiedId
| Name | Scope | Description | Example | Type |
|-------------------|----------|---------------------------------------------------------------|----------------------|----------|
| `supplyPartnerId` | required | ID of the supply partner | `'12345'` | `string` |
-
diff --git a/dev-docs/bidders/gamma.md b/dev-docs/bidders/gamma.md
index 3935c66e0e..726bf6792a 100644
--- a/dev-docs/bidders/gamma.md
+++ b/dev-docs/bidders/gamma.md
@@ -6,6 +6,7 @@ pbjs: true
pbs: true
biddercode: gamma
media_types: video
+sidebarType: 1
---
### Bid Params
diff --git a/dev-docs/bidders/gamoshi.md b/dev-docs/bidders/gamoshi.md
index 00e23743f9..2b1a874644 100644
--- a/dev-docs/bidders/gamoshi.md
+++ b/dev-docs/bidders/gamoshi.md
@@ -6,12 +6,13 @@ biddercode: gamoshi
pbjs: true
pbs: true
media_types: banner, video
-gdpr_supported: true
+tcfeu_supported: true
tcf2_supported: true
schain_supported: true
usp_supported: true
userIds: id5Id, unifiedId
gvl_id: 644
+sidebarType: 1
---
### Bid params
diff --git a/dev-docs/bidders/getintent.md b/dev-docs/bidders/getintent.md
index 671ec6fe1f..ad9b2ad204 100644
--- a/dev-docs/bidders/getintent.md
+++ b/dev-docs/bidders/getintent.md
@@ -6,6 +6,7 @@ pbjs: true
biddercode: getintent
media_types: video, banner
floors_supported: true
+sidebarType: 1
---
diff --git a/dev-docs/bidders/giants.md b/dev-docs/bidders/giants.md
index 11dbdad564..348e735963 100644
--- a/dev-docs/bidders/giants.md
+++ b/dev-docs/bidders/giants.md
@@ -5,6 +5,7 @@ description: Prebid IPAX Bidder Adaptor
pbjs: true
biddercode: giants
media_types: video
+sidebarType: 1
---
### Bid Params
diff --git a/dev-docs/bidders/gjirafa.md b/dev-docs/bidders/gjirafa.md
index 75dbe78ba6..e0b0a9d7a9 100644
--- a/dev-docs/bidders/gjirafa.md
+++ b/dev-docs/bidders/gjirafa.md
@@ -5,6 +5,7 @@ description: Prebid Gjirafa Bidder Adaptor
pbjs: true
biddercode: gjirafa
media_types: banner, video
+sidebarType: 1
---
diff --git a/dev-docs/bidders/glimpse.md b/dev-docs/bidders/glimpse.md
index 0c20c9be85..867ecbaafc 100644
--- a/dev-docs/bidders/glimpse.md
+++ b/dev-docs/bidders/glimpse.md
@@ -4,37 +4,42 @@ title: Glimpse Protocol
description: Glimpse Protocol Bid Adapter
biddercode: glimpse
pbjs: true
-gdpr_supported: true
+tcfeu_supported: true
+usp_supported: true
deals_supported: true
media_types: banner
gvl_id: 1012
+sidebarType: 1
---
+{: .alert.alert-warning :}
+glimpse is probably a defunct bidder, as the glimpseportal.io domain is no longer active.
+
## Overview
-```
+```text
Module Name: Glimpse Protocol Bid Adapter
Module Type: Bidder Adapter
-Maintainer: publisher@glimpseprotocol.io
+Maintainer: support@glimpseportal.io
```
## Description
-This module connects publishers to Glimpse Protocol's demand sources via Prebid.js. Our innovative marketplace protects consumer privacy while allowing precise targeting.
+Glimpse protects consumer privacy while allowing precise targeting. This module connects publishers
+to Glimpse Protocol's demand sources via Prebid.js.
## Supported Media Types
-| Type | Sizes |
+{: .table .table-bordered .table-striped }
+| Type | Sizes |
| -------- | ----------------------------------------- |
| `Banner` | 300x250, 300x600, 320x50, 728x90, 970x250 |
## Setup
-This section shows how to configure your Prebid.js integration to work with the Glimpse module.
-
### Prerequisites
-Before you start to configure Glimpse, you will need to build a `prebid.js` file with the Glimpse module included, and include both `gpt.js` and `prebid.js` in the `head` of each page with supply. An example of a typical pair of script tags might be:
+Before you start, you will need to build a `prebid.js` file with the Glimpse module included, and include both `gpt.js` and `prebid.js` in the `head` of each page with supply. An example of a typical pair of script tags might be:
```html
```
-### Publisher Registration
-
-Coming soon.
-
-### Domain Registration
-
-Coming soon.
-
-### Ad Unit Registration
-
-Coming soon.
-
## Configuration
### Bid Requests
-Our adapter captures the following values in the `params` block of each bid request:
+Our adapter expects the following values in the `params` block of each bid request:
-| Name | Scope | Type | Description | Example |
-| ------------- | -------- | ------------------- | ----------------------------------------------------------------------------------------------------------------------------- | ---------------------- |
-| `placementId` | Required | string | A unique identifier associated with a publisher and ad unit, provided by the Glimpse Publisher Portal when registering a unit | 'glimpse-placement-id' |
-| `demand` | Optional | string | Target demand source (defaults to 'glimpse') | 'xandr' |
-| `keywords` | Optional | Record | Audience targeting data (applies to the single ad unit) | { sticky: true } |
+{: .table .table-bordered .table-striped }
+| Name | Scope | Type | Description | Example |
+| ----- | -------- | ------ | --------------------------------------------------------------------------------------------------- | ---------------------- |
+| `pid` | Required | string | A unique identifier representing an ad unit. It is provided by Glimpse when registering an ad unit. | 'glimpse-placement-id' |
#### Example
@@ -82,11 +74,7 @@ const units = [
{
bidder: "glimpse",
params: {
- placementId: "glimpse-placement-id",
- demand: "glimpse",
- keywords: {
- sticky: true,
- },
+ pid: "glimpse-placement-id",
},
},
],
@@ -96,43 +84,47 @@ const units = [
### First Party Data
-Our adapter captures site and user level data that can be passed to all units using the `ortb2` block, as described [here](https://docs.prebid.org/features/firstPartyData.html).
+Our adapter works with first party data providers as described [here](https://docs.prebid.org/features/firstPartyData.html). In this example we add Permutive data to our bidder request using [setBidderConfig](https://docs.prebid.org/features/firstPartyData.html#supplying-bidder-specific-data).
#### Example
```javascript
pbjs.que.push(() => {
- pbjs.setConfig({
- ortb2: {
- site: {
- keywords: "sports, basketball",
- ext: {
- data: {
- title: "The Premier League",
+ pbjs.setBidderConfig({
+ bidders: ["glimpse"],
+ config: {
+ ortb2: {
+ site: {
+ keywords: "business,finance,crypto",
+ ext: {
+ data: {
+ permutive: {
+ pvc: JSON.parse(localStorage.getItem("permutive-pvc")) ?? {},
+ },
+ },
},
},
- },
- user: {
- keywords: "food, takeaway",
- ext: {
- data: {
- firstVisit: true,
+ user: {
+ ext: {
+ data: {
+ permutive: {
+ keywords: JSON.parse(localStorage.getItem("_psegs")) ?? [],
+ enrichers:
+ JSON.parse(
+ localStorage.getItem("permutive-data-enrichers")
+ ) ?? {},
+ },
+ },
},
},
},
- }
+ },
})
-
- ...
})
```
## FAQs
-### Can I test my setup without a Publisher Portal Account?
-
-Yes, to test your setup, you can trigger Glimpse to respond with randomly-generated bids for your correctly-configured units by setting `demand: 'demo'` in the `params` of each unit.
-
### Can you provide additional support?
-Of course! You can check the Glimpse Prebid Adapter documentation, [here](https://docs.glimpseportal.io/en/latest/), or reach out to us at [publisher@glimpseprotocol.io](mailto:publisher@glimpseprotocol.io).
+Of course! You can check the Glimpse Prebid Adapter documentation or reach out to us at .
diff --git a/dev-docs/bidders/globalsun.md b/dev-docs/bidders/globalsun.md
new file mode 100644
index 0000000000..6b3d5c2048
--- /dev/null
+++ b/dev-docs/bidders/globalsun.md
@@ -0,0 +1,25 @@
+---
+layout: bidder
+title: Globalsun
+description: Prebid Globalsun Bidder Adapter
+biddercode: globalsun
+media_types: banner, video, native
+pbjs: true
+pbs: true
+safeframes_ok: true
+fpd_supported: false
+multiformat_supported: will-not-bid
+ortb_blocking_supported: partial
+usp_supported: true
+tcfeu_supported: false
+coppa_supported: true
+schain_supported: true
+floors_supported: true
+---
+
+### Prebid Params
+
+{: .table .table-bordered .table-striped }
+| Name | Scope | Description | Example | Type |
+|---------------|----------|-----------------------|-----------|-----------|
+| `placementId` | optional | Placement Id | `'0'` | `'string'` |
diff --git a/dev-docs/bidders/glomex.md b/dev-docs/bidders/glomex.md
index ef5e580b90..582bb6c0e9 100644
--- a/dev-docs/bidders/glomex.md
+++ b/dev-docs/bidders/glomex.md
@@ -4,10 +4,12 @@ title: Glomex
description: Prebid Glomex Bidder Adapter
biddercode: glomex
media_types: banner
-gdpr_supported: true
+gvl_id: 967
+tcfeu_supported: true
schain_supported: false
prebid_member: false
pbjs: true
+sidebarType: 1
---
diff --git a/dev-docs/bidders/gmossp.md b/dev-docs/bidders/gmossp.md
index 98b20a2ee2..17a15ce3f2 100644
--- a/dev-docs/bidders/gmossp.md
+++ b/dev-docs/bidders/gmossp.md
@@ -4,7 +4,9 @@ title: GMOSSP
description: Prebid GMOSSP Bidder Adaptor
pbjs: true
biddercode: gmossp
+userIds: imuid, sharedId, identityLink
media_types: banner
+sidebarType: 1
---
diff --git a/dev-docs/bidders/gnet.md b/dev-docs/bidders/gnet.md
index 70af8f195d..2a43334992 100644
--- a/dev-docs/bidders/gnet.md
+++ b/dev-docs/bidders/gnet.md
@@ -4,6 +4,7 @@ title: Gnet
description: Prebid Gnet Bidder Adaptor
pbjs: true
biddercode: gnet
+sidebarType: 1
---
### Bid Params
@@ -13,4 +14,3 @@ biddercode: gnet
|---------------|----------|--------------------------------------------|-------------------------------------|----------|
| `websiteId` | required | The Gnet website ID | `'1'` | `string` |
| `adunitId` | required | The Gnet adunit ID | `'1'` | `string` |
-
diff --git a/dev-docs/bidders/go2net.md b/dev-docs/bidders/go2net.md
index f1ce1099d6..c401d7bf49 100644
--- a/dev-docs/bidders/go2net.md
+++ b/dev-docs/bidders/go2net.md
@@ -6,6 +6,7 @@ pbjs: true
biddercode: go2net
aliasCode: admixer
media_types: video
+sidebarType: 1
---
### bid params
diff --git a/dev-docs/bidders/goldbach.md b/dev-docs/bidders/goldbach.md
index 6f9b4f7fc5..72ffa4a491 100644
--- a/dev-docs/bidders/goldbach.md
+++ b/dev-docs/bidders/goldbach.md
@@ -4,29 +4,33 @@ title: Goldbach
description: Prebid Goldbach Bidder Adaptor
biddercode: goldbach
media_types: banner, video, native
-gdpr_supported: true
+gvl_id: 580
+tcfeu_supported: true
prebid_member: true
-userIds: criteo, unifiedId, netId, identityLink, flocId, uid2
+userIds: criteo, unifiedId, netId, identityLink, uid2
schain_supported: true
coppa_supported: true
usp_supported: true
-getFloor: true
+floors_supported: true
pbjs: true
-pbs: true
+pbs: false
+sidebarType: 1
---
### Table of Contents
-- [Bid Params](#godlbach-bid-params)
-- [Video Object](#godlbach-video-object)
-- [User Object](#godlbach-user-object)
-- [App Object](#godlbach-app-object)
-- [Custom Targeting keys](#custom-targeting-keys)
-- [Passing Keys Without Values](#godlbach-no-value)
-- [User Sync in AMP](#godlbach-amp)
-- [Debug Auction](#godlbach-debug-auction)
+- [Table of Contents](#table-of-contents)
+ - [Bid Params](#bid-params)
+ - [Video Object](#video-object)
+ - [User Object](#user-object)
+ - [App Object](#app-object)
+ - [Custom Targeting keys](#custom-targeting-keys)
+ - [Passing Keys Without Values](#passing-keys-without-values)
+ - [User Sync in AMP](#user-sync-in-amp)
+ - [Mobile App Display Manager Version](#mobile-app-display-manager-version)
+ - [Debug Auction](#debug-auction)
-
+
{: .alert.alert-danger :}
All Goldbach (Xandr) placements included in a single call to `requestBids` must belong to the same parent Publisher. If placements from two different publishers are included in the call, the Goldbach bidder will not return any demand for those placements.
@@ -58,7 +62,7 @@ All Goldbach (Xandr) placements included in a single call to `requestBids` must
| `externalImpId` | optional | Specifies the unique identifier of an externally generated auction. | `'bacbab02626452b097f6030b3c89ac05'` | `string` |
| `generate_ad_pod_id`| optional | Signal to Goldbach to split impressions by ad pod and add unique ad pod id to each request. Specific to long form video endpoint only. Supported by Prebid Server, not Prebid JS. | `true` | `boolean` |
-
+
#### Video Object
@@ -73,8 +77,7 @@ All Goldbach (Xandr) placements included in a single call to `requestBids` must
| `playback_method` | A string that sets the playback method supported by the publisher. Allowed values: `"auto_play_sound_on"`; `"auto_play_sound_off"`; `"click_to_play"`; `"mouse_over"`; `"auto_play_sound_unknown"`. | `string` |
| `frameworks` | Array of integers listing API frameworks supported by the publisher. Allowed values: None: `0`; VPAID 1.0: `1`; VPAID 2.0: `2`; MRAID 1.0: `3`; MRAID 2.0: `4`; ORMMA: `5`; OMID 1.0 `6`. | `Array` |
-
-
+
#### User Object
@@ -88,8 +91,7 @@ All Goldbach (Xandr) placements included in a single call to `requestBids` must
| `dnt` | Do not track flag. Indicates if tracking cookies should be disabled for this auction | `true` | `boolean` |
| `language` | Two-letter ANSI code for this user's language. | `EN` | `string` |
-
-
+
#### App Object
@@ -102,13 +104,13 @@ Goldbach supports using prebid within a mobile app's webview. If you are interes
| `device_id` | Object that contains the advertising identifiers of the user (`idfa`, `aaid`, `md5udid`, `sha1udid`, or `windowsadid`). | `{ aaid: "38400000-8cf0-11bd-b23e-10b96e40000d" }` | `object` |
| `geo` | Object that contains the latitude (`lat`) and longitude (`lng`) of the user. | `{ lat: 40.0964439, lng: -75.3009142 }` | `object` |
-
+
#### Custom Targeting keys
Goldbach returns custom keys that can be sent to the adserver through bidderSettings: buyerMemberId, dealPriority, and dealCode. The following snippet demonstrates how to add these custom keys as key-value pairs.
-```
+```javascript
pbjs.bidderSettings = {
godlbach: {
adserverTargeting: [
@@ -134,14 +136,13 @@ pbjs.bidderSettings = {
}
```
-
+
#### Passing Keys Without Values
It's possible to use the `keywords` parameter to define keys that do not have any associated values. Keys with empty values can be created in Prebid.js and can also be sent through Prebid Server to Goldbach. The following are examples of sending keys with empty values:
-
-```
+```javascript
keywords: {
myKeyword: '',
myOtherKeyword: ['']
@@ -152,20 +153,20 @@ The preceding example passes the key `myKeyword` with an empty value. The key `m
You can define keys with values and without values in the same `keywords` definition. In this next example, we've defined the key `color` with an array of values: `red`, `blue`, and `green`. We've followed that with the key `otherKeyword` with an empty value array.
-```
+```javascript
keywords: {
color: ['red', 'blue', 'green'],
otherKeyword: ['']
}
```
-
+
#### User Sync in AMP
If you are syncing user id's with Prebid Server and are using Goldbach's managed service, see [AMP Implementation Guide cookie-sync instructions](/dev-docs/show-prebid-ads-on-amp-pages.html#user-sync) for details.
-
+
#### Mobile App Display Manager Version
@@ -183,9 +184,9 @@ Enabling the Goldbach Debug Auction feature should only be done for diagnosing t
To understand what is happening behind the scenes during an auction, you can enable a debug auction by adding an `apn_prebid_debug` cookie with a JSON string. For example:
-{% highlight js %}
+```javascript
{ "enabled": true, "dongle": "QWERTY", "debug_timeout": 1000, "member_id": 958 }
-{% endhighlight %}
+```
To view the results of the debug auction, add the `pbjs_debug=true` query string parameter and open your browser's developer console.
@@ -196,4 +197,3 @@ To view the results of the debug auction, add the `pbjs_debug=true` query string
| `dongle` | Your account's unique debug password. | `QWERTY` | `string` |
| `member_id` | The ID of the member running the debug auction | `958` | `integer` |
| `debug_timeout` | The timeout for the debug auction results to be returned | `3000` | `integer` |
-
diff --git a/dev-docs/bidders/gothamads.md b/dev-docs/bidders/gothamads.md
index d41aa86cbd..a85e21c03c 100644
--- a/dev-docs/bidders/gothamads.md
+++ b/dev-docs/bidders/gothamads.md
@@ -3,7 +3,7 @@ layout: bidder
title: gothamads
description: Prebid gothamads Bidder Adaptor
biddercode: gothamads
-gdpr_supported: true
+tcfeu_supported: true
usp_supported: true
coppa_supported: true
ccpa_supported: true
@@ -12,16 +12,24 @@ media_types: banner, video, native
safeframes_ok: true
deals_supported: true
pbjs: true
+pbs: true
+sidebarType: 1
+floors_supported: true
+prebid_member: false
+fpd_supported: false
+gvl_id: none
+multiformat_supported: will-bid-on-one
+ortb_blocking_supported: true
+userIds: all
---
-### Note:
-
-The Example Bidding adapter requires setup before beginning. Please contact us at support@gothamads.com
+### Note
+Gothamads will bid only on first impresion in bid request.
+The Example Bidding adapter requires setup before beginning. Please contact us at
### Bid Params
{: .table .table-bordered .table-striped }
| Name | Scope | Description | Example | Type |
|---------------|----------|-----------------------|-----------|-----------|
-| `placementId` | required | placement id | `'qdasx'` | `string` |
-| `accountId` | required | account id | `'asffw1'` | `string` |
+| `accountId` | required | account id | `'hash'` | `string` |
diff --git a/dev-docs/bidders/gourmetads.md b/dev-docs/bidders/gourmetads.md
index e6909c8d34..cfe9df0ee2 100644
--- a/dev-docs/bidders/gourmetads.md
+++ b/dev-docs/bidders/gourmetads.md
@@ -5,6 +5,7 @@ description: Prebid Gourmet Ads Bidder Adaptor
pbjs: true
biddercode: gourmetads
aliasCode : appnexus
+sidebarType: 1
---
### Bid Params
diff --git a/dev-docs/bidders/greedygame.md b/dev-docs/bidders/greedygame.md
new file mode 100644
index 0000000000..63f1167308
--- /dev/null
+++ b/dev-docs/bidders/greedygame.md
@@ -0,0 +1,34 @@
+---
+layout: bidder
+title: GreedyGame
+description: Prebid GreedyGame Bidder Adaptor
+biddercode: greedygame
+pbjs: false
+pbs: true
+media_types: banner, video, audio, native
+userIds: all
+fpd_supported: false
+tcfeu_supported: false
+usp_supported: true
+coppa_supported: true
+schain_supported: true
+prebid_member: false
+ortb_blocking_supported: true
+multiformat_supported: will-bid-on-one
+floors_supported: false
+aliasCode: limelightDigital
+sidebarType: 1
+---
+
+### Note
+
+The GreedyGame Bidding adapter requires setup before beginning. Please contact us at
+
+### Bid Params
+
+{: .table .table-bordered .table-striped }
+
+| Name | Scope | Description | Example | Type |
+|:--------------|:---------|:----------------------|:-----------------------|:----------|
+| `host` | required | Ad network's RTB host | `'rtb-greedygame.com'` | `string` |
+| `publisherId` | required | Publisher ID | `12345` | `integer` |
diff --git a/dev-docs/bidders/grid.md b/dev-docs/bidders/grid.md
index 1f6a3db4ff..c74e1876c6 100644
--- a/dev-docs/bidders/grid.md
+++ b/dev-docs/bidders/grid.md
@@ -5,17 +5,30 @@ description: Prebid TheMediaGrid Bidder Adaptor
pbjs: true
pbs: true
biddercode: grid
-media_types: banner, video
-gdpr_supported: true
+media_types: banner, video, native (s2s only)
+multiformat_supported: will-bid-on-any
+gvl_id: 686
+tcfeu_supported: true
usp_supported: true
+gpp_supported: true
schain_supported: true
floors_supported: true
userIds: all
tcf2_supported: true
coppa_supported: true
fpd_supported: true
+sidebarType: 1
---
+### Table of Contents
+
+- [Table of Contents](#table-of-contents)
+- [Bid Params](#bid-params)
+- [Bidder Config](#bidder-config)
+- [First Party Data](#first-party-data)
+- [Native setup example (s2s only)](#native-setup-example-s2s-only)
+
+
### Bid Params
@@ -23,14 +36,15 @@ fpd_supported: true
| Name | Scope | Description | Example | Type |
|----------------|----------|-------------------------------------------------------------------------------------------------------------|-------------------------------------------|-----------|
| `uid` | required | Represents the MediaGrid bidder system Ad Slot ID associated with the respective div id from the site page. | `1` | `integer` |
-| `keywords` | optional | A set of key-value pairs applied to all ad slots on the page. Values can be empty. | `keywords: { topic: ['stress', 'fear'] }` | `object` |
| `bidFloor` | optional | Floor of the impression opportunity. If present in the request overrides XML info. | `0.8` | `float` |
+
-###Bidder Config
+### Bidder Config
You can allow writing in localStorage `pbjs.setBidderConfig` for the bidder `grid`
-```
+
+```javascript
pbjs.setBidderConfig({
bidders: ["grid"],
config: {
@@ -38,4 +52,70 @@ pbjs.setBidderConfig({
}
})
```
+
If it will be "true" this allow TheMediaGrid Bid Adapter to write userId in first party localStorage
+
+
+
+### First Party Data
+
+Publishers should use the `ortb2` method of setting [First Party Data](https://docs.prebid.org/features/firstPartyData.html).
+
+Global site or user data using `setConfig()`, or Bidder-specific using `setBidderConfig()` supports following fields:
+
+- `ortb2.user.data[]`: Standard IAB segment taxonomy user data
+- `ortb2.user.ext.device`: Non standard arbitrary user device
+- `ortb2.user.keywords`: Standard IAB OpenRTB 2.5 user.keywords field. It will be included in ext.keywords.user.ortb2
+- `ortb2.site.keywords`: Standard IAB OpenRTB 2.5 site.keywords field. It will be included in ext.keywords.site.ortb2
+- `ortb2.site.cat[]`: Standard IAB OpenRTB 2.5 site.cat field. It will be sent as part of site.cat array
+- `ortb2.site.pagecat[]`: Standard IAB OpenRTB 2.5 site.pagecat field. It will be sent as part of site.cat array
+- `ortb2.site.content.genre`: Standard IAB OpenRTB 2.5 site.content.genre field
+
+AdUnit-specific data using `AdUnit.ortb2Imp` supports following fields:
+
+- `ortb2.imp[].ext.data.*`
+- `ortb2.imp[].instl`
+
+
+
+### Native setup example (s2s only)
+
+Setup native in adUnit mediaTypes, for example:
+
+```javascript
+...
+mediaTypes: {
+ native: {
+ ortb: {
+ ver: '1.2',
+ "assets": [
+ {
+ "id": 1,
+ "img": {
+ "hmin": 180,
+ "wmin": 216,
+ "type": 3
+ },
+ "required": 1
+ },
+ {
+ "title": {
+ "len": 140
+ },
+ "id": 2,
+ "required": 1
+ },
+ {
+ "id": 3,
+ "data": {
+ "len": 25,
+ "type": 1
+ },
+ "required": 1
+ }
+ ],
+ }
+ }
+},
+...
+```
diff --git a/dev-docs/bidders/gridNM.md b/dev-docs/bidders/gridNM.md
index fc92e91a17..49224f42d2 100644
--- a/dev-docs/bidders/gridNM.md
+++ b/dev-docs/bidders/gridNM.md
@@ -5,9 +5,10 @@ description: Prebid TheMediaGridNM Bidder Adapter
pbjs: true
biddercode: gridNM
media_types: video
-gdpr_supported: true
+tcfeu_supported: false
usp_supported: true
fpd_supported: true
+sidebarType: 1
---
@@ -22,8 +23,8 @@ fpd_supported: true
| `pubdata` | optional | publisher data, will be used by JW Player to pass their info | `{"jwpseg" : ["1111", "2222"]})` | `object` |
| `floorcpm` | optional | floor cpm | `0.56` | `float` |
| `video` | optional | video parameters which should be passed for no-mapping approach | | `object` |
-| `video.mimes` | optional | Content MIME types supported | `['video/mp4', 'video/x-ms-wmv']` | `string array` |
-| `video.mind` | optional | Minimum video ad duration in seconds. | `1` | `integer` |
+| `video.mimes` | optional | Content MIME types supported | `['video/mp4', 'video/x-ms-wmv']` | `string array` |
+| `video.mind` | optional | Minimum video ad duration in seconds. | `1` | `integer` |
| `video.maxd` | optional | Maximum video ad duration in seconds | `60` | `int` |
| `video.protocols` | optional | Array of supported video protocols | `[1,2,3,4,5,6]` | `integer array` |
| `video.size` | optional | player size wxh | `'300x250'` | `string` |
@@ -35,3 +36,9 @@ fpd_supported: true
| `video.startdelay` | optional | Indicates the start delay in seconds | `0` | `int` |
| `video.placement` | optional | Placement type for the impression. | `1` | `int` |
| `video.playbackmethod` | optional | Playback methods that may be in use | `[1]` | `integer array` |
+
+### First Party Data
+
+AdUnit-specific data using `AdUnit.ortb2Imp` supports following fields:
+
+- `ortb2.imp[].ext.data.*`
diff --git a/dev-docs/bidders/groupm.md b/dev-docs/bidders/groupm.md
deleted file mode 100644
index dc9cd2df8e..0000000000
--- a/dev-docs/bidders/groupm.md
+++ /dev/null
@@ -1,90 +0,0 @@
----
-layout: bidder
-title: GroupM
-description: Prebid GroupM Bidder Adaptor
-biddercode: groupm
-aliasCode: pubmatic
-media_types: banner, video, native
-gdpr_supported: true
-usp_supported: true
-coppa_supported: true
-schain_supported: true
-floors_supported: true
-userIds: all
-prebid_member: true
-safeframes_ok: true
-pbjs: true
-pbs: true
-pbs_app_supported: true
-fpd_supported: true
-gvl_id: 98
----
-
-
-### Bid Params
-
-{: .table .table-bordered .table-striped }
-| Name | Scope | Description | Example | Type |
-|---------------|----------|--------------------|------------------------------|----------|
-| `publisherId` | required | Publisher ID | `'32572'` | `string` |
-| `adSlot` | optional | Ad Slot Name (see below)| `'38519891'` | `string` |
-| `pmzoneid` | optional | Zone ID | `'zone1,zone2'` | `string` |
-| `lat` | optional | Latitude | `'40.712775'` | `string` |
-| `lon` | optional | Longitude | `'-74.005973'` | `string` |
-| `yob` | optional | Year of Birth | `'1982'` | `string` |
-| `gender` | optional | Gender | `'M'` | `string` |
-| `kadpageurl` | optional | Overrides Page URL | `'http://www.yahoo.com/'`| `string` |
-| `kadfloor` | optional | Bid Floor | `'1.75'` | `string` |
-| `currency` | optional | Bid currency | `'AUD'` (Value configured only in the 1st adunit will be passed on. Values if present in subsequent adunits, will be ignored.) | `string` |
-| `dctr` | optional | Deal Custom Targeting (Value configured only in the 1st adunit will be passed on. Values if present in subsequent adunits, will be ignored.) | `'key1=123\|key2=345'` | `string` |
-| `bcat` | optional | Blocked IAB Categories (Values from all slots will be combined and only unique values will be passed. An array of strings only. Each category should be a string of a length of more than 3 characters.) | `[ 'IAB1-5', 'IAB1-6', 'IAB1-7' ]` | `array of strings` |
-| `deals` | optional | PMP deals (Values from each slot will be passed per slot. An array of strings only. Each deal-id should be a string of a length of more than 3 characters.) | `[ 'deal-id-5', 'deal-id-6', 'deal-id-7' ]` | `array of strings` |
-| `outstreamAU` | optional | Oustream AdUnit described in Blue BillyWig UI. This field is mandatory if mimeType is described as video and context is outstream (i.e., for outstream videos) | `'renderer_test_groupm'` | `string` |
-
-GroupM is an aliased bidder of PubMatic
-
-### Prebid Server Bid Params
-
-{: .table .table-bordered .table-striped }
-| Name | Scope | Description | Example | Type |
-|---------------|----------|--------------------|------------------------------|----------|
-| `publisherId` | required | Publisher ID | `"32572"` | `string` |
-| `adSlot` | optional | Ad Slot Name | `"38519891"` | `string` |
-| `pmzoneid` | optional | Comma separated zone id. Used im deal targeting & site section targeting. e.g drama,sport| `"zone1,zone2"` | `string` |
-| `dctr` | optional | Deal Custom Targeting, pipe separated key-value pairs| `"key1=123\|key2=345"` | `string` |
-| `wrapper` | optional | Specifies GroupM openwrap configuration for a publisher | `"wrapper": { "profile": 123, "version": 1}` | `object` |
-| `keywords` | optional | A set of key-value pairs; A key can have one or more values associated with it. They are used in buy-side segment targeting.| `"keywords": { "genre": ["rock", "pop"] }` | `object` |
-
-
-
-### Prebid Server Test Request
-
-The following test parameters can be used to verify that Prebid Server is working properly with the
-GroupM adapter. This example includes an `imp` object with an GroupM test publisher ID, ad slot,
-and sizes that would match with the test creative.
-
-```
-"imp":[
- {
- "id":â"some-impression-idâ,
- "banner":{
- "format":[
- {
- "w":300,
- "h":250
- },
- {
- "w":300,
- "h":600
- }
- ]
- },
- "ext":{
- "groupm":{
- "publisherId":â156276â,
- "adSlot":"groupm_test"
- }
- }
- }
- ]
-```
diff --git a/dev-docs/bidders/growads.md b/dev-docs/bidders/growads.md
index 8f7c295ad4..6c546e04d8 100644
--- a/dev-docs/bidders/growads.md
+++ b/dev-docs/bidders/growads.md
@@ -5,6 +5,7 @@ description: Prebid GrowAdvertising Bidder Adapter
pbjs: true
biddercode: growads
media_types: banner, native
+sidebarType: 1
---
### Bid Params
diff --git a/dev-docs/bidders/gumgum.md b/dev-docs/bidders/gumgum.md
index c655f75fd9..11d1694e87 100644
--- a/dev-docs/bidders/gumgum.md
+++ b/dev-docs/bidders/gumgum.md
@@ -10,21 +10,22 @@ media_types: banner, video
schain_supported: true
floors_supported: true
userIds: unifiedId, identityLink
-gdpr_supported: true
+gvl_id: 61
+tcfeu_supported: true
usp_supported: true
-fpd_supported: true
+gpp_supported: true
+sidebarType: 1
---
-### Note:
+### Note
The GumGum Header Bidding adaptor requires setup and approval from the GumGum
team. Please reach out to your account manager or for more
information.
-
Client side and server side parameters differ slightly. For Server side (Prebid S2S) implementation,
- we currently accept the `zone` parameter. For Client side (Prebid.js) implementation, we accept `zone` and
- a long list of other parameters which are listed below.
+ we currently accept the `zone` parameter. For Client side (Prebid.js) implementation, we accept `zone` and
+ a long list of other parameters which are listed below.
### Server Side Bid Params
@@ -35,6 +36,7 @@ Client side and server side parameters differ slightly. For Server side (Prebid
| `pubId` | required for all bid requests tracking multiple domains or sites | Publisher ID | `123` | `integer` |
| `irisid` | optional | Iris.tv ID | `'iris_6f9285823a4'` | `string` |
| `slot` | optional | Placement ID | `40` | `number` |
+| `product` | required for new supported products like 'skins' | Product Type | `skins` | `string` |
### Client Side Bid Params
@@ -44,6 +46,7 @@ Client side and server side parameters differ slightly. For Server side (Prebid
| `zone` | required for all bid requests tracking a single domain or site | Tracking ID | `'ggumtest'` | `string` |
| `pubId` | required for all bid requests tracking multiple domains or sites | Publisher ID | `123` | `integer` |
| `slot` | required for slot placement only | Slot ID | `9` | `integer` |
+| `product` | required for new supported products like 'skins' | Product Type | `skins` | `string` |
| `iriscat` | optional | Iris.tv segments | `'segment1,segment2'` | `string` |
| `irisid` | optional | Iris.tv ID | `'123'` | `string` |
| `bidfloor` | optional | CPM bidfloor in USD | `0.03` | `float` |
@@ -62,12 +65,13 @@ Client side and server side parameters differ slightly. For Server side (Prebid
| `ICV` | required for ICV placement only | ICV ID | `19` | `integer` |
| `bidfloor` | optional | CPM bidfloor in USD | `0.03` | `float` |
-Please note that both video and in-video products require a mediaType of video while all other products
+Please note that both video and in-video products require a mediaType of video while all other products
require a mediaType of banner.
### Client Side Examples
+
Client side integration currently supports slot, in-screen, video, and in-video products.
-The following examples are based on the 'Client Side Bid Params' table.
+The following examples are based on the 'Client Side Bid Params' table.
All bid requests require a zone or pubId parameter:
{
@@ -87,6 +91,7 @@ To enable ad requests at a publisher level, instead of `zone` use `pubId`:
}
#### In-Screen
+
To enable ad requests for in-screen, either `zone` or `pubId` must be present in the params object:
{
@@ -96,7 +101,20 @@ To enable ad requests for in-screen, either `zone` or `pubId` must be present in
}
}
+#### Skins
+
+Skins ad requests require the `product` parameter with the value of `skins` in the params object:
+
+ {
+ bidder: 'gumgum',
+ params: {
+ zone: 'zone_id', // provided by GumGum
+ product: 'skins'
+ }
+ }
+
#### Slot
+
Slot ad requests require the `slot` parameter in the params object:
{
@@ -108,6 +126,7 @@ Slot ad requests require the `slot` parameter in the params object:
}
#### Video and In-Video
+
For video and in-video products, please follow the configuration shown under the in-screen example.
Additionally, you will need to define a 'video' field in the 'mediaTypes' object. For example:
@@ -118,7 +137,7 @@ Additionally, you will need to define a 'video' field in the 'mediaTypes' object
playerSize: [640, 480],
minduration: 1,
maxduration: 2,
- linearity: 1, // ** Change this to 2 for in-video
+ linearity: 1, // ** Change this to 2 for in-video
startdelay: 1,
placement: 1,
protocols: [1, 2]
@@ -126,17 +145,17 @@ Additionally, you will need to define a 'video' field in the 'mediaTypes' object
}
}
-Please note:
+Please note:
All fields under video (context, playerSize, minDuration etc) are the minimum requirements to make a video ad request.
-You should replace playerSize, minduration, maxduration, startdelay, placement, and protocols values to your
-specifications (see [OpenRTB spec 2.5](https://www.iab.com/wp-content/uploads/2016/03/OpenRTB-API-Specification-Version-2-5-FINAL.pdf) for more information).
+You should replace playerSize, minduration, maxduration, startdelay, placement, and protocols values to your
+specifications (see [OpenRTB spec 2.5](https://www.iab.com/wp-content/uploads/2016/03/OpenRTB-API-Specification-Version-2-5-FINAL.pdf) for more information).
`linearity` should be set to 1 for video product, and 2 for in-video.
-
### Server Side Examples
+
At the moment, the only products supported via Prebid S2S are slot, in-screen, and video.
-The configuration is similar to client side configuration.
+The configuration is similar to client side configuration.
Add the following object in your `bids` array:
{
@@ -147,8 +166,9 @@ Add the following object in your `bids` array:
}
#### Slot
-The mediaTypes field should have âbannerâ with sizes using standard IAB display sizes (as seen in the example below).
-The zone id is provided by GumGum.
+
+The mediaTypes field should have âbannerâ with sizes using standard IAB display sizes (as seen in the example below).
+The zone id is provided by GumGum.
{
mediaTypes: {
@@ -167,9 +187,10 @@ The zone id is provided by GumGum.
}
#### In-Screen
-The adUnits settings for both in-screen and slot have a similar structure. The only difference between slot
-and in-screen ad unit configuration is the sizes.
-In-screen products require a non-standard IAB display size (e.g. [1, 1] as seen in the example below or any
+
+The adUnits settings for both in-screen and slot have a similar structure. The only difference between slot
+and in-screen ad unit configuration is the sizes.
+In-screen products require a non-standard IAB display size (e.g. [1, 1] as seen in the example below or any
other size you choose).
{
@@ -188,7 +209,24 @@ other size you choose).
]
}
+#### Skins
+
+The skins product requires a similar setup to its client side header bidding counterpart:
+
+ {
+ bids: [
+ {
+ bidder: 'gumgum',
+ params: {
+ zone: 'zone_id', // provided by GumGum
+ product: 'skins'
+ }
+ },
+ ]
+ }
+
#### Video
+
The video product requires nearly the same setup as with Prebid client side header bidding:
{
@@ -217,7 +255,6 @@ The video product requires nearly the same setup as with Prebid client side head
]
}
-All fields under video (context, playerSize, minDuration etc) are the minimum requirements
-to make a video ad request. Please replace playerSize, w, h, mimes, minduration, maxduration,
+All fields under video (context, playerSize, minDuration etc) are the minimum requirements
+to make a video ad request. Please replace playerSize, w, h, mimes, minduration, maxduration,
startdelay, and protocols values to your specifications (see [OpenRTB spec 2.5](https://www.iab.com/wp-content/uploads/2016/03/OpenRTB-API-Specification-Version-2-5-FINAL.pdf) for more information).
-
diff --git a/dev-docs/bidders/gxone.md b/dev-docs/bidders/gxone.md
index dc7af55820..7257cbfcc4 100644
--- a/dev-docs/bidders/gxone.md
+++ b/dev-docs/bidders/gxone.md
@@ -4,6 +4,7 @@ title: GXOne
description: GXOne Bidder Adapter
pbjs: true
biddercode: gxone
+sidebarType: 1
---
diff --git a/dev-docs/bidders/h12media.md b/dev-docs/bidders/h12media.md
index 46531323fd..ec95a4a3c0 100644
--- a/dev-docs/bidders/h12media.md
+++ b/dev-docs/bidders/h12media.md
@@ -5,9 +5,10 @@ description: Prebid H12 Media Bidder Adaptor
pbjs: true
biddercode: h12media
media_types: banner
-gdpr_supported: true
+tcfeu_supported: false
usp_supported: true
userIds: all
+sidebarType: 1
---
@@ -25,7 +26,7 @@ userIds: all
Example:
-``` bash
+```javascript
{
bidder: "h12media",
params: {
diff --git a/dev-docs/bidders/haxmedia.md b/dev-docs/bidders/haxmedia.md
deleted file mode 100644
index 096d358667..0000000000
--- a/dev-docs/bidders/haxmedia.md
+++ /dev/null
@@ -1,21 +0,0 @@
----
-layout: bidder
-title: Haxmedia
-description: Prebid Haxmedia Bidder Adapter
-biddercode: haxmedia
-usp_supported: true
-schain_supported: true
-media_types: banner, video, native
-gdpr: true
-pbjs: true
-pbs: false
-enable_download: false
-pbjs_version_notes: not ported to 5.x
----
-
-### Prebid.JS Bid Params
-
-{: .table .table-bordered .table-striped }
-| Name | Scope | Description | Example | Type |
-|----------------|----------|----------------------------------------------------------|------------|-----------|
-| `placementId` | required | Placement Id will be generated on Haxmedia Platform. | `'0'` | `string` |
diff --git a/dev-docs/bidders/headbidder.md b/dev-docs/bidders/headbidder.md
new file mode 100644
index 0000000000..aa5c3bae00
--- /dev/null
+++ b/dev-docs/bidders/headbidder.md
@@ -0,0 +1,36 @@
+---
+layout: bidder
+title: Headbidder.net
+description: Headbidder.net Bidder Adaptor
+biddercode: headbidder
+pbjs: true
+pbs: false
+media_types: banner, native, video
+gvl_id: 14 (adkernel)
+tcfeu_supported: true
+gpp_supported: true
+usp_supported: true
+coppa_supported: true
+pbs_app_supported: false
+schain_supported: true
+userIds: all
+fpd_supported: true
+prebid_member: false
+ortb_blocking_supported: true
+multiformat_supported: will-bid-on-one
+floors_supported: true
+aliasCode: adkernel
+sidebarType: 1
+---
+
+### Note
+
+The Headbidder.net bidding adapter requires setup and approval before implementation. Please reach out to for more details.
+
+### Bid Params
+
+{: .table .table-bordered .table-striped }
+| Name | Scope | Description | Example | Type |
+|----------|----------|-----------------------|---------------------------|----------|
+| `host` | required | RTB host | `'cpm.fmlabsonline.com'` | `string` |
+| `zoneId` | required | Zone Id | 30164 | `integer` |
diff --git a/dev-docs/bidders/headbidding.md b/dev-docs/bidders/headbidding.md
index bcdab3d642..089558ca8d 100644
--- a/dev-docs/bidders/headbidding.md
+++ b/dev-docs/bidders/headbidding.md
@@ -7,12 +7,24 @@ top_nav_section: dev_docs
nav_section: reference
pbjs: true
-
+pbs: false
biddercode: headbidding
-
+media_types: banner, native, video
+gvl_id: 14
+tcfeu_supported: true
+usp_supported: true
+coppa_supported: true
+gpp_supported: true
+pbs_app_supported: true
+schain_supported: true
+userIds: all
+fpd_supported: true
+prebid_member: false
+ortb_blocking_supported: true
+multiformat_supported: will-bid-on-one
+floors_supported: true
aliasCode : adkernel
-
-
+sidebarType: 1
---
@@ -21,7 +33,7 @@ aliasCode : adkernel
{: .table .table-bordered .table-striped }
| Name | Scope | Description | Example | Type |
|----------|----------|-------------|---------|----------|
-| `zoneId` | required | | | `string` |
+| `zoneId` | required | | | `integer` |
| `host` | required | | | `string` |
Head Bidding is an aliased bidder for AdKernel
diff --git a/dev-docs/bidders/holid.md b/dev-docs/bidders/holid.md
new file mode 100644
index 0000000000..8edde7773d
--- /dev/null
+++ b/dev-docs/bidders/holid.md
@@ -0,0 +1,37 @@
+---
+layout: bidder
+title: Holid
+description: Prebid Holid Bidder Adapter
+biddercode: holid
+pbjs: true
+media_types: banner
+gvl_id: 1177
+tcfeu_supported: true
+usp_supported: true
+prebid_member: false
+sidebarType: 1
+---
+
+### Bid Params
+
+{: .table .table-bordered .table-striped }
+| Name | Scope | Description | Example | Type |
+| ---------- | -------- | ---------------------------- | --------- | -------- |
+| `adUnitID` | required | Ad Unit ID provided by Holid | `'12345'` | `string` |
+
+### Configuration
+
+To increase the match rate and monetization, Holid recommends turning on iframe-based user sync.
+
+```javascript
+pbjs.setConfig({
+ userSync: {
+ filterSettings: {
+ iframe: {
+ bidders: '*', // '*' means all bidders
+ filter: 'include'
+ }
+ }
+ }
+});
+```
diff --git a/dev-docs/bidders/houseofpubs.md b/dev-docs/bidders/houseofpubs.md
index fa8fd70c61..c90ce59021 100644
--- a/dev-docs/bidders/houseofpubs.md
+++ b/dev-docs/bidders/houseofpubs.md
@@ -2,19 +2,30 @@
layout: bidder
title: HouseOfPubs
description: House of Pubs Bid Adapter
-pbjs: true
biddercode: houseofpubs
+pbjs: true
+pbs: false
media_types: banner, native, video
-gdpr_supported: true
+gvl_id: 14 (adkernel)
+tcfeu_supported: true
usp_supported: true
+coppa_supported: true
+gpp_supported: true
+pbs_app_supported: true
schain_supported: true
-aliasCode : adkernel
+userIds: all
+fpd_supported: true
+prebid_member: false
+ortb_blocking_supported: true
+multiformat_supported: will-bid-on-one
+floors_supported: true
+aliasCode: adkernel
+sidebarType: 1
---
-### Note:
-
-Please contact info@houseofpubs.com for any questions or for information about our Prebid program.
+### Note
+Please contact for any questions or for information about our Prebid program.
### Bid Params
@@ -22,4 +33,4 @@ Please contact info@houseofpubs.com for any questions or for information about o
| Name | Scope | Description | Example | Type |
|----------|----------|-----------------------|---------------------------|----------|
| `host` | required | Our Host | `'cpm.houseofpubs.com'` | `string` |
-| `zoneId` | required | Example RTB zone id | `'12345'` | `string` |
+| `zoneId` | required | Example RTB zone id | `12345` | `integer` |
diff --git a/dev-docs/bidders/hpmdnetwork.md b/dev-docs/bidders/hpmdnetwork.md
deleted file mode 100644
index b1557dc4fc..0000000000
--- a/dev-docs/bidders/hpmdnetwork.md
+++ /dev/null
@@ -1,21 +0,0 @@
----
-layout: bidder
-title: HPMD Network
-description: Prebid HPMD Network Bidder Adaptor
-pbjs: true
-biddercode: hpmdnetwork
-media_types: banner
-enable_download: false
-pbjs_version_notes: not ported to 5.x
----
-
-Note:
-The HPMD Network adapter requires setup and approval beforehand.
-For more information, visit [HPMD Network website](https://www.hpmdnetwork.ru/publishers).
-
-### Bid parameters
-
-{: .table .table-bordered .table-striped }
-| Name | Scope | Description | Example | Type |
-|---------------|-----------|----------------------------------------------------------|--------------------|------------------|
-| `placementId` | required | The slot ID from HPMD Network. | `'2362'` | `string` |
diff --git a/dev-docs/bidders/huaweiads.md b/dev-docs/bidders/huaweiads.md
index 1211990c2b..17c8cb7054 100644
--- a/dev-docs/bidders/huaweiads.md
+++ b/dev-docs/bidders/huaweiads.md
@@ -5,22 +5,20 @@ description: Prebid HuaweiAds Bidder Adapter
biddercode: huaweiads
gvl_id: 856
media_types: banner, video, native
+tcfeu_supported: true
+coppa_supported: true
safeframes_ok: false
deals_supported: true
pbjs: false
pbs: true
pbs_app_supported: true
prebid_member: false
+sidebarType: 1
---
-### Note:
+### Note
-The Example Bidding adapter requires setup before beginning. Please contact us at hwads@huawei.com.
-1. The following parameters need to be registered on the HuaweiAds platform, and at the same time, the permission to access the server interface needs to be opened on the HuaweiAds platform.
-2. You can find ( publisherid, signkey, keyid ) on the platform after registration.
-3. You need to create your advertising creative on the platform and get the corresponding ( slotid, adtype ).
-4. We need OAID, GAID, IMEI (One must not be empty, you can collect OAID first, or use GAID) in our request, so when using prebidmobile, please add something like "TargetingParams.addUserData("oaid", "oaid-test") TargetingParams.addUserData("gaid", "gaid-test") TargetingParams.addUserData("imei", "imei-test")".
-5. You can also send the clientTime to the HuaweiAds Adx server, like "TargetingParams.addUserData("clientTime", "2018-11-02 16:34:07.981+0800")". if not, it will use the prebid server time and zone.
+The Huawei Bidding adapter requires setup and approval before implementation. Please contact us at [developereu@huawei.com](mailto:developereu@huawei.com), also you can [submit a ticket online](https://developer.huawei.com/consumer/en/support/feedback/#/).
### Bid Params
@@ -31,4 +29,32 @@ The Example Bidding adapter requires setup before beginning. Please contact us a
| `signkey` | required | Sign Key | `'5d********82c38594f8b2bdfd9f********a398dca734932898e3********8d'` | `string` |
| `keyid` | required | Key Id | `'2'` | `string` |
| `slotid` | required | Slot Id | `'u42ohmaufh'` | `string` |
-| `adtype` | required | Ad Type | `'native'` | `string` |
+| `adtype` | required | Ad Type | `'banner','native','interstitial','rewarded'` | `string` |
+
+Notes:
+
+1. The following parameters need to be registered on the HuaweiAds platform, and at the same time, the permission to access the server interface needs to be opened on the HuaweiAds platform.
+2. You can find publisherid, signkey, and keyid on the platform after registration.
+3. You need to create your advertising creative on the platform and get the corresponding slotid and adtype.
+4. We require OAID (Open Advertising ID) or GAID (Google Advertising ID) in the request. OAID and GAID are non-permanent device identifiers that allow personalized ads to be served to users while protecting user data privacy. In most cases, OAID is used for HMS phones and GAID is used for GMS phones. GAID is collected by default. For OAID on HMS phones, app developers should call the AdvertisingIdClient.getAdvertisingIdInfo(mContext) method to [obtain the OAID](https://developer.huawei.com/consumer/en/doc/development/HMSCore-Guides/identifier-service-obtaining-oaid-sdk-0000001050064988), then add the OAID to the request using the Prebid SDK as shown below.
+5. The auction will use the Prebid Server time zone, but this can be by developers if they send the `clientTime` targeting parameter to the HuaweiAds Adx server using the Prebid SDK. For example: `TargetingParams.addUserData("clientTime", "2018-11-02 16:34:07.981+0800")`.
+
+### Obtain the OAID
+
+```java
+// Add the OAID to user data in prebid initialization
+if ( isHmsAvailable() ) {
+ TargetingParams.addUserData("oaid", AdvertisingIdClient.Info info = AdvertisingIdClient.getAdvertisingIdInfo(getApplicationContext()).getId());
+}
+
+//Determine the HMS availability
+public static boolean isHmsAvailable(Context context) {
+ boolean isAvailable = false;
+ if (null != context) {
+ int result = HuaweiApiAvailability.getInstance().isHuaweiMobileServicesAvailable(context);
+ isAvailable = (com.huawei.hms.api.ConnectionResult.SUCCESS == result);
+ }
+ Log.i(TAG, "isHmsAvailable: " + isAvailable);
+ return isAvailable;
+}
+```
diff --git a/dev-docs/bidders/huddledmasses.md b/dev-docs/bidders/huddledmasses.md
index a316719916..93dabba956 100644
--- a/dev-docs/bidders/huddledmasses.md
+++ b/dev-docs/bidders/huddledmasses.md
@@ -4,6 +4,7 @@ title: Huddled Masses
description: Prebid Huddled Masses Bidder Adaptor
pbjs: true
biddercode: huddledmasses
+sidebarType: 1
---
### Bid Params
diff --git a/dev-docs/bidders/hybrid.md b/dev-docs/bidders/hybrid.md
index 462fb58a13..0200561076 100644
--- a/dev-docs/bidders/hybrid.md
+++ b/dev-docs/bidders/hybrid.md
@@ -5,7 +5,8 @@ description: Prebid Hybrid.ai Bidder Adapter
pbjs: true
media_types: banner, video
biddercode: hybrid
-gdpr_supported: true
+tcfeu_supported: false
+sidebarType: 1
---
### Note
@@ -14,16 +15,14 @@ You can use this adapter to get a bid from Hybrid.ai
Please reach out to your Hybrid.ai account team before using this plugin to get placeId.
The code below returns a demo ad.
-
### Bid Params
{: .table .table-bordered .table-striped }
-| Name | Scope | Description | Example | Type |
-|---------------------|------------------------|-------------------------------------------------------------------|--------------------------------------|----------|
-| `placeId` | required | The place id. | '5af45ad34d506ee7acad0c26' | `string` |
-| `placement` | required | Adunit placement, possible values: banner, video, inImage | 'banner' | `string` |
-| `imageUrl` | required for inImage | URL of the image on which the banner will be displayed | 'https://hybrid.ai/images/image.jpg' | `string` |
-
+| Name | Scope | Description | Example | Type |
+|---------------------|------------------------|-------------------------------------------------------------------|----------------------------------------|----------|
+| `placeId` | required | The place id. | '5af45ad34d506ee7acad0c26' | `string` |
+| `placement` | required | Adunit placement, possible values: banner, video, inImage | 'banner' | `string` |
+| `imageUrl` | required for inImage | URL of the image on which the banner will be displayed | `'https://hybrid.ai/images/image.jpg'` | `string` |
### Sample Banner Ad Unit
@@ -93,10 +92,10 @@ var adUnits = [{
-
- Prebid.js Banner Example
-
-
-
+
+ Prebid.js Banner Example
+
+
+
+
- Prebid.js Banner Ad Unit Test
-
-
-
-
-
-
+ Prebid.js Banner Ad Unit Test
+
+
+
+
+
+
```
diff --git a/dev-docs/bidders/hypelab.md b/dev-docs/bidders/hypelab.md
new file mode 100644
index 0000000000..c94f8f9d50
--- /dev/null
+++ b/dev-docs/bidders/hypelab.md
@@ -0,0 +1,53 @@
+---
+layout: bidder
+title: HypeLab
+description: Prebid HypeLab Bidder Adapter
+pbjs: true
+pbs: false
+biddercode: hypelab
+sidebarType: 1
+media_types: banner
+userIds: all
+safeframes_ok: false
+floors_supported: false
+fpd_supported: false
+ortb_blocking_supported: false
+---
+
+### Registration
+
+The HypeLab adapter requires setup and approval from the HypeLab team. Please reach out to your account manager for more information.
+
+### Bid Params
+
+{: .table .table-bordered .table-striped }
+| Name | Scope | Description | Example | Type |
+|---------------|----------|------------------|---------|----------|
+| `property_slug` | required | The property slug | `prebid` | `string` |
+| `placement_slug` | required | The placement slug | `test_placement` | `string` |
+
+
+### Example Banner Configuration
+
+```js
+var adUnits = [
+ {
+ code: 'banner-div',
+ mediaTypes: {
+ banner: {
+ sizes: [[728, 90]],
+ },
+ },
+ bids: [
+ {
+ bidder: 'hypelab',
+ params: {
+ property_slug: 'prebid',
+ placement_slug: 'test_placement'
+ }
+ }
+ ]
+ }
+]
+```
+
diff --git a/dev-docs/bidders/ias.md b/dev-docs/bidders/ias.md
index c9e88f4860..7827450b1c 100644
--- a/dev-docs/bidders/ias.md
+++ b/dev-docs/bidders/ias.md
@@ -4,12 +4,12 @@ title: Integral Ad Science (IAS)
description: Prebid Integral Ad Science Bidder Adaptor
pbjs: true
biddercode: ias
-pbjs_version_notes: for 5.x, use the module
+sidebarType: 1
---
-### Note:
+### Note
-This module is an integration with prebid.js with an IAS product, pet.js. It is not a bidder per se but works in a similar way: retrieve data that publishers might be interested in setting keyword targeting, like predicted viewability and brand safety words. Please reach out to your account manager or check out [our publisher solutions](https://integralads.com/solutions/publishers/) for more
+This module is an integration with prebid.js with an IAS product, pet.js. It is not a bidder per se but works in a similar way: retrieve data that publishers might be interested in setting keyword targeting, like predicted viewability and brand safety words. Please reach out to your account manager or check out [our publisher solutions](https://integralads.com/who-we-help/publishers/) for more
information.
### Bid Params
diff --git a/dev-docs/bidders/idx.md b/dev-docs/bidders/idx.md
new file mode 100644
index 0000000000..99c238e2a1
--- /dev/null
+++ b/dev-docs/bidders/idx.md
@@ -0,0 +1,26 @@
+---
+layout: bidder
+title: IDX bidder adapter
+description: Prebid IDX Bidder Adapter
+biddercode: idx
+tcfeu_supported: false
+usp_supported: false
+coppa_supported: false
+schain_supported: false
+dchain_supported: false
+media_types: banner
+safeframes_ok: true
+deals_supported: false
+floors_supported: false
+fpd_supported: false
+pbjs: false
+pbs: false
+prebid_member: false
+sidebarType: 1
+---
+
+### Bid Params
+
+{: .table .table-bordered .table-striped }
+| Name | Scope | Description | Example | Type |
+|---------------|----------|-----------------------|-----------|-----------|
diff --git a/dev-docs/bidders/iionads.md b/dev-docs/bidders/iionads.md
new file mode 100644
index 0000000000..7f9b957c60
--- /dev/null
+++ b/dev-docs/bidders/iionads.md
@@ -0,0 +1,41 @@
+---
+layout: bidder
+title: iion
+description: iion Bidder Adaptor
+biddercode: iionads
+pbjs: true
+pbs: true
+media_types: video, banner
+userIds: all
+fpd_supported: false
+tcfeu_supported: false
+usp_supported: true
+coppa_supported: true
+schain_supported: true
+prebid_member: false
+ortb_blocking_supported: true
+multiformat_supported: will-bid-on-one
+floors_supported: false
+aliasCode: limelightDigital
+sidebarType: 1
+---
+
+### Bid Params
+
+{: .table .table-bordered .table-striped }
+
+| Name | Scope | Description | Example | Type |
+|:--------------|:---------|:--------------------------------------------------|:----------------|:----------|
+| `host` | required | Ad network's RTB host | `'iionads.com'` | `string` |
+| `adUnitId` | required | Ad Unit Id will be generated on iionads Platform. | `42` | `integer` |
+| `adUnitType` | required | Type of Ad Unit (`'video'`, `'banner'`) | `'banner'` | `string` |
+| `publisherId` | required | Publisher ID | `'12345'` | `string` |
+| `custom1` | optional | Custom targeting field 1 | `'custom1'` | `string` |
+| `custom2` | optional | Custom targeting field 2 | `'custom2'` | `string` |
+| `custom3` | optional | Custom targeting field 3 | `'custom3'` | `string` |
+| `custom4` | optional | Custom targeting field 4 | `'custom4'` | `string` |
+| `custom5` | optional | Custom targeting field 5 | `'custom5'` | `string` |
+
+iionads server-side Prebid Server adapter requires only `publisherId` and `host` parameters. But iionads client-side Prebid.js adapter requires only `host`, `adUnitId`, `adUnitType`.
+
+iionads server-side Prebid Server adapter supports only `banner`, `video`, `audio`, `native` media types. But iionads client-side Prebid.js adapter supports only `banner` and `video` media types, doesn't support `audio` and `native`.
diff --git a/dev-docs/bidders/illumin.md b/dev-docs/bidders/illumin.md
new file mode 100644
index 0000000000..9d67a10c8a
--- /dev/null
+++ b/dev-docs/bidders/illumin.md
@@ -0,0 +1,70 @@
+---
+layout: bidder
+title: Illumin
+description: Prebid Illumin Bidder Adaptor
+biddercode: illumin
+filename: illuminBidAdapter
+userIds: britepoolId, criteo, id5Id, identityLink, liveIntentId, netId, parrableId, pubCommonId, unifiedId
+tcfeu_supported: true
+usp_supported: true
+coppa_supported: false
+schain_supported: true
+gpp_supported: true
+floors_supported: true
+media_types: banner, video
+prebid_member: false
+safeframes_ok: false
+deals_supported: false
+pbs_app_supported: false
+fpd_supported: false
+ortb_blocking_supported: false
+multiformat_supported: will-bid-on-one
+pbjs: true
+sidebarType: 1
+---
+
+### Bid Params
+
+{: .table .table-bordered .table-striped }
+| Name | Scope | Description | Example | Type |
+|------------|----------|-------------------------------------------------------------------------------------------|------------------------------|----------|
+| `cId` | required | The connection ID from Illumin. | `'562524b21b1c1f08117fc7f9'` | `string` |
+| `pId` | required | The publisher ID from Illumin. | `'59ac17c192832d0011283fe3'` | `string` |
+| `bidFloor` | optional | The minimum bid value desired. Illumin will not respond with bids lower than this value. | `0.90` | `float` |
+
+## Example
+
+ ```javascript
+var adUnits = [{
+ code: 'banner-div',
+ mediaTypes: {
+ banner: {
+ sizes: [
+ [300, 250],
+ [728, 90]
+ ]
+ }
+ },
+ bids: [{
+ bidder: 'illumin',
+ params: {
+ cId: '562524b21b1c1f08117fc7f9', // Required - PROVIDED DURING SETUP...
+ pId: '59ac17c192832d0011283fe3', // Required - PROVIDED DURING SETUP...
+ bidFloor: 1.23 // Optional
+ }
+ }]
+ }
+];
+
+// configure pbjs to enable user syncing
+pbjs.setConfig({
+ userSync: {
+ filterSettings: {
+ iframe: {
+ bidders: 'illumin',
+ filter: 'include'
+ }
+ }
+ }
+});
+```
diff --git a/dev-docs/bidders/imds.md b/dev-docs/bidders/imds.md
new file mode 100644
index 0000000000..f526d56702
--- /dev/null
+++ b/dev-docs/bidders/imds.md
@@ -0,0 +1,105 @@
+---
+layout: bidder
+title: iMedia Digital Services (iMDS)
+description: Prebid iMedia Digital Services Bidder (iMDS) Adapter
+pbjs: true
+pbs: true
+biddercode: imds
+tcfeu_supported: false
+usp_supported: true
+userIds: all
+media_types: banner, video
+coppa_supported: false
+gpp_supported: true
+schain_supported: true
+dchain_supported: false
+safeframes_ok: true
+pbs_app_supported: true
+deals_supported: false
+floors_supported: true
+fpd_supported: false
+ortb_blocking_supported: false
+multiformat_supported: will-bid-on-any
+prebid_member: false
+gvl_id: none
+sidebarType: 1
+---
+
+### Note
+
+The iMedia Digital Services bidder adapter requires setup and approval from iMedia Digital Services. Please reach out to your account manager for more information and to start using it.
+
+### Configuration
+
+iMedia Digital Services requires that `iframe` is used for user syncing.
+
+Example configuration:
+
+```javascript
+pbjs.setConfig({
+ userSync: {
+ filterSettings: {
+ iframe: {
+ bidders: '*', // represents all bidders
+ filter: 'include'
+ }
+ }
+ }
+});
+```
+
+### DFP Video Creative
+To use video, setup a `VAST redirect` creative within Google Ad Manager with the following VAST tag URL:
+
+If using the new `imds` adapter with x8.x or later:
+
+```text
+https://track.technoratimedia.com/openrtb/tags?ID=%%PATTERN:hb_uuid_imds%%&AUCTION_PRICE=%%PATTERN:hb_pb_imds%%
+```
+
+If using the legacy `synacormedia` adapter with v7.x or earlier:
+
+```text
+https://track.technoratimedia.com/openrtb/tags?ID=%%PATTERN:hb_uuid_synacormedia%%&AUCTION_PRICE=%%PATTERN:hb_pb_synacormedia%%
+```
+
+### Bid params
+
+{: .table .table-bordered .table-striped }
+| Name | Scope | Description | Example | Type |
+| ---- | ----- | ----------- | ------- | ---- |
+| `seatId` | required | The seat ID from iMedia Digital Services. This will be the same for all ad units. | `'prebid'` | `string` |
+| `tagId` | required | The placement ID or tag ID from iMedia Digital Services. | `'demo1'` | `string` |
+| `placementId` | optional | Legacy parameter replaced by `tagId` | `'demo1'` | `string` |
+| `bidfloor` | optional | Legacy parameter for floor price for the request. Replaced by [Price Floors Module](/dev-docs/modules/floors.html) | `0.1` | `float` |
+
+### Example Ad Unit
+
+```javascript
+var adUnits = [{
+ "code": "test-div",
+ "mediaTypes": {
+ "video": {
+ "pos": 1,
+ "playerSize": [300, 250],
+ "context": "instream",
+ "mimes": ["video/mp4"],
+ "protocols": [2, 3, 5, 6, 7, 8],
+ "playbackmethod": [2],
+ "skip": 0,
+ "minduration": 15,
+ "maxduration": 30,
+ "startdelay": 0,
+ "linearity": 1
+ }
+ },
+ "bids": [{
+ "bidder": "imds",
+ "params": {
+ "seatId": "prebid",
+ "tagId": "demo1",
+ "bidfloor": 0.20
+ }
+ }]
+}]
+```
diff --git a/dev-docs/bidders/imonomy.md b/dev-docs/bidders/imonomy.md
deleted file mode 100644
index d9fcb504b6..0000000000
--- a/dev-docs/bidders/imonomy.md
+++ /dev/null
@@ -1,19 +0,0 @@
----
-layout: bidder
-title: Imonomy
-description: Prebid Imonomy Bidder Adaptor
-pbjs: true
-biddercode: imonomy
-enable_download: false
-pbjs_version_notes: not ported to 5.x
----
-
-
-
-### Bid Params
-
-{: .table .table-bordered .table-striped }
-| Name | Scope | Description | Example | Type |
-|---------------|----------|--------------------------------|--------------------------------------|----------|
-| `hbid` | required | header-bidding id from Imonomy | `'14567718624'` | `string` |
-| `placementId` | required | placement id from Imonomy | `'e69148e0ba6c4c07977dc2daae5e1577'` | `string` |
diff --git a/dev-docs/bidders/impactify.md b/dev-docs/bidders/impactify.md
index 20c55f326b..2d93d26fc2 100644
--- a/dev-docs/bidders/impactify.md
+++ b/dev-docs/bidders/impactify.md
@@ -5,7 +5,7 @@ description: Prebid Impactify Bidder Adapter
pbjs: true
pbs: true
biddercode: impactify
-gdpr_supported: true
+tcfeu_supported: true
tcf2_supported: true
usp_supported: true
schain_supported: true
@@ -13,11 +13,12 @@ coppa_supported: true
media_types: video
userIds: criteo, id5Id, pubCommonId, unifiedId, uid2, netId
gvl_id: 606
+sidebarType: 1
---
-### Note:
+### Note
-The Impactify adaptator requires setup and validation from the Impactify team. Simply email us your contact details at support@impactify.io and we'll make sure we'll connect you within 48h.
+The Impactify adaptator requires setup and validation from the Impactify team. Simply email us your contact details at and we'll make sure we'll connect you within 48h.
### Bid Params
@@ -32,9 +33,17 @@ The Impactify adaptator requires setup and validation from the Impactify team. S
Impactify recommends the UserSync configuration below. Without it, the Impactify adapter will not be able to perform user syncs, which lowers match rate and reduces monetization.
+Note : Impactify adapter needs storage access to work properly (Do not forget to set storageAllowed to true).
+
For Prebid.js v1.15.0 and later:
```javascript
+pbjs.bidderSettings = {
+ impactify: {
+ storageAllowed: true // Mandatory
+ }
+};
+
pbjs.setConfig({
userSync: {
filterSettings: {
@@ -50,6 +59,13 @@ pbjs.setConfig({
For Prebid.js v1.14.0 and before:
```javascript
+
+pbjs.bidderSettings = {
+ impactify: {
+ storageAllowed: true // Mandatory
+ }
+};
+
pbjs.setConfig({
userSync: {
iframeEnabled: true,
diff --git a/dev-docs/bidders/improvedigital.md b/dev-docs/bidders/improvedigital.md
index 8cf220e975..0cc21342ff 100644
--- a/dev-docs/bidders/improvedigital.md
+++ b/dev-docs/bidders/improvedigital.md
@@ -6,36 +6,32 @@ biddercode: improvedigital
pbjs: true
pbs: true
coppa_supported: true
-gdpr_supported: true
+gpp_supported: true
+tcfeu_supported: true
usp_supported: true
userIds: all
media_types: banner, native, video
schain_supported: true
gvl_id: 253
pbs_app_supported: true
+floors_supported: true
+sidebarType: 1
---
+
+
### Bid params
{: .table .table-bordered .table-striped }
| Name | Scope | Description | Example | Type |
|----------------|----------|----------------------------------------------------------------------------------------------------------------------------|------------------------------------------------------------------------|-----------|
| `placementId` | required | The placement ID from Improve Digital. | `1234567` | `integer` |
+| `publisherId` | required | The publisher ID from Improve Digital. | `4567` | `integer` |
| `keyValues` | optional | Contains one or more key-value pairings for key-value targeting | `{ testKey1: ['testValueA'], testKey2: ['testValueB', 'testValueC'] }` | `object` |
| `bidFloor` | optional | Bid floor price | `0.01` | `float` |
| `bidFloorCur` | optional | Bid floor price currency. Supported values: USD (default), EUR, GBP, AUD, DKK, SEK, CZK, CHF, NOK | `'USD'` | `string` |
-| `video` | optional | Object with video parameters. See the [Video params](#improvedigital-video) section below for details. | | `object` |
-
-
-
-### Video params
-
-{: .table .table-bordered .table-striped }
-| Name | Scope | Description | Example | Type |
-|------------------|----------|------------------------------------------------|-------------------------------------------|-----------------|
-| `skip` | optional | Indicates if the player will allow the video to be skipped. | `1` | `integer` |
-| `skipmin` | optional | Videos of total duration greater than this number of seconds can be skippable. | `15` | `integer` |
-| `skipafter` | optional | Number of seconds a video must play before skipping is enabled. | `5` | `integer` |
+| `extend` | optional | See the [Extend mode section](#improvedigital-extend) | `true` | `boolean` |
+| `rendererConfig` | optional | Configuration object for JS renderer of the RAZR creatives. Provided by Improve Digital. | `{ key1: value1 }` | `object` |
### Configuration
@@ -44,46 +40,87 @@ pbs_app_supported: true
#### Sizes
By default, the adapter doesn't send Prebid ad unit sizes to Improve Digital's ad server and the sizes defined for each placement in the Polaris platform will be used. If the ad server should only respond with creative sizes as defined in Prebid ad unit configuration, turn on `usePrebidSizes` adapter parameter like this:
+
+```javascript
+pbjs.setConfig({
+ improvedigital: { usePrebidSizes: true }
+});
```
+
+
+
+#### Renderer Config
+
+Global configuration for the special creative format renderer. Please use [rendererConfig bid param](#improvedigital-params) for ad slot specific configuration.
+
+```javascript
pbjs.setConfig({
- improvedigital: {usePrebidSizes: true}
+ improvedigital: {
+ rendererConfig: {
+ // Global config object provided by Improve Digital
+ }
+ }
});
```
-
+
+
+#### Extend Mode
+
+Improve Digital Extend mode provides publishers with access to additional demand from other SSPs. Before enabling please contact our team for more information.
+The Extend mode can be enabled:
+
+* per ad unit via the `extend` [bid param](#improvedigital-params)
+* for all ad units via `setConfig()`:
+
+```javascript
+pbjs.setConfig({
+ improvedigital: {
+ extend: true
+ }
+});
+```
+
+
### Examples
-#### Configuration With placementId
+Examples of different ad unit formats can be found in [Prebid.js ad unit reference](https://docs.prebid.org/dev-docs/adunit-reference.html#adUnit-banner-example). Improve Digital bidder must be added in the ad unit's `bids` array. Example:
- var adUnits = [{
- code: 'div-gpt-ad-1499748733608-0',
- sizes: [[600, 290]],
- bids: [
- {
- bidder: 'improvedigital',
- params: {
- placementId:1053688
- }
+```javascript
+pbjs.addAdUnits({
+ code: 'banner1',
+ sizes: [[728, 90], [970, 250]],
+ bids: [
+ {
+ bidder: 'improvedigital',
+ params: {
+ placementId: 1111111,
+ publisherId: 1234
}
- ]
- }];
-
-#### Configuration With PlacementId and Key-Values
-
- var adUnits = [{
- code: 'div-gpt-ad-1499748733608-0',
- sizes: [[600, 290]],
- bids: [
- {
- bidder: 'improvedigital',
- params: {
- placementId:1053689,
- keyValues: {
- testKey1: ["testValueA"],
- testKey2: ["testValueB", "testValueC"]
- }
+ }
+ ]
+});
+```
+
+#### Example for Key-Values
+
+```javascript
+pbjs.addAdUnits({
+ code: 'banner1',
+ sizes: [[600, 290]],
+ bids: [
+ {
+ bidder: 'improvedigital',
+ params: {
+ placementId: 1111111,
+ publisherId: 1234,
+ keyValues: {
+ testKey1: ["testValueA"],
+ testKey2: ["testValueB", "testValueC"]
}
}
- ]
- }];
+ }
+ ]
+});
+```
diff --git a/dev-docs/bidders/incrementx.md b/dev-docs/bidders/incrementx.md
new file mode 100644
index 0000000000..2182b871ba
--- /dev/null
+++ b/dev-docs/bidders/incrementx.md
@@ -0,0 +1,23 @@
+---
+layout: bidder
+title: IncrementX
+description: Prebid IncrementX Bidder Adaptor
+pbjs: true
+biddercode: incrementx
+media_types: banner
+tcfeu_supported: false
+multiformat_supported: will-bid-on-one
+filename: incrxBidAdapter
+sidebarType: 1
+---
+
+### Note
+
+The IncrementX adapter currently doesn't support multiple sizes per ad placement and will favour the first one if multiple sizes exists.
+
+### Bid Params
+
+{: .table .table-bordered .table-striped }
+| Name | Scope | Description | Example | Type |
+|-------------|----------|--------------------------|-----------------|----------|
+| placementId | required | incrementx placement id | `'IX-HB-123'` | `string` |
diff --git a/dev-docs/bidders/indiecue.md b/dev-docs/bidders/indiecue.md
new file mode 100644
index 0000000000..0285053b50
--- /dev/null
+++ b/dev-docs/bidders/indiecue.md
@@ -0,0 +1,107 @@
+---
+layout: bidder
+title: Indicue
+description: Indicue Bidder Adapter
+biddercode: indicue
+aliasCode: adtelligent
+media_types: video,banner
+tcfeu_supported: false
+gpp_supported: true
+userIds: britepoolId, criteo, id5Id, identityLink, liveIntentId, netId, parrableId, pubCommonId, unifiedId
+schain_supported: true
+coppa_supported: true
+usp_supported: true
+safeframes_ok: true
+prebid_member: false
+pbjs: true
+pbs: true
+deals_supported: false
+sidebarType: 1
+---
+
+### Bid params
+
+{: .table .table-bordered .table-striped }
+| Name | Scope | Description | Example | Type |
+|-------|----------|---------------------------------|----------|-----------|
+| `aid` | required | The source ID from Indicue Media. | `12412` | `integer` |
+
+### Description
+
+Indicue Media header bidding adapter connects with Indicue Media demand sources in order to fetch bids.
+This adapter provides a solution for accessing Video demand and display demand.
+
+### Test Parameters
+
+``` javascript
+ var adUnits = [
+
+ // Video instream adUnit
+ {
+ code: 'test-div',
+ mediaTypes: {
+ video: {
+ context: 'instream',
+ playerSize: [640, 480]
+ }
+ },
+ bids: [{
+ bidder: 'indicue',
+ params: {
+ aid: 472386
+ }
+ }]
+ },
+
+ // Video outstream adUnit
+ {
+ code: 'test-div',
+ mediaTypes: {
+ video: {
+ context: 'outstream',
+ playerSize: [640, 480]
+ }
+ },
+ bids: [{
+ bidder: 'indicue',
+ params: {
+ aid: 472386
+ }
+ }]
+ },
+
+ // Video ADPOD adUnit
+ {
+ code: 'test-div',
+ sizes: [[640, 480]],
+ mediaTypes: {
+ video: {
+ context: 'adpod',
+ playerSize: [640, 480]
+ }
+ },
+ bids: [{
+ bidder: 'indicue',
+ params: {
+ aid: 472386
+ }
+ }]
+ },
+
+ // Banner adUnit
+ {
+ code: 'test-div',
+ mediaTypes:{
+ banner:{
+ sizes: [[300, 250]]
+ }
+ }
+ bids: [{
+ bidder: 'indicue',
+ params: {
+ aid: 529814
+ }
+ }]
+ }
+ ];
+```
diff --git a/dev-docs/bidders/infytv.md b/dev-docs/bidders/infytv.md
new file mode 100644
index 0000000000..1981e978b4
--- /dev/null
+++ b/dev-docs/bidders/infytv.md
@@ -0,0 +1,27 @@
+---
+layout: bidder
+title: InfyTV
+description: Prebid InfyTV Bidder Adapter
+pbjs: true
+biddercode: infytv
+tcfeu_supported: false
+media_types: video
+coppa_supported: true
+pbs: true
+pbs_app_supported: true
+usp_supported: true
+schain_supported: true
+sidebarType: 1
+---
+
+### Note
+
+The Example Bidding adapter requires setup before beginning. Please contact us at
+
+### Bid Params
+
+{: .table .table-bordered .table-striped }
+| Name | Scope | Description | Example | Type |
+|---------------|----------|--------------|-----------|----------|
+| `publisherId` | required | Publisher ID | `'11111'` | `string` |
+| `placementId` | optional | Placement ID | `'11111'` | `string` |
diff --git a/dev-docs/bidders/inmar.md b/dev-docs/bidders/inmar.md
index f00dc47243..b930a0fdeb 100644
--- a/dev-docs/bidders/inmar.md
+++ b/dev-docs/bidders/inmar.md
@@ -2,19 +2,19 @@
layout: bidder
title: Inmar
description: Prebid Inmar Bidder Adapter
-
biddercode: inmar
usp_supported: true
userIds: identityLink, liveIntentId, unifiedId, pubCommonId, pubProvidedId, sharedId
media_types: banner, video
safeframes_ok: false
deals_supported: true
-fpd_supported: true
pbjs: true
+enable_download: false
+sidebarType: 1
---
-### Note:
+### Note
-The Inmar Bidding adapter requires setup before beginning. Please contact us at prebid@inmar.com
+The Inmar bidder is no longer supported. Please be advised to stop use of this adapter in all Prebid.js versions.
### Bid Params
diff --git a/dev-docs/bidders/inmobi.md b/dev-docs/bidders/inmobi.md
index bafea45f6d..be796ccfc0 100644
--- a/dev-docs/bidders/inmobi.md
+++ b/dev-docs/bidders/inmobi.md
@@ -3,7 +3,7 @@ layout: bidder
title: InMobi
description: InMobi Bidder Adapter
biddercode: inmobi
-gdpr_supported: true
+tcfeu_supported: true
usp_supported: false
gvl_id: 333
coppa_supported: true
@@ -11,18 +11,19 @@ schain_supported: true
media_types: banner, video, native
pbs: true
pbs_app_supported: true
+sidebarType: 1
---
-### Note:
+### Note
-The InMobi Prebid adapter requires a setup to create placement IDs. Please contact your InMobi partner manager for setup assistance.
-For queries, write to us at prebid-support@inmobi.com
+The InMobi Prebid adapter requires a setup to create placement IDs. Please contact your InMobi partner manager for setup assistance.
+For queries, write to us at
-### User Sync Disclosure:
+### User Sync Disclosure
InMobi has partnered with a third party, ID5, to use their ID as our primary user identifier for mobile web supply. We will also rely on ID5 IDs to handle compliance flows related to Data Subject Right requests in our systems. Hence, we require the publisher to use ID5âs sync URL for user syncing and passing the corresponding ID5 ID to InMobi in the bid request. For this purpose, we provide ID5âs sync URL in our Prebid adapter for User ID sync. Note that, InMobi has a direct contract with ID5 for consuming ID5 ID and the user sync via Prebid does not require the publisher to get into a contractual relationship with ID5.
-To opt out of InMobi ads on mobile web inventory or for any other requests, the user needs to visit the Opt-out page on InMobi website (https://www.inmobi.com/page/opt-out/). For opting out of ID5 ID entirely, the user needs to visit ID5âs opt out page: https://id5.io/platform-privacy-policy/.
+To opt out of InMobi ads on mobile web inventory or for any other requests, the user needs to visit the Opt-out page on InMobi website ( ). For opting out of ID5 ID entirely, the user needs to visit ID5âs opt out page: .
### Bid Params
diff --git a/dev-docs/bidders/innity.md b/dev-docs/bidders/innity.md
index 228490a590..d10cfbc2c5 100644
--- a/dev-docs/bidders/innity.md
+++ b/dev-docs/bidders/innity.md
@@ -4,9 +4,11 @@ title: Innity
description: Prebid Innity Bidder Adapter
pbjs: true
biddercode: innity
+sidebarType: 1
---
-### Note:
+### Note
+
The Innity bidder adapter requires setup and approval from the Innity Media team, even for existing Innity Network publishers. Please reach out to your account manager for more information and to enable using this adapter.
### Bid Params
diff --git a/dev-docs/bidders/inskin.md b/dev-docs/bidders/inskin.md
index bca6d592bd..efc8b4cefe 100644
--- a/dev-docs/bidders/inskin.md
+++ b/dev-docs/bidders/inskin.md
@@ -4,10 +4,13 @@ title: Inskin
description: Inskin Media Bidder Adaptor
pbjs: true
biddercode: inskin
-gdpr_supported: true
+gvl_id: 150
+tcfeu_supported: true
+sidebarType: 1
---
-### Note:
+### Note
+
The Inskin bidder adapter requires additional setup and approval from the Inskin Media Integrations team. Please reach out to your account manager for more information and to start using it.
### Bid Params
diff --git a/dev-docs/bidders/insticator.md b/dev-docs/bidders/insticator.md
index 794279bd07..ec3b8565f7 100644
--- a/dev-docs/bidders/insticator.md
+++ b/dev-docs/bidders/insticator.md
@@ -3,15 +3,173 @@ layout: bidder
title: Insticator
description: Prebid Insticator Bidder Adapter
biddercode: insticator
+tcfeu_supported: true
+dsa_supported: true
+gpp_sids: tcfeu, usnat, usstate_all, usp
+usp_supported: true
+coppa_supported: true
gdpr_supported: true
-media_types: banner
+schain_supported: true
+media_types: banner, video
+multiformat_supported: will-bid-on-any
pbjs: true
gvl_id: 910
+sidebarType: 1
---
### Bid Params
{: .table .table-bordered .table-striped }
-| Name | Scope | Description | Example | Type |
-|---------|----------|-----------------|----------------------|-----------|
-| `adUnitId` | Required | The ad unit ID provided by Insticator | `'test'` | `string` |
+| Name | Scope | Description | Example | Type |
+|-----------------------------|----------|-----------------------------------------------------------------------------------------|------------------------------------|----------|
+| `adUnitId` | Required | The ad unit ID provided by Insticator | `'test'` | `string` |
+| `yob` | optional | Year of Birth | `'1982'` | `string` |
+| `gender` | optional | Gender | `'M'` | `string` |
+| `instl` | optional | 1 = the ad is interstitial or full screen, 0 = not interstitial. | `1` | `number` |
+| `pos` | optional | ad position as per IAB standards | `1` | `number` |
+| `bid_endpoint_request_url` | optional | Url string representing the endpoint Insticator adaptor should make the request bids to. | `https://ex.ingage.com/v1/openrtb` | `string` |
+
+### Banner Params
+
+{: .table .table-bordered .table-striped }
+| Name | Scope | Description | Example | Type |
+|---------------|----------|---------------------------|----------------------|----------|
+| `pos` | optional | ad position as per IAB standards | `1` | `number` |
+
+### Example
+
+```javascript
+var adUnitsBannerOnly = [
+ {
+ code: 'insticator-banner-ad-1',
+ mediaTypes: {
+ banner: {
+ sizes: [
+ [336, 280],
+ [300, 250],
+ [320, 100],
+ ],
+ },
+ },
+ bids: [
+ {
+ bidder: 'insticator',
+ params: {
+ adUnitId: 'example_adunit_id',
+ },
+ },
+ ],
+ },
+];
+```
+
+#### First Party Data
+
+In release 8.45 and later, Insticator has added support for first party data which are optional and partners can send us. The following fields are supported:
+
+* ortb2.site.keywords
+* ortb2.site.content.*
+* ortb2.site.search
+* ortb2.site.cat
+* ortb2.site.pagecat
+* ortb2.site.sectioncat
+* ortb2.user.ext.*
+* ortb2.user.data.*
+
+Here is an example first party data that insticator support.
+
+```javascript
+pbjs.setConfig({
+ ortb2: {
+ site: {
+ keywords: "kw1,kw2",
+ content: {
+ title: 'title',
+ genre: 'rock',
+ },
+ cat: ['IAB1-1'],
+ pagecat: ['IAB1-1'],
+ sectioncat: ['IAB1-1'],
+ ext: {
+ data: {
+ prodtype: ["a","b"]
+ }
+ }
+ },
+ user: {
+ ext: {
+ data: {
+ ucat:["anything"]
+ }
+ }
+ }
+ }
+};
+```
+
+### Media Types
+#### Video parameters
+
+{: .table .table-bordered .table-striped }
+| Name | Scope | Description | Example |
+|------------------------|-------------|-----------------------------------------------------------------|-------------------------------|
+| `video.mimes` | required | Video MIME types | `['application/javascript',` `'video/mp4',` `'video/ogg',` `'video/webm',` `'video/mpeg']` |
+| `video.w` | recommended | Width of the video player in device independent pixels (DIPS). | `640` |
+| `video.h` | recommended | Height of the video player in device independent pixels (DIPS). | `480` |
+| `video.placement` | recommended | Video placement type. (see OpenRTB v2.5 section 5.9 for options) | `3` |
+| `video.plcmt` | recommended | Placement type for the impression. (See [OpenRTB v2.6](https://github.com/InteractiveAdvertisingBureau/AdCOM/blob/develop/AdCOM%20v1.0%20FINAL.md) Plcmt Subtypes - Video) | `5` |
+| `video.playerSize` | optional | Array of supported sizes of the player. | `[[300, 250], [300, 600]]` |
+| `video.playbackmethod` | optional | Playback methods that may be in use.(see OpenRTB v2.5 section 5.10 for options) | `[1, 2, 3, 4]` |
+| `video.protocols` | optional | Supported video bid response protocol values are 2, 3, 5, 6, 7, 8. (see OpenRTB v2.5 section 5.8 for options) | `[2, 3, 5, 6, 7, 8]` |
+| `video.maxduration` | optional | Maximum video ad duration in seconds | `30` |
+| `video.minduration` | optional | Minimum video ad duration in seconds | `1` |
+| `video.skip` | optional | Indicates if the player will allow the video to be skipped, where 0 = no, 1 = yes | `0` |
+| `video.skipafter` | optional | Number of seconds a video must play before skipping is enabled | `5` |
+| `video.startdelay` | optional | Indicates the start delay in seconds for pre-roll, mid-roll, or post-roll ad placements. (see OpenRTB v2.5 section 5.12 for options) | `0` |
+| `video.linearity` | optional | Indicates if the impression must be linear, nonlinear, etc. (see OpenRTB v2.5 section 5.7 for options) | `1` |
+| `video.skipmin` | optional | Only if the ad is skippable. Videos of total duration greater than this number of seconds can be skippable | `5` |
+| `video.sequence` | optional | For multiple ad in the same bid request. This value allow will for the coordinated delivery of multiple ad | `1` |
+| `video.battr` | optional | Blocked creative attributes. (see OpenRTB v2.5 section 5.3 for options) | `[1]` |
+| `video.maxextended` | optional | Max extended ad duration beyond the maxduration if extension is allowed. Blank or 0 - blocked. -1 - allowed without time limit | `30` |
+| `video.minbitrate` | optional | Minimum bit rate in Kbps | `5` |
+| `video.maxbitrate` | optional | Maximum bit rate in Kbps | `10000` |
+| `video.playbackend` | optional | The event that causes playback to end. (see OpenRTB v2.5 section 5.11 for options) | `1` |
+| `video.delivery` | optional | Supported delivery methods (1 = streaming, 2 = progressive, 3 = download). If none specified, assume all are supported. | `[1, 2]` |
+| `video.pos` | optional | Ad position on screen. (see OpenRTB v2.5 section 5.4 for options) | `1` |
+| `video.api` | optional | List of supported API frameworks for this impression. Supported API frameworks are between 1-7 (See [OpenRTB v2.6](https://github.com/InteractiveAdvertisingBureau/AdCOM/blob/develop/AdCOM%20v1.0%20FINAL.md) List API Frameworks) | `[2, 7]` |
+
+### Example
+
+```javascript
+var adUnits = [
+ {
+ code: 'insticator-video-ad-2',
+ mediaTypes: {
+ video: {
+ playerSize: [640, 480],
+ w: 640,
+ h: 480,
+ mimes: ['video/mp4', 'video/x-flv'],
+ protocols: [2, 3, 5, 6, 7, 8],
+ placement: 3,
+ startdelay: 0,
+ api: [2, 7],
+ skip: 0,
+ minduration: 1,
+ maxduration: 30,
+ playbackmethod: [1, 3],
+ battr: [13, 14],
+ linearity: 1,
+ minbitrate: 10,
+ maxbitrate: 10000
+ }
+ },
+ bids: [{
+ bidder: 'insticator',
+ params: {
+ adUnitId: 'example_adunit_id'
+ }
+ }],
+ ...
+ }];
+```
diff --git a/dev-docs/bidders/integr8.md b/dev-docs/bidders/integr8.md
index 27662ef942..e812cd99dd 100644
--- a/dev-docs/bidders/integr8.md
+++ b/dev-docs/bidders/integr8.md
@@ -5,6 +5,7 @@ description: Prebid Integr8 Bidder Adapter
pbjs: true
biddercode: integr8
media_types: banner, video
+sidebarType: 1
---
@@ -14,4 +15,5 @@ media_types: banner, video
|---------------|----------|------------------------------------------------------------------------|--------------------|-----------|
| `propertyId` | required |Property id | `"12345"` | `string` |
| `placementId` | required |Placement id | `"54321"` | `string` |
+| `deliveryUrl` | optional |Custom endpoint url for the bid request | `"https://central.sea.integr8.digital/bid"` | `string` |
| `data` | optional |Catalog data (contents) and/or inventory data (custom key/value pairs) | `{catalogs: [{ catalogId: "699229", items: ["193", "4", "1"] }], inventory: { category: ["tech"], query: ["iphone 12"] }}` | `object` |
diff --git a/dev-docs/bidders/interactiveOffers.md b/dev-docs/bidders/interactiveOffers.md
index daadab5e9d..9aa7e915d9 100644
--- a/dev-docs/bidders/interactiveOffers.md
+++ b/dev-docs/bidders/interactiveOffers.md
@@ -5,11 +5,13 @@ description: Prebid InteractiveOffers.com Bidder Adapter
pbs: true
pbjs: true
biddercode: interactiveOffers
-gdpr_supported: false
+tcfeu_supported: false
media_types: banner
+sidebarType: 1
---
-### Note:
+### Note
+
Module that connects to interactiveOffers demand sources. Param partnerId is required.
### Bid Params
diff --git a/dev-docs/bidders/intertech.md b/dev-docs/bidders/intertech.md
new file mode 100644
index 0000000000..29512af65b
--- /dev/null
+++ b/dev-docs/bidders/intertech.md
@@ -0,0 +1,20 @@
+---
+layout: bidder
+title: intertech
+description: Prebid Intertech Bidder Adapter
+pbs: true
+biddercode: intertech
+media_types: banner, native
+---
+
+### Registration
+
+The Intertech Bidding adapter requires setup before beginning. Please contact us at [prebid@intertechsrvcs.com](mailto:prebid@intertechsrvcs.com).
+
+### Bid params
+
+{: .table .table-bordered .table-striped }
+| Name | Scope | Description | Example | Type |
+|---------------|----------|-------------------------|-----------|-----------|
+| `pageId` | required | Page ID | `123456` | `Integer` |
+| `impId` | required | Block ID | `12` | `Integer` |
diff --git a/dev-docs/bidders/invamia.md b/dev-docs/bidders/invamia.md
index ec5dc91a79..072522f340 100644
--- a/dev-docs/bidders/invamia.md
+++ b/dev-docs/bidders/invamia.md
@@ -5,16 +5,17 @@ description: Prebid Invamia Bidder Adapter
pbjs: true
biddercode: invamia
safeframes_ok: false
+sidebarType: 1
---
### Note
Here is what you need for Prebid integration with Invamia:
+
1. Register with Invamia.
2. Once registered and approved, you will receive a Zone ID.
3. Use the Zone ID as parameters in params.
-
### Bid Params
{: .table .table-bordered .table-striped }
diff --git a/dev-docs/bidders/invibes.md b/dev-docs/bidders/invibes.md
index 9c1a368d8d..2847bf7778 100644
--- a/dev-docs/bidders/invibes.md
+++ b/dev-docs/bidders/invibes.md
@@ -2,14 +2,38 @@
layout: bidder
title: Invibes
description: Prebid Invibes Bidder Adaptor
-pbjs: true
biddercode: invibes
-gdpr_supported: true
-tcf2_supported: true
-userIds: pubCommonId, pubProvidedId, uid2, zeotapIdPlus, id5id
+tcfeu_supported: true
+gvl_id: 436
+usp_supported: false
+coppa_supported: false
+gpp_sids: tcfeu
+schain_supported: false
+dchain_supported: false
+userId: pubCommonId, pubProvidedId, uid2, zeotapIdPlus, id5id
+media_types: banner, native
+safeframes_ok: false
+deals_supported: false
+floors_supported: false
+fpd_supported: false
+pbjs: true
pbs: true
+pbs_app_supported: false
+prebid_member: false
+multiformat_supported: will-bid-on-any
+ortb_blocking_supported: false
+privacy_sandbox: no
+sidebarType: 1
---
+### Disclosure
+
+The bidder will use the Local Storage if allowed by the publisher and user gives consent on page with the following purposes:
+ - set an internal Invibes ID
+ - get the internal Invibes ID if it was set priorly for the user
+
+The bidder will NOT set any cookies. The bidder will also try to read from Cookies if publisher gibes the internal ID if this wasn't found in LocalStorage.
+
### Bid Params
{: .table .table-bordered .table-striped }
@@ -19,4 +43,3 @@ pbs: true
| `domainId` | optional | Id of domain | `1001` | `integer`|
| `customEndpoint`| optional | Custom test domain | `https://bid.videostep.com/Bid/VideoAdContent` | `integer`|
| `debug` | optional | Debug paramentes (only prebid server)| `{ "testBvid": "1234", "testLog": true }` | `object` |
-
diff --git a/dev-docs/bidders/iprom.md b/dev-docs/bidders/iprom.md
index 243a1a0717..5689594c25 100644
--- a/dev-docs/bidders/iprom.md
+++ b/dev-docs/bidders/iprom.md
@@ -5,12 +5,13 @@ description: iPROM Prebid Adaptor
biddercode: iprom
media_types: banner
pbjs: true
-enable_download: false
-pbjs_version_notes: not in 5.x, in 6.2+
+enable_download: true
+sidebarType: 1
---
-### Prebid Server Note:
-For registration with our bidder please see our website at [www.iprom.eu](https://www.iprom.eu) or contact us at support@iprom.si.
+### Prebid Server Note
+
+For registration with our bidder please see our website at [www.iprom.eu](https://www.iprom.eu) or contact us at .
### Bid Params
diff --git a/dev-docs/bidders/iqm.md b/dev-docs/bidders/iqm.md
index a3251a5a72..31b546afcb 100644
--- a/dev-docs/bidders/iqm.md
+++ b/dev-docs/bidders/iqm.md
@@ -4,9 +4,10 @@ title: iQM
description: Prebid iQM Bidder Adaptor
pbjs: true
biddercode: iqm
+sidebarType: 1
---
-# Parameters
+## Parameters
{: .table .table-bordered .table-striped }
| Name | Scope | Description | Example |
@@ -16,11 +17,12 @@ biddercode: iqm
| `placementId` | required | The Placement ID from iQM | 23451 |
| `bidfloor` | optional | Bid Floor | 0.50 |
-# Description
+## Description
Module that connects to iQM demand sources
-# Test Parameters
+## Test Parameters
+
```
var adUnits = [{
code: 'div-gpt-ad-1460505748561-0',
@@ -47,7 +49,7 @@ var adUnits = [{
```
-# adUnit Video
+## adUnit Video
```
var videoAdUnit = {
diff --git a/dev-docs/bidders/iqx.md b/dev-docs/bidders/iqx.md
new file mode 100644
index 0000000000..d3d3cd7a6a
--- /dev/null
+++ b/dev-docs/bidders/iqx.md
@@ -0,0 +1,35 @@
+---
+layout: bidder
+title: IQX
+description: IQX Bidder Adapter
+biddercode: iqx
+media_types: banner, video, native
+coppa_supported: true
+tcfeu_supported: false
+usp_supported: true
+prebid_member: false
+pbjs: true
+pbs: true
+schain_supported: true
+floors_supported: true
+multiformat_supported: will-bid-on-any
+sidebarType: 1
+safeframes_ok: true
+---
+
+### Prebid.js Bid params
+
+{: .table .table-bordered .table-striped }
+| Name | Scope | Description | Example | Type |
+|-------------|----------|-----------------------------|---------------|-----------|
+| `pid` | required | Placement ID | `test-banner` | `string` |
+| `env` | required | Environment name | `iqx` | `string` |
+| `ext` | optional | Specific integration config | `{}` | `object` |
+
+### Prebid Server Bid Params
+
+{: .table .table-bordered .table-striped }
+| Name | Scope | Description | Example | Type |
+|-------------|----------|-------------------------------|------------------------------------|-----------|
+| `env` | required | Environment name | `iqx-stage` | `string` |
+| `pid` | required | unique placement ID | `aa8217e20131c095fe9dba67981040b0` | `string` |
diff --git a/dev-docs/bidders/ironsource.md b/dev-docs/bidders/ironsource.md
deleted file mode 100644
index a4ee00012e..0000000000
--- a/dev-docs/bidders/ironsource.md
+++ /dev/null
@@ -1,79 +0,0 @@
----
-layout: bidder
-title: IronSource
-description: Prebid IronSource Bidder Adaptor
-pbjs: true
-biddercode: ironsource
-media_types: no-display, video
-schain_supported: true
-gdpr_supported: true
-usp_supported: true
-enable_download: false
-pbjs_version_notes: not ported to 5.x
----
-
-### Note
-
-The IronSource adapter requires setup and approval. Please reach out to prebid-digital-brands@ironsrc.com to setup an IronSource account.
-
-### Bid Parameters
-
-#### Video
-
-{: .table .table-bordered .table-striped }
-| Name | Scope | Type | Description | Example
-| ---- | ----- | ---- | ----------- | -------
-| `isOrg` | required | String | IronSource publisher Id provided by your IronSource representative | "56f91cd4d3e3660002000033"
-| `floorPrice` | optional | Number | Minimum price in USD. **WARNING:** Misuse of this parameter can impact revenue | 2.00
-| `ifa` | optional | String | The ID for advertisers (also referred to as "IDFA") | "XXX-XXX"
-| `testMode` | optional | Boolean | This activates the test mode | false
-
-## Example
-```javascript
-var adUnits = [
- {
- code: 'dfp-video-div',
- sizes: [[640, 480]],
- mediaTypes: {
- video: {
- playerSize: [[640, 480]],
- context: 'instream'
- }
- },
- bids: [{
- bidder: 'ironsource',
- params: {
- isOrg: '56f91cd4d3e3660002000033', // Required
- floorPrice: 5.00, // Optional
- ifa: 'XXX-XXX', // Optional
- testMode: false // Optional
- }
- }]
- }
- ];
-```
-
-### Configuration
-IronSource recommends setting UserSync by iframe for monetization.
-
-For Prebid.js v1.15.0 and later:
-
-pbjs.setConfig({
- userSync: {
- filterSettings: {
- iframe: {
- bidders: '*', // '*' represents all bidders
- filter: 'include'
- }
- }
- }
-});
-
-For Prebid.js v1.14.0 and before:
-
-pbjs.setConfig({
- userSync: {
- iframeEnabled: true,
- enabledBidders: ['ironsource']
- }
-});
diff --git a/dev-docs/bidders/ivs.md b/dev-docs/bidders/ivs.md
new file mode 100644
index 0000000000..088d29cb3c
--- /dev/null
+++ b/dev-docs/bidders/ivs.md
@@ -0,0 +1,21 @@
+---
+layout: bidder
+title: IVS Bidder Adapter
+description: Prebid IVS Bidder Adapter
+biddercode: ivs
+media_types: video
+floors_supported: true
+pbjs: true
+sidebarType: 1
+---
+
+### Note
+
+The IVS Bidding adapter requires setup before beginning. Please contact us at
+
+### Bid Params
+
+{: .table .table-bordered .table-striped }
+| Name | Scope | Description | Example | Type |
+|----------------|----------|----------------------------|-------------|-----------|
+| `publisherId` | required | Unique id of the publisher | `'3001234'` | `string` |
diff --git a/dev-docs/bidders/ix-server.md b/dev-docs/bidders/ix-server.md
new file mode 100644
index 0000000000..94ce0053f5
--- /dev/null
+++ b/dev-docs/bidders/ix-server.md
@@ -0,0 +1,401 @@
+---
+layout: bidder
+title: Index Exchange (Prebid Server)
+description: Prebid Index Exchange Bidder Adapter
+biddercode: ix
+pbjs: false
+pbs: true
+userIds: idl, netId, fabrickId, zeotapIdPlus, uid2, TDID, id5Id, lotamePanoramaId, publinkId, hadronId, pubcid, utiq, criteoID, euid, imuid, 33acrossId, nonID, pairid
+pbs_app_supported: true
+schain_supported: true
+coppa_supported: true
+tcfeu_supported: true
+floors_supported: true
+usp_supported: true
+media_types: banner, video, native
+safeframes_ok: true
+fpd_supported: true
+gvl_id: 10
+dchain_supported: false
+deals_supported: true
+prebid_member: yes
+multiformat_supported: yes
+sidebarType: 1
+privacy_sandbox: paapi
+---
+
+
+
+## Table of contents
+
+* [Table of contents](#table-of-contents)
+* [Introduction](#introduction)
+* [Supported media types](#supported-media-types)
+* [Configure the Index adapter in your Prebid Server instance](#hosting-instance)
+* [Publisher instructions to call Index through Prebid Server](#call-index)
+ * [Call Index from a web browser](#call-index-from-a-web-browser)
+ * [Call Index from Prebid Mobile SDK](#call-index-from-prebid-mobile-sdk)
+ * [Call Index from CTV/long-form video environment](#call-index-from-ctvlong-form-video-environment)
+ * [Call Index from any other server-to-server OpenRTB environment](#call-index-from-any-other-server-to-server-openrtb-environment)
+* [Bid request parameters](#bid-request-parameters)
+ * [Banner](#banner)
+ * [Video](#video)
+* [Examples](#examples)
+
+
+
+## Introduction
+
+Publishers can use Prebid Server in any of the following ways with Index Exchange (Index). Index's adapter supports all of the following methods:
+
+* If you want to call Index from a web environment, you can use Prebid.js to call Prebid Server, and then Prebid Server uses our server-side adapter to call Index. This reduces workload on the browser. For set up instructions, see [Call Index from a web browser](#call-index-from-a-web-browser) section on this page.
+* In mobile apps, you can use the Prebid Mobile SDK to call Prebid Server and then Prebid Server uses our server-side adapter to call Index. For set up instructions, see [Call Index from Prebid Mobile SDK](#call-index-from-prebid-mobile-sdk) section on this page.
+* In CTV apps and other long-form video environments, you (or the SSAI vendor) can make a call to Prebid Server using OpenRTB, and then Prebid Server uses our server-side adapter to call Index. For set up instructions, see [Call Index from CTV/long-form video environment](#call-index-from-ctvlong-form-video-environment) section on this page.
+* In any other server-to-server OpenRTB environment, you can send OpenRTB bid requests to the Prebid Server host of your choice. For set up instructions, see [Call Index from any other server-to-server OpenRTB environment](#call-index-from-ortb) section on this page.
+
+**Note about sending multiple ad slots in a single bid request:** Index accepts up to 100 valid ad slots in a single bid request. If a single bid request contains more than 100 ad slots (including invalid ad slots), only the first 100 valid ad slots are accepted and the rest are ignored. For example, streaming TV media owners can signal multiple ad pods for long-form programming in a single request.
+
+
+
+## Supported media types
+
+The following table lists the media types that Index supports. For information about the the Time-To-Live (TTL) for each media type, see [How Index counts impressions](https://kb.indexexchange.com/publishers/billing/how_Index_counts_impressions.htm) in our Knowledge Base.
+
+{: .table .table-bordered .table-striped }
+| Type | Prebid Server support |
+| ----------- | ----------- |
+| banner | Supported |
+| video | Supported, including ad pods for OTT |
+| native | Supported |
+
+
+
+## Configure the Index adapter in your Prebid Server instance
+
+**Before you begin:** Contact your Index Exchange Representative to get an endpoint and setup instructions.
+
+If you are hosting your own Prebid Server instance, depending on whether you are using Prebid Server Go or Prebid Server Java version, complete one of the following steps:
+
+* If you are using the Prebid Server Go version, in the `static/bidder-info/ix.yaml` file, complete the following:
+
+ * Enable the adapter by deleting the `disabled: true` entry.
+ * Add the following new entry and include the regional endpoint provided to you by Index:
+
+ ```javascript
+ endpoint: "https://"
+ ```
+
+ * Edit the below existing entry and include your publisher ID in the `s` parameter:
+
+ ```javascript
+ userSync:
+ redirect:
+ url: "https://ssum.casalemedia.com/usermatchredir?s=&gdpr={{.GDPR}}&gdpr_consent={{.GDPRConsent}}&us_privacy={{.USPrivacy}}&cb={{.RedirectURL}}"
+ ```
+
+ * Edit the below existing entry and include your publisher ID in the `s` parameter:
+
+ ```javascript
+ userSync:
+ redirect:
+ iframe: "https://ssum.casalemedia.com/usermatch?s=&gdpr={{.GDPR}}&gdpr_consent={{.GDPRConsent}}&us_privacy={{.USPrivacy}}&cb={{.RedirectURL}}"
+ ```
+
+* If you are using [Prebid Server Java](https://github.com/prebid/prebid-server-java) version, edit the `prebid-server-java` entry in the `src/main/resources/bidder-config/ix.yaml` file as follows:
+
+ * Edit the below existing entry and include the endpoint URL provided to you by Index.
+
+ ```javascript
+ adapters:
+ ix:
+ endpoint: "https://"
+ ```
+
+ * Edit the below existing entry and include your publisher ID in the `s` parameter:
+
+ ```javascript
+ adapters:
+ ix:
+ usersync:
+ redirect:
+ url: "https://ssum.casalemedia.com/usermatchredir?s=&gdpr={{.GDPR}}&gdpr_consent={{.GDPRConsent}}&us_privacy={{.USPrivacy}}&cb={{.RedirectURL}}"
+ ```
+
+ * Add the below entry and include your publisher ID in the `s` parameter:
+
+ ```javascript
+ adapters:
+ ix:
+ usersync:
+ iframe:
+ url: "https://ssum.casalemedia.com/usermatch?s=&gdpr={{.GDPR}}&gdpr_consent={{.GDPRConsent}}&us_privacy={{.USPrivacy}}&cb={{.RedirectURL}}"
+ ```
+
+
+
+## Publisher instructions to call Index through Prebid Server
+
+If you are using an existing Prebid Server instance that is already configured to call Index, depending on whether you want to call Index from the browser, mobile app, CTV, or long-form video, follow any of the below sections to complete the Index-specific configuration.
+
+
+
+### Call Index from a web browser
+
+To call Index from a web browser using Prebid Server, you must first configure Prebid.js to call Index directly from the browser using our client-side adapter. Follow the quick start instructions provided in Prebid's [Getting Started for Developers](/dev-docs/getting-started.html) documentation. Complete the following steps to complete the Index-specific configuration:
+
+1. Build the binary in one of the following ways:
+ * [Download Prebid.js](/download.html) from the Prebid site to use the standard compiled binary that Prebid includes in the download process and select **Index Exchange** as an adapter.
+ * Build it on your own from the source code by following the instructions in [Prebid.js project README](https://github.com/prebid/Prebid.js/blob/master/README.md#build-optimization). If you use this method, you will need to include several modules in your build process. See the [Index modules to include in your build process](/dev-docs/bidders/ix.html#modules-to-include-in-your-build-process) section in our Prebid.js documentation on the Prebid site.
+2. Define the Index-specific parameters at the bidder level which include adding `ix` as the bidder and the `siteId`. For Index's bidder-specific parameters, see the [Bid request parameters](#bid-request-parameters) section below.
+
+ ```javascript
+ {
+ bidder: 'ix',
+ params: {
+ siteId: '9999990'
+ }
+ }
+ ```
+
+3. Define your ad units in the `adUnit` object. This includes the details about the ad slots such as the media types, ad size, and ad code. For more information about this object, see Prebid's [Ad Unit Reference](/dev-docs/adunit-reference.html) documentation.
+4. Enable user syncing by adding the following code in the [pbjs.setConfig()](/dev-docs/publisher-api-reference/setConfig.html) function. Index strongly recommends enabling user syncing through iFrames, though we do also support image-based syncing. This functionality improves DSP user match rates and increases the Index bid rate and bid price. Make sure to call `pbjs.setConfig()` only once. This configuration is optional in Prebid, but required by Index.
+
+ ```javascript
+ pbjs.setConfig({
+ userSync: {
+ iframeEnabled: true,
+ filterSettings: {
+ iframe: {
+ bidders: ['ix'],
+ filter: 'include'
+ }
+ }
+ }
+ });
+ ```
+
+5. (Optional) Set up First Party Data (FPD). For more information about the data types we support and the instructions for each option, see the [Set up First Party Data (FPD)](/dev-docs/bidders/ix.html#set-up-first-party-data-fpd) section in our Prebid.js documentation on the Prebid site.
+6. (Optional) If you want to monetize instream video, you need to enable a cache endpoint in the [pbjs.setConfig()](/dev-docs/publisher-api-reference/setConfig.html) function as follows:
+
+ ```javascript
+ pbjs.setConfig({
+ cache: {
+ url: 'https://prebid.adnxs.com/pbc/v1/cache'
+ }
+ });
+ ```
+
+7. (Optional) If you want to monetize outstream video, you can choose among the following options:
+ * Use Index's outstream video player. For more information, see the [Index's outstream video player](/dev-docs/bidders/ix.html#index-outstream-video-player) section in our Prebid.js documentation on the Prebid site.
+ * Use your own outstream video player. For more information, see [Prebid's documentation on how to show video ads.](/dev-docs/show-outstream-video-ads.html)
+8. (Optional) Configure Prebid Native with Index. For more information, see the [Prebid Native](/dev-docs/bidders/ix.html#prebid-native-configuration) section in our Prebid.js documentation on the Prebid site. Prebid Native is available from Prebid.js version 7.4.0 or higher.
+
+
+
+### Call Index from Prebid Mobile SDK
+
+**Before you begin:** Contact your Index Exchange representative to get your `siteId`. You must provide this site ID to your Prebid Server host company.
+
+**Note:** To implement Prebid Mobile SDK, follow Prebid's [Getting Started with Prebid Mobile](/prebid-mobile/prebid-mobile-getting-started.html) documentation.
+
+To add Index as a bidder to your mobile app:
+
+1. Inform your Prebid Server hosting company to add `ix`as a bidder in the configuration and include the `siteId` that Index provides to you at the time of integration.
+2. Define the Index-specific parameters at the bidder level. For information about these parameters, see the [Bid request parameters](#bid-request-parameters) section below.
+3. Include any ad unit level required or optional parameters provided in Prebid's [Prebid Mobile API - iOS](/prebid-mobile/pbm-api/ios/ios-sdk-integration-gam-original-api.html) and [Prebid Mobile API - Android](/prebid-mobile/pbm-api/android/android-sdk-integration-gam-original-api.html) documentation.
+
+
+
+### Call Index from CTV/long-form video environment
+
+**Before you begin:** Contact your Index Exchange Representative to get the `siteId`. You must provide this site ID to your Prebid Server host company.
+
+**Note:** To implement CTV and long-form video using Prebid Server, follow Prebid's [Long Form Video](/prebid-server/use-cases/pbs-lfv.html) documentation.
+
+To add Index as a bidder:
+
+1. Inform your Prebid Server hosting company to add `ix`as a bidder in the configuration and include the `siteId` that Index provides to you at the time of integration.
+2. Define the Index-specific parameters at the bidder level. For information about these parameters, see the [Bid request parameters](#bid-request-parameters) section below.
+3. Include any ad unit level required or optional parameters provided in Prebid's [/openrtb2/video](/prebid-server/endpoints/openrtb2/pbs-endpoint-video.html) documentation.
+
+
+
+### Call Index from any other server-to-server OpenRTB environment
+
+To request bids from Index:
+
+* In requests that you make to your Prebid Server host, add `imp.ext.ix` and include the `siteId` that Index provides to you at the time of integration.
+
+**Example:**
+
+```javascript
+ "imp": [{
+ "ext": {
+ "ix": {
+ "siteId": "9999990"
+ }
+ }
+ }],
+```
+
+
+
+## Bid request parameters
+
+For a list of the OpenRTB fields that Index supports in bid requests, see [List of supported OpenRTB bid request fields for sellers](https://kb.indexexchange.com/publishers/openrtb_integration/list_of_supported_openrtb_bid_request_fields_for_sellers.htm#List_of_supported_OpenRTB_bid_request_fields_for_sellers). The following are the required fields for the various supported media types.
+
+### Banner
+
+You must include these parameters at the bidder level.
+
+{: .table .table-bordered .table-striped }
+| Key | Scope | Type | Description |
+|---|---|---|---|
+| `siteId` | Required | String | An Index-specific identifier that is associated with this ad unit. This is similar to a placement ID or an ad unit ID that some other modules have. For example, `'9999990'`, `'9999991'`, `'9999992'`|
+
+### Video
+
+You must include these parameters at the bidder level.
+
+{: .table .table-bordered .table-striped }
+| Key | Scope | Type | Description |
+|---|---|---|---|
+| `siteId` | Required | String | An Index-specific identifier that is associated with this ad unit. It will be associated with the single size, if the size is provided. This is similar to a placement ID or an ad unit ID that some other modules have. For example, `'9999990'`, `'9999991'`, `'9999992'` **Note:** You can re-use the existing `siteId` within the same flex position or video size, if the video adapts to the containing `` element.|
+
+If you are using Index's outstream ad unit and have placed the video object at the bidder level, you must include the Index required parameters at the bidder level. You can include the optional parameters to specify the outstream ad unit configurations.
+
+{: .table .table-bordered .table-striped }
+| Key | Scope | Type | Description |
+|---|---|---|---|
+| `video.w` | Required | Integer | The width of the video player in pixels that will be passed to demand partners. You must define the size of the video player using the `video.w` and `video.h` parameters. We strongly recommend video sizes to be `256 x 256` or greater, `300 x 250`, or `320 x 180`. |
+| `video.h` | Required | Integer | The height of the video player in pixels that will be passed to demand partners. You must define the size of the video player using the `video.w` and `video.h` parameters. We strongly recommend video sizes to be `256 x 256` or greater, `300 x 250`, or `320 x 180`. |
+| `video.playerSize` | Required | Integer[] | The video player size that will be passed to demand partners. |
+| `video.playerConfig` | Optional | Hash | The Index-specific outstream ad unit configurations. |
+| `video.playerConfig.floatOnScroll` | Optional | Boolean | A boolean specifying whether you want to use the player's floating capabilities, where:
- `true`: Use the Index player's float capabilities.
**Note:** If you set `floatOnScroll` to `true`, Index updates the placement value to `5`.
**Note:** We do not recommend using the player's default float capabilities if you have more than one outstream ad unit per page.
-`false`: Do not use the Index player's float capabilities (default). |
+| `video.playerConfig.floatSize` | Optional | Integer[] | The height and width of the floating player in pixels. If you do not specify a float size, the player adjusts to the aspect ratio of the player size that is defined when it is not floating. Index recommends that you review and test the float size to your user experience preference. |
+| `video.plcmt` | Required | Integer[] | The video's placement type, where:
- `1` = Instream
- `2` = Accompanying Content
- `3` = Interstitial
- `4` = No Content/Standalone |
+
+
+
+## Examples
+
+**Banner**
+
+```json
+{
+ "id": "ix-banner-id",
+ "imp": [
+ {
+ "id": "imp-id",
+ "banner": {
+ "w": 300,
+ "h": 250,
+ "id": "1",
+ "pos": 0,
+ "format": [
+ {
+ "w": 300,
+ "h": 250
+ },
+ {
+ "w": 300,
+ "h": 600
+ }
+ ]
+ },
+ "instl": 0,
+ "tagid": "5602709",
+ "bidfloor": 0.02,
+ "bidfloorcur": "USD",
+ "secure": 1,
+ "ext": {
+ "ix": {
+ "siteId": "9999990"
+ }
+ }
+ }
+ ],
+ "app": {
+ "bundle": "555555555",
+ "storeurl": "https://apps.apple.com/us/app/test-app/id555555555",
+ "publisher": {
+ "id": "123456"
+ },
+ "content": {
+ "title": "Entertainment",
+ "genre": "IAB9-30,IAB6,IAB9-7,IAB1"
+ }
+ },
+ "device": {
+ "ua": "Mozilla/5.0 (iPhone; CPU iPhone OS 15_6_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148",
+ "ip": "10.20.30.40",
+ "ifa": "2E2E2E2E-3B3B-4141-8A8A-181818181818"
+ },
+ "at": 1,
+ "tmax": 200
+}
+```
+
+**Video**
+
+```json
+{
+ "id": "ix-video-example",
+ "imp": [
+ {
+ "id": "imp-id",
+ "video": {
+ "mimes": [
+ "video/mp4",
+ "video/3gpp",
+ "video/webm"
+ ],
+ "minduration": 15,
+ "maxduration": 60,
+ "startdelay": -1,
+ "protocols": [
+ 2,
+ 3,
+ 5,
+ 6
+ ],
+ "w": 320,
+ "h": 480,
+ "placement": 1,
+ "linearity": 1,
+ "minbitrate": 1000,
+ "api": [
+ 1,
+ 2,
+ 3,
+ 5
+ ]
+ },
+ "secure": 1,
+ "ext": {
+ "ix": {
+ "siteId": "9999990"
+ }
+ }
+ }
+ ],
+ "app": {
+ "bundle": "555555555",
+ "storeurl": "https://apps.apple.com/us/app/test-app/id555555555",
+ "publisher": {
+ "id": "123456"
+ },
+ "content": {
+ "title": "Entertainment",
+ "genre": "IAB9-30,IAB6,IAB9-7,IAB1"
+ }
+ },
+ "device": {
+ "ua": "Mozilla/5.0 (iPhone; CPU iPhone OS 15_6_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E18",
+ "ip": "10.20.30.40",
+ "ifa": "2E2E2E2E-3B3B-4141-8A8A-181818181818"
+ },
+ "at": 1,
+ "tmax": 1000
+}
+```
diff --git a/dev-docs/bidders/ix.md b/dev-docs/bidders/ix.md
index e7453c7e16..0edc681474 100644
--- a/dev-docs/bidders/ix.md
+++ b/dev-docs/bidders/ix.md
@@ -4,164 +4,553 @@ title: Index Exchange
description: Prebid Index Exchange Bidder Adapter
biddercode: ix
pbjs: true
-pbs: true
-userIds: identityLink, netId, fabrickId, zeotapIdPlus, uid2, unifiedId, id5Id, lotamePanoramaId, publinkId, hadronId, pubcid
+pbs: false
+userIds: idl, netId, fabrickId, zeotapIdPlus, uid2, TDID, id5Id, lotamePanoramaId, publinkId, hadronId, pubcid, utiq, criteoID, euid, imuid, 33acrossId, nonID, pairid, MRKL
pbs_app_supported: true
schain_supported: true
coppa_supported: true
-gdpr_supported: true
+tcfeu_supported: true
+dsa_supported: true
floors_supported: true
usp_supported: true
-media_types: banner, video
+gpp_supported: true
+media_types: banner, video, native
+safeframes_ok: true
fpd_supported: true
gvl_id: 10
+dchain_supported: false
+deals_supported: true
prebid_member: yes
+multiformat_supported: yes
+sidebarType: 1
+privacy_sandbox: paapi, topics
---
-## Overview
+## Table of contents
+
+* [Table of contents](#table-of-contents)
+* [Introduction](#introduction)
+* [Supported media types](#supported-media-types)
+* [Set up Prebid.js to call Index directly from the browser](#set-up-prebidjs-to-call-index-directly-from-the-browser-client-side-adapter)
+* [Set up Prebid.js to call Index through Prebid Server](#set-up-prebidjs-to-call-index-through-prebid-server-server-side-adapter)
+* [Modules to include in your build process](#modules-to-include-in-your-build-process)
+* [Set up First Party Data (FPD)](#set-up-first-party-data-fpd)
+ * [Global data](#prebid-fpd-module)
+ * [Index bidder-specific data](#index-bidder-specific-fpd-module)
+ * [AdUnit-specific data](#adunit-specific-data)
+* [Monetize instream video](#monetize-instream-video)
+* [Index's outstream ad unit](#indexs-outstream-ad-unit)
+* [Prebid Native configuration](#prebid-native-configuration)
+* [Protected Audience API support](#protected-audience-api-support)
+* [Signal inventory using external IDs](#signal-inventory-using-external-ids)
+* [Bid request parameters](#bid-request-parameters)
+ * [Banner](#banner)
+ * [Video](#video)
+ * [Native](#native)
+* [Multi-format ad units](#multi-format-ad-units)
+* [Examples](#examples)
+
+
+
+## Introduction
+
+Publishers can use Prebid.js to call Index Exchange (Index) in any of the following ways:
+
+* **Call through our client-side adapter:** Prebid.js calls Index directly from the browser using our client-side adapter. This option tends to have a better cookie match rate. For configuration instructions, see the [Set up Prebid.js to call Index directly from the browser (client-side adapter)](#client-side-adapter) on this page.
+* **Call through our server-side adapter**: Prebid.js makes a call to Prebid Server and then Prebid Server uses our server-side adapter to call Index. This reduces workload on the browser. For configuration instructions, see the [Set up Prebid.js to call Index through Prebid Server (server-side adapter)](#server-side-adapter) on this page.
+
+**Notes:**
+
+* **Send multiple ad slots in a single bid request**: Index accepts up to 100 valid ad slots in a single bid request. If a single bid request contains more than 100 ad slots (including invalid ad slots), only the first 100 valid ad slots are accepted and the rest are ignored. For example streaming TV media owners can signal multiple ad pods for long-form programming in a single request.
+* **How to view bid requests sent to Index:**
+ * In your browser, open a new tab.
+ * Open the **Developer tools**.
+ * In **Developer tools**, click the **Network** tab.
+ * In the **Network** tab, search for requests sent to `casalemedia.com/cygnus` (from version 6.28.0 and earlier) or `casalemedia.com/openrtb/pbjs` (from version 6.29.0 and later). These are the bid requests sent to Index.
+* **Recommended Global Bidder settings:** For our adapter, Index recommends enabling local storage. As of Prebid.js 7.x, local storage access must be explicitly specified. By leveraging local storage, Index is able to take advantage of the latest features our exchange has to offer. For instructions on enabling local storage, see Prebidâs [pbjs.bidderSettings](/dev-docs/publisher-api-reference/bidderSettings.html) documentation.
+
+### Example
+```javascript
+pbjs.bidderSettings = {
+ ix: {
+ storageAllowed: true
+ }
+};
```
-Module Name: Index Exchange Adapter
-Module Type: Bidder Adapter
-Maintainer: prebid.support@indexexchange.com
+
+
+
+## Supported media types
+
+The following table lists the media types that Index supports. For information about the the Time-To-Live (TTL) for each media type, see [How Index counts impressions](https://kb.indexexchange.com/publishers/billing/how_Index_counts_impressions.htm) in our Knowledge Base.
+
+{: .table .table-bordered .table-striped }
+
+| Type | Prebid Server support |
+| ----------- | ----------- |
+| banner | Supported |
+| video | Supported |
+| native | Supported |
+
+
+
+## Set up Prebid.js to call Index directly from the browser (client-side adapter)
+
+To call Index from a web browser environment using a Prebid Server integration, see the Index-specific configuration steps in [Setup instructions to call Index through Prebid Server](/dev-docs/bidders/ix-server.html#setup-instructions-to-call-index-through-prebid-server) in our Prebid Server documentation on the Prebid site.
+
+
+
+## Set up Prebid.js to call Index through Prebid Server (server-side adapter)
+
+In this configuration, Prebid.js makes a call to Prebid Server and then Prebid Server uses our server-side adapter to call Index. Complete the following steps to configure Index as a demand source:
+
+1. If you are hosting your own Prebid Server instance, see [Setup instructions to call Index through Prebid Server](/dev-docs/pbs-bidders.html#setup-instructions-to-call-index-through-prebid-server).
+2. In the `[pbjs.setConfig()]` function, within the `s2sConfig` property, add `ix` to the `bidders` attribute.
+3. Define the Index-specific parameters at the bidder level. For Index's bidder-specific parameters, see the [Bid request parameters](#bid-request-parameters) section below.
+4. Define your ad units in the `adUnit` object. For more information about this object, see Prebid's [Ad Unit Reference](/dev-docs/adunit-reference.html) documentation.
+5. Enable user syncing by adding the following code in the [pbjs.setConfig()](/dev-docs/publisher-api-reference/setConfig.html) function. Index strongly recommends enabling user syncing through iFrames, though we do also support image-based syncing. This functionality improves DSP user match rates and increases the Index bid rate and bid price. Be sure to call `pbjs.setConfig()` only once. This configuration is optional in Prebid, but required by Index.
+
+ ```javascript
+ pbjs.setConfig({
+ userSync: {
+ iframeEnabled: true,
+ filterSettings: {
+ iframe: {
+ bidders: ['ix'],
+ filter: 'include'
+ }
+ }
+ }
+ });
+ ```
+
+6. (Optional) Set up First Party Data (FPD). For more information about the data types we support and the instructions for each option, see the [Set up First Party Data (FPD)](#set-up-first-party-data-fpd) section below.
+7. (Optional) If you want to monetize instream video, see the [Monetize instream video](#monetize-instream-video) section below.
+8. (Optional) If you want to monetize outstream video, you can choose among the following options:
+ * Use Index's outstream video player. For more information, see the [Index's outstream ad unit](#indexs-outstream-ad-unit) section below.
+ * Use your own outstream video player. For more information, see [Prebidâs documentation on how to show video ads.](/dev-docs/show-outstream-video-ads.html)
+9. (Optional) Configure Prebid Native with Index. For more information, see the [Prebid Native](#prebid-native-configuration) section below. Prebid Native is available from Prebid.js version 7.4.0 or higher.
+
+
+
+## Modules to include in your build process
+
+If you are building the JS binary on your own from source code, follow the instructions in [Prebid.js project README](https://github.com/prebid/Prebid.js/blob/master/README.md#build-optimization). You will need to include the `ixBidAdapter`. If you want to show video ads with Google Ad Manager, also include the `dfpAdServerVideo` module. We highly recommend adding the `gptPreAuction` module as well, which improves a DSP's ability to bid accurately on your supply. The following is an example build command that include these modules:
+`gulp build --modules=ixBidAdapter,dfpAdServerVideo,gptPreAuction,fooBidAdapter,bazBidAdapter`
+
+If you are using a JSON file to specify modules, add `ixBidAdapter` and `dfpAdServerVideo` to the modules array as follows:
+
+```javascript
+[
+ "ixBidAdapter",
+ "dfpAdServerVideo",
+ "gptPreAuction",
+ "fooBidAdapter",
+ "bazBidAdapter"
+]
```
-## Description
+
+
+## Set up First Party Data (FPD)
-Publishers may access Index Exchange's (IX) network of demand sources through our Prebid.js and Prebid Server adapters. Both of these modules are GDPR and CCPA compliant.
+You can set up the Prebid.js FPD module using Global data, Index bidder-specific site data, or ad unit-specific data. Index supports deal targeting in all the three FPD types.
-### IX Prebid.js Adapter
+
-This module connects publishers to Index Exchange's (IX) network of demand sources through Prebid.js. This module is GDPR and CCPA compliant.
+### Global data
-It is compatible with the new Prebid.js 5.0 ad unit format where banner and video properties, including the size parameter, are stored in the `adUnits[].mediaTypes` object. IX still supports both size as an optional parameter and the Missing Sizes feature, but we recommend upgrading to the Prebid.js 5.0 format.
+Use this data type to allow all bid adapters to have access to first party data that might be useful in ad targeting. This is available from Prebid.js version 4.30 and above.
-For more information about how the `adUnits[].mediaTypes` object is formatted in Prebid.js 5.0, refer to the following example.
+To supply data that is accessible to all bidders, use the `[pbjs.setConfig()]` object as illustrated below. Use the `[setBidderConfig()]` function to supply bidder-specific data. For more information about the standard or more detailed examples, see Prebid's [First Party Data Feature](/features/firstPartyData.html) documentation.
```javascript
-var adUnits = [{
- // ...
+pbjs.setConfig({
+ ortb2: {
+ site: {
+ ...
+ },
+ user: {
+ ...
+ }
+ }
+});
+```
+
+
+
+### Index bidder-specific data
+
+This data type is available from Prebid version 7.49.0 and above. You can use it to specify key-value pairs that will be included in your query string when targeting deals. For example, if a user visits a news page, you can pass that information by submitting a key-value pair for `category = news`. You can then create a deal in the Index UI and activate the deal only on pages that contain `category = news` as the key-value pair.
+
+To include the FPD in a bid request, in the `[pbjs.setConfig()]` object at the `ix` bidder level, provide the key-values in the `firstPartyData` parameter. Make sure that you set it before the `pbjs.requestBids` configuration. If you want to change the values, you can update the `pbjs.setConfig` once again. The change will be reflected in all future bid requests.
+
+```javascript
+pbjs.setConfig({
+ ix: {
+ firstPartyData: {
+ '
': '',
+ '': '',
+ // ...
+ }
+ }
+});
+```
+
+
+
+### AdUnit-specific data
+
+Use this data type to specify key-value pairs at the ad unit level when targeting deals and apply it to all bidders. This will be available from Prebid.js version 7.46 and above. To include the adUnit-specific data in a bid request, see Prebid's [Supplying AdUnit-Specific Data](/features/firstPartyData.html#supplying-adunit-specific-data) documentation.
+
+```javascript
+ortb2Imp: {
+ ext: {
+ data: {
+ pbadslot: "homepage-top-rect",
+ adUnitSpecificAttribute: "123"
+ }
+ }
+}
+```
+
+## Monetize instream video
+
+Unlike Outstream Video, instream video does not use the Prebid Universal Creative. Instead, video bids provide VAST that Prebid caches to obtain a cache ID that can be retrieved with a URL. The cache ID is passed as a key value to the ad server.
+
+To monetize instream video, complete the following steps:
+
+1. Enable a cache endpoint in the `[pbjs.setConfig()]` function as follows:
+
+ ```javascript
+ pbjs.setConfig({
+ cache: {
+ url: 'https://prebid.adnxs.com/pbc/v1/cache'
+ }
+ });
+ ```
+
+2. Set up your line items in Google Ad manger by following the instructions in Prebid's [Setting Up Video In GAM](/adops/setting-up-prebid-video-in-dfp.html) documentation.
+
+## Index's outstream ad unit
+
+Publishers who are using Index as a bidding adapter in Prebid.js can show outstream video ads on their site using Index's outstream ad unit. This allows a video ad to be placed anywhere on a publisherâs site, such as in-article, in-feed, and more. To use Index's outstream ad unit, you must be on Prebid.js version 5.13 or higher. However, if you are using your own outstream video player, Index's adapter can accept video signals from version 2.41.0 or higher.
+**Note:** When you use the Index ad unit for outstream video, all impressions are considered viewable, which is similar to how Google's ActiveView counts impressions for outstream. This is because Index plays the outstream video as soon as it is in view and concurrently fires any impression pixels in the VAST.
+
+To use Indexâs outstream ad unit, in your Prebid.js configuration:
+
+1. Perform the following steps in your Prebid.js configuration to create a new section for Index's outstream ad unit:
+ * Add a new code property under `adUnits`. The code could be the `divID` or the Google Ad Manager adUnit code.
+ * Within the `adUnits`, add `ix` as a `bidder`.
+ * At the `adUnit` level, under `mediaTypes`, you must add a `video` object that supports our required video parameters. For more information about which parameters to add, see the [Bid request parameters](#video) section below. This is useful for publishers who want to apply the same settings across all SSPs.
+ * Optionally, you can add the `video` object at the bidder level under `bids.params`. This is useful for publishers who may want to set up different configurations for different SSPs.
+**Note:** The `bidder` level video configurations override the `adUnit` level configurations. The `playerConfig` is only a bidder level configuration.
+2. (Recommended) To force the Index ad unit as the default player for Index, set `backupOnly` to true (see below example). This configuration allows you to use your own player only when an adapter does not provide their own player. This also forces any adapter that has a player to use their player by default. If no player is provided, by default, we will use our own ad unit script.
+3. Configure the ad unit according to the options in the [Bid request parameters](#bid-request-parameters) section below.
+4. Depending on your existing Prebid setup, complete one of the following:
+ * If you have an existing Prebid.js integration for banner, you can use the corresponding line items in your Google Ad Manager (GAM) account to retrieve outstream video demand. For more information, see Prebid's documentation on [How to set up line items](/adops/step-by-step.html).
+ * If you do not have an existing Prebid.js integration for banner, create a line item in your GAM account that is capable of serving an outstream video ad. For more information about how to do this, see Prebid's documentation on Setting up [Prebid Video in Google Ad Manager](/adops/setting-up-prebid-video-in-dfp.html).
+5. Notify your Index Representative and provide your test page URL for validation. They will work with you to test the video ad unit and confirm that outstream video ads are being retrieved.
+
+For more information on how to structure the video object, refer to the following code example:
+
+```javascript
+pbjs.addAdUnit({
+ code: 'video1',
+ // This video player would apply to all prebid creatives...
+ renderer: {
+ url: 'example.com/publishersCustomRenderer.js',
+ backupOnly: true,
+ render: function (bid) { renderAdUnit(...) }
+ },
mediaTypes: {
- banner: {
- sizes: [
- [300, 250],
- [300, 600]
- ]
- },
+ // Publisher video player video settings...
video: {
- context: 'instream',
- playerSize: [300, 250]
+ context: 'outstream',
+ playerSize: [640, 480],
+ mimes: ['video/mp4'],
+ protocols: [1, 2, 3, 4, 5, 6, 7, 8],
+ placement: 3,
+ playbackmethod: [6],
+ skip: 1,
+ plcmt: 4
+
}
},
- // ...
-}];
+ bids: [{
+ bidder: 'ix',
+ params: {
+ siteId: '9999990',
+ // Index ad unit video settings...
+ video: {
+ //minimum size for Video Player size is 144x144 in pixel
+ //maxduration can be any.
+ context: 'outstream',
+ playerSize: [640, 480],
+ mimes: ['video/mp4', 'video/webm', 'applications/javascript'],
+ protocols: [2, 3, 5, 6],
+ api: [2, 7],
+ playbackmethod: [6],
+ skip: 1,
+ w: 640,
+ h: 480,
+ minduration: 5,
+ maxduration: 60,
+ delivery: [2],
+ linearity: 1
+ }
+ }
+ }]
+});
```
-### Supported Media Types (Prebid.js)
-{: .table .table-bordered .table-striped }
-| Type | Support |
-|---|---|
-| `banner` | Fully supported for all IX approved sizes |
-| `video` | Fully supported for all IX approved sizes |
-| `native` | Not supported |
+*Please note that your use of the outstream video player will be governed by and subject to the terms and conditions of i) any master services or license agreement entered into by you and Index Exchange; ii) the information provided on our knowledge base linked [here](https://kb.indexexchange.com/publishers/prebid_integration/outstream_video_prebidjs.htm) and [here](https://kb.indexexchange.com/publishers/guidelines/standard_contractual_clauses.htm), and iii) our [Privacy Policy](https://www.indexexchange.com/privacy/). Your use of Index's outstream video player constitutes your acknowledgement and acceptance of the foregoing.*
-### Supported Media Types (Prebid Server)
+
-{: .table .table-bordered .table-striped }
-| Type | Support |
-|------|-------|
-| `banner` | Fully supported |
-| `video` | Fully supported, including ad pods for OTT |
-| `native` | Not supported |
+## Prebid Native configuration
+
+Prebid Native is available from Prebid.js version 7.4.0 or higher. We support the three native template rendering options that are provided in [Setting up Prebid Native in Google Ad Manager](/adops/gam-native.html). The following code is an example of a Prebid native setup using Google Ad Manager, but the concept and implementation should be similar for other ad servers.
+
+```javascript
+pbjs.addAdUnits({
+ code: slot.code,
+ mediaTypes: {
+ native: {
+ image: {
+ required: true,
+ sizes: [150, 50]
+ },
+ title: {
+ required: true,
+ len: 80
+ },
+ sponsoredBy: {
+ required: true
+ },
+ clickUrl: {
+ required: true
+ },
+ privacyLink: {
+ required: false
+ },
+ body: {
+ required: true
+ len: 90
+ },
+ icon: {
+ required: true,
+ sizes: [50, 50]
+ }
+ }
+ },
+ bids: [{
+ bidder: 'ix',
+ params: {
+ siteId: '9999990'
+ }
+ }]
+});
+```
-# Ad Unit or Bidder Parameters
+
+
+## Protected Audience API support
+
+**Before you begin:**
+
+* You must have Google Ad Manager and the [fledgeForGpt](/dev-docs/modules/fledgeForGpt.html) module.
+* In your Google Ad Manager configuration, make sure that you have not opted out from using the Protected Audience API. For more information about the configuration, see Google's documentation on [Protected Audience API and Ad Manager after Chrome GA](https://support.google.com/admanager/answer/13627134?hl=en&ref_topic=12264880&sjid=10591375417866092080-NA).
+
+Follow these steps to configure your Prebid.js to specify that your ad slots are enabled for [Protected Audience](https://github.com/WICG/turtledove/blob/main/FLEDGE.md) auctions:
+
+1. Index recommends that you update your Prebid.js version to 8.37.0 or later.
+**Note:** Prebid.js version 8.18.0 or later is supported. However, Prebid's `fledgeForGpt` module has been improved in version 8.37.0, which fixes some issues from the earlier version.
+2. Build the `fledgeForGpt` module in your Prebid.js configuration by adding `fledgeForGpt` to the list of modules that you are already using. For more information about the module, see Prebid's [Fledge (Protected Audience) for GPT Module](/dev-docs/modules/fledgeForGpt.html) documentation.
+3. If you are using a Prebid.js version that is between 8.18.0 and 8.36.0, you must configure your ad units to make them eligible for Protected Audience API demand. You can do this in the global-level configuration, bidder level, or ad-unit level. For more information about the configurations, see Prebid's [Fledge (Protected Audience) for GPT Module](/dev-docs/modules/fledgeForGpt.html) documentation. Index recommends that you do this in the global-level configuration by using the `defaultForSlots` parameter with a value of `1`. The following code is an example of the configuration done at the global level:
+
+ ```javascript
+ pbjs.que.push(function() {
+ pbjs.setConfig({
+ fledgeForGpt: {
+ enabled: true,
+ defaultForSlots: 1
+ }
+ });
+ });
+ ```
+
+ **Note:** If you are using the `fledgeForGpt.bidders[]`, make sure that you include `ix` to the list of bidders as follows:
+
+ ```javascript
+ pbjs.que.push(function() {
+ pbjs.setConfig({
+ fledgeForGpt: {
+ enabled: true,
+ bidders: ['ix', /* any other bidders */],
+ defaultForSlots: 1
+ }
+ });
+ });
+ ```
+
+4. If you are using Prebid.js version 8.37.0 or later, you must complete the following steps to make your ad units eligible for Protected Audience API demand:
+**Note:** If you continue to use the `fledgeForGpt` property, you will receive a warning message in the console logs stating that the `fledgeForGpt` configuration options will soon be renamed to `paapi`. Therefore, Index recommends that you use the `paapi` property, which is available in Prebid.js version 8.37.0 or later.
+ * In the `pbjs.setConfig().paapi` field, set the `defaultForSlots` parameter to `1`:
+
+ ```javascript
+ pbjs.que.push(function() {
+ pbjs.setConfig({
+ paapi: {
+ enabled: true,
+ defaultForSlots: 1
+ bidders: ['ix', /* any other bidders */],
+ });
+ });
+ ```
+
+ * In the `paapi.gpt.autoconfig` field, set `autoconfig` to `false`. This step is important because, by default, the `fledgeForGpt` module expects the Google Publisher Tag (GPT) ad units to be loaded before the Protected Audience configuration is added to the ad unit. Setting `autoconfig` to `false` will avoid any race conditions resulting from asynchronous libraries being loaded out of order, which would prevent the ad unit from being properly configured for Protected Audience API.
+**Note:** The `fledgeForGpt.autoconfig` property is also backward compatible and can be used in place of the `paapi.gpt.autoconfig` property. However, Index recommends that you use the `paapi.gpt.autoconfig` property.
+
+ ```javascript
+ pbjs.que.push(function() {
+ pbjs.setConfig({
+ paapi: {
+ enabled: true,
+ defaultForSlots: 1
+ gpt: {
+ autoconfig: false
+ },
+ bidders: ['ix', /* any other bidders */],
+ });
+ });
+ ```
+
+ * In the `pbjs.requestBids.bidsBackHandler` function, call the `pbjs.setPAAPIConfigForGPT()` function as follows:
+**Note:** When calling the `pbjs.setPAAPIConfigForGPT();` function, make sure that you check the following:
+ * The function must be called in the `bidsBackHandler` each time new bids are requested (for example when refreshing `adSlots`). This is important because, when `autoconfig` is disabled, the `auctionConfig` needs to be associated with a GPT ad unit manually by calling `pbjs.setPAAPIConfigForGPT()`.
+ * The function must be called before the `pbjs.setTargetingForGPTAsync()` function. This is important because the Protected Audience configuration needs to be associated with a GPT ad unit before the Google Ad Manager call is executed.
+
+ ```javascript
+ pbjs.requestBids({, ,
+ // ...
+ bidsBackHandler: function(bids, timedOut, auctionId) {
+ pbjs.setPAAPIConfigForGPT();
+ pbjs.setTargetingForGPTAsync();
+ // ...
+ }
+ })
+ ```
+
+
+
+## Signal inventory using external IDs
+
+1. In the `pbjs.setBidderConfig` object at the `ix` bidder level, you must configure an `exchangeId` that applies to all your placements as follows. Note that the `exchangeId` is provided by Index.
+
+ ```javascript
+ pbjs.setBidderConfig({
+ bidders: ['ix'],
+ config: {
+ exchangeId: 123456 // Exchange-specific seller ID
+ }
+ });
+
+ ```
+
+2. Configure `externalId` at the bidder ad unit level under `bids.params`. The following shows an example of a banner ad that includes the `externalId` at the bidder level:
+
+ ```javascript
+ // Banner
+ var adUnits = [{
+ code: 'banner-div-a',
+ mediaTypes: {
+ banner: {
+ sizes: [
+ [300, 250],
+ [300, 600]
+ ]
+ }
+ },
+ bids: [{
+ bidder: 'ix',
+ params: {
+ externalId: "example_value" // External placement ID, which could include an integer or string
+ }
+ }
+ ]
+ }];
-These params can be specified in the ad unit level, which will be the preferred way going forward with PBJS 5.0
+ ```
-Each of the IX-specific parameters provided under the object are detailed here.
+
-The following parameters are specified in the ad unit `adUnits[].mediaTypes`. This includes each of the IX-specific parameters provided under `adUnits[].bids[].params`.
+## Bid request parameters
-In Prebid.js versions 5.0 and above, mediaType and sizes are not required to be defined at the ad unit level.
+For a list of the OpenRTB fields that Index supports in bid requests, see [List of supported OpenRTB bid request fields for sellers](https://kb.indexexchange.com/publishers/openrtb_integration/list_of_supported_openrtb_bid_request_fields_for_sellers.htm#List_of_supported_OpenRTB_bid_request_fields_for_sellers). The following are the required fields for the various supported media types.
### Banner
+You must include these parameters at the bidder level.
+
{: .table .table-bordered .table-striped }
-| Key | Scope | Type | Description |
+
+| Name | Scope | Type | Description |
|---|---|---|---|
-| `siteId` | Required | String | An IX-specific identifier that is associated with this ad unit. It will be associated to the single size, if the size provided. This is similar to a placement ID or an ad unit ID that some other modules have. For example, `'3723'`, `'6482'`, `'3639'`|
-| `sizes` | Optional | Number[Number[]] | The size/sizes associated with the site ID, as listed in the ad unit under `adUnits[].mediaTypes.banner.sizes`. For example, `[300, 250], [300, 600], [728, 90]`|
+| `siteId` | Required | String | An Index-specific identifier that is associated with this ad unit. This is similar to a placement ID or an ad unit ID that some other modules have. For example, `'9999990'`, `'9999991'`, `'9999992'`|
### Video
+You must include these parameters at the bidder level.
+
{: .table .table-bordered .table-striped }
-| Key | Scope | Type | Description |
+
+| Name | Scope | Type | Description |
|---|---|---|---|
-| `siteId` | Required | String | An IX-specific identifier that is associated with this ad unit. It will be associated to the single size, if the size is provided. This is similar to a placement ID or an ad unit ID that some other modules have. For example, `'3723'`, `'6482'`, `'3639'`|
-| `size` | Optional | Number[] | The single size that is associated with the site ID, as listed in the ad unit under `adUnits[].sizes` or `adUnits[].mediaTypes.video.playerSize`. For example, [300, 250], [300, 600]. This parameter is optional in Prebid.js versions 5.0 and above. Versions prior to 5.0 will still require a size parameter.|
-| `video` | Optional | Hash | The video object will serve as the properties of the video ad. You can create any field under the video object that is mentioned in the `OpenRTB Spec v2.5`. Some fields like `mimes, protocols, minduration, maxduration` are required. Properties not defined at this level, will be pulled from the Adunit level.|
-| `video.w` | Required | Integer | The video player size width in pixels that will be passed to demand partners.|
-| `video.h` | Required | Integer | The video player size height in pixels that will be passed to demand partners.|
-| `video.playerSize` | Optional* | Integer | The video player size that will be passed to demand partners. * In the absence of `video.w` and `video.h`, this field is required.|
-| `video.mimes` | Required | String[] | Array list of content MIME types supported. Popular MIME types include, but are not limited to, `"video/x-ms- wmv"` for Windows Media and `"video/x-flv"` for Flash Video.|
-| `video.minduration` | Required | Integer | Minimum video ad duration in seconds.|
-| `video.maxduration` | Required | Integer | Maximum video ad duration in seconds.|
-| `video.protocol` / `video.protocols` | Required | Integer / Integer[] | Either a single protocol provided as an integer, or protocols provided as a list of integers. `2` - VAST 2.0, `3` - VAST 3.0, `5` - VAST 2.0 Wrapper, `6` - VAST 3.0 Wrapper|
+| `siteId` | Required | String | An Index-specific identifier that is associated with this ad unit. It will be associated with the single size, if the size is provided. This is similar to a placement ID or an ad unit ID that some other modules have. For example, `'9999990'`, `'9999991'`, `'9999992'` **Note:** You can re-use the existing `siteId` within the same flex position or video size, if the video adapts to the containing `` element.|
-## Setup Guide
+If you are using Index's outstream ad unit and have placed the video object at the bidder level, you must include the Index required parameters at the bidder level. You can include the optional parameters to specify the outstream player configurations.
-Follow these steps to configure and add the IX module to your Prebid.js
-integration.
+{: .table .table-bordered .table-striped }
-The examples in this guide assume the following starting configuration (you may remove banner or video, if either does not apply).
+| Name | Scope | Type | Description |
+|---|---|---|---|
+| `video.w` | Required | Integer | The width of the video player in pixels that will be passed to demand partners. You must define the size of the video player using the `video.w` and `video.h` parameters. We strongly recommend video sizes to be `256 x 256` or greater, `300 x 250`, or `320 x 180`. |
+| `video.h` | Required | Integer | The height of the video player in pixels that will be passed to demand partners. You must define the size of the video player using the `video.w` and `video.h` parameters. We strongly recommend video sizes to be `256 x 256` or greater, `300 x 250`, or `320 x 180`. |
+| `video.playerSize` | Required | Integer[] | The video player size that will be passed to demand partners. |
+| `video.playerConfig` | Optional | Hash | The Index-specific outstream player configurations. |
+| `video.playerConfig.floatOnScroll` | Optional | Boolean | A boolean specifying whether you want to use the player's floating capabilities, where:
- `true`: Use the Index player's float capabilities.
**Note:** If you set `floatOnScroll` to `true`, Index updates the placement value to `5`.
**Note:** We do not recommend using the player's default float capabilities if you have more than one outstream ad unit per page.
- `false`: Do not use the Index player's float capabilities (default). |
+| `video.playerConfig.floatSize` | Optional | Integer[] | The height and width of the floating player in pixels. If you do not specify a float size, the player adjusts to the aspect ratio of the player size that is defined when it is not floating. Index recommends that you review and test the float size to your user experience preference. |
+| `video.plcmt` | Required | Integer[] | The video's placement type, where:
- `1` = Instream
- `2` = Accompanying Content
- `3` = Interstitial
- `4` = No Content/Standalone |
-In regards to video, `context` can either be `'instream'` or `'outstream'`. Note that `outstream` requires additional configuration on the adUnit.
+### Native
-```javascript
-var adUnits = [{
- code: 'banner-div-a',
- mediaTypes: {
- banner: {
- sizes: [
- [300, 250],
- [300, 600]
- ]
- }
- },
- bids: []
-},
-{
- code: 'video-div-a',
- mediaTypes: {
- video: {
- context: 'instream',
- playerSize: [1280, 720]
- }
- },
- bids: []
-}];
-```
+Index supports the same set of native assets that Prebid.js recognizes. For the list of native assets, see [Prebid.js Native Implementation Guide on the Prebid site.](https://docs.prebid.org/prebid/native-implementation.html#3-prebidjs-native-adunit-overview)
-### 1. Add IX to the appropriate ad units
+
-For each size in an ad unit that IX will be bidding on, add one of the following
-bid objects under `adUnits[].bids`:
+## Multi-format ad units
-```javascript
-{
- bidder: 'ix',
- params: {
- siteId: '123456'
- }
-}
-```
+Index supports multi-format ad units, see [Show Multi-Format Ads with Prebid.js](https://docs.prebid.org/dev-docs/show-multi-format-ads.html). For multi-format ad units, you can optionally specify a different siteId for each multi-format type at the bidder level. This is useful if you have deals set up with Index at the siteId level. See multi-format examples [here](#examples).
+
+The following are the parameters that you can specify for each multi-format type at the bidder level.
+
+{: .table .table-bordered .table-striped }
+
+| Name | Scope | Type | Description |
+|---|---|---|---|
+| `siteId` | Required | String | An Index-specific identifier that is associated with this ad unit. This is similar to a placement ID or an ad unit ID that some other modules have. For example, `'9999990'`, `'9999991'`, `'9999992'`.
Note: This will also act as the default siteID for multi-format adunits if a format specific siteId is not provided.|
+| `banner.siteId` | Optional | String | An Index-specific identifier that is associated with this ad unit. This siteId will be prioritized over the default siteID for `banner` format in the multi-format ad unit.|
+| `video.siteId` | Optional | String | An Index-specific identifier that is associated with this ad unit. This siteId will be prioritized over the default siteID for `video` format in the multi-format ad unit.|
+| `native.siteId` | Optional | String | An Index-specific identifier that is associated with this ad unit. This siteId will be prioritized over the default siteID for `native` format in the multi-format ad unit.|
+
+
-Set `params.siteId` in the bid object to the values provided
-by your IX representative.
+## Examples
-**Examples**
+**Banner**
-**Banner:**
```javascript
var adUnits = [{
code: 'banner-div-a',
@@ -176,43 +565,38 @@ var adUnits = [{
bids: [{
bidder: 'ix',
params: {
- siteId: '123456'
- }
- }, {
- bidder: 'ix',
- params: {
- siteId: '123456'
+ siteId: '9999990'
}
- }]
+ }
+ ]
}];
+
```
-**Video (Instream):**
+
+**Video (instream):**
+**Note**: `context` can either be `'instream'` or `'outstream'`.
+
```javascript
var adUnits = [{
code: 'video-div-a',
mediaTypes: {
video: {
- // Preferred location for openrtb v2.5 compatible video obj
+ // Preferred location as of version 4.43
+ video obj
context: 'instream',
playerSize: [300, 250],
- mimes: [
- 'video/mp4',
- 'video/webm'
- ],
- minduration: 0,
- maxduration: 60,
- protocols: [6]
+ api: [2],
+ protocols: [2, 3, 5, 6],
+ minduration: 5,
+ maxduration: 30,
+ mimes: ['video/mp4', 'application/javascript'],
+ placement: 3
}
},
bids: [{
bidder: 'ix',
params: {
- siteId: '12345'
- }
- }, {
- bidder: 'ix',
- params: {
- siteId: '12345',
+ siteId: '9999990',
video: {
// openrtb v2.5 compatible video obj
// If required, use this to override mediaTypes.video.XX properties
@@ -220,262 +604,140 @@ var adUnits = [{
}
}]
}];
+
```
-Please note that you can re-use the existing `siteId` within the same flex
-position.
-**Video (Outstream):**
-Note that currently, outstream video rendering must be configured by the publisher. In the adUnit, a `renderer` object must be defined, which includes a `url` pointing to the video rendering script, and a `render` function for creating the video player. See http://prebid.org/dev-docs/show-outstream-video-ads.html for more information.
+**Video (outstream)**
```javascript
var adUnits = [{
- code: 'video-div-a',
+ code: 'div-gpt-ad-1571167646410-1',
mediaTypes: {
video: {
+ playerSize: [640, 360],
context: 'outstream',
- playerSize: [300, 250],
- mimes: [
- 'video/mp4',
- 'video/webm'
- ],
- minduration: 0,
- maxduration: 60,
- protocols: [6]
- }
- },
- renderer: {
- url: 'https://test.com/my-video-player.js',
- render: function (bid) {
- ...
+ api: [2],
+ protocols: [2, 3, 5, 6],
+ minduration: 5,
+ maxduration: 30,
+ mimes: ['video/mp4', 'application/javascript'],
+ placement: 3,
+ plcmt: 4,
+ playbackmethod: 6
}
},
bids: [{
bidder: 'ix',
params: {
- siteId: '12345',
+ siteId: '9999990'
video: {
- // If required, use this to override mediaTypes.video.XX properties
+ playerConfig: {
+ floatOnScroll: true,
+ floatSize: [300,250]
+ }
}
}
}]
}];
-```
-
-#### Video Caching
-Note that the IX adapter expects a client-side Prebid Cache to be enabled for video bidding.
-
-```
-pbjs.setConfig({
- usePrebidCache: true,
- cache: {
- url: 'https://prebid.adnxs.com/pbc/v1/cache'
- }
-});
```
-#### User Sync
-Add the following code to enable user sync. IX strongly recommends enabling user syncing through iFrames. This functionality improves DSP user match rates and increases the IX bid rate and bid price. Be sure to call `pbjs.setConfig()` only once.
+**Prebid Native**
-```
-pbjs.setConfig({
- userSync: {
- iframeEnabled: true,
- filterSettings: {
- iframe: {
- bidders: ['ix'],
- filter: 'include'
+```javascript
+pbjs.addAdUnits({
+ code: slot.code,
+ mediaTypes: {
+ native: {
+ image: {
+ required: true,
+ sizes: [150, 50]
+ },
+ title: {
+ required: true,
+ len: 80
+ },
+ sponsoredBy: {
+ required: true
+ },
+ clickUrl: {
+ required: true
+ },
+ privacyLink: {
+ required: false
+ },
+ body: {
+ required: true
+ len: 90
+ },
+ icon: {
+ required: true,
+ sizes: [50, 50]
}
}
- }
-});
-```
-
-#### The **detectMissingSizes** feature
-By default, the IX bidding adapter bids on all banner sizes available in the ad unit when configured to at least one banner size. If you want the IX bidding adapter to only bid on the banner size itâs configured to, switch off this feature using `detectMissingSizes`.
-```
-pbjs.setConfig({
- ix: {
- detectMissingSizes: false
- }
-});
-```
-OR
-```
-pbjs.setBidderConfig({
- bidders: ["ix"],
- config: {
- ix: {
- detectMissingSizes: false
+ },
+ bids: [{
+ bidder: 'ix',
+ params: {
+ siteId: '9999990'
}
- }
+ }]
});
-```
-
-### 2. Include `ixBidAdapter` in your build process
-
-When running the build command, include `ixBidAdapter` as a module, as well as `dfpAdServerVideo` if you require video support.
-
-```
-gulp build --modules=ixBidAdapter,dfpAdServerVideo,fooBidAdapter,bazBidAdapter
-```
-
-If a JSON file is being used to specify the bidder modules, add `"ixBidAdapter"`
-to the top-level array in that file.
-
-```json
-[
- "ixBidAdapter",
- "dfpAdServerVideo",
- "fooBidAdapter",
- "bazBidAdapter"
-]
-```
-And then build.
-
-```
-gulp build --modules=bidderModules.json
```
-## Setting First Party Data (FPD)
-
-As a part of 4.30, IX will start to pick up FPD in the global FPD module, as well as continue to pick up IX bidder-specific FPD. Previous versions of IX Bid Adapter will only support the IX bidder-specific FPD.
-
-### Global FPD
-
-As of Prebid.js 4.30, use the more generic `ortb2` interface, which can be used for more than just First Party Data.
+**Multi-format SiteId Overrides**
-The First Party Data feature allows publishers to specify key/value data in one place where each compatible bid adapter can read it.
-
-To supply global data, use the [`setConfig()`](/dev-docs/publisher-api-reference/setConfig.html) function as illustrated below:
-
-```
-pbjs.setConfig({
- ortb2: {
- site: {
- ...
+```javascript
+var adUnits = [{
+ code: slot.code,
+ mediaTypes: {
+
+ banner: {
+ sizes: [300,250]
+ },
+ native: {
+ title: {
+ required: false
+ },
+ image: {
+ required: true
+ },
+ sponsoredBy: {
+ required: false
+ },
+ body: {
+ required: false
+ }
},
- user: {
- ...
+
+ video: {
+ playerSize: sizes,
+ context: 'outstream',
+ api:[2],
+ protocols: [2, 3, 5, 6],
+ minduration: 5,
+ maxduration: 30,
+ mimes: ['video/mp4','application/javascript']
}
- }
-});
-```
-
-Use the [`setBidderConfig()`](/dev-docs/publisher-api-reference/setBidderConfig.html) function to supply bidder-specific data.
-
-For more information about the standard or more detailed examples, refer to [First Party Data Feature](/features/firstPartyData.html).
-
-### IX bidder-specific FPD
-
-FPD allows you to specify key-value pairs that are passed as part of the
-query string to IX for use in Private Marketplace Deals which rely on query
-string targeting for activation. For example, if a user is viewing a
-news-related page, you can pass on that information by sending `category=news`.
-Then in the IX Private Marketplace setup screens, you can create Deals which
-activate only on pages that contain `category=news`. Please reach out to your
-IX representative if you have any questions or need help setting this up.
-
-To include FPD in a bid request, it must be set before `pbjs.requestBids` is
-called. To set it, call `pbjs.setConfig` and provide it with a map of FPD keys
-to values as such:
-
-```javascript
-pbjs.setConfig({
- ix: {
- firstPartyData: {
- '
': '',
- '': '',
- // ...
- }
- }
-});
-```
-
-The values can be updated at any time by calling `pbjs.setConfig` again. The
-changes will be reflected in any proceeding bid requests.
-
-{: .alert.alert-warning :}
-Continue to use IX bidder-specific First Party Data for IX deals. Global First Party Data is not yet supported in IX deals. Consult your IX representative with any questions.
-
-## Setting a Server Side Timeout
-
-Setting a server-side timeout allows you to control the max length of time taken to connect to the server. The default value when unspecified is 50ms.
-
-This is distinctly different from the global bidder timeout that can be set in
-Prebid.js in the browser.
-
-To add a server-side timeout, it must be set before `pbjs.requestBids` is
-called. To set it, call `pbjs.setConfig` and provide it with a timeout value as
-such:
-
-```javascript
-pbjs.setConfig({
- ix: {
- timeout: 50
- }
-});
-```
-
-The timeout value must be a positive whole number in milliseconds.
-
-## IX Prebid Server Adapter
-
-Publishers who would like to retrieve IX demand via a Prebid Server instance can do so by adding IX to the list of bidders for a Prebid Server bid request, with a valid site ID. For example:
-
-```javascript
-"imp": [
- {
- "id": "test2",
- "banner": {
- "format": [
- {
- "w": 300,
- "h": 600
- }
- ]
- },
- "ext": {
- "ix": {
- "siteId": "12345"
- }
- }
- }
+ },
+ bids: [
+ {
+ bidder: 'ix',
+ params: {
+ siteId: '9999990',
+ video: {
+ siteId: '9999991'
+ },
+ native: {
+ siteId: '9999992'
+ },
+ banner: {
+ siteId: '9999993'
+ }
+ }
+ },
]
-```
-
-### Important Prebid Server Note
-Any party operating their own hosted Prebid Server instances must reach out to IX (prebid.support@indexexchange.com) to receive approval and customized setup instructions. Please do not send Prebid Server requests without first contacting us -- you will not receive bid responses.
-
-## Additional Information
-
-### Bid Request Limit
-
-If a single bid request to IX contains more than 20 impression requests (i.e.
-more than 20 objects in `bidRequest.imp`), only the first 20 will be accepted,
-the rest will be ignored.
-
-To avoid this situation, ensure that when `pbjs.requestBid` is invoked, that the
-number of bid objects (i.e. `adUnits[].bids`) with `adUnits[].bids[].bidder` set
-to `'ix'` across all ad units that bids are being requested for does not exceed 20.
-
-### Time-To-Live (TTL)
-
-Banner bids from IX have a TTL of 300 seconds while video bids have a TTL of 1 hour, after which time they become invalid.
-
-If an invalid bid wins, and its associated ad is rendered, it will not count
-towards total impressions on IX's side.
-
-## FAQs
-
-#### Why do I have to input size in `adUnits[].bids[].params` for IX when the size is already in the ad unit?
-
-If you are using Prebid.js version 5.0 and above, the `size` parameter is not a required field. Only the `siteID` is required, and it is stored with the sizes in the ad unit.
-
-#### How can I view the bid request sent to IX by Prebid.js?
+}];
-In your browser of choice, create a new tab and open the developer tools. In
-developer tools, select the network tab. Then, navigate to a page where IX is
-set up to bid. Now, in the network tab, search for requests to
-`casalemedia.com/cygnus`. These are the bid requests.
+```
diff --git a/dev-docs/bidders/janet.md b/dev-docs/bidders/janet.md
new file mode 100644
index 0000000000..b2ba8ba8b6
--- /dev/null
+++ b/dev-docs/bidders/janet.md
@@ -0,0 +1,122 @@
+---
+layout: bidder
+title: JANet
+description: Prebid JANet Bidder Adapter
+biddercode: janet
+aliasCode: adtelligent
+media_types: video,banner
+gvl_id: 410 (adtelligent)
+tcfeu_supported: true
+gpp_supported: true
+userIds: britepoolId, criteo, id5Id, identityLink, liveIntentId, netId, parrableId, pubCommonId, unifiedId
+schain_supported: true
+coppa_supported: true
+usp_supported: true
+safeframes_ok: true
+prebid_member: true
+pbjs: true
+pbs: true
+sidebarType: 1
+---
+
+### Bid params
+
+{: .table .table-bordered .table-striped }
+| Name | Scope | Description | Example | Type |
+|-------|----------|---------------------------------|----------|-----------|
+| `aid` | required | The source ID from janet. | `529814` | `integer` |
+
+### Description
+
+JANet header bidding adapter connects with JANet demand sources in order to fetch bids.
+This adapter provides a solution for accessing Video demand and display demand.
+
+### Test Parameters
+
+``` javascript
+ var adUnits = [
+
+ // Video instream adUnit
+ {
+ code: 'test-div',
+ mediaTypes: {
+ video: {
+ context: 'instream',
+ playerSize: [640, 480]
+ }
+ },
+ bids: [{
+ bidder: 'janet',
+ params: {
+ aid: 472386
+ }
+ }]
+ },
+
+ // Video outstream adUnit
+ {
+ code: 'test-div',
+ mediaTypes: {
+ video: {
+ context: 'outstream',
+ playerSize: [640, 480]
+ }
+ },
+ bids: [{
+ bidder: 'janet',
+ params: {
+ aid: 472386
+ }
+ }]
+ },
+
+ // Video ADPOD adUnit
+ {
+ code: 'test-div',
+ sizes: [[640, 480]],
+ mediaTypes: {
+ video: {
+ context: 'adpod',
+ playerSize: [640, 480]
+ }
+ },
+ bids: [{
+ bidder: 'janet',
+ params: {
+ aid: 472386
+ }
+ }]
+ },
+
+ // Banner adUnit
+ {
+ code: 'test-div',
+ mediaTypes:{
+ banner:{
+ sizes: [[300, 250]]
+ }
+ }
+ bids: [{
+ bidder: 'janet',
+ params: {
+ aid: 529814
+ }
+ }]
+ }
+ ];
+```
+
+### Additional Configuration
+
+It is possible to configure requests to be split into chunks so as to have fewer bid requests in a single http request
+(default value is 10).
+
+``` javascript
+ pbjs.setBidderConfig({
+ config: {
+ janet: {
+ chunkSize: 1 // makes 1 http request per 1 adunit configured
+ }
+ }
+ });
+```
diff --git a/dev-docs/bidders/jcm.md b/dev-docs/bidders/jcm.md
deleted file mode 100644
index bb54e79087..0000000000
--- a/dev-docs/bidders/jcm.md
+++ /dev/null
@@ -1,19 +0,0 @@
----
-layout: bidder
-title: J Carter Marketing
-description: Prebid J Carter Marketing Bidder Adaptor
-pbjs: true
-biddercode: jcm
-enable_download: false
-pbjs_version_notes: not ported to 5.x
----
-
-### Bid Params
-
-{: .table .table-bordered .table-striped }
-| Name | Scope | Description | Example | Type |
-|---------------|----------|-------------|---------|----------|
-| `id` | required | | | `string` |
-| `siteId` | required | | | `string` |
-| `tier2SiteID` | optional | | | `string` |
-| `tier3SiteID` | optional | | | `string` |
diff --git a/dev-docs/bidders/jixie.md b/dev-docs/bidders/jixie.md
index e2945d6bc5..2caf7f9efd 100644
--- a/dev-docs/bidders/jixie.md
+++ b/dev-docs/bidders/jixie.md
@@ -7,12 +7,14 @@ pbs: true
biddercode: jixie
deals_supported: false
media_types: banner, video
-gdpr_supported: false
+userIds: uid2, unifiedId
+tcfeu_supported: false
+sidebarType: 1
---
### Registration
-To use this bidder you will need an account and a valid unit from us. For further information, please contact contact@jixie.io
+To use this bidder you will need an account and a valid unit from us. For further information, please contact
### Bid Params
@@ -23,4 +25,3 @@ To use this bidder you will need an account and a valid unit from us. For furthe
| `accountid` | optional | The accountid from jixie | `'12345678901234567890'` | `string` |
| `jxprop1` | optional | special property #1 | `'somethingspecial1'` | `string` |
| `jxprop2` | optional | special property #2 | `'somethingspecial2'` | `string` |
-
diff --git a/dev-docs/bidders/justpremium.md b/dev-docs/bidders/justpremium.md
index f5eebddc3c..f2bcfd7e3e 100644
--- a/dev-docs/bidders/justpremium.md
+++ b/dev-docs/bidders/justpremium.md
@@ -4,10 +4,12 @@ title: Justpremium
description: Prebid Justpremium Bidder Adaptor
pbjs: true
biddercode: justpremium
-gdpr_supported: true
+gvl_id: 62
+tcfeu_supported: true
usp_supported: true
schain_supported: true
userIds: britepoolId, criteo, id5Id, identityLink, liveIntentId, netId, parrableId, pubCommonId, unifiedId
+sidebarType: 1
---
diff --git a/dev-docs/bidders/jwplayer.md b/dev-docs/bidders/jwplayer.md
new file mode 100644
index 0000000000..ca47edf0b2
--- /dev/null
+++ b/dev-docs/bidders/jwplayer.md
@@ -0,0 +1,303 @@
+---
+layout: bidder
+title: JW Player
+description: Prebid JW Player Bidder Adapter
+biddercode: jwplayer
+gvl_id: 1046
+pbjs: true
+pbs: false
+media_types: no-display, video
+userIds: all (with commercial activation)
+tcfeu_supported: true
+dsa_supported: true
+prebid_member: true
+schain_supported: true
+coppa_supported: true
+usp_supported: true
+floors_supported: true
+fpd_supported: true
+deals_supported: true
+prebid_member: yes
+sidebarType: 1
+---
+
+
+
+## Table of contents
+
+* [Table of contents](#table-of-contents)
+* [Introduction](#introduction)
+* [Modules to include in your build process](#modules-to-include-in-your-build-process)
+* [Bid Params](#bid-request-parameters)
+ * [Required Bidder Params](#required-bidder-params)
+ * [mediaTypes.video](#mediatypes-video)
+ * [First Party Data (FPD)](#set-up-first-party-data-fpd)
+* [Examples](#examples)
+
+
+
+## Introduction
+
+The JW Player Bid Adapter allows publishers to tap into JW Player's Video Advertising Demand.
+Publishers are not required to use JW Player as a video player.
+Instream and outstream video ads are supported.
+
+
+
+## Modules to include in your build process
+
+You will need to include the `jwplayerBidAdapter` in your build. If you are building the JS binary on your own from source code, follow the instructions in [Prebid.js project README](https://github.com/prebid/Prebid.js/blob/master/README.md#build-optimization).
+We recommend including the [jwplayerVideoProvider](dev-docs/modules/jwplayerVideoProvider.md) to connect Prebid.js to your JW Player instance via the [Prebid Video Module](prebid-video/video-module.md).
+If you are not using the JW Player Video Provider, we suggest including the JW Player Real Time Data Provider [jwplayerRtdProvider](dev-docs/modules/jwplayerRtdProvider.md) in order to include JW Player's contextual ad targeting segments in your bid requests.
+
+The following is an example build command that include these modules:
+`gulp build --modules=jwplayerBidAdapter,jwplayerVideoProvider`
+or
+`gulp build --modules=jwplayerBidAdapter,jwplayerRtdProvider`
+
+If you are using a JSON file to specify modules, add `jwplayerBidAdapter`, `jwplayerVideoProvider` and `jwplayerRtdProvider` to the modules array as follows:
+
+```javascript
+[
+ "jwplayerBidAdapter",
+ "jwplayerVideoProvider"
+]
+```
+
+or
+
+```javascript
+[
+ "jwplayerBidAdapter",
+ "jwplayerRtdProvider"
+]
+```
+
+
+
+## Bid Params
+
+We support all oRTB params and encourage populating as many as possible.
+
+
+
+### Required Bidder params
+
+You must include the following parameters at the bidder level, in `adUnit.bids[index].params`.
+
+{: .table .table-bordered .table-striped }
+| Name | Scope | Type | Description |
+|---|---|---|------------------------------------------------------|
+| `siteId` | Required | String | Site-specific id that is provided by JW Player. |
+| `publisherId` | Required | String | Publisher-specific id that is provided by JW Player. |
+| `placementId` | Required | String | Placement-specific id that is provided by JW Player. |
+
+
+
+### mediaTypes.video
+
+We recommend populating as many params as possible in `adUnit.mediaTypes.video`. When using the [jwplayerVideoProvider](dev-docs/modules/jwplayerVideoProvider.md), these fields are populated automatically.
+
+{: .table .table-bordered .table-striped }
+| Name | Scope | Type | Description |
+|--------------------|-------------|---------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
+| `video.w` | Recommended | Integer | Populated automatically when using the `jwplayerVideoProvider`. The width of the video player in pixels that will be passed to demand partners. You must define the size of the video player using the `video.w` and `video.h` parameters. |
+| `video.h` | Recommended | Integer | Populated automatically when using the `jwplayerVideoProvider`. The height of the video player in pixels that will be passed to demand partners. You must define the size of the video player using the `video.w` and `video.h` parameters. |
+| `video.plcmt` | Recommended | Integer | The video's placement type, where: - `1` = Instream - `2` = Accompanying Content - `3` = Interstitial - `4` = No Content/Standalone |
+
+
+
+### First Party Data (FPD)
+
+In release 4.30 and later, publishers who are not using the [jwplayerVideoProvider](dev-docs/modules/jwplayerVideoProvider.md) or [jwplayerRtdProvider](dev-docs/modules/jwplayerRtdProvider.md) can use the ortb2 method of setting First Party Data.
+The following fields are required:
+
+{: .table .table-bordered .table-striped }
+| Name | Scope | Type | Description |
+|--------------------|-------------|---------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
+| `site.content.url` | Required | string | Populated automatically when the `jwplayerVideoProvider` or `jwplayerRtdProvider` are included. This is the URL of the media being rendered in the video player, for buy-side contextualization or review. This needs to be accessible (w/o DRM, Geo-blocking etc.) and without parameters (Such as size, quality etc.) |
+| `site.page` | Required | string | URL of the page where the impression will be shown. |
+
+To supply data that is accessible to all bidders, use the `[pbjs.setConfig()]` object as illustrated below. Use the `[setBidderConfig()]` function to supply bidder-specific data. For more information about the standard or more detailed examples, see Prebid's [First Party Data Feature](/features/firstPartyData.html) documentation.
+
+```javascript
+pbjs.setConfig({
+ ortb2: {
+ site: {
+ ...
+ },
+ user: {
+ ...
+ }
+ }
+});
+```
+
+
+
+## Examples
+
+### With the JW Player Video Provider
+
+```javascript
+const adUnit = {
+ code: 'test-ad-unit',
+ mediaTypes: {
+ video: {} // automatically populated by the Video Provider
+ },
+ video: {
+ divId: 'player', // required to indicate which player is being used to render this ad unit.
+ },
+
+ bids: [{
+ bidder: 'jwplayer',
+ params: {
+ publisherId: 'test-publisher-id',
+ siteId: 'test-site-id',
+ placementId: 'test-placement-id'
+ }
+ }]
+};
+
+var pbjs = pbjs || {};
+pbjs.que = pbjs.que || [];
+
+pbjs.que.push(function () {
+ pbjs.setConfig({
+ video: {
+ providers: [{
+ divId: 'player', // must match the divId in the adUnit
+ vendorCode: 1, // JW Player vendorCode
+ playerConfig: {
+ licenseKey: 'LICENSE_KEY_HERE',
+ params: {
+ vendorConfig: {
+ mediaid: 'XYXYXYXY',
+ file: 'http://commondatastorage.googleapis.com/gtv-videos-bucket/sample/SubaruOutbackOnStreetAndDirt.mp4',
+ title: 'Subaru Outback On Street And Dirt',
+ description: 'Smoking Tire takes the all-new Subaru Outback to the highest point we can find in hopes our customer-appreciation Balloon Launch will get some free T-shirts into the hands of our viewers.',
+ advertising: {client: 'googima'}
+ }
+ }
+ }
+ }],
+ }
+ });
+});
+
+pbjs.addAdUnits([adUnit]);
+```
+
+### With the JW Player RTD Provider
+
+```javascript
+const adUnit = {
+ code: 'test-ad-unit',
+ mediaTypes: {
+ video: {
+ pos: 0,
+ w: 640,
+ h: 480,
+ mimes : ['application/vnd.apple.mpegurl', 'video/mp4'],
+ minduration : 0,
+ maxduration: 60,
+ protocols : [2,3,7,5,6,8],
+ startdelay: 0,
+ placement: 1,
+ plcmt: 1,
+ skip: 1,
+ skipafter: 10,
+ playbackmethod: [3],
+ api: [2],
+ linearity: 1
+ }
+ },
+ bids: [{
+ bidder: 'jwplayer',
+ params: {
+ publisherId: 'test-publisher-id',
+ siteId: 'test-site-id',
+ placementId: 'test-placement-id'
+ }
+ }]
+};
+
+var pbjs = pbjs || {};
+pbjs.que = pbjs.que || [];
+
+pbjs.que.push(function() {
+ pbjs.setConfig({
+ realTimeData: {
+ dataProviders: [{
+ name: "jwplayer",
+ waitForIt: true,
+ params: {
+ mediaIDs: ['test-media-id'],
+ overrideContentUrl: 'always',
+ overrideContentId: 'always',
+ overrideContentTitle: 'always',
+ overrideContentDescription: 'always'
+ }
+ }]
+ },
+ ortb2: {
+ site: {
+ content: {
+ url: 'test.mp4' // Necessary only when bidding before the JW Player instance is instantiated.
+ }
+ }
+ }
+ });
+});
+```
+
+### Without the JW Player additional modules
+
+```javascript
+const adUnit = {
+ code: 'test-ad-unit',
+ mediaTypes: {
+ video: {
+ pos: 0,
+ w: 640,
+ h: 480,
+ mimes : ['application/vnd.apple.mpegurl', 'video/mp4'],
+ minduration : 0,
+ maxduration: 60,
+ protocols : [2,3,7,5,6,8],
+ startdelay: 0,
+ placement: 1,
+ plcmt: 1,
+ skip: 1,
+ skipafter: 10,
+ playbackmethod: [3],
+ api: [2],
+ linearity: 1
+ }
+ },
+ bids: [{
+ bidder: 'jwplayer',
+ params: {
+ publisherId: 'test-publisher-id',
+ siteId: 'test-site-id',
+ placementId: 'test-placement-id'
+ }
+ }]
+};
+
+var pbjs = pbjs || {};
+pbjs.que = pbjs.que || [];
+
+pbjs.que.push(function() {
+ pbjs.setConfig({
+ ortb2: {
+ site: {
+ content: {
+ url: 'test.mp4'
+ },
+ page: 'your-page-url'
+ }
+ }
+ });
+});
+```
diff --git a/dev-docs/bidders/kargo.md b/dev-docs/bidders/kargo.md
index 562d797b4d..9a3d684579 100644
--- a/dev-docs/bidders/kargo.md
+++ b/dev-docs/bidders/kargo.md
@@ -2,21 +2,87 @@
layout: bidder
title: Kargo
description: Prebid Kargo Bidder Adaptor
+gvl_id: 972
pbjs: true
biddercode: kargo
-media_types: banner, video
-gdpr_supported: true
+media_types: banner, video, native
+tcfeu_supported: true
userIds: unifiedId
usp_supported: true
-gvl_id: 972
+coppa_supported: false
+schain_supported: true
+dchain_supported: true
+safeframes_ok: false
+deals_supported: true
+floors_supported: true
+fpd_supported: false
+pbs: true
+pbs_app_supported: false
+prebid_member: true
+gpp_supported: true
+multiformat_supported: will-bid-on-any
+pbjs_version_notes: if you require schains, avoid versions 7.46 to 7.53
+sidebarType: 1
---
-### Note:
+### Disclosure
+
+This adapter is known to use an HTTP 1 endpoint. Header bidding often generates multiple requests to the same host and bidders are encouraged to change to HTTP 2 or above to help improve publisher page performance via multiplexing.
+
+### Note
+
Kargo is an invitation-only marketplace. Please reach out to your Kargo account manager to get setup. Also, you *must* test on a mobile device, or emulate a mobile device by manipulating the user agent string sent to the server.
+### Bidder Settings
+
+The Kargo bid adapter uses browser local storage. Since Prebid.js 7.x, the access to it must be explicitly set.
+
+```js
+// https://docs.prebid.org/dev-docs/publisher-api-reference/bidderSettings.html
+pbjs.bidderSettings = {
+ kargo: {
+ storageAllowed: true
+ }
+}
+```
+
### Bid Params
{: .table .table-bordered .table-striped }
| Name | Scope | Description | Example | Type |
|---------------|----------|-------------|---------|----------|
-| `placementId` | required | | | `string` |
+| `placementId` | required | The placementId of the ad slot. |`'_jWuc8Hks'`| `string` |
+
+### ORTB Blocking
+
+Kargo supports blocking advertisers in `badv` and categories in `bcat` parameters.
+The blocked advertisers/categories list has no length limitation, but response timeout is more likely to occur as the number of entries grow.
+Blocked advertisers list (`badv`) is an array of domains as strings.
+Blocked categories list (`bcat`) is an array of IAB categories as strings.
+
+For example:
+
+#### Globally defined ORTB Blocking
+
+```javascript
+pbjs.setConfig({
+ ortb2: {
+ badv: ["domain1.com", "domain2.com"],
+ bcat: ["IAB23-1", "IAB23-5", "IAB25-3", "IAB25-2"]
+ }
+)};
+```
+
+#### ORTB Blocking specific only to the Kargo bidder
+
+```javascript
+pbjs.setBidderConfig({
+ bidders: ['kargo'],
+ config:{
+ ortb2: {
+ badv: ["domain1.com", "domain2.com"],
+ bcat: ["IAB23-1", "IAB23-5", "IAB25-3", "IAB25-2"]
+ }
+ }
+});
+```
diff --git a/dev-docs/bidders/kidoz.md b/dev-docs/bidders/kidoz.md
index 49b4712ca6..003339a257 100644
--- a/dev-docs/bidders/kidoz.md
+++ b/dev-docs/bidders/kidoz.md
@@ -4,9 +4,10 @@ title: Kidoz
pbs: true
media_types: banner
biddercode: kidoz
-gdpr_supported: true
+tcfeu_supported: false
coppa_supported: true
pbs_app_supported: true
+sidebarType: 1
---
### Registration
@@ -14,7 +15,7 @@ pbs_app_supported: true
Kidoz is exclusively for Mobile app COPPA compatible ads, 100% kid relevant and appropriate.
In order for a company to receive bids from Kidoz, they must first open a publisher account at Kidoz.net
-(https://accounts.kidoz.net/publishers/register) and accept the Kidoz Terms and Conditions and Privacy Policy.
+() and accept the Kidoz Terms and Conditions and Privacy Policy.
Kidoz publishers must confirm that all of their content properties are COPPA and GDPR compliant and perform no monitoring
or tracking of U13 users in their operations. New publishers are provided a Publisher ID and AccessToken, this can also
be used to login to their dashboard at the Kidoz.net portal to monitor their account activity.
diff --git a/dev-docs/bidders/kimberlite.md b/dev-docs/bidders/kimberlite.md
new file mode 100644
index 0000000000..350f1192a5
--- /dev/null
+++ b/dev-docs/bidders/kimberlite.md
@@ -0,0 +1,34 @@
+---
+layout: bidder
+title: Kimberlite
+description: Prebid Kimberlite Bidder Adapter
+biddercode: kimberlite
+tcfeu_supported: false
+gvl_id: none
+usp_supported: false
+coppa_supported: false
+gpp_supported: false
+schain_supported: false
+dchain_supported: false
+media_types: banner
+safeframes_ok: false
+deals_supported: true
+floors_supported: true
+pbjs: true
+pbs: false
+prebid_member: false
+multiformat_supported: will-not-bid
+ortb_blocking_supported: partial
+sidebarType: 1
+---
+
+### Note
+
+The Kimberlite Bidding adapter requires setup. Please contact us at .
+
+### Bid Params
+
+{: .table .table-bordered .table-striped }
+| Name | Scope | Description | Example | Type |
+|---------------|----------|-----------------------|-----------|-----------|
+| `placementId` | required | Placement ID | `'123'` | `string` |
diff --git a/dev-docs/bidders/kiviads.md b/dev-docs/bidders/kiviads.md
new file mode 100644
index 0000000000..bd4c4c0550
--- /dev/null
+++ b/dev-docs/bidders/kiviads.md
@@ -0,0 +1,34 @@
+---
+layout: bidder
+title: Kivi
+description: Prebid Kivi Bidder Adapter
+biddercode: kiviads
+media_types: banner, video, native
+pbjs: true
+pbs: true
+safeframes_ok: true
+floors_supported: true
+fpd_supported: false
+multiformat_supported: will-not-bid
+ortb_blocking_supported: partial
+pbs_app_supported: true
+tcfeu_supported: false
+usp_supported: true
+coppa_supported: true
+deals_supported: false
+schain_supported: true
+dchain_supported: false
+sidebarType: 1
+---
+
+### Bid Params
+
+{: .table .table-bordered .table-striped }
+| Name | Scope | Description | Example | Type |
+|---------------|----------|-----------------------|-----------|-----------|
+| `placementId` | optional | Placement Id | `'0'` | `'string'` |
+| `endpointId` | optional | Endpoint Id | `'0'` | `'string'` |
+
+### Note
+
+For the prebid server and prebid.js you only need to use one parameter: either placementId or endpointId
diff --git a/dev-docs/bidders/kobler.md b/dev-docs/bidders/kobler.md
index 9711b385c4..626aa435cb 100644
--- a/dev-docs/bidders/kobler.md
+++ b/dev-docs/bidders/kobler.md
@@ -7,9 +7,10 @@ pbjs: true
media_types: banner
floors_supported: true
deals_supported: true
+sidebarType: 1
---
-### Note:
+### Note
The Kobler Bidder Adapter requires setup and approval from Kobler AS.
Please reach out to for more information.
@@ -19,14 +20,16 @@ Please reach out to for more information.
{: .table .table-bordered .table-striped }
| Name | Scope | Description | Example | Type |
|---------------|----------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|------------------------------|--------------------|
-| `placementId` | required | The identifier of the placement, it has to be issued by Kobler. | `'xjer0ch8'` | `string` |
-| `zip` | optional | Zip code of the user or the medium. When multiple ad units are submitted together, it is enough to set this parameter on the first one. | `'102 22'` | `string` |
-| `test` | optional | Whether the request is for testing only. When multiple ad units are submitted together, it is enough to set this parameter on the first one. Defaults to false. | `true` | `boolean` |
+| `test` | optional | Whether the request is for testing only. When multiple ad units are submitted together, it is enough to set this parameter on the first one. Enables providing a custom URL through config.pageUrl. Defaults to false. | `true` | `boolean` |
| `floorPrice` | optional | Floor price in CPM and in USD. Can be used as an alternative to the [Floors module](https://docs.prebid.org/dev-docs/modules/floors.html), which is also supported by this adapter. Defaults to 0. | `5.0` | `float` |
-| `position` | optional | The position of the ad unit. Can be used to differentiate between ad units if the same placement ID is used across multiple ad units. The first ad unit should have a position of 0, the second one should have a position of 1 and so on. Defaults to 0. | `1` | `string` |
| `dealIds` | optional | Array of deal IDs. | `['abc328745', 'mxw243253']` | `array of strings` |
+### Implicit parameters
+
+Kobler identifies the placement using the combination of the page URL and the allowed sizes. As a result, it's important that the correct sizes are provided in `banner.sizes` in order for Kobler to correctly identify the placement. The main, desired format should be the first element of this array.
+
### Example
+
```javascript
const adUnits = [{
code: 'div-gpt-ad-1460505748561-1',
@@ -36,19 +39,18 @@ Please reach out to for more information.
}
},
bids: [{
- bidder: 'kobler',
- params: {
- placementId: 'k5H7et3R0'
- }
+ bidder: 'kobler'
}]
}];
```
In order to see a sample bid from Kobler (without a proper setup), you have to also do the following:
-- Change the [`refererInfo` function](https://github.com/prebid/Prebid.js/blob/master/src/refererDetection.js) to return `'https://www.tv2.no/a/11734615'` as a [`referer`](https://github.com/prebid/Prebid.js/blob/caead3ccccc448e4cd09d074fd9f8833f56fe9b3/src/refererDetection.js#L169). This is necessary because Kobler only bids on recognized articles.
-- Change the adapter's [`BIDDER_ENDPOINT`](https://github.com/prebid/Prebid.js/blob/master/modules/koblerBidAdapter.js#L8) to `'https://bid-service.dev.essrtb.com/bid/prebid_rtb_call'`. This endpoint belongs to the development server that is set up to always return a bid for the correct `placementId` and page URL combination.
+
+- Set the `test` parameter to `true`.
+- Set `config.pageUrl` to `'https://www.tv2.no/mening-og-analyse/14555348/'`. This is necessary because Kobler only bids on recognized articles. Kobler runs its own test campaign to make sure there is always a bid for this specific page URL.
### Example With Optional Parameters
+
```javascript
const adUnits = [{
code: 'div-gpt-ad-1460505748561-1',
@@ -60,11 +62,8 @@ In order to see a sample bid from Kobler (without a proper setup), you have to a
bids: [{
bidder: 'kobler',
params: {
- placementId: 'k5H7et3R0',
- zip: '102 22',
test: true,
floorPrice: 5.0,
- position: 1,
dealIds: ['abc328745', 'mxw243253']
}
}]
diff --git a/dev-docs/bidders/komoona.md b/dev-docs/bidders/komoona.md
deleted file mode 100644
index bf5d0c0331..0000000000
--- a/dev-docs/bidders/komoona.md
+++ /dev/null
@@ -1,19 +0,0 @@
----
-layout: bidder
-title: Komoona
-description: Prebid Komoona Bidder Adaptor
-pbjs: true
-biddercode: komoona
-enable_download: false
-pbjs_version_notes: not ported to 5.x
----
-
-
-
-### Bid Params
-
-{: .table .table-bordered .table-striped }
-| Name | Scope | Description | Example | Type |
-|---------------|----------|--------------------------------|--------------------------------------|----------|
-| `hbid` | required | header-bidding id from Komoona | `'1f5b2c10e66e419580bd943b9af692ab'` | `string` |
-| `placementId` | required | placement id from Komoona | `'e69148e0ba6c4c07977dc2daae5e1577'` | `string` |
diff --git a/dev-docs/bidders/krushmedia.md b/dev-docs/bidders/krushmedia.md
index 90b4734ed9..2704296d11 100644
--- a/dev-docs/bidders/krushmedia.md
+++ b/dev-docs/bidders/krushmedia.md
@@ -9,6 +9,7 @@ media_types: banner, video, native
gdpr: true
pbjs: true
pbs: true
+sidebarType: 1
---
### Bid Params
diff --git a/dev-docs/bidders/kubient.md b/dev-docs/bidders/kubient.md
index f8f124fa63..27d232d3a2 100644
--- a/dev-docs/bidders/kubient.md
+++ b/dev-docs/bidders/kubient.md
@@ -7,15 +7,15 @@ pbs: true
schain_supported: true
biddercode: kubient
media_types: banner, video
-gdpr_supported: true
+tcfeu_supported: true
usp_supported: true
+coppa_supported: true
tcf2_supported: true
-pbjs: true
-pbs: true
gvl_id: 794
+sidebarType: 1
---
-### Note:
+### Note
The Kubient Bidder Adapter requires setup and approval before beginning. Please reach out to for more details.
@@ -76,4 +76,3 @@ var adUnits = [
| Name | Scope | Description | Example | Type |
|--------|----------|--------------------------------------------------|--------------------------|----------|
| zoneid | required | The AdUnit or Tag specific ID | `'5fbb948f1e22b'` | `string` |
-
diff --git a/dev-docs/bidders/kueez.md b/dev-docs/bidders/kueez.md
new file mode 100644
index 0000000000..075560da12
--- /dev/null
+++ b/dev-docs/bidders/kueez.md
@@ -0,0 +1,25 @@
+---
+layout: bidder
+title: Kueez
+description: Prebid Kueez Bidder Adapter
+multiformat_supported: will-bid-on-any
+pbjs: true
+biddercode: kueez
+media_types: banner, video
+schain_supported: true
+gvl_id: 1165
+tcfeu_supported: true
+usp_supported: true
+floors_supported: true
+userIds: all
+fpd_supported: true
+sidebarType: 1
+---
+
+### IMPORTANT NOTICE
+
+**TL;DR**
+The `kueez` adapter is currently "on hold" in favor of the [KueezRTB bidder](/dev-docs/bidders/kueezrtb.html).
+Please contact your Account Manager/Executive for details.
+
+Go To KueezRTB
diff --git a/dev-docs/bidders/kueezrtb.md b/dev-docs/bidders/kueezrtb.md
new file mode 100644
index 0000000000..c8bc315898
--- /dev/null
+++ b/dev-docs/bidders/kueezrtb.md
@@ -0,0 +1,71 @@
+---
+layout: bidder
+title: KueezRTB
+description: Prebid KueezRTB Bidder Adaptor
+biddercode: kueezrtb
+filename: kueezRtbBidAdapter
+userIds: britepoolId, criteo, id5Id, identityLink, liveIntentId, netId, parrableId, pubCommonId, unifiedId
+tcfeu_supported: true
+usp_supported: true
+coppa_supported: false
+schain_supported: true
+gpp_supported: true
+floors_supported: true
+media_types: banner, video
+prebid_member: false
+safeframes_ok: false
+deals_supported: false
+pbs_app_supported: false
+fpd_supported: false
+ortb_blocking_supported: false
+multiformat_supported: will-bid-on-one
+gvl_id: 1165
+pbjs: true
+sidebarType: 1
+---
+
+### Bid Params
+
+{: .table .table-bordered .table-striped }
+| Name | Scope | Description | Example | Type |
+|------------|----------|-------------------------------------------------------------------------------------------|------------------------------|----------|
+| `cId` | required | The connection ID from KueezRTB. | `'562524b21b1c1f08117fc7f9'` | `string` |
+| `pId` | required | The publisher ID from KueezRTB. | `'59ac17c192832d0011283fe3'` | `string` |
+| `bidFloor` | optional | The minimum bid value desired. KueezRTB will not respond with bids lower than this value. | `0.90` | `float` |
+
+## Example
+
+ ```javascript
+var adUnits = [{
+ code: 'banner-div',
+ mediaTypes: {
+ banner: {
+ sizes: [
+ [300, 250],
+ [728, 90]
+ ]
+ }
+ },
+ bids: [{
+ bidder: 'kueezrtb',
+ params: {
+ cId: '562524b21b1c1f08117fc7f9', // Required - PROVIDED DURING SETUP...
+ pId: '59ac17c192832d0011283fe3', // Required - PROVIDED DURING SETUP...
+ bidFloor: 1.23 // Optional
+ }
+ }]
+ }
+];
+
+// configure pbjs to enable user syncing
+pbjs.setConfig({
+ userSync: {
+ filterSettings: {
+ iframe: {
+ bidders: 'kueezrtb',
+ filter: 'include'
+ }
+ }
+ }
+});
+```
diff --git a/dev-docs/bidders/kumma.md b/dev-docs/bidders/kumma.md
index 841702782a..56340aa4d6 100644
--- a/dev-docs/bidders/kumma.md
+++ b/dev-docs/bidders/kumma.md
@@ -5,7 +5,8 @@ description: Prebid Kumma Bidder Adapter
pbjs: true
biddercode: kumma
media_types: banner, native, video
-gdpr_supported: true
+tcfeu_supported: false
+sidebarType: 1
---
### Bid Params
@@ -23,73 +24,73 @@ gdpr_supported: true
### test params
-```
- var adUnits = [{
- code: 'dfp-native-div',
- mediaType: 'native',
- mediaTypes: {
- native: {
- title: {
- required: true,
- len: 75
- },
- image: {
- required: true
- },
- body: {
- len: 200
- },
- icon: {
- required: false
- }
- }
- },
- bids: [{
- bidder: 'kumma',
- params: {
- pubId: '29521',
- siteId: '26048',
- placementId: '123',
- }
- }]
- },
- {
- code: 'dfp-banner-div',
- mediaTypes: {
- banner: {
- sizes: [
- [300, 250]
- ],
- }
- },
- bids: [{
- bidder: 'kumma',
- params: {
- pubId: '29521',
- siteId: '26049',
- placementId: '123',
- }
- }]
- },
- {
- code: 'dfp-video-div',
- sizes: [640, 480],
- mediaTypes: {
- video: {
- context: "instream"
- }
- },
- bids: [{
- bidder: 'kumma',
- params: {
- pubId: '29521',
- siteId: '26049',
- placementId: '123',
- video: {
- skippable: true,
- }
- }
- }]
- }
- ];
+```javascript
+var adUnits = [{
+ code: 'dfp-native-div',
+ mediaType: 'native',
+ mediaTypes: {
+ native: {
+ title: {
+ required: true,
+ len: 75
+ },
+ image: {
+ required: true
+ },
+ body: {
+ len: 200
+ },
+ icon: {
+ required: false
+ }
+ }
+ },
+ bids: [{
+ bidder: 'kumma',
+ params: {
+ pubId: '29521',
+ siteId: '26048',
+ placementId: '123',
+ }
+ }]
+ },
+ {
+ code: 'dfp-banner-div',
+ mediaTypes: {
+ banner: {
+ sizes: [
+ [300, 250]
+ ],
+ }
+ },
+ bids: [{
+ bidder: 'kumma',
+ params: {
+ pubId: '29521',
+ siteId: '26049',
+ placementId: '123',
+ }
+ }]
+ },
+ {
+ code: 'dfp-video-div',
+ sizes: [640, 480],
+ mediaTypes: {
+ video: {
+ context: "instream"
+ }
+ },
+ bids: [{
+ bidder: 'kumma',
+ params: {
+ pubId: '29521',
+ siteId: '26049',
+ placementId: '123',
+ video: {
+ skippable: true,
+ }
+ }
+ }]
+ }
+];
```
diff --git a/dev-docs/bidders/lasso.md b/dev-docs/bidders/lasso.md
new file mode 100644
index 0000000000..3c296a5d90
--- /dev/null
+++ b/dev-docs/bidders/lasso.md
@@ -0,0 +1,30 @@
+---
+layout: bidder
+title: Lasso
+description: Prebid Lasso Bidder Adaptor
+biddercode: lasso
+pbjs: true
+pbs: false
+media_types: banner
+tcfeu_supported: false
+gvl_id: none
+coppa_supported: true
+usp_supported: true
+safeframes_ok: false
+deals_supported: false
+floors_supported: false
+fpd_supported: false
+multiformat_supported: will-not-bid
+sidebarType: 1
+---
+
+### Note
+
+The Lasso Bidding adapter requires setup before beginning. Please contact us at
+
+### Bid Params
+
+{: .table .table-bordered .table-striped }
+| Name | Scope | Description | Example | Type |
+|-------------|----------|----------------------------------|--------------------------------------|----------|
+| `adUnitId` | required | Unique adUnitId from Lasso | `'12345'` | `string` |
diff --git a/dev-docs/bidders/lemma.md b/dev-docs/bidders/lemma.md
deleted file mode 100644
index fd3d712113..0000000000
--- a/dev-docs/bidders/lemma.md
+++ /dev/null
@@ -1,22 +0,0 @@
----
-layout: bidder
-title: LEMMA
-description: Prebid Lemma Bidder Adapter
-pbjs: true
-biddercode: lemma
-enable_download: false
-pbjs_version_notes: not ported to 5.x
----
-
-### Integration Note:
-
-Lemma bidder adapter requires setup and approval from the Lemma team. Please reach out to your account manager for more information and to start using it.
-
-### Bid params
-
-{: .table .table-bordered .table-striped }
-| Name | Scope | Description | Example | Type |
-| ------------------- | -------- | ------------------------------------- | ------------ | --------- |
-| `pubId` | required | The publisher ID from Lemma | `1001` | `integer` |
-| `adunitId` | required | Identifier for specific ad adunit | `1001` | `integer` |
-| `bidFloor` | optional | The minimum bid value | `1.07` | `float` |
diff --git a/dev-docs/bidders/lemmadigital.md b/dev-docs/bidders/lemmadigital.md
new file mode 100644
index 0000000000..9fb79336dc
--- /dev/null
+++ b/dev-docs/bidders/lemmadigital.md
@@ -0,0 +1,150 @@
+---
+layout: bidder
+title: LemmaDigital
+description: Prebid Lemmadigital Bidder Adapter
+biddercode: lemmadigital
+media_types: video,banner
+pbjs: true
+pbs: true
+schain_supported: true
+floors_supported: true
+pbs_app_supported: true
+multiformat_supported: will-bid-on-one
+safeframes_ok: true
+ortb_blocking_supported: partial
+userIds: all
+sidebarType: 1
+---
+
+### Bid params
+
+{: .table .table-bordered .table-striped }
+| Name | Scope | Description | Example | Type |
+|-------|----------|---------------------------------|----------|-----------|
+| `pid` | required (for prebid-server) | Lemmadigital publisher Id provided by your Lemma representative | `1` | `integer` |
+| `aid` | required (for prebid-server) | Lemmadigital ad unit Id provided by your Lemma representative | `3768` | `integer` |
+| `pubId` | required (for prebid.js) | Lemmadigital publisher Id provided by your Lemma representative | `1` | `integer` |
+| `adunitId` | required (for prebid.js) | Lemmadigital ad unit Id provided by your Lemma representative | `3768` | `string` |
+| `device_type` | optional (for prebid.js) | Device Type | `'2'` | `integer` |
+| `latitude` | optional (for prebid.js) | Latitude | `'40.712775'` | `string` |
+| `longitude` | optional (for prebid.js) | Longitude | `'-74.005973'` | `string` |
+| `currency` | optional (for prebid.js) | Currency | `'USD'` | `string` |
+| `bidFloor` | optional (for prebid.js) | Bid Floor | `1.00` | `integer` |
+| `category` | optional (for prebid.js) | Allowed categories | `[ 'IAB1-5', 'IAB1-6' ]` | `array of strings` |
+| `page_category` | optional (for prebid.js) | Allowed page categories | `[ 'IAB1-5', 'IAB1-6' ]` | `array of strings` |
+
+### Description
+
+Get access to multiple demand partners across lemmadigital AdExchange and maximize your yield with lemmadigital header bidding adapter.
+
+lemmadigital header bidding adapter connects with lemmadigital demand sources in order to fetch bids. This adapter provides a solution for accessing Video demand and display demand.
+
+### video parameters
+
+The Lemmadigital adapter supports video
+
+{: .table .table-bordered .table-striped }
+| Name | Scope | Description | Example |
+| :----------------------| :------- | :---------------------------------------------------------- | :------ |
+| `video.mimes` | required | Video MIME types | `['video/mp4','video/x-flv']` |
+| `video.skippable` | optional | If 'true', user can skip ad | `true` |
+| `video.minduration` | optional | Minimum ad duration in seconds | `5` |
+| `video.maxduration` | optional | Maximum ad duration in seconds | `30` |
+| `video.protocols` | optional | Supported video bid response protocols Values `1`: VAST 1.0 `2`: VAST 2.0 `3`: VAST 3.0 `4`: VAST 1.0 Wrapper `5`: VAST 2.0 Wrapper `6`: VAST 3.0 Wrapper | `[5, 6]` |
+
+### AdUnit Format for Video
+
+```javascript
+var videoAdUnits = [
+{
+ code: 'test-div-video',
+ mediaTypes: {
+ video: {
+ playerSize: [640, 480], // required
+ context: 'instream'
+ }
+ },
+ bids: [{
+ bidder: 'lemmadigital',
+ params: {
+ pubId: 1, // required
+ adunitId: '3769' // required
+ latitude: 37.3230, // optional
+ longitude: -122.0322, // optional
+ device_type: 4, // optional
+ video: {
+ mimes: ['video/mp4','video/x-flv'], // required
+ skip: 1, // optional
+ minduration: 5, // optional
+ maxduration: 30, // optional
+ protocols: [ 2, 3 ], // optional
+ }
+ },
+ }]
+}]
+```
+
+### AdUnit Format for Banner
+
+```javascript
+var bannerAdUnits = [
+{
+ code: 'test-div-banner',
+ mediaTypes: {
+ banner: {
+ sizes: [[300, 250], [300, 600]], // required
+ }
+ },
+ bids: [{
+ bidder: 'lemmadigital',
+ params: {
+ pubId: 1, // required
+ adunitId: '3769' // required
+ latitude: 37.3230, // optional
+ longitude: -122.0322, // optional
+ device_type: 2, // optional
+ },
+ }]
+}]
+```
+
+### Additional Configuration
+
+Lemmadigital recommends setting UserSync by iframe for monetization.
+
+### Prebid Server Test Request
+
+The following test request can be used to verify that Prebid Server is working properly with the lemmadigital adapter. This example includes an `imp` object with a Lemma test publisher id, and ad id.
+
+```json
+{
+ "id": "test-request-id",
+ "imp": [{
+ "id": "test-imp-id",
+ "banner": {
+ "format": [{
+ "w": 1920,
+ "h": 1080
+ }],
+ "w": 1920,
+ "h": 1080
+ },
+ "ext": {
+ "lemmadigital": {
+ "aid": 3768,
+ "pid": 1
+ }
+ },
+ "bidfloor": 0.1
+ }],
+ "device": {
+ "ua": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36"
+ },
+ "site": {
+ "id": "siteID",
+ "publisher": {
+ "id": "1"
+ }
+ }
+}
+```
diff --git a/dev-docs/bidders/lifestreet.md b/dev-docs/bidders/lifestreet.md
index dc867e2600..4b2e9109a3 100644
--- a/dev-docs/bidders/lifestreet.md
+++ b/dev-docs/bidders/lifestreet.md
@@ -6,11 +6,12 @@ pbjs: true
pbs: true
biddercode: lifestreet
media_types: video
-gdpr_supported: true
+tcfeu_supported: true
usp_supported: true
gvl_id: 67
enable_download: false
-pbjs_version_notes: not ported to 5.x
+pbjs_version_notes: not ported to 5.x, added back 7.13
+sidebarType: 1
---
diff --git a/dev-docs/bidders/liftoff.md b/dev-docs/bidders/liftoff.md
new file mode 100644
index 0000000000..c55d6febc9
--- /dev/null
+++ b/dev-docs/bidders/liftoff.md
@@ -0,0 +1,37 @@
+---
+layout: bidder
+title: liftoff
+description: Prebid liftoff Bidder Adapter
+biddercode: liftoff
+tcfeu_supported: false
+usp_supported: true
+gpp_supported: false
+coppa_supported: true
+schain_supported: true
+dchain_supported: false
+media_types: video
+safeframes_ok: false
+pbjs: false
+pbs: true
+pbs_app_supported: true
+deals_supported: true
+floors_supported: true
+fpd_supported: false
+multiformat_supported: will-bid-on-one
+ortb_blocking_supported: partial
+prebid_member: false
+sidebarType: 1
+---
+
+### Note
+
+The Liftoff Bidding adapter requires setup before beginning. Please contact us at .
+
+### Bid Params
+
+{: .table .table-bordered .table-striped }
+| Name | Scope | Description | Example | Type |
+|--------------------------|----------|-------------------------|-------------|----------|
+| bid_token | required | super token | 'aaaa123' | string |
+| app_store_id | optional | pub appstore id | '5123400' | string |
+| placement_reference_id | optional | placement reference id | '912340000' | string |
diff --git a/dev-docs/bidders/limelightDigital.md b/dev-docs/bidders/limelightDigital.md
index 9714e224f2..36590aec21 100644
--- a/dev-docs/bidders/limelightDigital.md
+++ b/dev-docs/bidders/limelightDigital.md
@@ -2,17 +2,39 @@
layout: bidder
title: Limelight Digital
description: Prebid Limelight Digital Bidder Adaptor
-pbjs: true
biddercode: limelightDigital
-media_types: video
+pbjs: true
+pbs: true
+media_types: video, banner
+userIds: all
+fpd_supported: false
+tcfeu_supported: false
+usp_supported: true
+coppa_supported: true
+schain_supported: true
+prebid_member: false
+ortb_blocking_supported: true
+multiformat_supported: will-bid-on-one
+floors_supported: false
+sidebarType: 1
---
### Bid Params
{: .table .table-bordered .table-striped }
-| Name | Scope | Description | Example |type|
-| :----------- | :--------- | :------------ | :----------------- |:---|
-| `host` | required | Ad network's RTB host | `'exchange.ortb.net'` | `string` |
-| `adUnitId` | required | Ad Unit Id will be generated on Limelight Digital Platform. | 0 | `integer` |
-| `adUnitType` | required | Type of Ad Unit (`'video'`, `'banner'`) | `'banner'` | `string` |
-| `publisherId` | optional | Publisher ID | `'12345'` | `string` |
+
+| Name | Scope | Description | Example | Type |
+|:--------------|:---------|:------------------------------------------------------------|:----------------------|:----------|
+| `host` | required | Ad network's RTB host | `'exchange.ortb.net'` | `string` |
+| `adUnitId` | required | Ad Unit Id will be generated on Limelight Digital Platform. | `42` | `integer` |
+| `adUnitType` | required | Type of Ad Unit (`'video'`, `'banner'`) | `'banner'` | `string` |
+| `publisherId` | required | Publisher ID | `'12345'` | `string` |
+| `custom1` | optional | Custom targeting field 1 | `'custom1'` | `string` |
+| `custom2` | optional | Custom targeting field 2 | `'custom2'` | `string` |
+| `custom3` | optional | Custom targeting field 3 | `'custom3'` | `string` |
+| `custom4` | optional | Custom targeting field 4 | `'custom4'` | `string` |
+| `custom5` | optional | Custom targeting field 5 | `'custom5'` | `string` |
+
+Limelight Digital server-side Prebid Server adapter requires only `publisherId` and `host` parameters. But Limelight Digital client-side Prebid.js adapter requires only `host`, `adUnitId`, `adUnitType`.
+
+Limelight Digital server-side Prebid Server adapter supports only `banner`, `video`, `audio`, `native` media types. But Limelight Digital client-side Prebid.js adapter supports only `banner` and `video` media types, doesn't support `audio` and `native`.
diff --git a/dev-docs/bidders/livewrapped.md b/dev-docs/bidders/livewrapped.md
index 2c5976efc3..f6c9c2c7c9 100644
--- a/dev-docs/bidders/livewrapped.md
+++ b/dev-docs/bidders/livewrapped.md
@@ -5,17 +5,19 @@ description: Prebid Livewrapped Bidder Adaptor
biddercode: livewrapped
pbjs: true
media_types: banner, video, native
-gdpr_supported: true
+tcfeu_supported: true
+prebid_member: true
userIds: all
schain_supported: true
gvl_id: 919
usp_supported: true
coppa_supported: true
safeframes_ok: true
-fpd_supported: true
+floors_supported: true
+sidebarType: 1
---
-### Note:
+### Note
The Livewrapped Bidder Adapter requires setup and approval from Livewrapped AB.
Please reach out to for more information.
diff --git a/dev-docs/bidders/lkqd.md b/dev-docs/bidders/lkqd.md
index 4a53c0757c..1a5979f2d0 100644
--- a/dev-docs/bidders/lkqd.md
+++ b/dev-docs/bidders/lkqd.md
@@ -3,18 +3,45 @@ layout: bidder
title: LKQD
description: Prebid LKQD Bidder Adaptor
pbjs: true
-biddercode: lkqd
-enable_download: false
-pbjs_version_notes: not ported to 5.x
+biddercode: lkqd
+media_types: video
+tcfeu_supported: false
+schain_supported: true
+enable_download : false
+sidebarType: 1
---
-### Note:
-For more information about [LKQD Ad Serving and Management](https://www.nexstardigital.com/), please contact info@lkqd.com.
+### Note
+
+For more information about [LKQD Ad Serving and Management](https://www.nexstardigital.com/), please contact .
### Bid Params
{: .table .table-bordered .table-striped }
| Name | Scope | Description | Example | Type |
|------------------|----------|------------------|----------------|------|
-| `placementId` | required | | `'263'` | `string` |
| `siteId` | required | | `'662921'` | `string` |
+| `placementId` | required | | `'263'` | `string` |
+
+### Ad Unit Setup for Instream Video
+
+```javascript
+const adUnits = [{
+ code: 'video1', // ad slot HTML element ID
+ mediaTypes: {
+ video: { // We recommend setting the following video params
+ // in Ad Unit rather than bidder params as per Prebid 4.0 recommendation.
+ playerSize: [640, 480], // required
+ context: 'instream' // required
+ }
+ },
+ bids: [{
+ bidder: 'lkqd',
+ params: {
+ siteId: '662921', // required
+ placementId: '263' // required
+ }
+ }],
+ // ...
+}];
+```
diff --git a/dev-docs/bidders/lm_kiviads.md b/dev-docs/bidders/lm_kiviads.md
new file mode 100644
index 0000000000..b5068bfebe
--- /dev/null
+++ b/dev-docs/bidders/lm_kiviads.md
@@ -0,0 +1,34 @@
+---
+layout: bidder
+title: LM KiviAds
+description: LM Kiviads Bidder Adapter
+biddercode: lm_kiviads
+media_types: banner, video
+coppa_supported: true
+tcfeu_supported: false
+usp_supported: true
+prebid_member: false
+pbjs: true
+pbs: true
+schain_supported: true
+floors_supported: true
+multiformat_supported: will-bid-on-any
+sidebarType: 1
+---
+
+### Prebid.js Bid params
+
+{: .table .table-bordered .table-striped }
+| Name | Scope | Description | Example | Type |
+|-------------|----------|-----------------------------|---------------|-----------|
+| `pid` | required | Placement ID | `test-banner` | `string` |
+| `env` | required | Environment name | `lm_kiviads` | `string` |
+| `ext` | optional | Specific integration config | `{}` | `object` |
+
+### Prebid Server Bid Params
+
+{: .table .table-bordered .table-striped }
+| Name | Scope | Description | Example | Type |
+|-------------|----------|-----------------------------|------------------------------------|-----------|
+| `env` | required | Environment name | `lm_kiviads-stage` | `string` |
+| `pid` | required | Unique placement ID | `cs230510321b516f0eb9a10e5913d3b1` | `string` |
diff --git a/dev-docs/bidders/lockerdome.md b/dev-docs/bidders/lockerdome.md
index fbbaf1a056..fcb5b14689 100644
--- a/dev-docs/bidders/lockerdome.md
+++ b/dev-docs/bidders/lockerdome.md
@@ -5,9 +5,10 @@ description: Prebid LockerDome Bidder Adapter
biddercode: lockerdome
pbjs: true
pbs: true
-gdpr_supported: true
+tcfeu_supported: false
usp_supported: true
schain_supported: true
+sidebarType: 1
---
diff --git a/dev-docs/bidders/logan.md b/dev-docs/bidders/logan.md
index 01fb0f3af2..0330cdcb11 100644
--- a/dev-docs/bidders/logan.md
+++ b/dev-docs/bidders/logan.md
@@ -6,10 +6,16 @@ biddercode: logan
usp_supported: true
schain_supported: true
media_types: banner, video, native
-gdpr: true
+tcfeu_supported: false
pbjs: true
+pbs: true
+sidebarType: 1
---
+### Disclosure
+
+Note: This bidder appears to only consider gdprApplies if a consent string is available. This may result in some incorrect GDPR processing, such as when the consent string is not yet available but the publisher has decided GDPR always applies. See
+
### Bid Params
{: .table .table-bordered .table-striped }
diff --git a/dev-docs/bidders/logicad.md b/dev-docs/bidders/logicad.md
index f0c28c3825..1c8dfe434d 100644
--- a/dev-docs/bidders/logicad.md
+++ b/dev-docs/bidders/logicad.md
@@ -9,8 +9,9 @@ biddercode: logicad
deals_supported: false
media_types: banner, native
userIds: all
-gdpr_supported: false
+tcfeu_supported: false
prebid_member: false
+sidebarType: 1
---
diff --git a/dev-docs/bidders/loglylift.md b/dev-docs/bidders/loglylift.md
index b00bfc0ead..f15ce42f93 100644
--- a/dev-docs/bidders/loglylift.md
+++ b/dev-docs/bidders/loglylift.md
@@ -3,12 +3,12 @@ layout: bidder
title: LOGLY lift
description: Prebid LOGLY lift Bidder Adaptor
biddercode: loglylift
-gdpr_supported: false
+tcfeu_supported: false
usp_supported: false
coppa_supported: false
schain_supported: false
dchain_supported: false
-media_types: no-display, native
+media_types: banner, native
safeframes_ok: false
deals_supported: false
floors_supported: false
@@ -16,6 +16,7 @@ fpd_supported: false
pbjs: true
pbs: false
prebid_member: false
+sidebarType: 1
---
diff --git a/dev-docs/bidders/loopme.md b/dev-docs/bidders/loopme.md
deleted file mode 100644
index bc261b6922..0000000000
--- a/dev-docs/bidders/loopme.md
+++ /dev/null
@@ -1,20 +0,0 @@
----
-layout: bidder
-title: LoopMe
-description: Prebid LoopMe Bidder Adaptor
-pbjs: true
-biddercode: loopme
-gdpr_supported: true
-media_types: banner, video
-enable_download: false
-pbjs_version_notes: not ported to 5.x
----
-
-### Bid params
-
-{: .table .table-bordered .table-striped }
-| Name | Scope | Description | Example | Type |
-|---------------|----------|--------------------------|--------------|----------|
-| `ak` | required | LoopMe Application Key | `'cc885e3acc'` | `string` |
-
-Test LoopMe application keys: banner - cc885e3acc, video - 223051e07f
diff --git a/dev-docs/bidders/loyal.md b/dev-docs/bidders/loyal.md
new file mode 100644
index 0000000000..cad6c831a5
--- /dev/null
+++ b/dev-docs/bidders/loyal.md
@@ -0,0 +1,33 @@
+---
+layout: bidder
+title: Loyal
+description: Prebid Loyal Bidder Adapter
+biddercode: loyal
+usp_supported: true
+tcfeu_supported: false
+coppa_supported: true
+schain_supported: true
+floors_supported: true
+media_types: banner, video, native
+multiformat_supported: will-not-bid
+pbjs: true
+pbs: true
+pbs_app_supported: true
+safeframes_ok: true
+deals_supported: false
+ortb_blocking_supported: false
+fpd_supported: false
+sidebarType: 1
+---
+
+### Bid Params
+
+{: .table .table-bordered .table-striped }
+| Name | Scope | Description | Example | Type |
+|---------------|----------|--------------|---------------------------------|------------|
+| `placementId` | optional | Placement Id | `'0'` | `'string'` |
+| `endpointId` | optional | Endpoint Id | `'0'` | `'string'` |
+
+### Note
+
+For the prebid server and prebid.js you only need to use one parameter: either placementId or endpointId
diff --git a/dev-docs/bidders/lucead.md b/dev-docs/bidders/lucead.md
new file mode 100644
index 0000000000..5d6aa90cbd
--- /dev/null
+++ b/dev-docs/bidders/lucead.md
@@ -0,0 +1,52 @@
+---
+layout: bidder
+title: Lucead
+description: Prebid Lucead Bidder Adapter
+biddercode: lucead
+tcfeu_supported: false
+gvl_id: none
+usp_supported: false
+coppa_supported: false
+schain_supported: false
+dchain_supported: false
+media_types: banner
+safeframes_ok: true
+deals_supported: true
+floors_supported: true
+fpd_supported: true
+pbjs: true
+pbs: false
+prebid_member: true/false
+ortb_blocking_supported: false
+privacy_sandbox: paapi
+sidebarType: 1
+---
+### Note
+
+The Lucead Bidding adapter requires setup before beginning. Please contact us at [prebid@lucead.com](mailto:prebid@lucead.com).
+
+### Bid Params
+
+{: .table .table-bordered .table-striped }
+| Name | Scope | Description | Example | Type |
+|---------------|----------|-----------------------|-----------|-----------|
+| `placementId` | required | Placement id | `'11111'` | `string` |
+
+### Test Parameters
+
+```javascript
+const adUnits = [
+ {
+ code: 'test-div',
+ sizes: [[300, 250]],
+ bids: [
+ {
+ bidder: 'lucead',
+ params: {
+ placementId: '1',
+ }
+ }
+ ]
+ }
+ ];
+```
diff --git a/dev-docs/bidders/lunamedia.md b/dev-docs/bidders/lunamedia.md
index 00f9dc31c3..c3a9dad11f 100644
--- a/dev-docs/bidders/lunamedia.md
+++ b/dev-docs/bidders/lunamedia.md
@@ -1,25 +1,25 @@
---
layout: bidder
-title: Luna Media
-description: Prebid Luna Media Bidder Adapter
-pbjs: true
-pbs: true
+title: Lunamedia
+description: Lunamedia Bidder Adapter
biddercode: lunamedia
-enable_download: false
-pbjs_version_notes: not ported to 5.x
+media_types: banner, video
+coppa_supported: true
+tcfeu_supported: false
+usp_supported: true
+prebid_member: false
+pbjs: false
+pbs: true
+schain_supported: true
+floors_supported: true
+multiformat_supported: will-bid-on-any
+sidebarType: 1
---
-### Note:
-For more information about Luna Media, please contact info@lunamedia.io
-
-### Bid Params
+### Prebid Server Bid Params
{: .table .table-bordered .table-striped }
-| Name | Scope | Description | Example | Type |
-|------------------|----------|------------------|------------------------------------------|-------------------|
-| `placement ` | required | | `'263'` | `string` |
-| `pubid` | required | | `'0cf8d6d643e13d86a5b6374148a4afac'` | `string` |
-| `mimes` | optional | video only | `['video/mp4', 'application/javascript']`| `array of strings`|
-| `playbackmethod` | optional | video only | `[2,6]` | `array of numbers`|
-| `maxduration` | optional | video only | `30` | `number` |
-| `skip` | optional | video only | `0 or 1` | `number` |
+| Name | Scope | Description | Example | Type |
+|-------------|----------|---------------------------------------------|------------------------------------|-----------|
+| `pubid` | required | An id used to identify LunaMedia publisher. | `'d2b5502f83b65719d29ed4fa86e411ea'` | `string` |
+| `placement` | optional | A placement created on adserver. | `'cs230510321b516f0eb9a10e5913d3b1'` | `string` |
diff --git a/dev-docs/bidders/lunamediahb.md b/dev-docs/bidders/lunamediahb.md
index 4fd4d09d09..ef6e95dd71 100644
--- a/dev-docs/bidders/lunamediahb.md
+++ b/dev-docs/bidders/lunamediahb.md
@@ -5,11 +5,13 @@ description: Prebid Lunamedia Bidder Adapter
biddercode: lunamediahb
usp_supported: true
schain_supported: true
-gdpr_supported: true
+gvl_id: 998
+tcfeu_supported: true
coppa_supported: true
media_types: banner, video, native
pbjs: true
pbs: false
+sidebarType: 1
---
### Prebid.Server Bid Params
diff --git a/dev-docs/bidders/luponmedia.md b/dev-docs/bidders/luponmedia.md
index 598bc5d82e..a9821d6e76 100644
--- a/dev-docs/bidders/luponmedia.md
+++ b/dev-docs/bidders/luponmedia.md
@@ -4,15 +4,17 @@ title: LuponMedia
description: LuponMedia Bidder Adapter
pbjs: true
biddercode: luponmedia
-gdpr_supported: true
+gvl_id: 1132
+tcfeu_supported: true
usp_supported: true
coppa_supported: true
schain_supported: true
userIds: digitrust, identityLink, liveIntentId, pubCommonId
-pbjs_version_notes: not in 5.x, in 6.2+
+sidebarType: 1
---
-### Note:
+### Note
+
The LuponMedia bidder adapter requires setup and approval from the LuponMedia support team, even for existing LuponMedia publishers. Please contact us for more information.
### Bid Params
diff --git a/dev-docs/bidders/mabidder.md b/dev-docs/bidders/mabidder.md
new file mode 100644
index 0000000000..cad1645a45
--- /dev/null
+++ b/dev-docs/bidders/mabidder.md
@@ -0,0 +1,18 @@
+---
+layout: bidder
+title: mabidder
+description: Media Aisle Prebid Bidder Adaptor
+biddercode: mabidder
+pbjs: true
+pbs: true
+media_types: banner
+tcfeu_supported: false
+sidebarType: 1
+---
+
+### Bid Params
+
+{: .table .table-bordered .table-striped }
+| Name | Scope | Description | Example | Type |
+|---------------|----------|---------------------------------|------------|----------|
+| `ppid` | required | Mabidder publisher placement ID | "1234" | `string` |
diff --git a/dev-docs/bidders/madvertise.md b/dev-docs/bidders/madvertise.md
index 3f58b6578b..1a01bf3d91 100644
--- a/dev-docs/bidders/madvertise.md
+++ b/dev-docs/bidders/madvertise.md
@@ -4,12 +4,13 @@ title: Madvertise
description: Prebid Madvertise Bidder Adapter
pbjs: true
biddercode: madvertise
-gdpr_supported: true
+tcfeu_supported: true
gvl_id: 153
media_types: banner, video
safeframes_ok: true
pbs: true
pbs_app_supported: true
+sidebarType: 1
---
### Prebid.js Bid Params
@@ -37,6 +38,7 @@ pbs_app_supported: true
}
}
```
+
### Prebid Server Bid Params
{: .table .table-bordered .table-striped }
@@ -44,7 +46,6 @@ pbs_app_supported: true
|--------------|----------|---------------------------------------------------------------------------------------------------------|-----------------------------------------|-----------|
|`zoneId` | required | The zone ID provided by Madvertise. | `'/1111111/banner'` | `string` |
-
#### Example
```
@@ -79,4 +80,3 @@ pbs_app_supported: true
"tmax": 1000
}
```
-
diff --git a/dev-docs/bidders/malltv.md b/dev-docs/bidders/malltv.md
index 94298cb08a..1ac0097d51 100644
--- a/dev-docs/bidders/malltv.md
+++ b/dev-docs/bidders/malltv.md
@@ -5,6 +5,7 @@ description: Prebid MallTv Bidder Adaptor
pbjs: true
biddercode: malltv
media_types: banner, video
+sidebarType: 1
---
diff --git a/dev-docs/bidders/mantis.md b/dev-docs/bidders/mantis.md
index ba004f27b6..f8b52850b4 100644
--- a/dev-docs/bidders/mantis.md
+++ b/dev-docs/bidders/mantis.md
@@ -6,7 +6,8 @@ pbjs: true
biddercode: mantis
media_types: native, video
usp_supported: true
-gdpr_supported: true
+tcfeu_supported: false
+sidebarType: 1
---
### Bid Params
diff --git a/dev-docs/bidders/marsmedia.md b/dev-docs/bidders/marsmedia.md
index 8281cb732f..0326fb435f 100644
--- a/dev-docs/bidders/marsmedia.md
+++ b/dev-docs/bidders/marsmedia.md
@@ -6,12 +6,13 @@ pbjs: true
pbs: true
biddercode: marsmedia
media_types: video, banner
-gdpr_supported: true
+tcfeu_supported: true
floors_supported: true
schain_supported: true
usp_supported: true
coppa_supported: true
gvl_id: 776
+sidebarType: 1
---
### Bid Params
@@ -21,8 +22,8 @@ gvl_id: 776
|---------------|----------|-------------|---------|----------|
| zoneId | required | The zone ID from Mars Media Group. | 9999 | integer |
-
### Banner - Ad Unit Setup
+
```javascript
var adUnits = [
{
@@ -41,9 +42,10 @@ var adUnits = [
}
}]
}
-```
+```
### Instream Video - Ad Unit Setup
+
```javascript
var adUnits = [
{
diff --git a/dev-docs/bidders/mathildeads.md b/dev-docs/bidders/mathildeads.md
index c7dbe99b03..07ae040f96 100644
--- a/dev-docs/bidders/mathildeads.md
+++ b/dev-docs/bidders/mathildeads.md
@@ -6,12 +6,17 @@ biddercode: mathildeads
usp_supported: true
schain_supported: true
media_types: banner, video, native
-gdpr_supported: true
+tcfeu_supported: false
pbjs: true
pbs: false
pbs_app_supported: false
+sidebarType: 1
---
+### Disclosure
+
+Note: This bidder appears to only consider gdprApplies if a consent string is available. This may result in some incorrect TCF2 processing, such as when the consent string is not yet available but the publisher has decided GDPR always applies. See
+
### Prebid.JS Bid Params
{: .table .table-bordered .table-striped }
diff --git a/dev-docs/bidders/matomy.md b/dev-docs/bidders/matomy.md
index 33cd2b8da7..bf160281c7 100644
--- a/dev-docs/bidders/matomy.md
+++ b/dev-docs/bidders/matomy.md
@@ -5,6 +5,7 @@ description: Prebid Matomy Bidder Adaptor
pbjs: true
biddercode: matomy
aliasCode : appnexus
+sidebarType: 1
---
### Bid Params
diff --git a/dev-docs/bidders/meazy.md b/dev-docs/bidders/meazy.md
deleted file mode 100644
index 380816144d..0000000000
--- a/dev-docs/bidders/meazy.md
+++ /dev/null
@@ -1,19 +0,0 @@
----
-layout: bidder
-title: Meazy
-description: Prebid Meazy Bidder Adaptor
-pbjs: true
-biddercode: meazy
-enable_download: false
-pbjs_version_notes: not ported to 5.x
----
-
-### Bid params
-
-### Note
-To enable Meazy bid adaptor we kindly ask you to sign up as a Publisher: team@meazy.co
-
-{: .table .table-bordered .table-striped }
-| Name | Scope | Description | Example | Type |
-|------|----------|---------------------|------------------------------------------|----------|
-| pid | required | Meazy Publisher ID | `'6910b7344ae566a1'` | `string` |
diff --git a/dev-docs/bidders/mediabrama.md b/dev-docs/bidders/mediabrama.md
new file mode 100644
index 0000000000..5bc734ef79
--- /dev/null
+++ b/dev-docs/bidders/mediabrama.md
@@ -0,0 +1,56 @@
+---
+layout: bidder
+title: MediaBrama
+description: Prebid MediaBrama Bidder Adapter.
+pbjs: true
+pbs: false
+gvl_id: none
+biddercode: mediabrama
+media_types: banner
+gdpr_supported: false
+usp_supported: false
+coppa_supported: false
+schain_supported: false
+safeframes_ok: false
+dchain_supported: false
+deals_supported: false
+floors_supported: true
+fpd_supported: false
+ortb_blocking_supported: false
+multiformat_supported: will-bid-on-one
+prebid_member: false
+---
+
+### Description
+
+MediaBrama header bidding adapter connects with mediabrama demand sources to fetch bids for display placements. Please reach out to your account manager or for more information.
+
+### Bid params
+
+{: .table .table-bordered .table-striped }
+| Name | Scope | Description | Example | Type |
+|--------------|----------|------------------------------------|------------|----------|
+| `placementId`| optional | The placement ID from MediaBrama | `'24428'` | `string` |
+| `bidFloor` | optional | Lowest value of expected bid price | `1.1` | `float` |
+
+### Test Parameters
+
+300x250 banner test
+
+```javascript
+var adUnits = [{
+ code: 'prebid-place',
+ mediaTypes: {
+ banner: {
+ sizes: [[300, 250]]
+ }
+ },
+ // Replace this object to test a new Adapter!
+ bids: [{
+ bidder: 'mediabrama',
+ params : {
+ placementId : "24428" //test, please replace after test
+ }
+ }]
+}];
+```
diff --git a/dev-docs/bidders/mediaforce.md b/dev-docs/bidders/mediaforce.md
index 7632e66665..3d1c154804 100644
--- a/dev-docs/bidders/mediaforce.md
+++ b/dev-docs/bidders/mediaforce.md
@@ -5,7 +5,8 @@ description: MediaForce Prebid Bidder Adapter
media_types: banner, native
biddercode: mediaforce
pbjs: true
-gdpr_supported: false
+tcfeu_supported: false
+sidebarType: 1
---
### Bid params
diff --git a/dev-docs/bidders/mediafuse.md b/dev-docs/bidders/mediafuse.md
new file mode 100644
index 0000000000..5669a23564
--- /dev/null
+++ b/dev-docs/bidders/mediafuse.md
@@ -0,0 +1,161 @@
+---
+layout: bidder
+title: MediaFuse
+description: Prebid MediaFuse Bidder Adapter
+biddercode: mediafuse
+media_types: video,banner
+tcfeu_supported: false
+schain_supported: true
+coppa_supported: true
+usp_supported: true
+safeframes_ok: true
+prebid_member: true
+pbjs: true
+pbs: true
+sidebarType: 1
+---
+
+### Prebid Server Note
+
+{% include dev-docs/pbjs-adapter-required-for-pbs.md %}
+
+#### Prebid Server Test Request
+
+The following test parameters can be used to verify that Prebid Server is working properly with the server-side Mediafuse adapter. This example includes an Mediafuse test placement ID and sizes that would match with the test creative.
+
+```javascript
+var adUnits = [
+ // Banner adUnit
+ {
+ code: 'banner-div',
+ mediaTypes: {
+ banner: {
+ sizes: [[300, 250], [300,600]]
+ }
+ },
+ bids: [{
+ bidder: 'mediafuse',
+ params: {
+ placementId: 13144370
+ }
+ }]
+ },
+ // Native adUnit
+ {
+ code: 'native-div',
+ sizes: [[1, 1]],
+ mediaTypes: {
+ native: {
+ title: {
+ required: true
+ },
+ body: {
+ required: true
+ },
+ image: {
+ required: true
+ },
+ sponsoredBy: {
+ required: true
+ },
+ icon: {
+ required: false
+ }
+ }
+ },
+ bids: [{
+ bidder: 'mediafuse',
+ params: {
+ placementId: 13232354,
+ allowSmallerSizes: true
+ }
+ }]
+ },
+ // Video instream adUnit
+ {
+ code: 'video-instream',
+ sizes: [[640, 480]],
+ mediaTypes: {
+ video: {
+ playerSize: [[640, 480]],
+ context: 'instream'
+ },
+ },
+ bids: [{
+ bidder: 'mediafuse',
+ params: {
+ placementId: 13232361,
+ video: {
+ skippable: true,
+ playback_methods: ['auto_play_sound_off']
+ }
+ }
+ }]
+ },
+ // Video outstream adUnit
+ {
+ code: 'video-outstream',
+ sizes: [[300, 250]],
+ mediaTypes: {
+ video: {
+ playerSize: [[300, 250]],
+ context: 'outstream',
+ // Certain ORTB 2.5 video values can be read from the mediatypes object; below are examples of supported params.
+ // To note - mediafuse supports additional values for our system that are not part of the ORTB spec. If you want
+ // to use these values, they will have to be declared in the bids[].params.video object instead using the mediafuse syntax.
+ // Between the corresponding values of the mediaTypes.video and params.video objects, the properties in params.video will
+ // take precedence if declared; eg in the example below, the `skippable: true` setting will be used instead of the `skip: 0`.
+ minduration: 1,
+ maxduration: 60,
+ skip: 0, // 1 - true, 0 - false
+ skipafter: 5,
+ playbackmethod: [2], // note - we only support options 1-4 at this time
+ api: [1,2,3] // note - option 6 is not supported at this time
+ }
+ },
+ bids: [
+ {
+ bidder: 'mediafuse',
+ params: {
+ placementId: 13232385,
+ video: {
+ skippable: true,
+ playback_method: 'auto_play_sound_off'
+ }
+ }
+ }
+ ]
+ },
+ // Banner adUnit in a App Webview
+ // Only use this for situations where prebid.js is in a webview of an App
+ // See Prebid Mobile for displaying ads via an SDK
+ {
+ code: 'banner-div',
+ mediaTypes: {
+ banner: {
+ sizes: [[300, 250], [300,600]]
+ }
+ }
+ bids: [{
+ bidder: 'mediafuse',
+ params: {
+ placementId: 13144370,
+ app: {
+ id: "B1O2W3M4AN.com.prebid.webview",
+ geo: {
+ lat: 40.0964439,
+ lng: -75.3009142
+ },
+ device_id: {
+ idfa: "4D12078D-3246-4DA4-AD5E-7610481E7AE", // Apple advertising identifier
+ aaid: "38400000-8cf0-11bd-b23e-10b96e40000d", // Android advertising identifier
+ md5udid: "5756ae9022b2ea1e47d84fead75220c8", // MD5 hash of the ANDROID_ID
+ sha1udid: "4DFAA92388699AC6539885AEF1719293879985BF", // SHA1 hash of the ANDROID_ID
+ windowsadid: "750c6be243f1c4b5c9912b95a5742fc5" // Windows advertising identifier
+ }
+ }
+ }
+ }]
+ }
+];
+```
diff --git a/dev-docs/bidders/mediago.md b/dev-docs/bidders/mediago.md
index 670231f398..4b5f4fcd94 100644
--- a/dev-docs/bidders/mediago.md
+++ b/dev-docs/bidders/mediago.md
@@ -4,11 +4,20 @@ title: MediaGo
description: MediaGo Prebid Bidder Adapter
biddercode: mediago
media_types: banner
+tcfeu_supported: true
+coppa_supported: true
+usp_supported: true
pbjs: true
-enable_download: false
-pbjs_version_notes: not ported to 5.x
+floors_supported: true
+gvl_id: 1020
+pbjs_version_notes: not ported to 5.x, added back 7.13
+sidebarType: 1
---
-### Note:
+### Modules
+
+SharedID: We need you to include SharedID module,which is used to get prebid user commonid.It can better differentiating users to bid on ads.
+
+### Note
The MediaGo Bidding adapter requires setup before beginning. Please contact us at
@@ -18,3 +27,6 @@ The MediaGo Bidding adapter requires setup before beginning. Please contact us a
| Name | Scope | Description | Example | Type |
|---------------|----------|-----------------------|-----------|-----------|
| `token` | required | publisher token | `'1e100887dd614b7f69fdd1360437'` | `string` |
+| `test` | recommend | 0(default): production env mode. 1: dev env mode and no charge.we will bid Higher frequency to make debug easier. | `1/0` | `Number` |
+| `bidfloor` | recommend | Sets a floor price for the bid | `0.05` | `float` |
+| `placementId` | recommend | The AD placement ID | `12341234` | `string` |
diff --git a/dev-docs/bidders/mediaimpact.md b/dev-docs/bidders/mediaimpact.md
new file mode 100644
index 0000000000..9893b22311
--- /dev/null
+++ b/dev-docs/bidders/mediaimpact.md
@@ -0,0 +1,39 @@
+---
+layout: bidder
+title: MEDIAIMPACT
+description: Prebid MEDIAIMPACT Bidder Adapter
+pbjs: true
+biddercode: mediaimpact
+media_types: banner
+sidebarType: 1
+tcfeu_supported: false
+dsa_supported: false
+gvl_id: none
+usp_supported: false
+coppa_supported: false
+gpp_sids: None
+schain_supported: false
+dchain_supported: false
+userId: ()
+safeframes_ok: false
+deals_supported: false
+floors_supported: false
+fpd_supported: false
+pbs: false
+prebid_member: false
+multiformat_supported: will-bid-on-one
+ortb_blocking_supported: false
+privacy_sandbox: no
+---
+
+### Note
+
+The MEDIAIMPACT Bidding adapter requires setup before beginning. Please contact us at [info@mediaimpact.com.ua](mailto:info@mediaimpact.com.ua).
+
+### Bid Params
+
+{: .table .table-bordered .table-striped }
+| Name | Scope | Description | Example | Type |
+|-------------|----------|-------------|----------------------|-----------|
+| `partnerId` | required | Partner ID. | `6698` | `integer` |
+| `sizes` | optional | Custom size | `[[300,600]]` | `array` |
diff --git a/dev-docs/bidders/mediakeys.md b/dev-docs/bidders/mediakeys.md
index 0a58f06277..45efb078da 100644
--- a/dev-docs/bidders/mediakeys.md
+++ b/dev-docs/bidders/mediakeys.md
@@ -7,13 +7,14 @@ media_types: banner, video, native
gvl_id: 498
pbjs: true
floors_supported: true
-gdpr_supported: true
+tcfeu_supported: true
schain_supported: true
coppa_supported: true
usp_supported: true
safeframes_ok: true
userIds: all
fpd_supported: true
+sidebarType: 1
---
@@ -22,6 +23,8 @@ fpd_supported: true
- [Table of Contents](#table-of-contents)
- [Important Notice](#important-notice)
- [Bid Params](#bid-params)
+ - [First Party Data](#first-party-data)
+ - [Required and Recommended Modules](#required-and-recommended-modules)
- [MediaType Banner](#mediatype-banner)
- [MediaType Video](#mediatype-video)
- [Instream video](#instream-video)
@@ -34,7 +37,7 @@ fpd_supported: true
The Mediakeys Bidding adapter requires setup before beginning and will respond with bids for whitelisted domains only.
-Please contact us at prebidjs@mediakeys.com.
+Please contact us at .
@@ -45,7 +48,134 @@ Please contact us at prebidjs@mediakeys.com.
|-------------|---------------------|------------------------------|-----------|-----------|
| `context` | required for native | Native context | `1` | `integer` |
| `plcmttype` | required for native | Native placement type | `2` | `integer` |
-| | | | | |
+
+
+
+#### First Party Data
+
+Publishers should use the `ortb2` method of setting [First Party Data](https://docs.prebid.org/features/firstPartyData.html).
+
+Global site or user data using `setConfig()`, or Bidder-specific using `setBidderConfig()` supports following fields:
+
+- `ortb2.site.*`: Standard IAB OpenRTB 2.5 site fields
+- `ortb2.site.content.data[]`: Standard IAB segment taxonomy site data
+- `ortb2.site.ext.data.*`: Non standard arbitrary site data
+- `ortb2.user.*`: Standard IAB OpenRTB 2.5 user fields
+- `ortb2.user.data[]`: Standard IAB segment taxonomy user data
+- `ortb2.user.ext.data.*`: Non standard arbitrary user data
+
+Please note that field `ortb2.app.*`, in a webview context, is **not supported**.
+
+AdUnit-specific data using `AdUnit.ortb2Imp` supports following fields:
+
+- `ortb2.imp[].ext.data.*`
+
+Example first party data that's available to all bidders and all adunits:
+
+```javascript
+pbjs.setConfig({
+ ortb2: {
+ site: {
+ // standard IAB OpenRTB 2.5 site fields are passed in `ortb2.site.*`
+ name: "example",
+ cat: ["IAB2"],
+ domain: "page.example.com",
+
+ // standard IAB segment taxonomy site data is passed in `ortb2.site.content.data[]`
+ content: {
+ userrating: "4",
+ data: [{ name: "www.sitedataprovider1.com" }]
+ },
+
+ // any non standard arbitrary site data is passed in `ortb2.site.ext.data.*`
+ ext: { data: { arbitrarySiteKey: "arbitrary" } }
+ },
+ user: {
+ // standard IAB OpenRTB 2.5 user fields are passed in `ortb2.user.*`
+ keywords: "a,b",
+ geo: { country: "FRA", lat: 48.9, lon: 2.2 },
+
+ // standard IAB segment taxonomy user data are passed in `ortb2.user.data[]`
+ data: [{ name: "www.userdataprovider1.com" }],
+
+ // any non standard arbitrary user data is passed in `ortb2.user.ext.data.*`
+ ext: { data: { arbitraryUserKey: "arbitrary" } }
+ }
+ }
+});
+```
+
+Example of first party data available only to the Mediakeys bidder and applies across all ad units:
+
+```javascript
+pbjs.setBidderConfig({
+ bidders: ['mediakeys'],
+ config: {
+ ortb2: {
+ site: {
+ ext: {
+ data: {
+ pageType: "article",
+ category: "tools"
+ }
+ }
+ },
+ user: {
+ ext: {
+ data: {
+ registered: true,
+ interests: ["cars"]
+ }
+ }
+ }
+ }
+ }
+});
+```
+
+Example of an adunit-specific with first party data:
+
+```javascript
+var adUnit = {
+ // applies to all bidders
+ ortb2Imp: {
+ instl:1
+ },
+ bids: [{
+ bidder: 'mediakeys',
+ params: {},
+ // applies to mediakeys bidder only
+ ortb2Imp: {
+ ext: {
+ data: {
+ pbadslot: "homepage-top-rect",
+ adUnitSpecificAttribute: "123"
+ }
+ }
+ }
+ }]
+};
+```
+
+
+
+#### Required and Recommended Modules
+
+Mediakeys fully supports the following [Prebid.js Modules](https://docs.prebid.org/dev-docs/modules/):
+
+{: .table .table-bordered .table-striped }
+| Module | Scope |
+|-------------------------------------------------------------------------------------------------------|-----------------------------|
+| [Consent Management - GDPR](https://docs.prebid.org/dev-docs/modules/consentManagement.html) | Required in Europe |
+| [Consent Management - US Privacy](https://docs.prebid.org/dev-docs/modules/consentManagementUsp.html) | Required in US - California |
+| [Supply Chain Object](https://docs.prebid.org/dev-docs/modules/schain.html) | Required for all traffic |
+| [Instream Tracking](https://docs.prebid.org/dev-docs/modules/instreamTracking.html) | Required for Instream Video |
+| [First Party Data Enrichment](https://docs.prebid.org/dev-docs/modules/enrichmentFpdModule.html) | Recommended for all traffic |
+
+Publishers must utilize the required modules in described scope to be able to receive bid responses.
+
+Before using [Supply Chain Object](https://docs.prebid.org/dev-docs/modules/schain.html) Module, please confirm with the Mediakeys team
+the proper `asi` and `sid` field values that you should pass.
@@ -89,7 +219,6 @@ Please refer to the following table to find acceptable values for mediakeys bidd
| protocols | recommended | Array of supported video protocols: 2: VAST 2.0 3: VAST 3.0 | [2,3] default: [3] | array<integers>|
| maxduration | recommended | Maximum video ad duration in seconds. | 30 default: not set | integer |
| skip | recommended | Indicates if the player will allow the video to be skipped, where 0 = no, 1 = yes. | 1 default: 0 | integer |
-| | | | | |
(*) Mediakeys bidder will adapt the bid response to send the video format closest to the `playerSize` (from an aspect ratio point of view). To maximize the responses, please consider requesting formats like:
@@ -97,7 +226,7 @@ Please refer to the following table to find acceptable values for mediakeys bidd
- medium video: `640x360` (low bandwidth, medium quality)
- standard video: `640Ă480` (medium bandwidth, good quality)
- full wide video: `854Ă480` (high bandwidth, superior quality)
-- HD video: `1280x720` (miximum bandwidth, best quality)
+- HD video: `1280x720` (maximum bandwidth, best quality)
@@ -180,7 +309,7 @@ const adUnits = [{
Required Prebid configuration:
-You must set up your preferred outstream renderer in the ad unit and use the following example code to fetch the
+You must set up your preferred outstream renderer in the ad unit and use the following example code to fetch the
`vast xml` document from mediakeys ad-server.
Example Ad Unit:
diff --git a/dev-docs/bidders/medianet.md b/dev-docs/bidders/medianet.md
index e11e1867c5..81b317b744 100644
--- a/dev-docs/bidders/medianet.md
+++ b/dev-docs/bidders/medianet.md
@@ -3,17 +3,19 @@ layout: bidder
title: Media.net
description: Prebid Media.net Bidder Adaptor
biddercode: medianet
-gdpr_supported: true
+tcfeu_supported: true
media_types: banner,native,video
usp_supported: true
+coppa_supported: true
+gpp_supported: true
userIds: britepoolId, criteo, id5Id, identityLink, liveIntentId, netId, parrableId, pubCommonId, unifiedId
prebid_member: true
pbjs: true
gvl_id: 142
schain_supported: true
floors_supported: true
-fpd_supported: true
pbs: true
+sidebarType: 1
---
### Bid Params
@@ -26,7 +28,7 @@ pbs: true
| `bidfloor` | optional | Bidfloor for the impression | `1.0` | `float` |
| `video` | required for video Ad units | Object containing video targeting parameters. See [Video Object](#media.net-video-object) for details.|`video: { maxduration: 60 }` | `object` |
-
+
#### Video Object
@@ -37,20 +39,21 @@ pbs: true
|minduration|integer|(Recommended) Specifies the minimum video ad duration, in seconds.|10|
|maxduration|integer|(Recommended) Specifies the maximum video ad duration, in seconds.|60|
|w|integer|(Recommended) Specifies the width of the video player, in pixels. Required if playerSize not present in `mediaTypes.video`|640|
-|h|integer|(Recommended) Specifies the height of the video player, in pixels. Required if playerSize not present in `mediaTypes.video`|480|
-|startdelay |integer | (Recommended) Specifies the start delay of the video ad|0|
-|battr| array of integers|Specifies the video creative attributes to block. Refer to section 5.3 of the IAB specification for a list of attributes.| [ 13, 14 ]|
-playbackmethod| array of integers| Specifies the allowed playback methods. If not specified, all are assumed to be allowed. Currently supported values are: `1: Autoplay, sound on`; `2: Autoplay, sound off`; `3: Click to play`; `4: Mouse over to play`|[1, 3]|
-|api| array of integers| Specifies the supported API frameworks for this impression. If an API is not explicitly listed, it is assumed not to be supported. Currently supported values are: `1: VPAID 1.0`; `2: VPAID 2.0`; `3: MRAID-1`; `4: ORMMA`; `5: MRAID-2`|[1, 2]|
-|protocols |array of integers| Array of supported video protocols. Currently supported values are: `1: VAST 1.0`; `2: VAST 2.0`; `3: VAST 3.0`; `4: VAST 1.0 Wrapper`; `5: VAST 2.0 Wrapper`; `6: VAST 3.0 Wrapper`; `7: VAST 4.0`|[1, 2]|
-|placement |integer|Placement type for the impression. Possible options: `1: In-Stream`; `2: In-banner`; `3: Outstream/In-article`; `4: In-feed`; `5: Interstitial/Slider/Floating`; `6: Long-Form`;|1|
+|h|integer|(Recommended) Specifies the height of the video player, in pixels. Required if playerSize not present in `mediaTypes.video`|480|
+|startdelay|integer |(Recommended) Specifies the start delay of the video ad|0|
+|battr|array of integers|Specifies the video creative attributes to block. Refer to section 5.3 of the IAB specification for a list of attributes.| [ 13, 14 ]|
+playbackmethod|array of integers|Specifies the allowed playback methods. If not specified, all are assumed to be allowed. Currently supported values are: `1: Autoplay, sound on`; `2: Autoplay, sound off`; `3: Click to play`; `4: Mouse over to play`|[1, 3]|
+|api| array of integers|Specifies the supported API frameworks for this impression. If an API is not explicitly listed, it is assumed not to be supported. Currently supported values are: `1: VPAID 1.0`; `2: VPAID 2.0`; `3: MRAID-1`; `4: ORMMA`; `5: MRAID-2`|[1, 2]|
+|protocols|array of integers|Array of supported video protocols. Currently supported values are: `1: VAST 1.0`; `2: VAST 2.0`; `3: VAST 3.0`; `4: VAST 1.0 Wrapper`; `5: VAST 2.0 Wrapper`; `6: VAST 3.0 Wrapper`; `7: VAST 4.0`|[1, 2]|
+|placement|integer|Placement type for the impression. Possible options: `1: In-Stream`; `2: In-banner`; `3: Outstream/In-article`; `4: In-feed`; `5: Interstitial/Slider/Floating`; `6: Long-Form`;|1|
Besides the above-mentioned parameters, we support all other OpenRTB 2.x video objects as optional parameters.
In addition to `bids[].params.video`, Media.net adapter consumes parameters specified in the `mediaTypes.video`.
#### Example of Instream Video Ad-unit
-```
+
+```javascript
var videoAdUnit = {
code: 'video1',
mediaTypes: {
@@ -78,7 +81,8 @@ var videoAdUnit = {
```
#### Example of Native Ad-unit
-```
+
+```javascript
var adUnits = [{
code: 'div-gpt-ad-1544091247692-0',
mediaTypes: {
@@ -111,7 +115,8 @@ var adUnits = [{
```
#### Example of Banner Ad-unit
-```
+
+```javascript
var adUnits = [{
code: 'div-gpt-ad-1460505748561-0',
mediaTypes: {
@@ -138,4 +143,3 @@ var adUnits = [{
}]
}];
```
-
diff --git a/dev-docs/bidders/mediasniper.md b/dev-docs/bidders/mediasniper.md
new file mode 100644
index 0000000000..4a666dd317
--- /dev/null
+++ b/dev-docs/bidders/mediasniper.md
@@ -0,0 +1,22 @@
+---
+layout: bidder
+title: Mediasniper
+description: Mediasniper Prebid Bidder Adapter
+biddercode: mediasniper
+media_types: banner
+pbjs: true
+floors_supported: true
+safeframes_ok: true
+sidebarType: 1
+---
+### Note
+
+The Mediasniper Bidding adapter requires setup before beginning. Please contact us at
+
+### Bid Params
+
+{: .table .table-bordered .table-striped }
+| Name | Scope | Description | Example | Type |
+|---------------|----------|-----------------------|-----------|-----------|
+| `placementId` | required | Placement id | `'11111'` | `string` |
+| `siteid` | optional | Site id | `'11111'` | `string` |
diff --git a/dev-docs/bidders/mediasquare.md b/dev-docs/bidders/mediasquare.md
index 4777ebf6ec..068d6d0462 100644
--- a/dev-docs/bidders/mediasquare.md
+++ b/dev-docs/bidders/mediasquare.md
@@ -4,12 +4,14 @@ title: MediaSquare
description: Prebid MediaSquare Bidder Adapter
pbjs: true
biddercode: mediasquare
-gdpr_supported: true
+tcfeu_supported: true
usp_supported: true
schain_supported: true
userIds: id5Id
media_types: banner, video, native
-glv_id: 791
+floors_supported: true
+gvl_id: 791
+sidebarType: 1
---
@@ -18,5 +20,5 @@ glv_id: 791
{: .table .table-bordered .table-striped }
| Name | Scope | Description | Example | Type |
|---------------|----------|-----------------------|--------------------------------------|-----------|
-| `owner ` | required | Mediasquare owner ID | `'test'` | `string` |
+| `owner` | required | Mediasquare owner ID | `'test'` | `string` |
| `code` | required | Mediasquare code ID | `'publishername_atf_desktop_rg_pave'` | `string` |
diff --git a/dev-docs/bidders/mgid.md b/dev-docs/bidders/mgid.md
index f363ab5d96..f832b549a0 100644
--- a/dev-docs/bidders/mgid.md
+++ b/dev-docs/bidders/mgid.md
@@ -6,17 +6,24 @@ pbjs: true
pbs: true
biddercode: mgid
media_types: banner,native
-gdpr_supported: true
+tcfeu_supported: true
+usp_supported: true
gvl_id: 358
+floors_supported: true
+ortb_blocking_supported: partial
+multiformat_supported: will-bid-on-any
+sidebarType: 1
---
### Table of Contents
-- [Description](#mgid-bid-desc)
-- [Bid Params](#mgid-bid-params)
-- [Test Params](#mgid-test-params)
+- [Table of Contents](#table-of-contents)
+- [Description](#description)
+- [Bid params](#bid-params)
+- [Test Parameters](#test-parameters)
+- [User Sync](#user-sync)
-
+
### Description
@@ -24,7 +31,7 @@ One of the easiest way to gain access to MGID demand sources - MGID header bidd
MGID header bidding adapter connects with MGID demand sources to fetch bids for display placements. Please reach out to your account manager or for more information.
-
+
### Bid params
@@ -36,13 +43,13 @@ MGID header bidding adapter connects with MGID demand sources to fetch bids for
| `bidFloor` | optional | Lowest value of expected bid price | `1.1` | `float` |
| `currency` | optional | Currency of request and response | `'GBP'` | `string` |
-
-
+
### Test Parameters
300x600 banner test
-```
+
+```javascript
var adUnits = [{
code: 'div-prebid',
mediaTypes: {
@@ -61,7 +68,8 @@ var adUnits = [{
```
300x250 banner test
-```
+
+```javascript
var adUnits = [{
code: 'div-prebid',
mediaTypes: {
@@ -80,7 +88,8 @@ var adUnits = [{
```
native test
-```
+
+```javascript
var adUnits = [{
code: 'div-prebid',
mediaTypes: {
@@ -112,3 +121,36 @@ var adUnits = [{
}]
}];
```
+
+
+
+### User Sync
+
+Mgid recommends UserSync configuration to be enabled. Without it, Mgid adapter will not be able to perform user syncs, which lowers match rate and reduces monetization.
+
+For Prebid.js v1.15.0 and later:
+
+```javascript
+pbjs.setConfig({
+ userSync: {
+ filterSettings: {
+ iframe: {
+ bidders: '*', // '*' represents all bidders
+ filter: 'include'
+ }
+ }
+ }
+});
+```
+
+For Prebid.js v1.14.0 and before:
+
+```javascript
+pbjs.setConfig({
+ userSync: {
+ iframeEnabled: true,
+ enabledBidders: ['mgid']
+ }});
+```
+
+Note: Combine the above configuration with any other UserSync configuration. Multiple setConfig() calls overwrite each other and only the last call for a given attribute will take effect.
diff --git a/dev-docs/bidders/mgidX.md b/dev-docs/bidders/mgidX.md
new file mode 100644
index 0000000000..93bbca96db
--- /dev/null
+++ b/dev-docs/bidders/mgidX.md
@@ -0,0 +1,33 @@
+---
+layout: bidder
+title: MgidX
+description: Prebid MgidX Bidder Adapter
+biddercode: mgidX
+usp_supported: true
+gdpr_supported: true
+tcfeu_supported: true
+coppa_supported: true
+schain_supported: true
+floors_supported: true
+media_types: banner, video, native
+multiformat_supported: will-not-bid
+pbjs: true
+pbs: true
+pbs_app_supported: true
+safeframes_ok: true
+gvl_id: 358
+sidebarType: 1
+---
+
+### Bid Params
+
+{: .table .table-bordered .table-striped }
+| Name | Scope | Description | Example | Type |
+|---------------|----------|--------------|---------------------------------|------------|
+| `placementId` | optional | Placement Id | `'0'` | `'string'` |
+| `endpointId` | optional | Endpoint Id | `'0'` | `'string'` |
+| `region` | optional | Region (for Prebid.js) | `'us-east'` (default) or `'eu'` | `'string'` |
+
+### Note
+
+For the prebid server and prebid.js you only need to use one parameter: either placementId or endpointId
diff --git a/dev-docs/bidders/microad.md b/dev-docs/bidders/microad.md
index 09f710565b..0fc734fb9c 100644
--- a/dev-docs/bidders/microad.md
+++ b/dev-docs/bidders/microad.md
@@ -5,6 +5,8 @@ description: Prebid MicroAd SSP Bidder Adaptor
pbjs: true
biddercode: microad
media_types: banner
+userIds: imuid, id5Id, tdid, novatiq, parrableId, dacId, identityLink, criteo, pubcid, uid2
+sidebarType: 1
---
Note:
@@ -14,11 +16,12 @@ For more information, visit [MicroAd website](https://www.microad.co.jp/contact/
### Bid parameters
{: .table .table-bordered .table-striped }
-| Name | Scope | Description | Example | Type |
-|------------|----------|---------------------------------------------------------------|--------------------------------------|----------|
-| `spot` | required | Ad placement ID provided by MicroAd. | `'209e56872ae8b0442a60477ae0c58be9'` | `string` |
-| `url` | optional | URL parameter. Effective only when provided by MicroAd. | `'${COMPASS_EXT_URL}'` | `string` |
-| `referrer` | optional | Referrer parameter. Effective only when provided by MicroAd. | `'${COMPASS_EXT_REF}'` | `string` |
-| `ifa` | optional | IFA parameter. Effective only when provided by MicroAd. | `'${COMPASS_EXT_IFA}'` | `string` |
-| `appid` | optional | App ID parameter. Effective only when provided by MicroAd. | `'${COMPASS_EXT_APPID}'` | `string` |
-| `geo` | optional | Geo parameter. Effective only when provided by MicroAd. | `'${COMPASS_EXT_GEO}'` | `string` |
+| Name | Scope | Description | Example | Type |
+|------------|----------|-------------------------------------------------------------------|--------------------------------------|-----------------|
+| `spot` | required | Ad placement ID provided by MicroAd. | `'209e56872ae8b0442a60477ae0c58be9'` | `string` |
+| `url` | optional | URL parameter. Effective only when provided by MicroAd. | `'${COMPASS_EXT_URL}'` | `string` |
+| `referrer` | optional | Referrer parameter. Effective only when provided by MicroAd. | `'${COMPASS_EXT_REF}'` | `string` |
+| `ifa` | optional | IFA parameter. Effective only when provided by MicroAd. | `'${COMPASS_EXT_IFA}'` | `string` |
+| `appid` | optional | App ID parameter. Effective only when provided by MicroAd. | `'${COMPASS_EXT_APPID}'` | `string` |
+| `geo` | optional | Geo parameter. Effective only when provided by MicroAd. | `'${COMPASS_EXT_GEO}'` | `string` |
+| `aids` | optional | User IDs parameter. `type` indicates User IDs type. | `[{type: 6, id: '*******'}]` | `Array` |
diff --git a/dev-docs/bidders/minutemedia.md b/dev-docs/bidders/minutemedia.md
new file mode 100644
index 0000000000..55c69cf49f
--- /dev/null
+++ b/dev-docs/bidders/minutemedia.md
@@ -0,0 +1,89 @@
+---
+layout: bidder
+title: MinuteMedia
+description: Prebid MinuteMedia Bidder Adapter
+pbjs: true
+biddercode: minutemedia
+media_types: banner, video
+multiformat_supported: will-bid-on-any
+schain_supported: true
+tcfeu_supported: true
+gpp_supported: true
+gpp_sids: tcfeu, usstate_all, usp
+usp_supported: true
+pbs: true
+floors_supported: true
+userIds: all
+fpd_supported: true
+gvl_id: 918
+sidebarType: 1
+---
+
+### Note
+
+The MinuteMedia adapter requires setup and approval. Please reach out to to setup an MinuteMedia account.
+
+### Bid Parameters
+
+#### Banner ,Video
+
+{: .table .table-bordered .table-striped }
+| Name | Scope | Type | Description | Example
+| ---- | ----- | ---- | ----------- | -------
+| `org` | required | String | MinuteMedia publisher Id provided by your MinuteMedia representative | "1234567890abcdef12345678"
+| `floorPrice` | optional | Number | Minimum price in USD. **WARNING:** Misuse of this parameter can impact revenue | 2.00
+| `placementId` | optional | String | A unique placement identifier | "12345678"
+| `testMode` | optional | Boolean | This activates the test mode | false
+
+## Example
+
+```javascript
+var adUnits = [{
+ code: 'banner-div',
+ mediaTypes: {
+ banner: {
+ sizes: [
+ [300, 250],
+ [728, 90]
+ ]
+ }
+ },
+ bids: [{
+ bidder: 'minutemedia',
+ params: {
+ org: '1234567890abcdef12345678', // Required
+ floorPrice: 0.05, // Optional
+ placementId: '12345678', // Optional
+ testMode: false // Optional
+ }
+ }]
+ },
+ {
+ code: 'dfp-video-div',
+ sizes: [
+ [640, 480]
+ ],
+ mediaTypes: {
+ video: {
+ playerSize: [
+ [640, 480]
+ ],
+ context: 'instream'
+ }
+ },
+ bids: [{
+ bidder: 'minutemedia',
+ params: {
+ org: '1234567890abcdef12345678', // Required
+ floorPrice: 5.00, // Optional
+ placementId: '12345678', // Optional
+ testMode: false // Optional
+ }
+ }]
+ }
+];
+```
+
+### Configuration
+
+MinuteMedia recommends setting UserSync by iframe for monetization.
diff --git a/dev-docs/bidders/minutemediaplus.md b/dev-docs/bidders/minutemediaplus.md
new file mode 100644
index 0000000000..68f867d9de
--- /dev/null
+++ b/dev-docs/bidders/minutemediaplus.md
@@ -0,0 +1,35 @@
+---
+layout: bidder
+title: MinuteMediaPlus
+description: Prebid Minute Media Plus Bidder Adaptor
+biddercode: mmplus
+filename: minutemediaplusBidAdapter
+userIds: britepoolId, criteo, id5Id, identityLink, liveIntentId, netId, parrableId, pubCommonId, unifiedId
+tcfeu_supported: true
+usp_supported: true
+coppa_supported: false
+schain_supported: true
+floors_supported: true
+gpp_supported: true
+media_types: banner, video
+prebid_member: false
+safeframes_ok: false
+deals_supported: false
+pbs_app_supported: false
+fpd_supported: false
+ortb_blocking_supported: false
+multiformat_supported: will-bid-on-one
+gvl_id: 918
+pbjs: true
+sidebarType: 1
+---
+
+### Bid Params
+
+{: .table .table-bordered .table-striped }
+| Name | Scope | Description | Example | Type |
+|------------|----------|--------------------------------------------------------------------------------------------------|------------------------------|----------|
+| `cId` | required | The connection ID from MinuteMediaPlus. | `'562524b21b1c1f08117fc7f9'` | `string` |
+| `pId` | required | The publisher ID from MinuteMediaPlus. | `'59ac17c192832d0011283fe3'` | `string` |
+| `bidFloor` | required | The minimum bid value desired. MinuteMediaPlus will not respond with bids lower than this value. | `0.90` | `float` |
+| `subDomain`| optional | Sets the server subdomain, default: 'exchange'. | `'exchange'` | `string` |
diff --git a/dev-docs/bidders/missena.md b/dev-docs/bidders/missena.md
index 895cfe8c43..480761f0a0 100644
--- a/dev-docs/bidders/missena.md
+++ b/dev-docs/bidders/missena.md
@@ -6,12 +6,12 @@ biddercode: missena
gvl_id: 867
pbjs: true
safeframes_ok: false
-pbjs_version_notes: not in 5.x, in 6.2+
+sidebarType: 1
---
### Note
-The Missena Bidding adapter requires setup before beginning. Please contact us at jney@missena.com
+The Missena Bidding adapter requires setup before beginning. Please contact us at
### Bid params
diff --git a/dev-docs/bidders/mobfox.md b/dev-docs/bidders/mobfox.md
deleted file mode 100644
index 46c5ee5ca3..0000000000
--- a/dev-docs/bidders/mobfox.md
+++ /dev/null
@@ -1,18 +0,0 @@
----
-layout: bidder
-title: MobFox
-description: Prebid MobFox Bidder Adaptor
-pbjs: true
-biddercode: mobfox
-media_types: video
-enable_download: false
-pbjs_version_notes: not ported to 5.x
----
-
-### Bid Params
-
-{: .table .table-bordered .table-striped }
-| Name | Scope | Description | Example | Type |
-|-------------|----------|------------------------------------------------------------------------|--------------------------------------|-----------|
-| `s` | required | The hash of your inventory to identify which app is making the request | `'267d72ac3f77a3f447b32cf7ebf20673'` | `string` |
-| `imp_instl` | optional | set to 1 if using interstitial otherwise delete or set to 0 | `1` | `integer` |
diff --git a/dev-docs/bidders/mobfoxpb.md b/dev-docs/bidders/mobfoxpb.md
index 429c1f02ca..425901a4f7 100644
--- a/dev-docs/bidders/mobfoxpb.md
+++ b/dev-docs/bidders/mobfoxpb.md
@@ -6,13 +6,14 @@ biddercode: mobfoxpb
usp_supported: true
schain_supported: true
media_types: banner, video, native
-gdpr_supported: true
+tcfeu_supported: true
pbjs: true
pbs: true
pbs_app_supported: true
+gpp_supported: true
gvl_id: 311
-enable_download: false
-pbjs_version_notes: not ported to 5.x
+enable_download: true
+sidebarType: 1
---
### Prebid.JS Bid Params
@@ -22,12 +23,16 @@ pbjs_version_notes: not ported to 5.x
|----------------|----------|----------------------------------------------------------|------------|-----------|
| `placementId` | required | Placement Id will be generated on Mobfox Platform. | `'0'` | `string` |
-
### Prebid Server Bid Params
+
Currently adapter doesn't support multiimpression, so only the first impression will be delivered
{: .table .table-bordered .table-striped }
| Name | Scope | Description | Example | Type |
|----------------|----------|----------------------------------------------------------|------------|-----------|
-| `TagID` | required | Placement Id will be generated on Mobfox Platform. For direct integration | `'0'` | `string` |
-| `key` | required | Endpoint id will be generated on Mobfox Platform. For s2s integration | `'0'` | `string` |
+| `TagID` | optional | Placement Id will be generated on Mobfox Platform. For direct integration | `'0'` | `string` |
+| `key` | optional | Endpoint id will be generated on Mobfox Platform. For s2s integration | `'0'` | `string` |
+
+### Note
+
+For the prebid server you only need to use one parameter: either TagID or key
diff --git a/dev-docs/bidders/mobilefuse.md b/dev-docs/bidders/mobilefuse.md
index 34b45f2850..fb72ad0ade 100644
--- a/dev-docs/bidders/mobilefuse.md
+++ b/dev-docs/bidders/mobilefuse.md
@@ -3,7 +3,9 @@ layout: bidder
title: MobileFuse
pbs: true
pbjs: false
-media_types: banner, video
+media_types: banner, video, native
+tcfeu_supported: true
+gpp_supported: true
schain_supported: true
usp_supported: true
coppa_supported: true
@@ -11,13 +13,16 @@ biddercode: mobilefuse
ccpa_supported: true
prebid_member: true
pbs_app_supported: true
+floors_supported: true
+gvl_id: 909
+ortb_blocking_supported: true
+sidebarType: 1
---
### Bid Params
{: .table .table-bordered .table-striped }
-| Name | Scope | Description | Example | Type |
-|------------|----------|------------------------|---------|----------|
-| placement_id | required | An ID which identifies this specific inventory placement | 1111 | integer |
-| pub_id | required | An ID which identifies the publisher selling the inventory| 2222 | integer |
-| tagid_src | optional | ext if passing publisher's ids, empty if passing MobileFuse IDs in placement_id field. Defaults to empty | '' | string |
+| Name | Scope | Description | Example | Type |
+| ------------ | -------- | ---------------------------------------------------------- | ------- | ------- |
+| placement_id | required | An ID which identifies this specific inventory placement | 1111 | integer |
+| pub_id | required | An ID which identifies the publisher selling the inventory | 2222 | integer |
diff --git a/dev-docs/bidders/mobsmart.md b/dev-docs/bidders/mobsmart.md
deleted file mode 100644
index 19f2b516c7..0000000000
--- a/dev-docs/bidders/mobsmart.md
+++ /dev/null
@@ -1,23 +0,0 @@
----
-layout: bidder
-title: Mobsmart
-description: Prebid Mobsmart SSP Bidder Adaptor
-pbjs: true
-biddercode: mobsmart
-media_types: banner
-userIds: pubCommonId
-enable_download: false
-pbjs_version_notes: not ported to 5.x
----
-
-### Note:
-The Mobsmart Bidding adapter requires setup and approval beforehand.
-For more information, visit [Mobsmart website](https://kpis.jp/en/product_mobsmart).
-
-### Bid Params
-
-{: .table .table-bordered .table-striped }
-| Name | Scope | Description | Example | Type |
-|--------------|----------|-----------------------------------------|----------|-----------|
-| `floorPrice` | optional | Floor price | `10` | `Integer` |
-| `currency` | optional | Currency of request and response | `'JPY'` | `string` |
diff --git a/dev-docs/bidders/monetix.md b/dev-docs/bidders/monetix.md
new file mode 100644
index 0000000000..f03d0e3546
--- /dev/null
+++ b/dev-docs/bidders/monetix.md
@@ -0,0 +1,36 @@
+---
+layout: bidder
+title: Monetix
+description: Monetix Adaptor
+biddercode: monetix
+pbjs: true
+pbs: false
+media_types: banner, native, video
+gvl_id: 14 (adkernel)
+tcfeu_supported: true
+gpp_sids: tcfeu, usp
+usp_supported: true
+coppa_supported: true
+pbs_app_supported: false
+schain_supported: true
+userIds: all
+fpd_supported: true
+prebid_member: false
+ortb_blocking_supported: true
+multiformat_supported: will-bid-on-one
+floors_supported: true
+aliasCode: adkernel
+sidebarType: 1
+---
+
+### Note
+
+The Monetix bidding adapter requires setup and approval before implementation. Please reach out to for more details.
+
+### Bid Params
+
+{: .table .table-bordered .table-striped }
+| Name | Scope | Description | Example | Type |
+|----------|----------|-----------------------|---------------------------|----------|
+| `host` | required | RTB host | `'cpm.monetixads.com'` | `string` |
+| `zoneId` | required | Zone Id | 30164 | `integer` |
diff --git a/dev-docs/bidders/motionspots.md b/dev-docs/bidders/motionspots.md
new file mode 100644
index 0000000000..73169217a3
--- /dev/null
+++ b/dev-docs/bidders/motionspots.md
@@ -0,0 +1,36 @@
+---
+layout: bidder
+title: Motionspots
+description: Motionspots Bidder Adaptor
+biddercode: motionspots
+pbjs: true
+pbs: false
+media_types: banner, native, video
+gvl_id: 14 (adkernel)
+tcfeu_supported: true
+gpp_supported: true
+usp_supported: true
+coppa_supported: true
+pbs_app_supported: true
+schain_supported: true
+userIds: all
+fpd_supported: true
+prebid_member: false
+ortb_blocking_supported: true
+multiformat_supported: will-bid-on-one
+floors_supported: true
+aliasCode: adkernel
+sidebarType: 1
+---
+
+### Note
+
+The Motionspots bidding adapter requires setup and approval before implementation. Please reach out to for more details.
+
+### Bid Params
+
+{: .table .table-bordered .table-striped }
+| Name | Scope | Description | Example | Type |
+|----------|----------|-----------------------|---------------------------|----------|
+| `host` | required | RTB host | `'cpm.motionspots.com'` | `string` |
+| `zoneId` | required | Zone Id | 30164 | `integer` |
diff --git a/dev-docs/bidders/motorik.md b/dev-docs/bidders/motorik.md
new file mode 100644
index 0000000000..4489c7f846
--- /dev/null
+++ b/dev-docs/bidders/motorik.md
@@ -0,0 +1,36 @@
+---
+layout: bidder
+title: Motorik
+description: Prebid Motorik Bidder Adaptor
+biddercode: motorik
+tcfeu_supported: true
+usp_supported: true
+coppa_supported: true
+schain_supported: true
+media_types: banner, video, native
+safeframes_ok: true
+deals_supported: true
+pbjs: true
+pbs: true
+sidebarType: 1
+floors_supported: true
+prebid_member: false
+fpd_supported: false
+gvl_id: none
+multiformat_supported: will-bid-on-one
+ortb_blocking_supported: true
+userIds: all
+---
+
+### Note
+
+The Example Bidding adapter requires setup before beginning. Please contact us at .
+Motorik will only respond to the first impression. Multiple ad formats in single request are not supported.
+
+### Bid Params
+
+{: .table .table-bordered .table-striped }
+| Name | Scope | Description | Example | Type |
+|---------------|----------|-----------------------|-----------|-----------|
+| `placementId` | required | placement id | `'a7402708185f6a0c00700fd21c4260d2'` | `string` |
+| `accountId` | required | account id | `'motorikTest'` | `string` |
diff --git a/dev-docs/bidders/my6sense.md b/dev-docs/bidders/my6sense.md
index 0999af6682..dc65b12072 100644
--- a/dev-docs/bidders/my6sense.md
+++ b/dev-docs/bidders/my6sense.md
@@ -5,7 +5,8 @@ description: My6Sense Prebid Bidder Adapter
media_type: native
biddercode: my6sense
pbjs: true
-gdpr_supported: true
+tcfeu_supported: false
+sidebarType: 1
---
### Bid params
diff --git a/dev-docs/bidders/mytarget.md b/dev-docs/bidders/mytarget.md
index d53cbca13a..a10bf209fe 100644
--- a/dev-docs/bidders/mytarget.md
+++ b/dev-docs/bidders/mytarget.md
@@ -4,6 +4,7 @@ title: myTarget
description: Prebid myTarget Bidder Adapter
pbjs: true
biddercode: mytarget
+sidebarType: 1
---
@@ -17,7 +18,6 @@ biddercode: mytarget
| `position` | optional | Ad position on screen. See details below. | `1` | `number` |
| `response` | optional | Bid response type. 0 - ad url (default), 1 - ad markup. | `1` | `number` |
-
### Position
The following values are defined in the [ORTB 2.5 spec](https://www.iab.com/wp-content/uploads/2016/03/OpenRTB-API-Specification-Version-2-5-FINAL.pdf).
diff --git a/dev-docs/bidders/nafdigital.md b/dev-docs/bidders/nafdigital.md
deleted file mode 100644
index 5ea7fb30d5..0000000000
--- a/dev-docs/bidders/nafdigital.md
+++ /dev/null
@@ -1,24 +0,0 @@
----
-layout: bidder
-title: NAF Digital
-description: Prebid NAF Digital Bidder Adaptor
-top_nav_section: dev_docs
-nav_section: reference
-pbjs: true
-biddercode: nafdigital
-enable_download: false
-pbjs_version_notes: not ported to 5.x
----
-
-### Note:
-
-The NAF Digital bidder adapter requires setup and approval from the NAF Digital team. Please reach out to your account manager for more information and to start using it.
-
-### Bid Params
-
-{: .table .table-bordered .table-striped }
-
-| Name | Scope | Description | Example | Type |
-| ---- | ----- | ----------- | ------- | ---- |
-| `publisherId` | required | The publisher ID from NAF Digital | `2141020` | `integer` |
-| `bidFloor` | optional | The minimum bid value desired | `1.23` | `float` |
diff --git a/dev-docs/bidders/nanointeractive.md b/dev-docs/bidders/nanointeractive.md
deleted file mode 100644
index 0154d901e0..0000000000
--- a/dev-docs/bidders/nanointeractive.md
+++ /dev/null
@@ -1,137 +0,0 @@
----
-layout: bidder
-title: Nano Interactive
-description: Prebid Nano Interactive Bidder Adapter
-pbjs: true
-pbs: true
-biddercode: nanointeractive
-media_types: banner
-gdpr_supported: true
-gvl_id: 72
-enable_download: false
-pbjs_version_notes: not ported to 5.x
----
-
-### Requirements:
-To be able to get identification key (`pid`), please contact us at
-`https://www.nanointeractive.com/publishers`
-
-### Bid Params
-
-{: .table .table-bordered .table-striped }
-| Name | Scope | Description | Example | Type |
-|----------------|----------|--------------------------------------------------|------------------------------|----------|
-| `pid` | required | Identification key, provided by Nano Interactive | `'5afaa0280ae8996eb578de53'` | `string` |
-| `category` | optional | Contextual taxonomy | `'automotive'` | `string` |
-| `categoryName` | optional | Contextual taxonomy (from URL query param) | `'cat_name'` | `string` |
-| `nq` | optional | User search query | `'automobile search query'` | `string` |
-| `name` | optional | User search query (from URL query param) | `'search_param'` | `string` |
-| `subId` | optional | Channel - used to separate traffic sources | `'123'` | `string` |
-
-#### Configuration
-The `category` and `categoryName` are mutually exclusive. If you pass both, `categoryName` takes precedence.
-
-The `nq` and `name` are mutually exclusive. If you pass both, `name` takes precedence.
-
-#### Example with only required field `pid`
- var adUnits = [{
- code: 'nano-div',
- sizes: [[300, 250], [300,600]],
- bids: [{
- bidder: 'nanointeractive',
- params: {
- pid: '5afaa0280ae8996eb578de53'
- }
- }]
- }];
-
-#### Example with `category`
- var adUnits = [{
- code: 'nano-div',
- sizes: [[300, 250], [300,600]],
- bids: [{
- bidder: 'nanointeractive',
- params: {
- pid: '5afaa0280ae8996eb578de53',
- category: 'automotive',
- subId: '123'
- }
- }]
- }];
-
-#### Example with `categoryName`
- var adUnits = [{
- code: 'nano-div',
- sizes: [[300, 250], [300,600]],
- bids: [{
- bidder: 'nanointeractive',
- params: {
- pid: '5afaa0280ae8996eb578de53',
- // Category "automotive" is in the URL like:
- // https://www....?cat_name=automotive&...
- categoryName: 'cat_name',
- subId: '123'
- }
- }]
- }];
-
-#### Example with `nq`
- var adUnits = [{
- code: 'nano-div',
- sizes: [[300, 250], [300,600]],
- bids: [{
- bidder: 'nanointeractive',
- params: {
- pid: '5afaa0280ae8996eb578de53',
- // User searched "automobile search query" (extracted from search text field)
- nq: 'automobile search query',
- subId: '123'
- }
- }]
- }];
-
-#### Example with `name`
- var adUnits = [{
- code: 'nano-div',
- sizes: [[300, 250], [300,600]],
- bids: [{
- bidder: 'nanointeractive',
- params: {
- pid: '5afaa0280ae8996eb578de53',
- // User searched "automobile search query" and it is in the URL like:
- // https://www....?search_param=automobile%20search%20query&...
- name: 'search_param',
- subId: '123'
- }
- }]
- }];
-
-#### Example with `category` and `nq`
- var adUnits = [{
- code: 'nano-div',
- sizes: [[300, 250], [300,600]],
- bids: [{
- bidder: 'nanointeractive',
- params: {
- pid: '5afaa0280ae8996eb578de53',
- category: 'automotive',
- nq: 'automobile search query',
- subId: '123'
- }
- }]
- }];
-
-#### Example with `categoryName` and `name`
- var adUnits = [{
- code: 'nano-div',
- sizes: [[300, 250], [300,600]],
- bids: [{
- bidder: 'nanointeractive',
- params: {
- pid: '5afaa0280ae8996eb578de53',
- categoryName: 'cat_name',
- name: 'search_param',
- subId: '123'
- }
- }]
- }];
diff --git a/dev-docs/bidders/nasmediaAdmixer.md b/dev-docs/bidders/nasmediaAdmixer.md
deleted file mode 100644
index a9910a1a0a..0000000000
--- a/dev-docs/bidders/nasmediaAdmixer.md
+++ /dev/null
@@ -1,23 +0,0 @@
----
-layout: bidder
-title: Nasmedia Admixer
-description: Prebid Nasmedia Admixer Bidder Adapter
-pbjs: true
-biddercode: nasmediaAdmixer
-enable_download: false
-pbjs_version_notes: not ported to 5.x
----
-
-
-### Note:
-
-The Nasmedia Admixer Bidder Adapter requires setup and approval from the Nasmedia Admixer team.
-Please reach out to for more information.
-
-### Bid Params
-
-{: .table .table-bordered .table-striped }
-| Name | Scope | Description | Example | Type |
-|-------------|----------|--------------------------------------------|--------------|----------|
-| `media_key` | required | Publisher Key provided by Nasmedia Admixer | `'19038695'` | `string` |
-| `adunit_id` | required | Adunit Id provided by Nasmedia Admixer | `'24190632'` | `string` |
diff --git a/dev-docs/bidders/nativo.md b/dev-docs/bidders/nativo.md
index 9c72c55f07..c330ead57a 100644
--- a/dev-docs/bidders/nativo.md
+++ b/dev-docs/bidders/nativo.md
@@ -3,15 +3,18 @@ layout: bidder
title: Nativo
description: Prebid Nativo Bidder Adapter
pbjs: true
+pbs: true
gvl_id: 263
-gdpr_supported: true
+tcfeu_supported: true
usp_supported: true
+userIds: all
biddercode: nativo
+sidebarType: 1
---
-### Note:
+### Note
-The Nativo Bidder adapter requires setup before beginning. Please contact us at prebiddev@nativo.com beforehand.
+The Nativo Bidder adapter requires setup before beginning. Please contact us at beforehand.
### Bid Params
diff --git a/dev-docs/bidders/navelix.md b/dev-docs/bidders/navelix.md
deleted file mode 100644
index cc6ad3fb6c..0000000000
--- a/dev-docs/bidders/navelix.md
+++ /dev/null
@@ -1,121 +0,0 @@
----
-layout: bidder
-title: Navelix
-description: Prebid Navelix Bidder Adapter
-biddercode: navelix
-aliasCode: adtelligent
-media_types: video,banner
-gdpr_supported: true
-userIds: britepoolId, criteo, id5Id, identityLink, liveIntentId, netId, parrableId, pubCommonId, unifiedId
-schain_supported: true
-coppa_supported: true
-usp_supported: true
-safeframes_ok: true
-prebid_member: true
-pbjs: true
-pbs: false
----
-
-### Bid params
-
-{: .table .table-bordered .table-striped }
-| Name | Scope | Description | Example | Type |
-|-------|----------|---------------------------------|----------|-----------|
-| `aid` | required | The source ID from navelix. | `529814` | `integer` |
-
-### Description
-Get access to multiple demand partners across Navelix AdExchange and maximize your yield with Navelix header bidding adapter.
-
-Navelix header bidding adapter connects with Navelix demand sources in order to fetch bids.
-This adapter provides a solution for accessing Video demand and display demand.
-
-Navelix now supports adpod.
-
-### Test Parameters
-```
- var adUnits = [
-
- // Video instream adUnit
- {
- code: 'test-div',
- mediaTypes: {
- video: {
- context: 'instream',
- playerSize: [640, 480]
- }
- },
- bids: [{
- bidder: 'navelix',
- params: {
- aid: 472386
- }
- }]
- },
-
- // Video outstream adUnit
- {
- code: 'test-div',
- mediaTypes: {
- video: {
- context: 'outstream',
- playerSize: [640, 480]
- }
- },
- bids: [{
- bidder: 'navelix',
- params: {
- aid: 472386
- }
- }]
- },
-
- // Video ADPOD adUnit
- {
- code: 'test-div',
- sizes: [[640, 480]],
- mediaTypes: {
- video: {
- context: 'adpod',
- playerSize: [640, 480]
- }
- },
- bids: [{
- bidder: 'navelix',
- params: {
- aid: 472386
- }
- }]
- },
-
- // Banner adUnit
- {
- code: 'test-div',
- mediaTypes:{
- banner:{
- sizes: [[300, 250]]
- }
- }
- bids: [{
- bidder: 'navelix',
- params: {
- aid: 529814
- }
- }]
- }
- ];
-```
-
-### Additional Configuration
-
-It is possible to configure requests to be split into chunks so as to have fewer bid requests in a single http request
-(default value is 10).
-
-```
- pbjs.setBidderConfig({
- config: {
- navelix: {
- chunkSize: 1 // makes 1 http request per 1 adunit configured
- }
- }
- });
-```
diff --git a/dev-docs/bidders/newborntownWeb.md b/dev-docs/bidders/newborntownWeb.md
deleted file mode 100644
index f95a9b1968..0000000000
--- a/dev-docs/bidders/newborntownWeb.md
+++ /dev/null
@@ -1,18 +0,0 @@
----
-layout: bidder
-title: newborntownWeb
-description: Prebid newborntownWeb Bidder Adaptor
-pbjs: true
-biddercode: newborntownWeb
-enable_download: false
-pbjs_version_notes: not ported to 5.x
----
-
-### Bid Params
-
-{: .table .table-bordered .table-striped }
-| Name | Scope | Description | Example | Type |
-|---------------|----------|-------------|---------|----------|
-| `publisher_id` | required | Publisher ID which is obtained from sfp.solomath.com | `'1238122'` | `string` |
-| `slot_id` | required | Ad Slot ID which is obtained from sfp.solomath.com | `'123123'` | `string` |
-| `bidfloor` | required | As a min CPM of this inventory sold | `0.2` | `float` |
diff --git a/dev-docs/bidders/newspassid.md b/dev-docs/bidders/newspassid.md
new file mode 100644
index 0000000000..1cddd2f8a3
--- /dev/null
+++ b/dev-docs/bidders/newspassid.md
@@ -0,0 +1,74 @@
+---
+Module Name: NewspassId Bidder Adapter
+Module Type: Bidder Adapter
+Maintainer: techsupport@newspassid.com
+layout: bidder
+title: Newspass ID
+description: LMC Newspass ID Prebid JS Bidder Adapter
+biddercode: newspassid
+tcfeu_supported: false
+gvl_id: none
+usp_supported: true
+coppa_supported: false
+schain_supported: true
+dchain_supported: false
+userIds: criteo, id5Id, tdid, identityLink, liveIntentId, parrableId, pubCommonId, lotamePanoramaId, sharedId, fabrickId
+media_types: banner
+safeframes_ok: true
+deals_supported: true
+floors_supported: false
+fpd_supported: false
+pbjs: true
+pbs: false
+prebid_member: false
+multiformat_supported: will-bid-on-any
+sidebarType: 1
+---
+
+### Description
+
+LMC Newspass ID Prebid JS Bidder Adapter that connects to the NewspassId demand source(s).
+
+The Newspass bid adapter supports Banner mediaTypes ONLY.
+This is intended for USA audiences only, and does not support GDPR
+
+### Bid Params
+
+{: .table .table-bordered .table-striped }
+
+| Name | Scope | Description | Example | Type |
+|-----------|----------|---------------------------|------------|----------|
+| `siteId` | required | The site ID. | `"NPID0000001"` | `string` |
+| `publisherId` | required | The publisher ID. | `"4204204201"` | `string` |
+| `placementId` | required | The placement ID. | `"0420420421"` | `string` |
+| `customData` | optional | publisher key-values used for targeting | `[{"settings":{},"targeting":{"key1": "value1", "key2": "value2"}}],` | `array` |
+
+### Test Parameters
+
+A test ad unit that will consistently return test creatives:
+
+```javascript
+//Banner adUnit
+
+const adUnits = [{
+ code: 'id-of-your-banner-div',
+ mediaTypes: {
+ banner: {
+ sizes: [[300, 250], [300,600]]
+ }
+ },
+ bids: [{
+ bidder: 'newspassid',
+ params: {
+ publisherId: 'NEWSPASS0001', /* an ID to identify the publisher account - required */
+ siteId: '4204204201', /* An ID used to identify a site within a publisher account - required */
+ placementId: '8000000015', /* an ID used to identify the piece of inventory - required - for appnexus test use 13144370. */
+ customData: [{"settings": {}, "targeting": {"key": "value", "key2": ["value1", "value2"]}}],/* optional array with 'targeting' placeholder for passing publisher specific key-values for targeting. */
+ }
+ }]
+ }];
+```
+
+### Note
+
+Please contact us at for any assistance testing your implementation before going live into production.
diff --git a/dev-docs/bidders/nextMillennium.md b/dev-docs/bidders/nextMillennium.md
index 6b863fd025..afc72fa9c5 100644
--- a/dev-docs/bidders/nextMillennium.md
+++ b/dev-docs/bidders/nextMillennium.md
@@ -1,7 +1,9 @@
---
layout: bidder
title: NextMillennium
-gdpr_supported: true
+description: NextMillennium bid adapter
+gvl_id: dev-docs/bidders/nextMillennium.md
+tcfeu_supported: true
usp_supported: true
coppa_supported: false
schain_supported: false
@@ -14,16 +16,99 @@ pbs_app_supported: false
pbjs: true
pbs: true
biddercode: nextMillennium
-media_types: banner
-description: NextMillennium bid adapter
+media_types: banner, video
+prebid_member: true
+sidebarType: 1
---
-### bid params
+### Bid Params
{: .table .table-bordered .table-striped }
-| Name | Scope | Description | Example | Type |
-|----------------+----------+------------------------------------------+-----------|---------|
+| Name | Scope | Description | Example | Type |
+|----------------+-------+-----------------------------------+-----------+---------|
| `placement_id` | required | Placement ID, provided by nextMillennium | `'12345'` | String |
+| `group_id` | optional | Group ID, provided by nextMillennium | `'12345'` | String |
+
+Required one of the two parameters placement_id or group_id.
-As input parameters, it accepts only `placement_id`, which is issued when registering in NextMillennium.
Further information for the auction on NextMillennium side is generated automatically.
+
+For video ad requests, we recommend that you configure the `mediaTypes.video` parameters in your Ad Units ([https://docs.prebid.org/dev-docs/adunit-reference.html#video](https://docs.prebid.org/dev-docs/adunit-reference.html#video)).
+
+### Additional options
+
+#### disabledSendingStatisticData
+
+The `disabledSendingStatisticData` parameter disables sending statistics data to the nextMillennium server, such as bidRequested, bidResponse, noBid and bidTimeout events.
+An example of enabling this option:
+
+```javascript
+pbjs.setBidderConfig({
+ bidders: ['nextMillennium'],
+ config: {
+ disabledSendingStatisticData: true,
+ },
+})
+```
+
+#### Currency
+
+By default, the currency used for requires is `USD`. But you can use any other currency in the request. To do this, you must set this currency through the Prebid.js configuration and all responses will be returned in this currency.
+
+```javascript
+pbjs.setConfig({
+ // ...
+ "currency": {
+ "adServerCurrency": "JPY",
+ }
+ // ...
+});
+```
+
+#### OpenRTB 2.5 supported parameters
+
+The adapter for Prebid.js supports the following options:
+
+* `site.pagecat`
+* `site.content.cat`
+* `site.content.language`
+* `device.sua'`
+* `site.keywords'`
+* `site.content.keywords'`
+* `user.keywords'`
+
+You can set these parameters through the Prebid.js configuration setup functions: [pbjs.setConfig](https://docs.prebid.org/dev-docs/publisher-api-reference/setConfig.html) or [pbjs.setBidderConfig](https://docs.prebid.org/dev-docs/publisher-api-reference/setBidderConfig.html).
+An example of setting openrtb parameters for the entire prebid.js script.
+
+```javascript
+pbjs.setConfig({
+ ortb2: {
+ site: {
+ pagecat: ['IAB2-11', 'IAB2-12', 'IAB2-14'],
+ content: {
+ cat: ['IAB2-11', 'IAB2-12', 'IAB2-14'],
+ language: 'EN'
+ },
+ }
+ }
+});
+```
+
+An example of setting openrtb parameters only for the NextMillennium adapter.
+
+```javascript
+pbjs.setBidderConfig({
+ bidders: ['bidderB'],
+ config: {
+ ortb2: {
+ site: {
+ pagecat: ['IAB2-11', 'IAB2-12', 'IAB2-14'],
+ content: {
+ cat: ['IAB2-11', 'IAB2-12', 'IAB2-14'],
+ language: 'EN'
+ },
+ }
+ }
+ }
+});
+```
diff --git a/dev-docs/bidders/nextroll.md b/dev-docs/bidders/nextroll.md
index c99e92a4b3..e6908f1cf4 100644
--- a/dev-docs/bidders/nextroll.md
+++ b/dev-docs/bidders/nextroll.md
@@ -5,9 +5,11 @@ description: Prebid NextRoll Bidder Adapter
pbjs: true
biddercode: nextroll
media_types: display, native
-gdpr_supported: false
+tcfeu_supported: false
+floors_supported: true
usp_supported: true
prebid_member: true
+sidebarType: 1
---
### Bid Params
@@ -21,6 +23,7 @@ prebid_member: true
| `bidfloor` | optional | Per ad-unit bid floor, used if the floor module is not available | `2.3` | `number` |
#### Example of Banner Ad-unit
+
```
var adUnits = [
{
@@ -70,6 +73,7 @@ var adUnits = [
```
#### Example of Native Ad-unit
+
```
var adUnits = [
{
diff --git a/dev-docs/bidders/nexx360.md b/dev-docs/bidders/nexx360.md
new file mode 100644
index 0000000000..089eeedd47
--- /dev/null
+++ b/dev-docs/bidders/nexx360.md
@@ -0,0 +1,132 @@
+---
+layout: bidder
+title: Nexx360
+description: Prebid Nexx360 Bidder Adapter
+pbjs: true
+biddercode: nexx360
+tcfeu_supported: true
+usp_supported: true
+schain_supported: true
+floors_supported: true
+userIds: all
+tcf2_supported: true
+media_types: banner, video, native
+gvl_id: 965
+pbs: false
+sidebarType: 1
+
+---
+
+
+### Bid Params
+
+{: .table .table-bordered .table-striped }
+| Name | Scope | Description | Example | Type |
+|---------------|----------|----------------------------|-------------------------------------- |-----------|
+| `tagId` | required | Nexx360 tag ID | `"luvxjvgn"` | `string` |
+| `videoTagId` | optional | Nexx360 Video tag ID | `"luvxjvgn"` | `string` |
+| `nativeTagId` | optional | Nexx360 Native tag ID | `"luvxjvgn"` | `string` |
+| `allBids` | optional | Return all bids | `true` | `boolean` |
+| `divId` | optional | divId linked to adUnit | `"div-1"` | `string` |
+| `adUnitName` | optional | A code to identify adUnit | `"header-ad"` | `string` |
+| `adUnitPath` | optional | A reference to adUnit Path | `"/12345/nexx360/Homepage/HP/Header-Ad"` | `string` |
+
+### Bidder Config
+
+You can allow writing in localStorage `pbjs.bidderSettings` for the bidder `nexx360`
+
+```javascript
+pbjs.bidderSettings = {
+ nexx360: {
+ storageAllowed : true
+ }
+}
+```
+
+### First Party Data
+
+Publishers should use the `ortb2` method of setting [First Party Data](https://docs.prebid.org/features/firstPartyData.html).
+
+### Test Parameters
+
+```javascript
+var adUnits = [
+ // Banner adUnit
+ {
+ code: 'banner-div',
+ mediaTypes: {
+ banner: {
+ sizes: [[300, 250], [300,600]]
+ }
+ },
+ bids: [{
+ bidder: 'nexx360',
+ params: {
+ tagId: 'luvxjvgn'
+ }
+ }]
+ },
+ // Video adUnit
+ {
+ code: 'video1',
+ mediaTypes: {
+ video: {
+ playerSize: [640, 480],
+ context: 'instream'
+ }
+ },
+ bids: [{
+ bidder: 'nexx360',
+ params: {
+ tagId: 'luvxjvgn'
+ }
+ }]
+ },
+ // Native adUnit
+ {
+ code: 'native1',
+ mediaTypes: {
+ native: {
+ title: {
+ required: true
+ },
+ image: {
+ required: true
+ },
+ sponsoredBy: {
+ required: true
+ }
+ }
+ },
+ bids: [{
+ bidder: 'nexx360',
+ params: {
+ tagId: 'luvxjvgn'
+ }
+ }]
+ },
+ // Multiformat Ad
+ {
+ code: 'multi1',
+ mediaTypes: {
+ video: {
+ playerSize: [640, 480],
+ context: 'instream'
+ },
+ banner: {
+ sizes: [[300, 250], [300,600]]
+ },
+ native: {
+
+ }
+ },
+ bids: [{
+ bidder: 'nexx360',
+ params: {
+ tagId: 'luvxjvgn',
+ videoTagId: 'luvxjvgn'
+ }
+ }]
+ };
+];
+```
diff --git a/dev-docs/bidders/ninthdecimal.md b/dev-docs/bidders/ninthdecimal.md
index 468e00ecfe..af53ba3f91 100644
--- a/dev-docs/bidders/ninthdecimal.md
+++ b/dev-docs/bidders/ninthdecimal.md
@@ -4,6 +4,7 @@ title: NinthDecimal
pbs: true
media_types: banner
biddercode: ninthdecimal
+sidebarType: 1
---
### Bid Params
diff --git a/dev-docs/bidders/nobid.md b/dev-docs/bidders/nobid.md
index 02d54e53c0..5e3499a6c0 100644
--- a/dev-docs/bidders/nobid.md
+++ b/dev-docs/bidders/nobid.md
@@ -1,19 +1,22 @@
---
layout: bidder
title: Nobid
-description: Prebid Nobid Bidder Adaptor
+description: Prebid NoBid Bidder Adaptor
biddercode: nobid
pbjs: true
pbs: true
media_types: banner, video
-gdpr_supported: true
+tcfeu_supported: true
gvl_id: 816
usp_supported: true
+gpp_supported: true
schain_supported: true
coppa_supported: true
-userId: criteo, unifiedId, id5Id
+userId: criteo, unifiedId, id5Id, intentIqId
safeframes_ok: true
-fpd_supported: true
+prebid_member: false
+floors_supported: true
+sidebarType: 1
---
### Bid Params
@@ -25,14 +28,14 @@ fpd_supported: true
| `placementId` | optional | placementId is provided by your NoBid account manager(s). This parameter allows to report on a specific ad unit | | `integer` |
| `video`| optional | Object containing video targeting parameters. Note that this parameter is not used in Prebid Server. See [Video Object](#nobid-video-object) for details. | `video: { playback_method: ['auto_play_sound_off'] }` | `object`|
-
### Note
-If you are using Google Ad Manager (GAM), it is highly recommended to make sure the âServe in Safeframeâ box in creative settings is unchecked.
+
+If you are using Google Ad Manager (GAM), it is highly recommended to make sure the âServe in Safeframeâ box in creative settings is unchecked.
If you absolutely want to run NoBid in a Saferame creative, please contact your Nobid repsentative to coordinate this setup.
+### Test Parameters
-# Test Parameters
-```
+```javascript
var adUnits = [
{
code: 'test-div1',
@@ -83,4 +86,3 @@ If you absolutely want to run NoBid in a Saferame creative, please contact your
| `minduration` | Integer that defines the minimum video ad duration in seconds. | `integer` |
| `maxduration` | Integer that defines the maximum video ad duration in seconds. | `integer` |
| `frameworks` | Array of integers listing API frameworks supported by the publisher. Allowed values: None: `0`; VPAID 1.0: `1`; VPAID 2.0: `2`; MRAID 1.0: `3`; ORMMA: `4`; MRAID 2.0: `5`. | `Array` |
-
diff --git a/dev-docs/bidders/ocm.md b/dev-docs/bidders/ocm.md
new file mode 100644
index 0000000000..120d96c19b
--- /dev/null
+++ b/dev-docs/bidders/ocm.md
@@ -0,0 +1,108 @@
+---
+layout: bidder
+title: Orangeclickmedia
+description: Prebid OCM Bidder Adapter
+biddercode: ocm
+aliasCode: adtelligent
+media_types: video,banner
+tcfeu_supported: true
+gpp_supported: true
+userIds: britepoolId, criteo, id5Id, identityLink, liveIntentId, netId, parrableId, pubCommonId, unifiedId
+schain_supported: true
+coppa_supported: true
+usp_supported: true
+safeframes_ok: true
+prebid_member: true
+pbjs: true
+pbs: false
+deals_supported: false
+gvl_id: 1148
+sidebarType: 1
+---
+
+### Bid params
+
+{: .table .table-bordered .table-striped }
+| Name | Scope | Description | Example | Type |
+|-------|----------|---------------------------------|----------|-----------|
+| `aid` | required | The source ID from OCM. | `529814` | `integer` |
+
+### Description
+
+OCM header bidding adapter connects with OCM demand sources in order to fetch bids.
+This adapter provides a solution for accessing Video demand and display demand.
+
+### Test Parameters
+
+``` javascript
+ var adUnits = [
+
+ // Video instream adUnit
+ {
+ code: 'test-div',
+ mediaTypes: {
+ video: {
+ context: 'instream',
+ playerSize: [640, 480]
+ }
+ },
+ bids: [{
+ bidder: 'ocm',
+ params: {
+ aid: 472386
+ }
+ }]
+ },
+
+ // Video outstream adUnit
+ {
+ code: 'test-div',
+ mediaTypes: {
+ video: {
+ context: 'outstream',
+ playerSize: [640, 480]
+ }
+ },
+ bids: [{
+ bidder: 'ocm',
+ params: {
+ aid: 472386
+ }
+ }]
+ },
+
+ // Video ADPOD adUnit
+ {
+ code: 'test-div',
+ sizes: [[640, 480]],
+ mediaTypes: {
+ video: {
+ context: 'adpod',
+ playerSize: [640, 480]
+ }
+ },
+ bids: [{
+ bidder: 'ocm',
+ params: {
+ aid: 472386
+ }
+ }]
+ },
+
+ // Banner adUnit
+ {
+ code: 'test-div',
+ mediaTypes:{
+ banner:{
+ sizes: [[300, 250]]
+ }
+ }
+ bids: [{
+ bidder: 'ocm',
+ params: {
+ aid: 529814
+ }
+ }]
+ }
+ ];
+```
diff --git a/dev-docs/bidders/oftmedia.md b/dev-docs/bidders/oftmedia.md
index dcb7302602..6d7b381972 100644
--- a/dev-docs/bidders/oftmedia.md
+++ b/dev-docs/bidders/oftmedia.md
@@ -5,11 +5,18 @@ description: Prebid One Fifty Two Media Bidder Adaptor
pbjs: true
biddercode: oftmedia
aliasCode : appnexus
-gdpr_supported: true
+tcfeu_supported: true
coppa_supported: true
usp_supported: true
-pbs: true
+pbs: false
schain_supported: true
+media_types: banner, video, native
+prebid_member: true
+userIds: criteo, identityLink, netId, pubProvidedId, uid2, unifiedId,
+floors_supported: true
+fpd_supported: true
+gvl_id: 32
+sidebarType: 1
---
### Bid Params
diff --git a/dev-docs/bidders/oftmediahb.md b/dev-docs/bidders/oftmediahb.md
deleted file mode 100644
index 6c90055382..0000000000
--- a/dev-docs/bidders/oftmediahb.md
+++ /dev/null
@@ -1,20 +0,0 @@
----
-layout: bidder
-title: 152MediaHB
-description: Prebid 152MediaHB Bidder Adaptor
-pbjs: true
-media_types: video
-gdpr_supported: true
-biddercode: oftmediahb
-aliasCode : adkernel
----
-
-### Bid Params
-
-{: .table .table-bordered .table-striped }
-| Name | Scope | Description | Example | Type |
-|----------|----------|-----------------------|---------------------------|----------|
-| `host` | required | Ad network's RTB host | `'cpm.152media.com'` | `string` |
-| `zoneId` | required | RTB zone id | `'30164'` | `string` |
-
-oftmediahb is an aliased bidder for AdKernel
diff --git a/dev-docs/bidders/ogury.md b/dev-docs/bidders/ogury.md
index a1ae8c5f42..e80db70e7e 100644
--- a/dev-docs/bidders/ogury.md
+++ b/dev-docs/bidders/ogury.md
@@ -3,7 +3,7 @@ layout: bidder
title: ogury
description: Ogury Bidder Adapter
biddercode: ogury
-gdpr_supported: true
+tcfeu_supported: true
gvl_id: 31
usp_supported: false
coppa_supported: false
@@ -16,15 +16,30 @@ deals_supported: false
pbjs: true
pbs: false
prebid_member: false
+sidebarType: 1
---
-### Note:
+### Registration
-The Ogury Bidding adapter requires setup before start of usage: some configuration & account creation needs to be done. Please contact us at web.inventory@ogury.co
+ Before Ogury's adapter integration, you have to register an account in the Ogury Platform. Please contact if you're interested in a partnership.
+If you already have an account you'll need to register your websites (= assets) and the placements (= ad units) within the Platform. Alternatively reach out to your POC within Ogury to assist you with the placement creation.
+A detailed overview about the integration process can be found in [this documentation](https://ogury-ltd.gitbook.io/mobile-web/header-bidding/ogury-prebid.js-adapter-integration).
-### Bid Params
+ After this registration, you will receive the Asset IDs and Ad Unit IDs to start the integration.
+
+### Mandatory bid Params
+
+The minimal list of bid params is:
{: .table .table-bordered .table-striped }
| Name | Scope | Description | Example | Type |
|---------------|----------|-----------------------|-----------|-----------|
| `assetKey` | required | The asset key provided by Ogury | `'OGY-CA41D116484F'` | `string` |
| `adUnitId` | required | Your ad unit id configured with Ogury | `'2c4d61d0-90aa-0139-0cda-0242ac120004'` | `string` |
+
+### Optional bid Params
+
+Depending on your advertising format needs, other optional parameters can be used. Supported parameters are detailed [here](https://ogury-ltd.gitbook.io/mobile-web/header-bidding/ogury-prebid.js-adapter-integration#optional-configuration).
+
+## How to contact us
+
+If you have any technical concerns or questions about the adapter, please contact .
diff --git a/dev-docs/bidders/oms.md b/dev-docs/bidders/oms.md
new file mode 100644
index 0000000000..5990e56780
--- /dev/null
+++ b/dev-docs/bidders/oms.md
@@ -0,0 +1,43 @@
+---
+layout: bidder
+title: Online Media Solutions
+description: Prebid Online Media Solutions(OMS) Bidder Adapter
+tcfeu_supported: true
+coppa_supported: true
+usp_supported: true
+pbjs: true
+pbs: true
+biddercode: oms
+prebid_member: false
+floors_supported: true
+safeframes_ok: true
+media_types: banner
+schain_supported: true
+userIds: id5Id, identityLink, pubProvidedId
+pbs_app_supported: true
+sidebarType: 1
+gvl_id: 883
+fpd_supported: true
+gpp_sids: tcfeu, usnat
+ortb_blocking_supported: true
+---
+### Note
+
+The bidder requires setup before usage. Please get in touch with our team at to get started.
+
+### Prebid.JS Bid Params
+
+{: .table .table-bordered .table-striped }
+
+| Name | Scope | Description | Example | Type |
+| ---- | ----- | ----------- | ------- | ---- |
+| `publisherId` | required | Unique publisher ID | `12345` | `integer` |
+| `bidFloor` | optional | The minimum bid value desired | `1.23` | `float` |
+
+### Prebid Server Bid Params
+
+{: .table .table-bordered .table-striped }
+
+| Name | Scope | Description | Example | Type |
+|---------------|----------|---------------------|---------------|----------|
+| `pid` | required | Unique publisher ID | `'12345'` | `string` |
diff --git a/dev-docs/bidders/oneVideo.md b/dev-docs/bidders/oneVideo.md
deleted file mode 100644
index 4b50d23c55..0000000000
--- a/dev-docs/bidders/oneVideo.md
+++ /dev/null
@@ -1,35 +0,0 @@
----
-layout: bidder
-title: OneVideo
-description: Prebid One Video Bidder Adaptor
-pbjs: true
-biddercode: oneVideo
-media_types: video
-gdpr_supported: true
-usp_supported: true
----
-
-### IMPORTANT NOTICE!
-**TL;DR**
-1. The `oneVideo` adapter is scheduled to be depreciated.
-2. Our New `yahoossp` is available for early adoption.
-3. Please contact your Account Manager/Executive for migration details.
-
-Dear Publishers & Partners,
-As part of our platform consolidation process to simplify your integrations moving forward
-We invite you to switch from the `oneVideo` Adapter to our NEW `yahoossp` bid adapter for both Display & Video inventory.
-FYI - The oneVideo adapter is scheduled for depreciation in the upcoming months.
-
-Thanks in advance,
-Yahoo SSP
-
-### Note:
-
-One Video adapter only supports video ads.
-
-### Bid Params
-
-{: .table .table-bordered .table-striped }
-| Name | Scope | Description | Example | Type |
-|---------|----------|--------------|----------|----------|
-| `pubId` | required | Publisher ID | `'brxd'` | `string` |
diff --git a/dev-docs/bidders/onedisplay.md b/dev-docs/bidders/onedisplay.md
index e0749df141..b69aa968e9 100644
--- a/dev-docs/bidders/onedisplay.md
+++ b/dev-docs/bidders/onedisplay.md
@@ -5,9 +5,12 @@ description: Prebid AOL Bidder Adaptor
pbjs: true
biddercode: onedisplay
aliasCode : aol
+sidebarType: 1
---
-### IMPORTANT NOTICE!
+### IMPORTANT NOTICE
+
**TL;DR**
+
1. The `onedisplay` adapter is scheduled to be depreciated.
2. Our New `yahoossp` is available for early adoption.
3. Please contact your Account Manager/Executive for migration details.
@@ -20,7 +23,6 @@ FYI - The oneVideo adapter is scheduled for depreciation in the upcoming months.
Thanks in advance,
Yahoo SSP
-
### Bid Params
{: .table .table-bordered .table-striped }
diff --git a/dev-docs/bidders/onefiftytwomedia.md b/dev-docs/bidders/onefiftytwomedia.md
deleted file mode 100644
index d7b157bcdb..0000000000
--- a/dev-docs/bidders/onefiftytwomedia.md
+++ /dev/null
@@ -1,69 +0,0 @@
----
-layout: bidder
-title: 152 Media 3.0
-description: Prebid 152 Media RTB Bidder Adapter
-pbjs: true
-biddercode: onefiftytwomedia
-aliasCode: adtelligent
-media_types: banner, video
----
-
-### Bid params
-
-{: .table .table-bordered .table-striped }
-| Name | Scope | Description | Example | Type |
-|-------|----------|---------------------------------|----------|-----------|
-| `aid` | required | The source ID | `350975` | `integer` |
-
-
-### Test Parameters
-```
- var adUnits = [
-
- // Video instream adUnit
- {
- code: 'div-test-div',
- sizes: [[640, 480]],
- mediaTypes: {
- video: {
- context: 'instream'
- }
- },
- bids: [{
- bidder: 'onefiftytwomedia',
- params: {
- aid: 331133
- }
- }]
- },
-
- // Video outstream adUnit
- {
- code: 'outstream-test-div',
- sizes: [[640, 480]],
- mediaTypes: {
- video: {
- context: 'outstream'
- }
- },
- bids: [{
- bidder: 'onefiftytwomedia',
- params: {
- aid: 331133
- }
- }]
- },
-
- // Banner adUnit
- {
- code: 'div-test-div',
- sizes: [[300, 250]],
- bids: [{
- bidder: 'onefiftytwomedia',
- params: {
- aid: 350975
- }
- }]
- }
- ];
-```
diff --git a/dev-docs/bidders/onemobile.md b/dev-docs/bidders/onemobile.md
index aabc65de76..c6a264b321 100644
--- a/dev-docs/bidders/onemobile.md
+++ b/dev-docs/bidders/onemobile.md
@@ -5,10 +5,13 @@ description: Prebid AOL Bidder Adaptor aliase
pbjs: true
biddercode: onemobile
aliasCode : aol
+sidebarType: 1
---
-### IMPORTANT NOTICE!
+### IMPORTANT NOTICE
+
**TL;DR**
+
1. The `onemobile` adapter is scheduled to be depreciated.
2. Our New `yahoossp` is available for early adoption.
3. Please contact your Account Manager/Executive for migration details.
diff --git a/dev-docs/bidders/oneplanetonly.md b/dev-docs/bidders/oneplanetonly.md
index 4eba8521e5..56f336f612 100644
--- a/dev-docs/bidders/oneplanetonly.md
+++ b/dev-docs/bidders/oneplanetonly.md
@@ -4,6 +4,7 @@ title: Oneplanetonly
description: Prebid Oneplanetonly Bidder Adaptor
pbjs: true
biddercode: oneplanetonly
+sidebarType: 1
---
diff --git a/dev-docs/bidders/onetag.md b/dev-docs/bidders/onetag.md
index 861137a841..e3f144a02e 100644
--- a/dev-docs/bidders/onetag.md
+++ b/dev-docs/bidders/onetag.md
@@ -6,10 +6,17 @@ pbjs: true
pbs: true
biddercode: onetag
media_types: banner, video
-gdpr_supported: true
+tcfeu_supported: true
+dsa_supported: true
+gpp_supported: true
gvl_id: 241
usp_supported: true
userIds: britepoolId, criteo, id5Id, identityLink, liveIntentId, netId, parrableId, pubCommonId, unifiedId
+schain_supported: true
+floors_supported: true
+sidebarType: 1
+coppa_supported: true
+privacy_sandbox: topics
---
diff --git a/dev-docs/bidders/onomagic.md b/dev-docs/bidders/onomagic.md
index abbcc8371a..1ec8b5c1dc 100644
--- a/dev-docs/bidders/onomagic.md
+++ b/dev-docs/bidders/onomagic.md
@@ -6,15 +6,16 @@ top_nav_section: dev_docs
nav_section: reference
pbjs: true
biddercode: onomagic
+sidebarType: 1
---
-### Note:
+### Note
The Onomagic bidder adapter requires setup and approval from the Onomagic team. Please reach out to your account manager for more information and to start using it.
### Bid Params
-{: .table .table-bordered .table-striped }
+{: .table .table-bordered .table-striped }
| Name | Scope | Description | Example | Type |
| ---- | ----- | ----------- | ------- | ---- |
diff --git a/dev-docs/bidders/open8.md b/dev-docs/bidders/open8.md
index 5bb65f9531..4a7ed810d0 100644
--- a/dev-docs/bidders/open8.md
+++ b/dev-docs/bidders/open8.md
@@ -5,8 +5,8 @@ description: Prebid OPEN8 Bidder Adaptor
pbjs: true
biddercode: open8
media_types: video, banner
-enable_download: false
-pbjs_version_notes: not ported to 5.x
+enable_download: true
+sidebarType: 1
---
### Bid Params
diff --git a/dev-docs/bidders/openweb.md b/dev-docs/bidders/openweb.md
index 162df57a03..fd07aeb675 100644
--- a/dev-docs/bidders/openweb.md
+++ b/dev-docs/bidders/openweb.md
@@ -2,63 +2,90 @@
layout: bidder
title: OpenWeb
description: Prebid OpenWeb Bidder Adapter
+pbjs: true
biddercode: openweb
-media_types: banner
-gdpr_supported: true
-userIds: britepoolId, criteo, id5Id, identityLink, liveIntentId, netId, parrableId, pubCommonId, unifiedId
+media_types: banner, video
+multiformat_supported: will-bid-on-any
schain_supported: true
coppa_supported: true
+tcfeu_supported: true
+gpp_supported: true
+gpp_sids: tcfeu, usstate_all, usp
usp_supported: true
-safeframes_ok: true
-prebid_member: true
-pbjs: true
-pbs: true
+safeframes_ok: false
+pbs: false
+floors_supported: true
+userIds: all
+fpd_supported: true
gvl_id: 280
+sidebarType: 1
---
-### Bid params
+### Note
+
+The OpenWeb adapter requires setup and approval. Please reach out to to setup an OpenWeb account.
+
+### Bid Parameters
+
+#### Banner, Video
{: .table .table-bordered .table-striped }
-| Name | Scope | Description | Example | Type |
-|-------|----------|---------------------------------|----------|-----------|
-| `aid` | required | The source ID from OpenWeb. | `650342` | `integer` |
+| Name | Scope | Type | Description | Example
+| ---- | ----- | ---- | ----------- | -------
+| `org` | required | String | OpenWeb publisher Id provided by your OpenWeb representative | "1234567890abcdef12345678"
+| `floorPrice` | optional | Number | Minimum price in USD. **WARNING:** Misuse of this parameter can impact revenue | 2.00
+| `placementId` | optional | String | A unique placement identifier | "12345678"
+| `testMode` | optional | Boolean | This activates the test mode | false
-### Description
-OpenWeb.com official prebid adapter. Available in both client and server side versions.
-OpenWeb header bidding adapter provides solution for accessing banner demand.
+## Example
-### Test Parameters
-```
-var adUnits = [
- // Banner adUnit
- {
- mediaTypes: {
+```javascript
+var adUnits = [{
+ code: 'banner-div',
+ mediaTypes: {
banner: {
- sizes: [[300, 250]]
+ sizes: [
+ [300, 250],
+ [728, 90]
+ ]
}
- },
- code: 'div-test-div',
- bids: [{
- bidder: 'openweb',
- params: {
- aid: 650342
- }
- }]
- },
- // Prebid server
- {
- mediaTypes: {
- banner: {
- sizes: [[300, 250]]
+ },
+ bids: [{
+ bidder: 'openweb',
+ params: {
+ org: '1234567890abcdef12345678', // Required
+ floorPrice: 0.05, // Optional
+ placementId: '12345678', // Optional
+ testMode: false // Optional
+ }
+ }]
+ },
+ {
+ code: 'dfp-video-div',
+ sizes: [
+ [640, 480]
+ ],
+ mediaTypes: {
+ video: {
+ playerSize: [
+ [640, 480]
+ ],
+ context: 'instream'
+ }
+ },
+ bids: [{
+ bidder: 'openweb',
+ params: {
+ org: '1234567890abcdef12345678', // Required
+ floorPrice: 5.00, // Optional
+ placementId: '12345678', // Optional
+ testMode: false // Optional
}
- },
- code: 'div-test-div',
- bids: [{
- bidder: 'openweb',
- params: {
- aid: 650346
- }
- }]
- }
+ }]
+ }
];
```
+
+### Configuration
+
+OpenWeb recommends setting UserSync by iframe for monetization.
diff --git a/dev-docs/bidders/openwebvideo.md b/dev-docs/bidders/openwebvideo.md
index bc6a663c50..8dcb9f1fee 100644
--- a/dev-docs/bidders/openwebvideo.md
+++ b/dev-docs/bidders/openwebvideo.md
@@ -6,13 +6,16 @@ pbjs: true
biddercode: openwebvideo
aliasCode: aniview
media_types: banner, video
-gdpr_supported: true
+gvl_id: 780 (aniview)
+tcfeu_supported: true
usp_supported: true
schain_supported: true
safeframes_ok: true
+sidebarType: 1
---
-### Note:
+### Note
+
For more information about [OpenWeb](https://www.openweb.com/).
### Bid Params
@@ -24,7 +27,8 @@ For more information about [OpenWeb](https://www.openweb.com/).
| `AV_CHANNELID` | required | Channel id | `'5a5f17a728a06102d14c2718'` | `string` |
### Test Parameters
-```
+
+```javascript
videoAdUnit = [
{
code: 'video1',
diff --git a/dev-docs/bidders/openwebxchange.md b/dev-docs/bidders/openwebxchange.md
new file mode 100644
index 0000000000..eb7da48e83
--- /dev/null
+++ b/dev-docs/bidders/openwebxchange.md
@@ -0,0 +1,97 @@
+---
+layout: bidder
+title: OpenWebXChange
+description: Prebid OpenWebXChange Bidder Adapter
+multiformat_supported: will-bid-on-any
+pbjs: true
+biddercode: openwebxchange
+media_types: banner, video
+schain_supported: true
+coppa_supported: true
+pbs: false
+tcfeu_supported: true
+usp_supported: true
+floors_supported: true
+userIds: all
+gvl_id: 280
+sidebarType: 1
+---
+
+### Note
+
+The OpenWebXChange adapter requires setup and approval.
+
+### Bid Parameters
+
+#### Banner, Video
+
+{: .table .table-bordered .table-striped }
+| Name | Scope | Type | Description | Example
+| ---- | ----- | ---- | ----------- | -------
+| `org` | required | String | OpenWebXChange publisher Id | "1234567890abcdef12345678"
+| `floorPrice` | optional | Number | Minimum price in USD. **WARNING:** Misuse of this parameter can impact revenue | 2.00
+| `placementId` | optional | String | A unique placement identifier | "12345678"
+| `testMode` | optional | Boolean | This activates the test mode | false
+| `rtbDomain` | optional | String | Sets the seller end point | "www.test.com"
+| `is_wrapper` | private | Boolean | Please don't use unless your account manager asked you to | false
+| `currency` | optional | String | 3 letters currency | "EUR"
+
+## Example
+
+```javascript
+var adUnits = [{
+ code: 'banner-div',
+ mediaTypes: {
+ banner: {
+ sizes: [
+ [300, 250],
+ [728, 90]
+ ]
+ }
+ },
+ bids: [{
+ bidder: 'openwebxchange',
+ params: {
+ org: '1234567890abcdef12345678', // Required
+ floorPrice: 0.05, // Optional
+ placementId: '12345678', // Optional
+ testMode: false, // Optional,
+ rtbDomain: 'www.test.com' //Optional
+ }
+ }]
+ },
+ {
+ code: 'dfp-video-div',
+ sizes: [
+ [640, 480]
+ ],
+ mediaTypes: {
+ video: {
+ playerSize: [
+ [640, 480]
+ ],
+ context: 'instream'
+ }
+ },
+ bids: [{
+ bidder: 'openwebxchange',
+ params: {
+ org: '1234567890abcdef12345678', // Required
+ floorPrice: 5.00, // Optional
+ placementId: '12345678', // Optional
+ testMode: false, // Optional,
+ rtbDomain: 'www.test.com' //Optional
+ }
+ }]
+ }
+];
+```
+
+### Configuration
+
+We recommend setting UserSync by iframe for monetization.
+
+### Versions
+
+Prebid versions 5.0-5.3 are not supported
+Banner >= 6.14.0
diff --git a/dev-docs/bidders/openx.md b/dev-docs/bidders/openx.md
index 9bc0dab52e..db7088974f 100644
--- a/dev-docs/bidders/openx.md
+++ b/dev-docs/bidders/openx.md
@@ -7,44 +7,152 @@ pbs: true
biddercode: openx
media_types: banner, video
schain_supported: true
-gdpr_supported: true
+tcfeu_supported: true
usp_supported: true
coppa_supported: true
+gpp_supported: true
floors_supported: true
-userIds: admixerId, adtelligentId, amxId, britepoolId, criteo, dapId, deepintentId, dmdId, fabrickId, flocId, hadronId, id5Id, identityLink, idxId, imuId, intentIqId, kinessoId, liveIntentId, lotamePanoramaId, merkleId, mwOpenLinkId, naveggId, netId, nextrollId, novatiq, parrableId, pubCommonId, publinkId, quantcastId, sharedId, tapadId, uid2, unifiedId, verizonMediaId, zeotapIdPlus
+userIds: admixerId, adtelligentId, amxId, britepoolId, criteo, dapId, deepintentId, dmdId, fabrickId, hadronId, id5Id, identityLink, idxId, imuId, intentIqId, kinessoId, liveIntentId, lotamePanoramaId, merkleId, mwOpenLinkId, naveggId, netId, novatiq, parrableId, pubCommonId, publinkId, quantcastId, sharedId, tapadId, uid2, unifiedId, verizonMediaId, zeotapIdPlus
prebid_member: true
fpd_supported: true
gvl_id: 69
+sidebarType: 1
---
### Registration
-If you have any questions regarding set up, please reach out to your account manager or support@openx.com.
+If you have any questions regarding set up, please reach out to your account manager or .
+
+Please note that OpenX is transitioning its serving architecture and currently has 2 bid adapters as of Prebid 7. The legacy adapter is named openxBidAdapter.
+The newer of the two is openxOrtbBidAdapter. Publishers are welcome to test with openxOrtbBidAdapter and give feedback.
+After the transition openxOrtbBidAdapter will replace openxBidAdapter.
+
+IMPORTANT: only include either openxBidAdapter or openxOrtbBidAdapter in your build.
+
+### Prebid Server Note
+
+{% include dev-docs/pbjs-adapter-required-for-pbs.md %}
### Bid Parameters
+
#### Banner
{: .table .table-bordered .table-striped }
| Name | Scope | Description | Example | Type |
| ---- | ----- | ----------- | ------- | ---- |
-| `delDomain` or `platform` | required | OpenX delivery domain or platform id provided by your OpenX representative. Both may be present. `platform` is preferred | "PUBLISHER-d.openx.net" or "555not5a-real-plat-form-id0123456789" | String |
+| `delDomain` ~~or `platform`~~** | required | OpenX delivery domain provided by your OpenX representative. | "PUBLISHER-d.openx.net" | String |
| `unit` | required | OpenX ad unit ID provided by your OpenX representative. | "1611023122" | String |
| `customParams` | optional | User-defined targeting key-value pairs. customParams applies to a specific unit. | `{key1: "v1", key2: ["v2","v3"]}` | Object |
-| `customFloor` | optional | Minimum price in USD. customFloor applies to a specific unit. For example, use the following value to set a $1.50 floor: 1.50 **WARNING:** Misuse of this parameter can impact revenue | 1.50 | Number |
+| `customFloor` | optional | Minimum price in USD. customFloor applies to a specific unit. For example, use the following value to set a $1.50 floor: 1.50 **WARNING:** Misuse of this parameter can impact revenue. Note: OpenX suggests using the [Price Floor Module](/dev-docs/modules/floors.html) instead of customFloor. The Price Floor Module is prioritized over customFloor if both are present. | 1.50 | Number |
| `doNotTrack` | optional | Prevents advertiser from using data for this user. **WARNING:** Impacts all bids in the request. May impact revenue. | true | Boolean |
| `coppa` | optional | Enables Child's Online Privacy Protection Act (COPPA) regulations. **WARNING:** Impacts all bids in the request. May impact revenue. | true | Boolean |
+** platform is deprecated. Please use delDomain instead. If you have any questions please contact your representative.
+
+### AdUnit Format for Banner
+
+```javascript
+var adUnits = [
+ {
+ code: 'test-div',
+ sizes: [[728, 90]], // a display size
+ mediaTypes: {'banner': {}},
+ bids: [
+ {
+ bidder: 'openx',
+ params: {
+ unit: '539439964',
+ delDomain: 'se-demo-d.openx.net',
+ customParams: {
+ key1: 'v1',
+ key2: ['v2', 'v3']
+ },
+ }
+ }, {
+ bidder: 'openx',
+ params: {
+ unit: '539439964',
+ delDomain: 'se-demo-d.openx.net',
+ customParams: {
+ key1: 'v1',
+ key2: ['v2', 'v3']
+ },
+ }
+ }
+ ]
+ }
+];
+```
+
#### Video
{: .table .table-bordered .table-striped }
| Name | Scope | Description | Example | Type |
| ---- | ----- | ----------- | ------- | ---- |
| `unit` | required | OpenX ad unit ID provided by your OpenX representative. | "1611023122" | String |
-| `delDomain` or `platform` | required | OpenX delivery domain or platform id provided by your OpenX representative. Both may be present. `platform` is preferred | "PUBLISHER-d.openx.net" or "555not5a-real-plat-form-id0123456789" | String |
-| `openrtb` | optional | An OpenRtb Impression with Video subtype properties | `{ imp: [{ video: {mimes: ['video/x-ms-wmv, video/mp4']} }] }` | Object |
+| `delDomain` ~~or `platform`~~** | required | OpenX delivery domain provided by your OpenX representative. | "PUBLISHER-d.openx.net" | String |
+
+** platform is deprecated. Please use delDomain instead. If you have any questions please contact your representative.
+
+#### mediaTypes.video
+
+The following video parameters are supported here so publishers may fully declare their video inventory:
+
+{: .table .table-bordered .table-striped }
+| Name | Scope | Description | Example | Type |
+|----------------|--------------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|---------|-----------|
+| context | required | instream or outstream |"outstream" | string |
+| playerSize| required | width, height of the player in pixels | [640,360] - will be translated to w and h in bid request | array |
+| mimes | required | List of content MIME types supported by the player (see openRTB v2.5 for options) | ["video/mp4"]| array|
+| protocols | recommended | Supported video bid response protocol values 1: VAST 1.0 2: VAST 2.0 3: VAST 3.0 4: VAST 1.0 Wrapper 5: VAST 2.0 Wrapper 6: VAST 3.0 Wrapper 7: VAST 4.0 8: VAST 4.0 Wrapper | [2,3,5,6] | array|
+| api | recommended | Supported API framework values: 1: VPAID 1.0 2: VPAID 2.0 3: MRAID-1 4: ORMMA 5: MRAID-2 | [2] | array |
+| linearity | recommended | OpenRTB2 linearity. 1: linear (in-stream ad), 2: non-linear (overlay ad) | 1 | integer |
+| maxduration | recommended | Maximum video ad duration in seconds. | 30 | integer |
+| minduration | recommended | Minimum video ad duration in seconds | 6 | integer |
+| playbackmethod | recommended | Playback methods that may be in use. Only one method is typically used in practice. (see openRTB v2.5 section 5.10 for options)| [2]| array |
+| minbitrate | optional | Minimum bit rate in Kbps. | 300 | integer |
+| maxbitrate | optional | Maximum bit rate in Kbps. | 9600 | integer |
+| battr | optional | Blocked creative attributes | [13,14] | array