diff --git a/bootstrap.info.yml b/bootstrap.info.yml
index 3d5e8ab..cd35a8a 100644
--- a/bootstrap.info.yml
+++ b/bootstrap.info.yml
@@ -22,6 +22,7 @@ regions:
 
 libraries:
   - 'bootstrap/theme'
+  - 'bootstrap/global-styling'
 
 libraries-extend:
   core/drupal.ajax:
diff --git a/bootstrap.libraries.yml b/bootstrap.libraries.yml
index 74a46ed..c9dc631 100644
--- a/bootstrap.libraries.yml
+++ b/bootstrap.libraries.yml
@@ -174,3 +174,11 @@ drupal.vertical-tabs:
     - bootstrap/theme
     - core/once
     - core/drupal.form
+
+global-styling:
+  css:
+    component:
+      css/drupal-bootstrap-not-cdn.min.css: {}
+  less:
+    component:
+      css/vendor-prefixes.less: {}
diff --git a/css/drupal-bootstrap-not-cdn.min.css b/css/drupal-bootstrap-not-cdn.min.css
new file mode 100644
index 0000000..ed940b6
--- /dev/null
+++ b/css/drupal-bootstrap-not-cdn.min.css
@@ -0,0 +1 @@
+.alert-sm{padding:5px 10px}.alert a{font-weight:700}.alert-success a,.alert-success a:focus,.alert-success a:hover{color:#2b542c}.alert-info a,.alert-info a:focus,.alert-info a:hover{color:#245269}.alert-warning a,.alert-warning a:focus,.alert-warning a:hover{color:#66512c}.alert-danger a,.alert-danger a:focus,.alert-danger a:hover{color:#843534}@keyframes glyphicon-spin{0%{transform:rotate(0)}100%{transform:rotate(359deg)}}.glyphicon-spin{display:inline-block;animation:1s linear infinite glyphicon-spin}a .glyphicon-spin{display:inline-block;text-decoration:none}html.js .btn .ajax-throbber{margin-left:.5em;margin-right:-.25em}html.js .form-item .input-group-addon .glyphicon{color:#777;opacity:.5;transition:color 150ms,opacity 150ms}html.js .form-item .input-group-addon .glyphicon.glyphicon-spin{color:#337ab7;opacity:1}html.js .form-item .input-group-addon .input-group-addon{background-color:#fff}html.js .ajax-new-content:empty{display:none!important}.field--label{font-weight:700}.field--label-inline .field--items,.field--label-inline .field--label{float:left}.field--label-inline .field--items,.field--label-inline .field--label,.field--label-inline>.field--item{padding-right:.5em}[dir=rtl] .field--label-inline .field--items,[dir=rtl] .field--label-inline .field--label{padding-left:.5em;padding-right:0;float:right}.field--label-inline .field--label::after{content:':'}.file{display:table;font-size:75%;font-weight:700;margin:5px 0;width:100%}.file>span{background:#fff;color:#337ab7;border-bottom:1px solid #ccc;border-top:1px solid #ccc}.file>span:first-child{border-left:1px solid #ccc}.file>span:last-child{border-right:1px solid #ccc}.file>.tabledrag-changed{background:#fcf8e3;border-radius:0;color:#8a6d3b;display:table-cell;padding:0 1em;top:0;vertical-align:middle;border-left:1px solid inherit}.file>.tabledrag-changed,.file>.tabledrag-changed:last-child{border:1px solid #f7e1b5}.file-icon{display:table-cell;font-size:150%;padding:.25em .5em;text-align:center;vertical-align:middle}.file-link{display:table-cell;vertical-align:middle;width:100%}.file-link a,.file-link a:active,.file-link a:focus,.file-link a:hover{color:inherit}.file-size{display:table-cell;padding:0 1em;text-align:right;white-space:pre;vertical-align:middle}.image-widget.row{overflow:hidden}.filter-wrapper{background-color:#fff;border:1px solid #ddd;border-top:0;border-radius:0 0 4px 4px;box-shadow:0 1px 1px rgba(0,0,0,.05);margin-bottom:0;padding:10px;height:51px}.filter-help{float:right;line-height:1;margin:.5em 0 0}.nav.nav-tabs.filter-formats{margin-bottom:15px}table .checkbox.form-no-label,table .radio.form-no-label{margin-bottom:0;margin-top:0}.select-wrapper{display:inline-block;position:relative;width:100%}.form-inline .select-wrapper{width:auto}.input-group .select-wrapper{display:table-cell}.input-group .select-wrapper:first-child .form-control:first-child{border-top-left-radius:4px;border-bottom-left-radius:4px}.input-group .select-wrapper:last-child .form-control:first-child{border-top-right-radius:4px;border-bottom-right-radius:4px}.select-wrapper select{-webkit-appearance:none;-moz-appearance:none;appearance:none;line-height:1;padding-right:2em}.select-wrapper select::-ms-expand{opacity:0}.select-wrapper:after{color:#337ab7;content:'▼';font-style:normal;font-weight:400;line-height:1;margin-top:-.5em;padding-right:.5em;pointer-events:none;position:absolute;right:0;top:50%;z-index:10}.has-glyphicons .select-wrapper:after{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;content:'\e114';display:inline-block;font-family:'Glyphicons Halflings'}.has-error .select-wrapper:after{color:#a94442}.has-success .select-wrapper:after{color:#3c763d}.has-warning .select-wrapper:after{color:#8a6d3b}.form-required:after{background-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiI+PHBhdGggZmlsbD0iI0VFMDAwMCIgIGQ9Ik0wLDcuNTYybDEuMTE0LTMuNDM4YzIuNTY1LDAuOTA2LDQuNDMsMS42ODgsNS41OSwyLjM1QzYuMzk4LDMuNTUzLDYuMjM3LDEuNTQ0LDYuMjIsMC40NDdoMy41MTEgYy0wLjA1LDEuNTk3LTAuMjM0LDMuNi0wLjU1OCw2LjAwM2MxLjY2NC0wLjgzOCwzLjU2Ni0xLjYxMyw1LjcxNC0yLjMyNUwxNiw3LjU2MmMtMi4wNSwwLjY3OC00LjA2LDEuMTMxLTYuMDI4LDEuMzU2IGMwLjk4NCwwLjg1NiwyLjM3MiwyLjM4MSw0LjE2Niw0LjU3NWwtMi45MDYsMi4wNTljLTAuOTM1LTEuMjc0LTIuMDQxLTMuMDA5LTMuMzE2LTUuMjA2Yy0xLjE5NCwyLjI3NS0yLjI0NCw0LjAxMy0zLjE0Nyw1LjIwNiBsLTIuODU2LTIuMDU5YzEuODcyLTIuMzA3LDMuMjExLTMuODMyLDQuMDE3LTQuNTc1QzMuODQ5LDguNTE2LDEuODcyLDguMDYyLDAsNy41NjIiLz48L3N2Zz4K);background-size:10px 7px;content:"";display:inline-block;vertical-align:super;line-height:1;height:7px;width:10px}.form-actions .btn,.form-actions .btn-group{margin-right:10px}.form-actions .btn-group .btn{margin-right:0}a .glyphicon.icon-before,a.icon-before .glyphicon{margin-right:.25em}a .glyphicon.icon-after,a.icon-after .glyphicon{margin-left:.25em}.btn .glyphicon.icon-before,.btn.icon-before .glyphicon{margin-left:-.25em;margin-right:.25em}.btn .glyphicon.icon-after,.btn.icon-after .glyphicon{margin-left:.25em;margin-right:-.25em}body{position:relative}body.navbar-is-static-top{margin-top:0}body.navbar-is-fixed-top{margin-top:65px}body.navbar-is-fixed-bottom{padding-bottom:65px}@media screen and (max-width:767px){body.toolbar-vertical.navbar-is-fixed-bottom .toolbar-bar,body.toolbar-vertical.navbar-is-fixed-top .toolbar-bar{position:fixed}body.toolbar-vertical.navbar-is-fixed-bottom header,body.toolbar-vertical.navbar-is-fixed-top header{z-index:500}body.toolbar-vertical.navbar-is-fixed-top header{top:39px}}@media screen and (min-width:768px){body{margin-top:15px}.navbar.container{max-width:720px}}@media screen and (min-width:992px){.navbar.container{max-width:940px}}@media screen and (min-width:1200px){.navbar.container{max-width:1140px}}.navbar .logo{margin-right:-15px;padding-left:15px;padding-right:15px}@media screen and (min-width:768px){.navbar .logo{margin-right:0;padding-left:0}}.is-unpublished{background-color:#fff4f4}.node-preview-container{margin-top:-15px}.node-preview-form-select{padding:15px}.panel-title{display:block;margin:-10px -15px;padding:10px 15px}.panel-title,.panel-title:focus,.panel-title:hover,.panel-title:hover:focus{color:inherit}.panel-title:focus,.panel-title:hover{text-decoration:none}.progress-wrapper{margin-bottom:15px}.progress-wrapper:last-child .progress{margin-bottom:5px}.progress-wrapper .message{font-weight:700;margin-bottom:5px}.progress-wrapper .percentage,.progress-wrapper .progress-label{font-size:12px}.progress-wrapper .progress-bar{min-width:2em}.tabledrag-toggle-weight{float:right;margin:1px 2px 1px 10px}.tabledrag-changed-warning{margin:0;overflow:hidden}.tabledrag-handle{color:#777;cursor:move;float:left;font-size:125%;line-height:1;margin:-10px 0 0 -10px;padding:10px}.tabledrag-handle:focus,.tabledrag-handle:hover{color:#337ab7}.indentation{float:left;height:1.7em;margin:-.4em .2em -.4em -.4em;padding:.42em 0 .42em .6em;width:20px}[dir=rtl] .indentation{float:right;margin:-.4em -.4em -.4em .2em;padding:.42em .6em .42em 0}.local-actions{margin:10px 0 10px -5px}.tabs--secondary{margin:10px 0 5px}.tabbable{margin-bottom:20px}.tabs-below>.nav-tabs,.tabs-left>.nav-tabs,.tabs-right>.nav-tabs{border-bottom:0}.tabs-below>.nav-tabs .summary,.tabs-left>.nav-tabs .summary,.tabs-right>.nav-tabs .summary{color:#777;font-size:12px}.tab-pane>.panel-heading{display:none}.tab-content>.active{display:block}.tabs-below>.nav-tabs{border-top:1px solid #ddd}.tabs-below>.nav-tabs>li{margin-top:-1px;margin-bottom:0}.tabs-below>.nav-tabs>li>a{border-radius:0 0 4px 4px}.tabs-below>.nav-tabs>li>a:focus,.tabs-below>.nav-tabs>li>a:hover{border-top-color:#ddd;border-bottom-color:transparent}.tabs-below>.nav-tabs>.active>a,.tabs-below>.nav-tabs>.active>a:focus,.tabs-below>.nav-tabs>.active>a:hover{border-color:transparent #ddd #ddd}.tabs-left>.nav-tabs,.tabs-right>.nav-tabs{padding-bottom:20px;width:220px}.tabs-left>.nav-tabs>li,.tabs-right>.nav-tabs>li{float:none}.tabs-left>.nav-tabs>li:focus,.tabs-right>.nav-tabs>li:focus{outline:0}.tabs-left>.nav-tabs>li>a,.tabs-right>.nav-tabs>li>a{margin-right:0;margin-bottom:3px}.tabs-left>.nav-tabs>li>a:focus,.tabs-right>.nav-tabs>li>a:focus{outline:0}.tabs-left>.tab-content,.tabs-right>.tab-content{border-radius:0 4px 4px;border:1px solid #ddd;box-shadow:0 1px 1px rgba(0,0,0,.05);overflow:hidden;padding:10px 15px}.tabs-left>.nav-tabs{float:left;margin-right:-1px}.tabs-left>.nav-tabs>li>a{border-radius:4px 0 0 4px}.tabs-left>.nav-tabs>li>a:focus,.tabs-left>.nav-tabs>li>a:hover{border-color:#eee #ddd #eee #eee}.tabs-left>.nav-tabs>.active>a,.tabs-left>.nav-tabs>.active>a:focus,.tabs-left>.nav-tabs>.active>a:hover{border-color:#ddd transparent #ddd #ddd;box-shadow:-1px 1px 1px rgba(0,0,0,.05)}.tabs-right>.nav-tabs{float:right;margin-left:-1px}.tabs-right>.nav-tabs>li>a{border-radius:0 4px 4px 0}.tabs-right>.nav-tabs>li>a:focus,.tabs-right>.nav-tabs>li>a:hover{border-color:#eee #eee #eee #ddd;box-shadow:1px 1px 1px rgba(0,0,0,.05)}.tabs-right>.nav-tabs>.active>a,.tabs-right>.nav-tabs>.active>a:focus,.tabs-right>.nav-tabs>.active>a:hover{border-color:#ddd #ddd #ddd transparent}body.toolbar-fixed .toolbar-oriented .toolbar-bar{z-index:1031}body.toolbar-fixed .navbar-fixed-top{top:39px}body.toolbar-fixed.toolbar-horizontal.toolbar-tray-open .navbar-fixed-top{top:79px}body.toolbar-fixed.toolbar-vertical.toolbar-tray-open .navbar-fixed-top{left:240px}body.toolbar-fixed.toolbar-vertical.toolbar-tray-open.toolbar-fixed{margin-left:240px}body.toolbar-fixed.toolbar-vertical.toolbar-tray-open.toolbar-fixed .toolbar-tray{padding-bottom:40px}body.toolbar-fixed.toolbar-vertical.toolbar-tray-open.toolbar-fixed .toolbar-tray,body.toolbar-fixed.toolbar-vertical.toolbar-tray-open.toolbar-fixed .toolbar-tray>.toolbar-lining:before{width:240px}body.toolbar-loading{margin-top:0}body.toolbar-loading.toolbar{margin-bottom:15px}.ui-autocomplete{background:#fff;background-clip:padding-box;border:1px solid #ccc;border:1px solid rgba(0,0,0,.15);border-radius:4px;box-shadow:0 6px 12px rgba(0,0,0,.175);color:inherit;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:14px;list-style:none;min-width:160px;padding:5px 0;text-align:left;z-index:1000}.ui-autocomplete .ui-menu-item{border:0;border-radius:0;clear:both;color:#333;cursor:pointer;display:block;font-weight:400;line-height:1.42857143;margin:0;outline:0;padding:3px 20px;text-decoration:none;white-space:nowrap}.ui-autocomplete .ui-menu-item.ui-state-hover{background:#f5f5f5;color:#262626}.ui-autocomplete .ui-menu-item.ui-state-active,.ui-autocomplete .ui-menu-item.ui-state-focus{background:#337ab7;color:#fff}ol,ul{padding-left:1.5em}.popover ol:last-child,.popover ul:last-child{margin-bottom:0}.page-header{margin-top:0}.footer{margin-top:45px;padding-top:35px;padding-bottom:36px;border-top:1px solid #e5e5e5}.form-group:last-child,.panel:last-child,p:last-child{margin-bottom:0}.region-help>.glyphicon{font-size:18px;float:left;margin:-.05em .5em 0 0}.region-help .block{overflow:hidden}.control-group .help-inline,.help-block{color:#777;font-size:12px;margin:5px 0 10px;padding:0}.control-group .help-inline:first-child,.help-block:first-child{margin-top:0}
\ No newline at end of file
diff --git a/css/vendor-prefixes.less b/css/vendor-prefixes.less
new file mode 100644
index 0000000..fd0a997
--- /dev/null
+++ b/css/vendor-prefixes.less
@@ -0,0 +1,229 @@
+// stylelint-disable indentation, property-no-vendor-prefix, selector-no-vendor-prefix
+
+// Vendor Prefixes
+//
+// All vendor mixins are deprecated as of v3.2.0 due to the introduction of
+// Autoprefixer in our Gruntfile. They have been removed in v4.
+
+// - Animations
+// - Backface visibility
+// - Box shadow
+// - Box sizing
+// - Content columns
+// - Hyphens
+// - Placeholder text
+// - Transformations
+// - Transitions
+// - User Select
+
+
+// Animations
+.animation(@animation) {
+  -webkit-animation: @animation;
+       -o-animation: @animation;
+          animation: @animation;
+}
+.animation-name(@name) {
+  -webkit-animation-name: @name;
+          animation-name: @name;
+}
+.animation-duration(@duration) {
+  -webkit-animation-duration: @duration;
+          animation-duration: @duration;
+}
+.animation-timing-function(@timing-function) {
+  -webkit-animation-timing-function: @timing-function;
+          animation-timing-function: @timing-function;
+}
+.animation-delay(@delay) {
+  -webkit-animation-delay: @delay;
+          animation-delay: @delay;
+}
+.animation-iteration-count(@iteration-count) {
+  -webkit-animation-iteration-count: @iteration-count;
+          animation-iteration-count: @iteration-count;
+}
+.animation-direction(@direction) {
+  -webkit-animation-direction: @direction;
+          animation-direction: @direction;
+}
+.animation-fill-mode(@fill-mode) {
+  -webkit-animation-fill-mode: @fill-mode;
+          animation-fill-mode: @fill-mode;
+}
+
+// Backface visibility
+// Prevent browsers from flickering when using CSS 3D transforms.
+// Default value is `visible`, but can be changed to `hidden`
+
+.backface-visibility(@visibility) {
+  -webkit-backface-visibility: @visibility;
+     -moz-backface-visibility: @visibility;
+          backface-visibility: @visibility;
+}
+
+// Drop shadows
+//
+// Note: Deprecated `.box-shadow()` as of v3.1.0 since all of Bootstrap's
+// supported browsers that have box shadow capabilities now support it.
+
+.box-shadow(@shadow) {
+  -webkit-box-shadow: @shadow; // iOS <4.3 & Android <4.1
+          box-shadow: @shadow;
+}
+
+// Box sizing
+.box-sizing(@boxmodel) {
+  -webkit-box-sizing: @boxmodel;
+     -moz-box-sizing: @boxmodel;
+          box-sizing: @boxmodel;
+}
+
+// CSS3 Content Columns
+.content-columns(@column-count; @column-gap: @grid-gutter-width) {
+  -webkit-column-count: @column-count;
+     -moz-column-count: @column-count;
+          column-count: @column-count;
+  -webkit-column-gap: @column-gap;
+     -moz-column-gap: @column-gap;
+          column-gap: @column-gap;
+}
+
+// Optional hyphenation
+.hyphens(@mode: auto) {
+  -webkit-hyphens: @mode;
+     -moz-hyphens: @mode;
+      -ms-hyphens: @mode; // IE10+
+       -o-hyphens: @mode;
+          hyphens: @mode;
+  word-wrap: break-word;
+}
+
+// Placeholder text
+.placeholder(@color: @input-color-placeholder) {
+  // Firefox
+  &::-moz-placeholder {
+    color: @color;
+    opacity: 1; // Override Firefox's unusual default opacity; see https://github.com/twbs/bootstrap/pull/11526
+  }
+  &:-ms-input-placeholder { color: @color; } // Internet Explorer 10+
+  &::-webkit-input-placeholder  { color: @color; } // Safari and Chrome
+}
+
+// Transformations
+.scale(@ratio) {
+  -webkit-transform: scale(@ratio);
+      -ms-transform: scale(@ratio); // IE9 only
+       -o-transform: scale(@ratio);
+          transform: scale(@ratio);
+}
+.scale(@ratioX; @ratioY) {
+  -webkit-transform: scale(@ratioX, @ratioY);
+      -ms-transform: scale(@ratioX, @ratioY); // IE9 only
+       -o-transform: scale(@ratioX, @ratioY);
+          transform: scale(@ratioX, @ratioY);
+}
+.scaleX(@ratio) {
+  -webkit-transform: scaleX(@ratio);
+      -ms-transform: scaleX(@ratio); // IE9 only
+       -o-transform: scaleX(@ratio);
+          transform: scaleX(@ratio);
+}
+.scaleY(@ratio) {
+  -webkit-transform: scaleY(@ratio);
+      -ms-transform: scaleY(@ratio); // IE9 only
+       -o-transform: scaleY(@ratio);
+          transform: scaleY(@ratio);
+}
+.skew(@x; @y) {
+  -webkit-transform: skewX(@x) skewY(@y);
+      -ms-transform: skewX(@x) skewY(@y); // See https://github.com/twbs/bootstrap/issues/4885; IE9+
+       -o-transform: skewX(@x) skewY(@y);
+          transform: skewX(@x) skewY(@y);
+}
+.translate(@x; @y) {
+  -webkit-transform: translate(@x, @y);
+      -ms-transform: translate(@x, @y); // IE9 only
+       -o-transform: translate(@x, @y);
+          transform: translate(@x, @y);
+}
+.translate3d(@x; @y; @z) {
+  -webkit-transform: translate3d(@x, @y, @z);
+          transform: translate3d(@x, @y, @z);
+}
+.rotate(@degrees) {
+  -webkit-transform: rotate(@degrees);
+      -ms-transform: rotate(@degrees); // IE9 only
+       -o-transform: rotate(@degrees);
+          transform: rotate(@degrees);
+}
+.rotateX(@degrees) {
+  -webkit-transform: rotateX(@degrees);
+      -ms-transform: rotateX(@degrees); // IE9 only
+       -o-transform: rotateX(@degrees);
+          transform: rotateX(@degrees);
+}
+.rotateY(@degrees) {
+  -webkit-transform: rotateY(@degrees);
+      -ms-transform: rotateY(@degrees); // IE9 only
+       -o-transform: rotateY(@degrees);
+          transform: rotateY(@degrees);
+}
+.perspective(@perspective) {
+  -webkit-perspective: @perspective;
+     -moz-perspective: @perspective;
+          perspective: @perspective;
+}
+.perspective-origin(@perspective) {
+  -webkit-perspective-origin: @perspective;
+     -moz-perspective-origin: @perspective;
+          perspective-origin: @perspective;
+}
+.transform-origin(@origin) {
+  -webkit-transform-origin: @origin;
+     -moz-transform-origin: @origin;
+      -ms-transform-origin: @origin; // IE9 only
+          transform-origin: @origin;
+}
+
+
+// Transitions
+
+.transition(@transition) {
+  -webkit-transition: @transition;
+       -o-transition: @transition;
+          transition: @transition;
+}
+.transition-property(@transition-property) {
+  -webkit-transition-property: @transition-property;
+          transition-property: @transition-property;
+}
+.transition-delay(@transition-delay) {
+  -webkit-transition-delay: @transition-delay;
+          transition-delay: @transition-delay;
+}
+.transition-duration(@transition-duration) {
+  -webkit-transition-duration: @transition-duration;
+          transition-duration: @transition-duration;
+}
+.transition-timing-function(@timing-function) {
+  -webkit-transition-timing-function: @timing-function;
+          transition-timing-function: @timing-function;
+}
+.transition-transform(@transition) {
+  -webkit-transition: -webkit-transform @transition;
+     -moz-transition: -moz-transform @transition;
+       -o-transition: -o-transform @transition;
+          transition: transform @transition;
+}
+
+
+// User select
+// For selecting text on the page
+
+.user-select(@select) {
+  -webkit-user-select: @select;
+     -moz-user-select: @select;
+      -ms-user-select: @select; // IE10+
+          user-select: @select;
+}
diff --git a/src/Plugin/Provider/DrupalBootstrapStyles.php b/src/Plugin/Provider/DrupalBootstrapStyles.php
index bc20995..ba98e4d 100644
--- a/src/Plugin/Provider/DrupalBootstrapStyles.php
+++ b/src/Plugin/Provider/DrupalBootstrapStyles.php
@@ -66,6 +66,9 @@ class DrupalBootstrapStyles extends JsDelivr {
     if (!isset($assets)) {
       $assets = new CdnAssets();
     }
+    if (!isset($data['name'])) {
+      return $assets;
+    }
 
     $files = array_filter(isset($data['files']) ? $data['files'] : [], function ($file) use ($library, $version) {
       if (isset($file['name'])) {
