You are here
Home > bay area buses > fast fairfield
One of the many city-owned agencies in Solano County, Fairfield and Suisun Transit also owns, as part of a larger Solano County Transportation Authority consortium, the Solano Express. This agency operates local routes in Fairfield and Suisun City, as well as providing connections to Fairfield/Suisun Amtrak Station and Davis Street Park-and-Ride in Vacaville, and it operates hubs in Downtown Fairfield (at Cadenasso Drive) and Westfield Solano Mall.

City Buses

FAST operates an all-Gillig fleet for its urban operations that serve Fairfield and Suisun City, including:
Gillig Phantom LF35 Bus
This bus type is slowly disappearing from its fleet as these are being progressively replaced by the Gillig BRT. However, around five of these are still in operation.
Gillig BRT Low-Floor Buses
FAST operates all three types of BRT buses (30-, 35- and 40-footer), all of which operate as hybrid diesel-electric.

#element-1f92c07d-2492-4d12-afe9-61c1d2c36d2d .border-box {
-moz-box-sizing: border-box;
-webkit-box-sizing: border-box;
-ms-box-sizing: border-box;
box-sizing: border-box;
}
#element-1f92c07d-2492-4d12-afe9-61c1d2c36d2d .tabbed-box {
position: relative;
margin: 20px 0;
}
#element-1f92c07d-2492-4d12-afe9-61c1d2c36d2d .tabbed-box-tab-group {
font-size: 0;
margin: 0;
padding: 0;
float: left;
list-style: none;
height: 60px;
width: 100%;
-moz-box-sizing: border-box;
-webkit-box-sizing: border-box;
-ms-box-sizing: border-box;
box-sizing: border-box;
white-space: nowrap;
}
#element-1f92c07d-2492-4d12-afe9-61c1d2c36d2d .tabbed-box-tab {
margin: 0;
cursor: pointer;
height: 60px;
display: inline-block;
min-width: 19%;
position: relative;
background-color: #F7F7F7;
-moz-box-sizing: border-box;
-webkit-box-sizing: border-box;
-ms-box-sizing: border-box;
box-sizing: border-box;
}
#element-1f92c07d-2492-4d12-afe9-61c1d2c36d2d .tabbed-box-content-group {
clear: both;
float: left;
width: 100%;
-moz-box-sizing: border-box;
-webkit-box-sizing: border-box;
-ms-box-sizing: border-box;
box-sizing: border-box;
}
#element-1f92c07d-2492-4d12-afe9-61c1d2c36d2d .tabbed-box-content {
padding: 40px 20px 40px 20px;
display: none;
}
#element-1f92c07d-2492-4d12-afe9-61c1d2c36d2d .scrollArrow {
width: 25px;
background-color: white;
text-align: center;
position: absolute;
z-index: 3;
top: 0;
display: none;
cursor: pointer;
height: 60px;
line-height: 60px;
font-weight: bold;
-moz-box-sizing: border-box;
-webkit-box-sizing: border-box;
-ms-box-sizing: border-box;
box-sizing: border-box;
-webkit-touch-callout: none;
-webkit-user-select: none;
-khtml-user-select: none;
-moz-user-select: none;
-ms-user-select: none;
user-select: none;
}
#element-1f92c07d-2492-4d12-afe9-61c1d2c36d2d .scrollArrow.scrollArrow-left {
left: 0;
}
#element-1f92c07d-2492-4d12-afe9-61c1d2c36d2d .scrollArrow.scrollArrow-right {
right: 0;
}
#element-1f92c07d-2492-4d12-afe9-61c1d2c36d2d .tabbed-box.scrollable .tabbed-box-tab-group {
border-bottom: none;
overflow-x: hidden;
overflow-y: hidden;
}
#element-1f92c07d-2492-4d12-afe9-61c1d2c36d2d .tabbed-box.scrollable .tabbed-box-bar:hover .scrollArrow.active {
display: block;
}
@media only screen and (min-device-width: 414px) and (max-device-width: 736px) and (-webkit-min-device-pixel-ratio: 3),only screen and (min-device-width: 375px) and (max-device-width: 667px) and (-webkit-min-device-pixel-ratio: 2),only screen and (min-device-width: 320px) and (max-device-width: 568px) and (-webkit-min-device-pixel-ratio: 2),only screen and (min-device-width: 320px) and (max-device-width: 480px) and (-webkit-min-device-pixel-ratio: 2),only screen and (max-width: 499px) {
#element-1f92c07d-2492-4d12-afe9-61c1d2c36d2d .tabbed-box-tab-group {
overflow-x: scroll !important;
}
}
#element-1f92c07d-2492-4d12-afe9-61c1d2c36d2d .standard .tabbed-box-tab-group {
border-left: 1px solid #CCCCCC;
border-bottom: 1px solid #CCCCCC;
}
#element-1f92c07d-2492-4d12-afe9-61c1d2c36d2d .standard .tabbed-box-tab {
border: 1px solid #CCCCCC;
border-left: none;
}
#element-1f92c07d-2492-4d12-afe9-61c1d2c36d2d .standard .tabbed-box-tab .paragraph {
color: #A8ABAC;
}
#element-1f92c07d-2492-4d12-afe9-61c1d2c36d2d .standard .tabbed-box-tab.active {
border-bottom: 1px solid white;
background-color: white;
}
#element-1f92c07d-2492-4d12-afe9-61c1d2c36d2d .standard .tabbed-box-content-group {
border: 1px solid #CCCCCC;
border-top: none;
}
#element-1f92c07d-2492-4d12-afe9-61c1d2c36d2d .standard.scrollable .tabbed-box-tab-group {
border-right: 1px solid #CCCCCC;
}
#element-1f92c07d-2492-4d12-afe9-61c1d2c36d2d .standard.scrollable .tabbed-box-tab-group .tabbed-box-tab:last-child {
border-right: none;
}
#element-1f92c07d-2492-4d12-afe9-61c1d2c36d2d .standard.scrollable .scrollArrow-left {
border: 1px solid #CCCCCC;
}
#element-1f92c07d-2492-4d12-afe9-61c1d2c36d2d .standard.scrollable .scrollArrow-right {
border: 1px solid #CCCCCC;
}
#element-1f92c07d-2492-4d12-afe9-61c1d2c36d2d .line .tabbed-box-tab-group {
border: 1px solid #CCCCCC;
border-bottom: none;
}
#element-1f92c07d-2492-4d12-afe9-61c1d2c36d2d .line .tabbed-box-tab {
border-bottom: 1px solid #CCCCCC;
}
#element-1f92c07d-2492-4d12-afe9-61c1d2c36d2d .line .tabbed-box-tab .paragraph {
color: #BDC2C2;
}
#element-1f92c07d-2492-4d12-afe9-61c1d2c36d2d .line .tabbed-box-tab.active {
border-bottom: 1px solid black;
background-color: white;
}
#element-1f92c07d-2492-4d12-afe9-61c1d2c36d2d .line .tabbed-box-content-group {
border: 1px solid #CCCCCC;
}
#element-1f92c07d-2492-4d12-afe9-61c1d2c36d2d .line.scrollable .tabbed-box-tab-group {
height: 61px;
}
#element-1f92c07d-2492-4d12-afe9-61c1d2c36d2d .line.scrollable .tabbed-box-content-group {
border-top: none;
}
#element-1f92c07d-2492-4d12-afe9-61c1d2c36d2d .line.scrollable .scrollArrow-left,
#element-1f92c07d-2492-4d12-afe9-61c1d2c36d2d .line.scrollable .scrollArrow-right {
border: 1px solid #CCCCCC;
border-bottom: none;
border-top: none;
height: 61px;
}
#element-1f92c07d-2492-4d12-afe9-61c1d2c36d2d .simple .tabbed-box-tab {
border-bottom: 1px solid #CCCCCC;
height: 61px;
}
#element-1f92c07d-2492-4d12-afe9-61c1d2c36d2d .simple .tabbed-box-tab .paragraph {
color: #BDC2C2;
}
#element-1f92c07d-2492-4d12-afe9-61c1d2c36d2d .simple .tabbed-box-tab.active {
border-bottom: 1px solid black;
background-color: white;
}
#element-1f92c07d-2492-4d12-afe9-61c1d2c36d2d .simple .tabbed-box-content-group {
border-top: 1px solid #CCCCCC;
}
#element-1f92c07d-2492-4d12-afe9-61c1d2c36d2d .simple .tabbed-box-content {
padding: 20px 0px 20px 0px;
}
#element-1f92c07d-2492-4d12-afe9-61c1d2c36d2d .simple .scrollArrow-left {
border-right: 1px solid #CCCCCC;
}
#element-1f92c07d-2492-4d12-afe9-61c1d2c36d2d .simple .scrollArrow-right {
border-left: 1px solid #CCCCCC;
}
#element-1f92c07d-2492-4d12-afe9-61c1d2c36d2d .s3d-shadow {
-webkit-box-shadow: #f5f5f5;
-moz-box-shadow: #f5f5f5;
box-shadow: #f5f5f5;
}
#element-1f92c07d-2492-4d12-afe9-61c1d2c36d2d .s3d-content-shadow {
-webkit-box-shadow: 0px 0px 30px 4px #f5f5f5;
-moz-box-shadow: 0px 0px 30px 4px #f5f5f5;
box-shadow: 0px 0px 30px 4px #f5f5f5;
}
#element-1f92c07d-2492-4d12-afe9-61c1d2c36d2d .s3d .tabbed-box-tab .paragraph {
color: #A8ABAC;
background-color: #F7F7F7;
}
#element-1f92c07d-2492-4d12-afe9-61c1d2c36d2d .s3d .tabbed-box-tab.active {
border-bottom: 1px solid white;
background-color: white;
-webkit-box-shadow: 0px -10px 31px -4px #f5f5f5, -12px -4px 40px -16px #f5f5f5, 12px -4px 40px -16px #f5f5f5;
-moz-box-shadow: 0px -10px 31px -4px #f5f5f5, -12px -4px 40px -16px #f5f5f5, 12px -4px 40px -16px #f5f5f5;
box-shadow: 0px -10px 31px -4px #f5f5f5, -12px -4px 40px -16px #f5f5f5, 12px -4px 40px -16px #f5f5f5;
}
#element-1f92c07d-2492-4d12-afe9-61c1d2c36d2d .s3d .tabbed-box-tab.active .paragraph {
background-color: white;
}
#element-1f92c07d-2492-4d12-afe9-61c1d2c36d2d .s3d .tabbed-box-content-group {
-webkit-box-shadow: 0px 0px 30px 4px #f5f5f5;
-moz-box-shadow: 0px 0px 30px 4px #f5f5f5;
box-shadow: 0px 0px 30px 4px #f5f5f5;
}
#element-1f92c07d-2492-4d12-afe9-61c1d2c36d2d .tabbed-box-tab .paragraph {
padding: 0px;
line-height: 60px !important;
text-align: center !important;
font-weight: bold;
font-size: 16px !important;
margin: 0 20px;
}
#element-1f92c07d-2492-4d12-afe9-61c1d2c36d2d .tabbed-box-content .paragraph {
padding: 0;
line-height: 30px;
}
#element-1f92c07d-2492-4d12-afe9-61c1d2c36d2d .tabbed-box-tab:last-child .w-delete-outer {
display: none;
position: relative;
float: right;
}

  • 30-Footer
  • 35-Footer
  • 40-Footer
<
>

This bus type is mostly used on two lines, namely:

  • Route 5 (Fairfield Transportation Center – Suisun City Senior Center via Amtrak)
  • Route 9 (Suisun City Circulator between Senior Center and Walmart)
This bus variant is the most common type used on nearly all of its local routes within Fairfield and Suisun City.

This bus type is used on the following routes from Fairfield Transportation Center:

  • Route 1 (FTC – N Texas & Dickson Hill via Kmart and Civic Center)
  • Route 3 (FTC – Dover & Atlantic via Solano Mall and Geri-Towne)
  • Route 7 (FTC – Cordelia Library via Sutter Fairfield and Solano Community College)

function setupElement443359756683651045() {
var requireFunc = window.platformElementRequire || window.require;
// Relies on a global require, specific to platform elements
requireFunc([
‘w-global’,
‘underscore’,
‘jquery’,
‘backbone’,
‘util/platform/elements/PlatformElement’,
‘util/platform/elements/PlatformElementSettings’
], function(
_W,
_,
$,
Backbone,
PlatformElement,
PlatformElementSettings
) {
var dependencies = null || [];
var platform_element_id = “135397292802228534-1.3.6”;
if (typeof _W.loadedPlatformDependencies === ‘undefined’) {
_W.loadedPlatformDependencies = [];
}
if (typeof _W.platformElements === ‘undefined’) {
_W.platformElements = [];
}
if (typeof _W.platformElements[platform_element_id] === ‘undefined’) {
_W.platformElements[platform_element_id] = {};
_W.platformElements[platform_element_id].deferredObject = new $.Deferred();
_W.platformElements[platform_element_id].deferredPromise = _W.platformElements[platform_element_id].deferredObject.promise();
}
if(_.intersection(_W.loadedPlatformDependencies, dependencies).length !== dependencies.length){
_.reduce(dependencies, function(promise, nextScript){
_W.loadedPlatformDependencies.push(nextScript);
return promise.then(function(){
return $.getScript(nextScript);
});
}, $().promise()).then(function(){
_W.platformElements[platform_element_id].deferredObject.resolve();
});
}
if (dependencies.length === 0){
_W.platformElements[platform_element_id].deferredObject.resolve();
}
_W.platformElements[platform_element_id].deferredPromise.done(function(){
var _ElementDefinition = /**
* This is required for element rendering to be possible
* @type {PlatformElement}
*/
(function() {
var TabbedBox = PlatformElement.extend({
events: {
‘click .tabbed-box-tab’: ‘clickTab’,
// in case they type and that causes an overflow, we should determine scrollability here
‘keyup .tabbed-box-tab .paragraph’: ‘determineScrollability’,
‘mousedown .scrollArrow-left’: ‘scrollLeft’,
‘mousedown .scrollArrow-right’: ‘scrollRight’,
‘touchstart .scrollArrow-left’: ‘scrollLeft’,
‘touchstart .scrollArrow-right’: ‘scrollRight’
},
initialize: function() {
var view = this;
// optimization
this.scrollArrowLeft = this.$(‘> .tabbed-box > .tabbed-box-bar > .scrollArrow-left’);
this.scrollArrowRight = this.$(‘> .tabbed-box > .tabbed-box-bar > .scrollArrow-right’);
this.scrollTabsBar = this.$(‘> .tabbed-box > .tabbed-box-bar > .tabbed-box-tab-group’);
// resize handler and mouseup handler
// since we want to be able to handle mouseup wherever the user releases (not just over the element)
// we set it here as a property of the window.
$(window).resize(function() {
this.determineScrollability();
}.bind(this)).on(‘mouseup touchend’, function() {
this.stopScrolling();
}.bind(this));
// since scroll events don’t propagate up, we have to bind it here as opposed to in the events object
this.scrollTabsBar.scroll(function() {
this.determineHandlers();
}.bind(this));
// determine whether or not we should show the scroll handlers
this.determineScrollability();
// load the first tab.
$(document).ready(function() {
this.scrollTabsBar.children().first().click();
}.bind(this));
},
/*
Handle click event on a tab.
Uses ‘rel’ attribute of each tab as an index to access
the class of the corresponding content area.
*/
clickTab: function(e) {
var active = $(e.currentTarget); // Clicked tab
var content_wrapper = this.$(‘> .tabbed-box > .tabbed-box-content-group’); // wrapper for all content divs
this.stopScrolling();
this.determineClickScroll(active);
// Set new active tab
active.siblings().removeClass(‘active’);
active.addClass(‘active’);
// mark the new active tab
this.settings.set(‘activeTabIndexInternal’, this.scrollTabsBar.children().index(active));
this.settings.save();
// trigger children first
content_wrapper.find(‘.tabbed-box-tab.active’).click();
// Set new active content
content_wrapper.children().hide();
content_wrapper.find(‘> .’ + active.attr(‘rel’)).fadeIn();
this.determineHandlers();
// fire resize event to handle any deterministic elements now appearing
$(window).resize();
// Stop propagation in case this is a nested tab app
e.stopPropagation();
},
// determines whether or not the two arrows (left and right scroll handlers) should be visible or not.
determineScrollability: function() {
var group = this.scrollTabsBar[0];
if (group.scrollWidth > group.clientWidth) {
this.$el.children().addClass(‘scrollable’);
this.determineHandlers();
} else {
this.$el.children().removeClass(‘scrollable’);
}
},
// determines whether or not the two arrows (left and right scroll handlers) should be active or not.
determineHandlers: function() {
var target = this.scrollTabsBar[0];
// left handler
if (target.scrollLeft !== 0) {
this.scrollArrowLeft.addClass(‘active’);
} else {
this.scrollArrowLeft.removeClass(‘active’);
}
// right handler
if (target.scrollLeft + target.clientWidth < target.scrollWidth – 1) {
this.scrollArrowRight.addClass(‘active’);
} else {
this.scrollArrowRight.removeClass(‘active’);
}
},
// scrolls the tabs bar to the left.
scrollLeft: function(e) {
e.stopPropagation();
this.stopScrolling();
var scrollEl = this.scrollTabsBar[0];
var view = this;
var factor = 2;
this.scrollArrowRight.addClass(‘active’);
this.scrollInterval = setInterval(function() {
scrollEl.scrollLeft -= Math.floor(factor);
factor *= 1.05;
if (scrollEl.scrollLeft === 0) {
view.stopScrolling();
}
}, 10);
},
// scrolls the tabs bar to the right.
scrollRight: function(e) {
e.stopPropagation();
this.stopScrolling();
var scrollEl = this.scrollTabsBar[0];
var view = this;
var factor = 2;
this.scrollArrowLeft.addClass(‘active’);
this.scrollInterval = setInterval(function() {
scrollEl.scrollLeft += Math.floor(factor);
factor *= 1.05;
// forcefully stop the interval if it’s not doing anything anymore
if (scrollEl.scrollLeft + scrollEl.clientWidth == scrollEl.scrollWidth) {
view.stopScrolling();
}
}, 10);
},
stopScrolling: function() {
clearInterval(this.scrollInterval);
this.determineHandlers();
},
determineClickScroll: function(active) {
// figure out where the element is, and if we need to change our view to show it
var scroll;
// determine where the element we’re going to is in respect to the tabs bar
// 25px is the size of the scroll arrows
var leftSidePosition = active.position().left – 50;
var rightSidePosition = active.position().left + active.width() + 50;
// the gap is how much space we want there to be between the selected element
// when it’s out of view, and we go to it.
var gap = 25;
if (this.scrollTabsBar.children().index(active) === 0) {
// this the first element, so define the scroll to be 0.
scroll = 0;
} else if (this.scrollTabsBar.children().index(active) == this.scrollTabsBar.children().length – 1) {
// this the last element, so define the scroll to be all the way to the right.
scroll = this.scrollTabsBar[0].scrollWidth – this.scrollTabsBar[0].clientWidth;
} else if (leftSidePosition this.scrollTabsBar.width()) {
// the right corner is out of view.
scroll = this.scrollTabsBar[0].scrollLeft + (rightSidePosition – this.scrollTabsBar.width()) + gap;
} else {
scroll = this.scrollTabsBar[0].scrollLeft;
}
// start scrolling
scroll = Math.floor(scroll);
var delta = scroll – this.scrollTabsBar[0].scrollLeft;
var startedDown = false;
if (delta !== 0) {
clearInterval(this.scrollInterval);
var distance = 0;
var direction = (delta > 0 ? 1 : -1);
var speed = 1;
var factor = 1.25; // for parabolic acceleration
this.scrollInterval = setInterval(function() {
if (distance >= Math.abs(delta)) {
this.stopScrolling();
}
this.scrollTabsBar[0].scrollLeft += (Math.max(1, Math.floor(speed)) * direction);
distance += Math.max(1, Math.floor(speed));
if (distance * 2 >= Math.abs(delta)) { // if we’ve traversed more than half
if (factor == 1.25) { // 5/4
factor = 1; // 4/4
} else {
factor = 0.8; // 4/5
}
}
speed *= factor;
}.bind(this), 20);
}
}
});
return TabbedBox;
})();
if (typeof _ElementDefinition == ‘undefined’ || typeof _ElementDefinition == ‘null’) {
var _ElementDefinition = PlatformElement.extend({});
}
var _Element = _ElementDefinition.extend({
initialize: function() {
// we still want to call the initialize function defined by the developer
// however, we don’t want to call it until placeholders have been replaced
this.placeholderInterval = setInterval(function() {
// so use setInterval to check for placeholders.
if (this.$(‘.platform-element-child-placeholder’).length == 0) {
clearInterval(this.placeholderInterval);
this.constructor.__super__.initialize.apply(this);
}
}.bind(this), 100);
}
});
_Element.prototype.settings = new PlatformElementSettings({“tabs_each”:[{“tabs_index”:0},{“tabs_index”:1},{“tabs_index”:2}],”activeTabIndexInternal_each”:[{“activeTabIndexInternal_index”:0},{“activeTabIndexInternal_index”:1}],”theme”:”s3d”,”tabs”:3,”active_tab”:”white”,”inactive_tab”:”#F7F7F7″,”border_color”:”#CCCCCC”,”activeTabIndexInternal”:2});
_Element.prototype.settings.page_element_id = “443359756683651045”;
_Element.prototype.element_id = “1f92c07d-2492-4d12-afe9-61c1d2c36d2d”;
_Element.prototype.user_id = “3466466”;
_Element.prototype.site_id = “484589221176252212”;
_Element.prototype.assets_path = “//marketplace.editmysite.com/elements/135397292802228534-1.3.6/assets/”;
new _Element({
el: ‘#element-1f92c07d-2492-4d12-afe9-61c1d2c36d2d’
});
});
});
}
if (typeof document.documentElement.appReady == ‘undefined’) {
document.documentElement.appReady = 0;
}
if (document.documentElement.appReady || (window.inEditor && window.inEditor())) {
setupElement443359756683651045();
} else if (document.createEvent && document.addEventListener) {
document.addEventListener(‘appReady’, setupElement443359756683651045, false);
} else {
document.documentElement.attachEvent(‘onpropertychange’, function(event){
if (event.propertyName == ‘appReady’) {
setupElement443359756683651045();
}
});
}

Intercity and Regional Services

FAST serves the following cities beyond Fairfield, branded as Solano Express​:

#element-9322d4c1-1441-427b-b72b-246e57af0554 .border-box {
-moz-box-sizing: border-box;
-webkit-box-sizing: border-box;
-ms-box-sizing: border-box;
box-sizing: border-box;
}
#element-9322d4c1-1441-427b-b72b-246e57af0554 .tabbed-box {
position: relative;
margin: 20px 0;
}
#element-9322d4c1-1441-427b-b72b-246e57af0554 .tabbed-box-tab-group {
font-size: 0;
margin: 0;
padding: 0;
float: left;
list-style: none;
height: 60px;
width: 100%;
-moz-box-sizing: border-box;
-webkit-box-sizing: border-box;
-ms-box-sizing: border-box;
box-sizing: border-box;
white-space: nowrap;
}
#element-9322d4c1-1441-427b-b72b-246e57af0554 .tabbed-box-tab {
margin: 0;
cursor: pointer;
height: 60px;
display: inline-block;
min-width: 19%;
position: relative;
background-color: #F7F7F7;
-moz-box-sizing: border-box;
-webkit-box-sizing: border-box;
-ms-box-sizing: border-box;
box-sizing: border-box;
}
#element-9322d4c1-1441-427b-b72b-246e57af0554 .tabbed-box-content-group {
clear: both;
float: left;
width: 100%;
-moz-box-sizing: border-box;
-webkit-box-sizing: border-box;
-ms-box-sizing: border-box;
box-sizing: border-box;
}
#element-9322d4c1-1441-427b-b72b-246e57af0554 .tabbed-box-content {
padding: 40px 20px 40px 20px;
display: none;
}
#element-9322d4c1-1441-427b-b72b-246e57af0554 .scrollArrow {
width: 25px;
background-color: white;
text-align: center;
position: absolute;
z-index: 3;
top: 0;
display: none;
cursor: pointer;
height: 60px;
line-height: 60px;
font-weight: bold;
-moz-box-sizing: border-box;
-webkit-box-sizing: border-box;
-ms-box-sizing: border-box;
box-sizing: border-box;
-webkit-touch-callout: none;
-webkit-user-select: none;
-khtml-user-select: none;
-moz-user-select: none;
-ms-user-select: none;
user-select: none;
}
#element-9322d4c1-1441-427b-b72b-246e57af0554 .scrollArrow.scrollArrow-left {
left: 0;
}
#element-9322d4c1-1441-427b-b72b-246e57af0554 .scrollArrow.scrollArrow-right {
right: 0;
}
#element-9322d4c1-1441-427b-b72b-246e57af0554 .tabbed-box.scrollable .tabbed-box-tab-group {
border-bottom: none;
overflow-x: hidden;
overflow-y: hidden;
}
#element-9322d4c1-1441-427b-b72b-246e57af0554 .tabbed-box.scrollable .tabbed-box-bar:hover .scrollArrow.active {
display: block;
}
@media only screen and (min-device-width: 414px) and (max-device-width: 736px) and (-webkit-min-device-pixel-ratio: 3),only screen and (min-device-width: 375px) and (max-device-width: 667px) and (-webkit-min-device-pixel-ratio: 2),only screen and (min-device-width: 320px) and (max-device-width: 568px) and (-webkit-min-device-pixel-ratio: 2),only screen and (min-device-width: 320px) and (max-device-width: 480px) and (-webkit-min-device-pixel-ratio: 2),only screen and (max-width: 499px) {
#element-9322d4c1-1441-427b-b72b-246e57af0554 .tabbed-box-tab-group {
overflow-x: scroll !important;
}
}
#element-9322d4c1-1441-427b-b72b-246e57af0554 .standard .tabbed-box-tab-group {
border-left: 1px solid #CCCCCC;
border-bottom: 1px solid #CCCCCC;
}
#element-9322d4c1-1441-427b-b72b-246e57af0554 .standard .tabbed-box-tab {
border: 1px solid #CCCCCC;
border-left: none;
}
#element-9322d4c1-1441-427b-b72b-246e57af0554 .standard .tabbed-box-tab .paragraph {
color: #A8ABAC;
}
#element-9322d4c1-1441-427b-b72b-246e57af0554 .standard .tabbed-box-tab.active {
border-bottom: 1px solid white;
background-color: white;
}
#element-9322d4c1-1441-427b-b72b-246e57af0554 .standard .tabbed-box-content-group {
border: 1px solid #CCCCCC;
border-top: none;
}
#element-9322d4c1-1441-427b-b72b-246e57af0554 .standard.scrollable .tabbed-box-tab-group {
border-right: 1px solid #CCCCCC;
}
#element-9322d4c1-1441-427b-b72b-246e57af0554 .standard.scrollable .tabbed-box-tab-group .tabbed-box-tab:last-child {
border-right: none;
}
#element-9322d4c1-1441-427b-b72b-246e57af0554 .standard.scrollable .scrollArrow-left {
border: 1px solid #CCCCCC;
}
#element-9322d4c1-1441-427b-b72b-246e57af0554 .standard.scrollable .scrollArrow-right {
border: 1px solid #CCCCCC;
}
#element-9322d4c1-1441-427b-b72b-246e57af0554 .line .tabbed-box-tab-group {
border: 1px solid #CCCCCC;
border-bottom: none;
}
#element-9322d4c1-1441-427b-b72b-246e57af0554 .line .tabbed-box-tab {
border-bottom: 1px solid #CCCCCC;
}
#element-9322d4c1-1441-427b-b72b-246e57af0554 .line .tabbed-box-tab .paragraph {
color: #BDC2C2;
}
#element-9322d4c1-1441-427b-b72b-246e57af0554 .line .tabbed-box-tab.active {
border-bottom: 1px solid black;
background-color: white;
}
#element-9322d4c1-1441-427b-b72b-246e57af0554 .line .tabbed-box-content-group {
border: 1px solid #CCCCCC;
}
#element-9322d4c1-1441-427b-b72b-246e57af0554 .line.scrollable .tabbed-box-tab-group {
height: 61px;
}
#element-9322d4c1-1441-427b-b72b-246e57af0554 .line.scrollable .tabbed-box-content-group {
border-top: none;
}
#element-9322d4c1-1441-427b-b72b-246e57af0554 .line.scrollable .scrollArrow-left,
#element-9322d4c1-1441-427b-b72b-246e57af0554 .line.scrollable .scrollArrow-right {
border: 1px solid #CCCCCC;
border-bottom: none;
border-top: none;
height: 61px;
}
#element-9322d4c1-1441-427b-b72b-246e57af0554 .simple .tabbed-box-tab {
border-bottom: 1px solid #CCCCCC;
height: 61px;
}
#element-9322d4c1-1441-427b-b72b-246e57af0554 .simple .tabbed-box-tab .paragraph {
color: #BDC2C2;
}
#element-9322d4c1-1441-427b-b72b-246e57af0554 .simple .tabbed-box-tab.active {
border-bottom: 1px solid black;
background-color: white;
}
#element-9322d4c1-1441-427b-b72b-246e57af0554 .simple .tabbed-box-content-group {
border-top: 1px solid #CCCCCC;
}
#element-9322d4c1-1441-427b-b72b-246e57af0554 .simple .tabbed-box-content {
padding: 20px 0px 20px 0px;
}
#element-9322d4c1-1441-427b-b72b-246e57af0554 .simple .scrollArrow-left {
border-right: 1px solid #CCCCCC;
}
#element-9322d4c1-1441-427b-b72b-246e57af0554 .simple .scrollArrow-right {
border-left: 1px solid #CCCCCC;
}
#element-9322d4c1-1441-427b-b72b-246e57af0554 .s3d-shadow {
-webkit-box-shadow: #f5f5f5;
-moz-box-shadow: #f5f5f5;
box-shadow: #f5f5f5;
}
#element-9322d4c1-1441-427b-b72b-246e57af0554 .s3d-content-shadow {
-webkit-box-shadow: 0px 0px 30px 4px #f5f5f5;
-moz-box-shadow: 0px 0px 30px 4px #f5f5f5;
box-shadow: 0px 0px 30px 4px #f5f5f5;
}
#element-9322d4c1-1441-427b-b72b-246e57af0554 .s3d .tabbed-box-tab .paragraph {
color: #A8ABAC;
background-color: #F7F7F7;
}
#element-9322d4c1-1441-427b-b72b-246e57af0554 .s3d .tabbed-box-tab.active {
border-bottom: 1px solid white;
background-color: white;
-webkit-box-shadow: 0px -10px 31px -4px #f5f5f5, -12px -4px 40px -16px #f5f5f5, 12px -4px 40px -16px #f5f5f5;
-moz-box-shadow: 0px -10px 31px -4px #f5f5f5, -12px -4px 40px -16px #f5f5f5, 12px -4px 40px -16px #f5f5f5;
box-shadow: 0px -10px 31px -4px #f5f5f5, -12px -4px 40px -16px #f5f5f5, 12px -4px 40px -16px #f5f5f5;
}
#element-9322d4c1-1441-427b-b72b-246e57af0554 .s3d .tabbed-box-tab.active .paragraph {
background-color: white;
}
#element-9322d4c1-1441-427b-b72b-246e57af0554 .s3d .tabbed-box-content-group {
-webkit-box-shadow: 0px 0px 30px 4px #f5f5f5;
-moz-box-shadow: 0px 0px 30px 4px #f5f5f5;
box-shadow: 0px 0px 30px 4px #f5f5f5;
}
#element-9322d4c1-1441-427b-b72b-246e57af0554 .tabbed-box-tab .paragraph {
padding: 0px;
line-height: 60px !important;
text-align: center !important;
font-weight: bold;
font-size: 16px !important;
margin: 0 20px;
}
#element-9322d4c1-1441-427b-b72b-246e57af0554 .tabbed-box-content .paragraph {
padding: 0;
line-height: 30px;
}
#element-9322d4c1-1441-427b-b72b-246e57af0554 .tabbed-box-tab:last-child .w-delete-outer {
display: none;
position: relative;
float: right;
}

  • Within Solano County
  • BART Stations
  • Sacramento
  • Soltrans to Vallejo
<
>
FAST operates a few lines in conjunction with Soltrans (see tab on right) that serve beyond the urban limits of Fairfield and Suisun City. These include:

#element-67ff6460-f3df-4ca5-83a9-ad1f1b3ac8db .simple-table-wrapper {
padding: 20px 0;
}
#element-67ff6460-f3df-4ca5-83a9-ad1f1b3ac8db .simple-table {
width: 100%;
border: 1px solid #C9CDCF;
border-spacing: 0;
}
#element-67ff6460-f3df-4ca5-83a9-ad1f1b3ac8db .simple-table td.cell {
border-right: 1px solid #C9CDCF;
border-bottom: 1px solid #C9CDCF;
word-break: break-word;
background-color: #FFFFFF;
width: 16.666666666667%;
}
#element-67ff6460-f3df-4ca5-83a9-ad1f1b3ac8db .simple-table td.cell .paragraph {
width: 90%;
margin: 0 5%;
padding-bottom: 10px;
padding-top: 10px;
text-align: center;
}
#element-67ff6460-f3df-4ca5-83a9-ad1f1b3ac8db .simple-table.style-top tr:first-child td,
#element-67ff6460-f3df-4ca5-83a9-ad1f1b3ac8db .simple-table.style-side td:first-of-type {
background-color: #F8F8F8;
}
#element-67ff6460-f3df-4ca5-83a9-ad1f1b3ac8db .simple-table.style-top tr:first-child td .paragraph,
#element-67ff6460-f3df-4ca5-83a9-ad1f1b3ac8db .simple-table.style-side td:first-of-type .paragraph {
font-weight: 700;
}
#element-67ff6460-f3df-4ca5-83a9-ad1f1b3ac8db .simple-table tr:last-child td {
border-bottom: none;
}
#element-67ff6460-f3df-4ca5-83a9-ad1f1b3ac8db .simple-table td:last-of-type {
border-right: none;
}
#element-67ff6460-f3df-4ca5-83a9-ad1f1b3ac8db .simple-table .empty-content-area-element {
padding-left: 0px !important;
}

Route
Attractions Served
Weekday Service Span
Saturday Service Span
Notes
Bus Type Used
20
  • Fairfield Transportation Center
  • Vacaville Transportation Center
  • Davis Street Park-and-Ride (Vacaville)
  • Westfield Solano Mall (Fairfield)
6:42am to 7:35pm, operating hourly
9:42am to 5:35pm, operating hourly

The following stops are served westbound (towards Fairfield only):

  • Davis Street P&R
  • Westfield Solano Mall

Transfers to/from Vacaville City Coach available at Vacaville TC and Davis Street

Gillig Phantom 40′ Suburban
30
  • Fairfield Transportation Center
  • Westfield Solano Mall (Fairfield)
  • Vacaville Transportation Center
  • Market Lane Park-and-Ride (Dixon)

6:08am to 6:56pm

  • Three AM peak trips
  • One midday trip
  • Three PM peak trips M to Th
  • Two PM peak trips Fridays

8:13am to 2:35pm

  • Three trips only between Fairfield and UC Davis Memorial Union, with departures every 2 hours
  • Select trips do not serve either Solano Mall, Vacaville, or Dixon; see schedules for more details.
  • Short trip fares available on this route; see below for details.
MCI D4500
40
  • Vacaville Transportation Center
  • Fairfield Transportation Center
  • Benicia (Benicia Park & Industrial)

4:45am to 8:30pm

  • Peak period trips continue to/from Vacaville TC
  • Midday service operates every 2 hours
No Saturday service
  • Short trip fares available on this route; see below for details.
MCI D4500

function setupElement561456285516710583() {
var requireFunc = window.platformElementRequire || window.require;
// Relies on a global require, specific to platform elements
requireFunc([
‘w-global’,
‘underscore’,
‘jquery’,
‘backbone’,
‘util/platform/elements/PlatformElement’,
‘util/platform/elements/PlatformElementSettings’
], function(
_W,
_,
$,
Backbone,
PlatformElement,
PlatformElementSettings
) {
var dependencies = null || [];
var platform_element_id = “702688850553606843-1.4.3”;
if (typeof _W.loadedPlatformDependencies === ‘undefined’) {
_W.loadedPlatformDependencies = [];
}
if (typeof _W.platformElements === ‘undefined’) {
_W.platformElements = [];
}
if (typeof _W.platformElements[platform_element_id] === ‘undefined’) {
_W.platformElements[platform_element_id] = {};
_W.platformElements[platform_element_id].deferredObject = new $.Deferred();
_W.platformElements[platform_element_id].deferredPromise = _W.platformElements[platform_element_id].deferredObject.promise();
}
if(_.intersection(_W.loadedPlatformDependencies, dependencies).length !== dependencies.length){
_.reduce(dependencies, function(promise, nextScript){
_W.loadedPlatformDependencies.push(nextScript);
return promise.then(function(){
return $.getScript(nextScript);
});
}, $().promise()).then(function(){
_W.platformElements[platform_element_id].deferredObject.resolve();
});
}
if (dependencies.length === 0){
_W.platformElements[platform_element_id].deferredObject.resolve();
}
_W.platformElements[platform_element_id].deferredPromise.done(function(){
var _ElementDefinition = /**
* This is required for element rendering to be possible
* @type {PlatformElement}
*/
(function() {
var SimpleTable = PlatformElement.extend({
initialize: function() {
this.setSizes();
},
setSizes: function() {
var sizes = this.settings.get(‘tableSizes’);
// if the # of columns isn’t the size of the array of lengths, ignore it.
if (sizes && sizes != “default” && this.settings.get(‘columns’) == sizes.length) {
var columns = this.$(‘tr’).each(function(index, value) {
var cells = $(value).find(‘td’).each(function(index2, value2) {
$(value2).css(‘width’, sizes[index2] + ‘%’);
});
});
}
}
});
return SimpleTable;
})();;
if (typeof _ElementDefinition == ‘undefined’ || typeof _ElementDefinition == ‘null’) {
var _ElementDefinition = PlatformElement.extend({});
}
var _Element = _ElementDefinition.extend({
initialize: function() {
// we still want to call the initialize function defined by the developer
// however, we don’t want to call it until placeholders have been replaced
this.placeholderInterval = setInterval(function() {
// so use setInterval to check for placeholders.
if (this.$(‘.platform-element-child-placeholder’).length == 0) {
clearInterval(this.placeholderInterval);
this.constructor.__super__.initialize.apply(this);
}
}.bind(this), 100);
}
});
_Element.prototype.settings = new PlatformElementSettings({“columns_each”:[{“columns_index”:0},{“columns_index”:1},{“columns_index”:2},{“columns_index”:3},{“columns_index”:4},{“columns_index”:5}],”rows_each”:[{“rows_index”:0},{“rows_index”:1},{“rows_index”:2},{“rows_index”:3}],”columns”:6,”rows”:4,”style”:”top”,”alignment”:”center”,”titleColor”:”#F8F8F8″,”backgroundColor”:”#FFFFFF”,”borderColor”:”#C9CDCF”,”tableSizes”:[9,21,16,16,23,12]});
_Element.prototype.settings.page_element_id = “561456285516710583”;
_Element.prototype.element_id = “67ff6460-f3df-4ca5-83a9-ad1f1b3ac8db”;
_Element.prototype.user_id = “3466466”;
_Element.prototype.site_id = “484589221176252212”;
_Element.prototype.assets_path = “//marketplace.editmysite.com/elements/702688850553606843-1.4.3/assets/”;
new _Element({
el: ‘#element-67ff6460-f3df-4ca5-83a9-ad1f1b3ac8db’
});
});
});
}
if (typeof document.documentElement.appReady == ‘undefined’) {
document.documentElement.appReady = 0;
}
if (document.documentElement.appReady || (window.inEditor && window.inEditor())) {
setupElement561456285516710583();
} else if (document.createEvent && document.addEventListener) {
document.addEventListener(‘appReady’, setupElement561456285516710583, false);
} else {
document.documentElement.attachEvent(‘onpropertychange’, function(event){
if (event.propertyName == ‘appReady’) {
setupElement561456285516710583();
}
});
}

FAST operates two lines to BART stations, linking Fairfield and the rest of the San Francisco Bay Area. However, both lines operate weekdays only (weekend alternative listed under “Soltrans” above).

#element-8c6eadf8-6dd9-47ad-bb49-9c052bfb6e39 .simple-table-wrapper {
padding: 20px 0;
}
#element-8c6eadf8-6dd9-47ad-bb49-9c052bfb6e39 .simple-table {
width: 100%;
border: 1px solid #C9CDCF;
border-spacing: 0;
}
#element-8c6eadf8-6dd9-47ad-bb49-9c052bfb6e39 .simple-table td.cell {
border-right: 1px solid #C9CDCF;
border-bottom: 1px solid #C9CDCF;
word-break: break-word;
background-color: #FFFFFF;
width: 20%;
}
#element-8c6eadf8-6dd9-47ad-bb49-9c052bfb6e39 .simple-table td.cell .paragraph {
width: 90%;
margin: 0 5%;
padding-bottom: 10px;
padding-top: 10px;
text-align: center;
}
#element-8c6eadf8-6dd9-47ad-bb49-9c052bfb6e39 .simple-table.style-top tr:first-child td,
#element-8c6eadf8-6dd9-47ad-bb49-9c052bfb6e39 .simple-table.style-side td:first-of-type {
background-color: #F8F8F8;
}
#element-8c6eadf8-6dd9-47ad-bb49-9c052bfb6e39 .simple-table.style-top tr:first-child td .paragraph,
#element-8c6eadf8-6dd9-47ad-bb49-9c052bfb6e39 .simple-table.style-side td:first-of-type .paragraph {
font-weight: 700;
}
#element-8c6eadf8-6dd9-47ad-bb49-9c052bfb6e39 .simple-table tr:last-child td {
border-bottom: none;
}
#element-8c6eadf8-6dd9-47ad-bb49-9c052bfb6e39 .simple-table td:last-of-type {
border-right: none;
}
#element-8c6eadf8-6dd9-47ad-bb49-9c052bfb6e39 .simple-table .empty-content-area-element {
padding-left: 0px !important;
}

FAST Route
Solano County Terminal
BART Station/s Served
Other Attractions Served
Hours of Operation
40
  • Vacaville Transportation Center (peak trips)
  • ​Fairfield Transportation Center (off peak trips)

On the Pittsburg/Bay Point Line:

  • Pleasant Hill
  • Walnut Creek
Benicia Industrial Park
4:45am to 8:30pm
90
Fairfield Transportation Center

On the Richmond Line:

  • El Cerrito del Norte
Suisun City Amtrak (served select trips during peak periods only)
4:10am to 8:10pm

function setupElement237942119840699959() {
var requireFunc = window.platformElementRequire || window.require;
// Relies on a global require, specific to platform elements
requireFunc([
‘w-global’,
‘underscore’,
‘jquery’,
‘backbone’,
‘util/platform/elements/PlatformElement’,
‘util/platform/elements/PlatformElementSettings’
], function(
_W,
_,
$,
Backbone,
PlatformElement,
PlatformElementSettings
) {
var dependencies = null || [];
var platform_element_id = “702688850553606843-1.4.3”;
if (typeof _W.loadedPlatformDependencies === ‘undefined’) {
_W.loadedPlatformDependencies = [];
}
if (typeof _W.platformElements === ‘undefined’) {
_W.platformElements = [];
}
if (typeof _W.platformElements[platform_element_id] === ‘undefined’) {
_W.platformElements[platform_element_id] = {};
_W.platformElements[platform_element_id].deferredObject = new $.Deferred();
_W.platformElements[platform_element_id].deferredPromise = _W.platformElements[platform_element_id].deferredObject.promise();
}
if(_.intersection(_W.loadedPlatformDependencies, dependencies).length !== dependencies.length){
_.reduce(dependencies, function(promise, nextScript){
_W.loadedPlatformDependencies.push(nextScript);
return promise.then(function(){
return $.getScript(nextScript);
});
}, $().promise()).then(function(){
_W.platformElements[platform_element_id].deferredObject.resolve();
});
}
if (dependencies.length === 0){
_W.platformElements[platform_element_id].deferredObject.resolve();
}
_W.platformElements[platform_element_id].deferredPromise.done(function(){
var _ElementDefinition = /**
* This is required for element rendering to be possible
* @type {PlatformElement}
*/
(function() {
var SimpleTable = PlatformElement.extend({
initialize: function() {
this.setSizes();
},
setSizes: function() {
var sizes = this.settings.get(‘tableSizes’);
// if the # of columns isn’t the size of the array of lengths, ignore it.
if (sizes && sizes != “default” && this.settings.get(‘columns’) == sizes.length) {
var columns = this.$(‘tr’).each(function(index, value) {
var cells = $(value).find(‘td’).each(function(index2, value2) {
$(value2).css(‘width’, sizes[index2] + ‘%’);
});
});
}
}
});
return SimpleTable;
})();;
if (typeof _ElementDefinition == ‘undefined’ || typeof _ElementDefinition == ‘null’) {
var _ElementDefinition = PlatformElement.extend({});
}
var _Element = _ElementDefinition.extend({
initialize: function() {
// we still want to call the initialize function defined by the developer
// however, we don’t want to call it until placeholders have been replaced
this.placeholderInterval = setInterval(function() {
// so use setInterval to check for placeholders.
if (this.$(‘.platform-element-child-placeholder’).length == 0) {
clearInterval(this.placeholderInterval);
this.constructor.__super__.initialize.apply(this);
}
}.bind(this), 100);
}
});
_Element.prototype.settings = new PlatformElementSettings({“columns_each”:[{“columns_index”:0},{“columns_index”:1},{“columns_index”:2},{“columns_index”:3},{“columns_index”:4}],”rows_each”:[{“rows_index”:0},{“rows_index”:1},{“rows_index”:2}],”columns”:5,”rows”:3,”style”:”top”,”alignment”:”center”,”titleColor”:”#F8F8F8″,”backgroundColor”:”#FFFFFF”,”borderColor”:”#C9CDCF”,”tableSizes”:[12,23,18,20,24]});
_Element.prototype.settings.page_element_id = “237942119840699959”;
_Element.prototype.element_id = “8c6eadf8-6dd9-47ad-bb49-9c052bfb6e39”;
_Element.prototype.user_id = “3466466”;
_Element.prototype.site_id = “484589221176252212”;
_Element.prototype.assets_path = “//marketplace.editmysite.com/elements/702688850553606843-1.4.3/assets/”;
new _Element({
el: ‘#element-8c6eadf8-6dd9-47ad-bb49-9c052bfb6e39’
});
});
});
}
if (typeof document.documentElement.appReady == ‘undefined’) {
document.documentElement.appReady = 0;
}
if (document.documentElement.appReady || (window.inEditor && window.inEditor())) {
setupElement237942119840699959();
} else if (document.createEvent && document.addEventListener) {
document.addEventListener(‘appReady’, setupElement237942119840699959, false);
} else {
document.documentElement.attachEvent(‘onpropertychange’, function(event){
if (event.propertyName == ‘appReady’) {
setupElement237942119840699959();
}
});
}

Both bus lines use the MCI D4500 commuter coach.

Given their distances, these lines operate with zone fares, in which cash and Clipper cards are honored. See fares below for more details.

FAST operates the Route 30 weekdays and Saturdays between Fairfield and the following destinations:

  • Vacaville Transit Center (weekdays and Saturdays)
  • Market Lane Park-and-Ride in Dixon (weekdays and Saturdays)
  • UC Davis Memorial Union (weekdays and Saturdays)
  • UC Davis Silo Terminal (weekday peak periods only)
  • Sacramento (weekdays only), which includes the State Capitol

Given its distance, this line operates with zone fares, in which Short Trip fares are available. See Restrictions below for more details.

Soltrans operates Route 85 between Vallejo Transit Center and Fairfield Transportation Center via Solano College (Fairfield Campus) weekdays and Saturdays. While this is the only weekend alternative available for commuters from Fairfield, it provides connections at Vallejo Transit Center for San Francisco with the following modes:

  • Baylink Ferry (operated by SF Bay Ferries) at Vallejo Ferry Terminal
  • Soltrans Route 78 to Walnut Creek BART via Sun Valley Mall (Concord) and Pleasant Hill BART
  • Soltrans Route 80 to El Cerrito del Norte BART

Schedule details are as follows:

#element-6c36af03-51aa-4bec-a348-ec6ec23dcba7 .simple-table-wrapper {
padding: 20px 0;
}
#element-6c36af03-51aa-4bec-a348-ec6ec23dcba7 .simple-table {
width: 100%;
border: 1px solid #C9CDCF;
border-spacing: 0;
}
#element-6c36af03-51aa-4bec-a348-ec6ec23dcba7 .simple-table td.cell {
border-right: 1px solid #C9CDCF;
border-bottom: 1px solid #C9CDCF;
word-break: break-word;
background-color: #FFFFFF;
width: 20%;
}
#element-6c36af03-51aa-4bec-a348-ec6ec23dcba7 .simple-table td.cell .paragraph {
width: 90%;
margin: 0 5%;
padding-bottom: 10px;
padding-top: 10px;
text-align: center;
}
#element-6c36af03-51aa-4bec-a348-ec6ec23dcba7 .simple-table.style-top tr:first-child td,
#element-6c36af03-51aa-4bec-a348-ec6ec23dcba7 .simple-table.style-side td:first-of-type {
background-color: #F8F8F8;
}
#element-6c36af03-51aa-4bec-a348-ec6ec23dcba7 .simple-table.style-top tr:first-child td .paragraph,
#element-6c36af03-51aa-4bec-a348-ec6ec23dcba7 .simple-table.style-side td:first-of-type .paragraph {
font-weight: 700;
}
#element-6c36af03-51aa-4bec-a348-ec6ec23dcba7 .simple-table tr:last-child td {
border-bottom: none;
}
#element-6c36af03-51aa-4bec-a348-ec6ec23dcba7 .simple-table td:last-of-type {
border-right: none;
}
#element-6c36af03-51aa-4bec-a348-ec6ec23dcba7 .simple-table .empty-content-area-element {
padding-left: 0px !important;
}

Direction
First Departure
Frequency (minutes)
Last Departure
Notes
Weekday Eastbound
​(from Vallejo TC)
5:05am
60
9:05pm
Operates via Fairfield Transportation Center en route to Solano Mall
Weekday Westbound
(from Solano Mall)
6:07am
60
10:07pm
  • Does not serve Fairfield Transportation Center
  • Trips leaving after 8pm serve local stops within the City of Vallejo, including Sereno Transfer Center
Saturday Eastbound (from Vallejo TC)
6:05am
120
8:05pm
Operates via Fairfield Transportation Center en route to Solano Mall
Saturday Westbound (from Solano Mall)
7:07am
120
9:07pm
  • Does not serve Fairfield Transportation Center
  • Transfer to Route 78 for service to Walnut Creek BART via Pleasant Hill BART (first trip at 6:40am, last trip at 8:40pm)
  • Transfer to Route 80 for service to Del Norte BART (first trip at 6:05am, last trip at 10:30pm)

function setupElement666606376663577297() {
var requireFunc = window.platformElementRequire || window.require;
// Relies on a global require, specific to platform elements
requireFunc([
‘w-global’,
‘underscore’,
‘jquery’,
‘backbone’,
‘util/platform/elements/PlatformElement’,
‘util/platform/elements/PlatformElementSettings’
], function(
_W,
_,
$,
Backbone,
PlatformElement,
PlatformElementSettings
) {
var dependencies = null || [];
var platform_element_id = “702688850553606843-1.4.3”;
if (typeof _W.loadedPlatformDependencies === ‘undefined’) {
_W.loadedPlatformDependencies = [];
}
if (typeof _W.platformElements === ‘undefined’) {
_W.platformElements = [];
}
if (typeof _W.platformElements[platform_element_id] === ‘undefined’) {
_W.platformElements[platform_element_id] = {};
_W.platformElements[platform_element_id].deferredObject = new $.Deferred();
_W.platformElements[platform_element_id].deferredPromise = _W.platformElements[platform_element_id].deferredObject.promise();
}
if(_.intersection(_W.loadedPlatformDependencies, dependencies).length !== dependencies.length){
_.reduce(dependencies, function(promise, nextScript){
_W.loadedPlatformDependencies.push(nextScript);
return promise.then(function(){
return $.getScript(nextScript);
});
}, $().promise()).then(function(){
_W.platformElements[platform_element_id].deferredObject.resolve();
});
}
if (dependencies.length === 0){
_W.platformElements[platform_element_id].deferredObject.resolve();
}
_W.platformElements[platform_element_id].deferredPromise.done(function(){
var _ElementDefinition = /**
* This is required for element rendering to be possible
* @type {PlatformElement}
*/
(function() {
var SimpleTable = PlatformElement.extend({
initialize: function() {
this.setSizes();
},
setSizes: function() {
var sizes = this.settings.get(‘tableSizes’);
// if the # of columns isn’t the size of the array of lengths, ignore it.
if (sizes && sizes != “default” && this.settings.get(‘columns’) == sizes.length) {
var columns = this.$(‘tr’).each(function(index, value) {
var cells = $(value).find(‘td’).each(function(index2, value2) {
$(value2).css(‘width’, sizes[index2] + ‘%’);
});
});
}
}
});
return SimpleTable;
})();;
if (typeof _ElementDefinition == ‘undefined’ || typeof _ElementDefinition == ‘null’) {
var _ElementDefinition = PlatformElement.extend({});
}
var _Element = _ElementDefinition.extend({
initialize: function() {
// we still want to call the initialize function defined by the developer
// however, we don’t want to call it until placeholders have been replaced
this.placeholderInterval = setInterval(function() {
// so use setInterval to check for placeholders.
if (this.$(‘.platform-element-child-placeholder’).length == 0) {
clearInterval(this.placeholderInterval);
this.constructor.__super__.initialize.apply(this);
}
}.bind(this), 100);
}
});
_Element.prototype.settings = new PlatformElementSettings({“columns_each”:[{“columns_index”:0},{“columns_index”:1},{“columns_index”:2},{“columns_index”:3},{“columns_index”:4}],”rows_each”:[{“rows_index”:0},{“rows_index”:1},{“rows_index”:2},{“rows_index”:3},{“rows_index”:4}],”columns”:5,”rows”:5,”style”:”top”,”alignment”:”center”,”titleColor”:”#F8F8F8″,”backgroundColor”:”#FFFFFF”,”borderColor”:”#C9CDCF”,”tableSizes”:[20,13,13,14,38]});
_Element.prototype.settings.page_element_id = “666606376663577297”;
_Element.prototype.element_id = “6c36af03-51aa-4bec-a348-ec6ec23dcba7”;
_Element.prototype.user_id = “3466466”;
_Element.prototype.site_id = “484589221176252212”;
_Element.prototype.assets_path = “//marketplace.editmysite.com/elements/702688850553606843-1.4.3/assets/”;
new _Element({
el: ‘#element-6c36af03-51aa-4bec-a348-ec6ec23dcba7’
});
});
});
}
if (typeof document.documentElement.appReady == ‘undefined’) {
document.documentElement.appReady = 0;
}
if (document.documentElement.appReady || (window.inEditor && window.inEditor())) {
setupElement666606376663577297();
} else if (document.createEvent && document.addEventListener) {
document.addEventListener(‘appReady’, setupElement666606376663577297, false);
} else {
document.documentElement.attachEvent(‘onpropertychange’, function(event){
if (event.propertyName == ‘appReady’) {
setupElement666606376663577297();
}
});
}

The fares are as follows:

#element-acf21924-7d0f-4869-8ce7-47ea5b32ddd8 .simple-table-wrapper {
padding: 20px 0;
}
#element-acf21924-7d0f-4869-8ce7-47ea5b32ddd8 .simple-table {
width: 100%;
border: 1px solid #C9CDCF;
border-spacing: 0;
}
#element-acf21924-7d0f-4869-8ce7-47ea5b32ddd8 .simple-table td.cell {
border-right: 1px solid #C9CDCF;
border-bottom: 1px solid #C9CDCF;
word-break: break-word;
background-color: #FFFFFF;
width: 25%;
}
#element-acf21924-7d0f-4869-8ce7-47ea5b32ddd8 .simple-table td.cell .paragraph {
width: 90%;
margin: 0 5%;
padding-bottom: 10px;
padding-top: 10px;
text-align: center;
}
#element-acf21924-7d0f-4869-8ce7-47ea5b32ddd8 .simple-table.style-top tr:first-child td,
#element-acf21924-7d0f-4869-8ce7-47ea5b32ddd8 .simple-table.style-side td:first-of-type {
background-color: #F8F8F8;
}
#element-acf21924-7d0f-4869-8ce7-47ea5b32ddd8 .simple-table.style-top tr:first-child td .paragraph,
#element-acf21924-7d0f-4869-8ce7-47ea5b32ddd8 .simple-table.style-side td:first-of-type .paragraph {
font-weight: 700;
}
#element-acf21924-7d0f-4869-8ce7-47ea5b32ddd8 .simple-table tr:last-child td {
border-bottom: none;
}
#element-acf21924-7d0f-4869-8ce7-47ea5b32ddd8 .simple-table td:last-of-type {
border-right: none;
}
#element-acf21924-7d0f-4869-8ce7-47ea5b32ddd8 .simple-table .empty-content-area-element {
padding-left: 0px !important;
}

Type
Cash and Clipper
Passes
Notes
Adult
Within Vallejo only: $1.75
Vallejo-Fairfied: $5.00
Day Pass: $10
​10-Ride Pass: $45
Monthly Pass: $114
  • Transfers from connecting transit agencies valid for 60 minutes
  • No transfers provided on Clipper for travel between Soltrans bus lines (pay per ride)
  • For local trips, pay the designated cash fare instead of using Clipper to avoid the full regional fare
Youth
Within Vallejo only: $1.50
Vallejo-Fairfield: $4.00
Day Pass: $8
  • For local trips, pay the designated cash fare instead of using Clipper to avoid the full regional fare
Seniors (65+), Disabled, and Medicare Cardholders (SDM)
Within Vallejo only: $0.85
Vallejo-Fairfield: $2.50
​Day Pass: $5
  • Up to one companion with ADA Certification may accompany a SDM passenger, with fares of $0.25 for local trips and $0.50 for Route 85.

function setupElement360402283665203985() {
var requireFunc = window.platformElementRequire || window.require;
// Relies on a global require, specific to platform elements
requireFunc([
‘w-global’,
‘underscore’,
‘jquery’,
‘backbone’,
‘util/platform/elements/PlatformElement’,
‘util/platform/elements/PlatformElementSettings’
], function(
_W,
_,
$,
Backbone,
PlatformElement,
PlatformElementSettings
) {
var dependencies = null || [];
var platform_element_id = “702688850553606843-1.4.3”;
if (typeof _W.loadedPlatformDependencies === ‘undefined’) {
_W.loadedPlatformDependencies = [];
}
if (typeof _W.platformElements === ‘undefined’) {
_W.platformElements = [];
}
if (typeof _W.platformElements[platform_element_id] === ‘undefined’) {
_W.platformElements[platform_element_id] = {};
_W.platformElements[platform_element_id].deferredObject = new $.Deferred();
_W.platformElements[platform_element_id].deferredPromise = _W.platformElements[platform_element_id].deferredObject.promise();
}
if(_.intersection(_W.loadedPlatformDependencies, dependencies).length !== dependencies.length){
_.reduce(dependencies, function(promise, nextScript){
_W.loadedPlatformDependencies.push(nextScript);
return promise.then(function(){
return $.getScript(nextScript);
});
}, $().promise()).then(function(){
_W.platformElements[platform_element_id].deferredObject.resolve();
});
}
if (dependencies.length === 0){
_W.platformElements[platform_element_id].deferredObject.resolve();
}
_W.platformElements[platform_element_id].deferredPromise.done(function(){
var _ElementDefinition = /**
* This is required for element rendering to be possible
* @type {PlatformElement}
*/
(function() {
var SimpleTable = PlatformElement.extend({
initialize: function() {
this.setSizes();
},
setSizes: function() {
var sizes = this.settings.get(‘tableSizes’);
// if the # of columns isn’t the size of the array of lengths, ignore it.
if (sizes && sizes != “default” && this.settings.get(‘columns’) == sizes.length) {
var columns = this.$(‘tr’).each(function(index, value) {
var cells = $(value).find(‘td’).each(function(index2, value2) {
$(value2).css(‘width’, sizes[index2] + ‘%’);
});
});
}
}
});
return SimpleTable;
})();;
if (typeof _ElementDefinition == ‘undefined’ || typeof _ElementDefinition == ‘null’) {
var _ElementDefinition = PlatformElement.extend({});
}
var _Element = _ElementDefinition.extend({
initialize: function() {
// we still want to call the initialize function defined by the developer
// however, we don’t want to call it until placeholders have been replaced
this.placeholderInterval = setInterval(function() {
// so use setInterval to check for placeholders.
if (this.$(‘.platform-element-child-placeholder’).length == 0) {
clearInterval(this.placeholderInterval);
this.constructor.__super__.initialize.apply(this);
}
}.bind(this), 100);
}
});
_Element.prototype.settings = new PlatformElementSettings({“columns_each”:[{“columns_index”:0},{“columns_index”:1},{“columns_index”:2},{“columns_index”:3}],”rows_each”:[{“rows_index”:0},{“rows_index”:1},{“rows_index”:2},{“rows_index”:3}],”columns”:4,”rows”:4,”style”:”top”,”alignment”:”center”,”titleColor”:”#F8F8F8″,”backgroundColor”:”#FFFFFF”,”borderColor”:”#C9CDCF”,”tableSizes”:[16,22,17,42]});
_Element.prototype.settings.page_element_id = “360402283665203985”;
_Element.prototype.element_id = “acf21924-7d0f-4869-8ce7-47ea5b32ddd8”;
_Element.prototype.user_id = “3466466”;
_Element.prototype.site_id = “484589221176252212”;
_Element.prototype.assets_path = “//marketplace.editmysite.com/elements/702688850553606843-1.4.3/assets/”;
new _Element({
el: ‘#element-acf21924-7d0f-4869-8ce7-47ea5b32ddd8’
});
});
});
}
if (typeof document.documentElement.appReady == ‘undefined’) {
document.documentElement.appReady = 0;
}
if (document.documentElement.appReady || (window.inEditor && window.inEditor())) {
setupElement360402283665203985();
} else if (document.createEvent && document.addEventListener) {
document.addEventListener(‘appReady’, setupElement360402283665203985, false);
} else {
document.documentElement.attachEvent(‘onpropertychange’, function(event){
if (event.propertyName == ‘appReady’) {
setupElement360402283665203985();
}
});
}

function setupElement478405877357248263() {
var requireFunc = window.platformElementRequire || window.require;
// Relies on a global require, specific to platform elements
requireFunc([
‘w-global’,
‘underscore’,
‘jquery’,
‘backbone’,
‘util/platform/elements/PlatformElement’,
‘util/platform/elements/PlatformElementSettings’
], function(
_W,
_,
$,
Backbone,
PlatformElement,
PlatformElementSettings
) {
var dependencies = null || [];
var platform_element_id = “135397292802228534-1.3.6”;
if (typeof _W.loadedPlatformDependencies === ‘undefined’) {
_W.loadedPlatformDependencies = [];
}
if (typeof _W.platformElements === ‘undefined’) {
_W.platformElements = [];
}
if (typeof _W.platformElements[platform_element_id] === ‘undefined’) {
_W.platformElements[platform_element_id] = {};
_W.platformElements[platform_element_id].deferredObject = new $.Deferred();
_W.platformElements[platform_element_id].deferredPromise = _W.platformElements[platform_element_id].deferredObject.promise();
}
if(_.intersection(_W.loadedPlatformDependencies, dependencies).length !== dependencies.length){
_.reduce(dependencies, function(promise, nextScript){
_W.loadedPlatformDependencies.push(nextScript);
return promise.then(function(){
return $.getScript(nextScript);
});
}, $().promise()).then(function(){
_W.platformElements[platform_element_id].deferredObject.resolve();
});
}
if (dependencies.length === 0){
_W.platformElements[platform_element_id].deferredObject.resolve();
}
_W.platformElements[platform_element_id].deferredPromise.done(function(){
var _ElementDefinition = /**
* This is required for element rendering to be possible
* @type {PlatformElement}
*/
(function() {
var TabbedBox = PlatformElement.extend({
events: {
‘click .tabbed-box-tab’: ‘clickTab’,
// in case they type and that causes an overflow, we should determine scrollability here
‘keyup .tabbed-box-tab .paragraph’: ‘determineScrollability’,
‘mousedown .scrollArrow-left’: ‘scrollLeft’,
‘mousedown .scrollArrow-right’: ‘scrollRight’,
‘touchstart .scrollArrow-left’: ‘scrollLeft’,
‘touchstart .scrollArrow-right’: ‘scrollRight’
},
initialize: function() {
var view = this;
// optimization
this.scrollArrowLeft = this.$(‘> .tabbed-box > .tabbed-box-bar > .scrollArrow-left’);
this.scrollArrowRight = this.$(‘> .tabbed-box > .tabbed-box-bar > .scrollArrow-right’);
this.scrollTabsBar = this.$(‘> .tabbed-box > .tabbed-box-bar > .tabbed-box-tab-group’);
// resize handler and mouseup handler
// since we want to be able to handle mouseup wherever the user releases (not just over the element)
// we set it here as a property of the window.
$(window).resize(function() {
this.determineScrollability();
}.bind(this)).on(‘mouseup touchend’, function() {
this.stopScrolling();
}.bind(this));
// since scroll events don’t propagate up, we have to bind it here as opposed to in the events object
this.scrollTabsBar.scroll(function() {
this.determineHandlers();
}.bind(this));
// determine whether or not we should show the scroll handlers
this.determineScrollability();
// load the first tab.
$(document).ready(function() {
this.scrollTabsBar.children().first().click();
}.bind(this));
},
/*
Handle click event on a tab.
Uses ‘rel’ attribute of each tab as an index to access
the class of the corresponding content area.
*/
clickTab: function(e) {
var active = $(e.currentTarget); // Clicked tab
var content_wrapper = this.$(‘> .tabbed-box > .tabbed-box-content-group’); // wrapper for all content divs
this.stopScrolling();
this.determineClickScroll(active);
// Set new active tab
active.siblings().removeClass(‘active’);
active.addClass(‘active’);
// mark the new active tab
this.settings.set(‘activeTabIndexInternal’, this.scrollTabsBar.children().index(active));
this.settings.save();
// trigger children first
content_wrapper.find(‘.tabbed-box-tab.active’).click();
// Set new active content
content_wrapper.children().hide();
content_wrapper.find(‘> .’ + active.attr(‘rel’)).fadeIn();
this.determineHandlers();
// fire resize event to handle any deterministic elements now appearing
$(window).resize();
// Stop propagation in case this is a nested tab app
e.stopPropagation();
},
// determines whether or not the two arrows (left and right scroll handlers) should be visible or not.
determineScrollability: function() {
var group = this.scrollTabsBar[0];
if (group.scrollWidth > group.clientWidth) {
this.$el.children().addClass(‘scrollable’);
this.determineHandlers();
} else {
this.$el.children().removeClass(‘scrollable’);
}
},
// determines whether or not the two arrows (left and right scroll handlers) should be active or not.
determineHandlers: function() {
var target = this.scrollTabsBar[0];
// left handler
if (target.scrollLeft !== 0) {
this.scrollArrowLeft.addClass(‘active’);
} else {
this.scrollArrowLeft.removeClass(‘active’);
}
// right handler
if (target.scrollLeft + target.clientWidth < target.scrollWidth – 1) {
this.scrollArrowRight.addClass(‘active’);
} else {
this.scrollArrowRight.removeClass(‘active’);
}
},
// scrolls the tabs bar to the left.
scrollLeft: function(e) {
e.stopPropagation();
this.stopScrolling();
var scrollEl = this.scrollTabsBar[0];
var view = this;
var factor = 2;
this.scrollArrowRight.addClass(‘active’);
this.scrollInterval = setInterval(function() {
scrollEl.scrollLeft -= Math.floor(factor);
factor *= 1.05;
if (scrollEl.scrollLeft === 0) {
view.stopScrolling();
}
}, 10);
},
// scrolls the tabs bar to the right.
scrollRight: function(e) {
e.stopPropagation();
this.stopScrolling();
var scrollEl = this.scrollTabsBar[0];
var view = this;
var factor = 2;
this.scrollArrowLeft.addClass(‘active’);
this.scrollInterval = setInterval(function() {
scrollEl.scrollLeft += Math.floor(factor);
factor *= 1.05;
// forcefully stop the interval if it’s not doing anything anymore
if (scrollEl.scrollLeft + scrollEl.clientWidth == scrollEl.scrollWidth) {
view.stopScrolling();
}
}, 10);
},
stopScrolling: function() {
clearInterval(this.scrollInterval);
this.determineHandlers();
},
determineClickScroll: function(active) {
// figure out where the element is, and if we need to change our view to show it
var scroll;
// determine where the element we’re going to is in respect to the tabs bar
// 25px is the size of the scroll arrows
var leftSidePosition = active.position().left – 50;
var rightSidePosition = active.position().left + active.width() + 50;
// the gap is how much space we want there to be between the selected element
// when it’s out of view, and we go to it.
var gap = 25;
if (this.scrollTabsBar.children().index(active) === 0) {
// this the first element, so define the scroll to be 0.
scroll = 0;
} else if (this.scrollTabsBar.children().index(active) == this.scrollTabsBar.children().length – 1) {
// this the last element, so define the scroll to be all the way to the right.
scroll = this.scrollTabsBar[0].scrollWidth – this.scrollTabsBar[0].clientWidth;
} else if (leftSidePosition this.scrollTabsBar.width()) {
// the right corner is out of view.
scroll = this.scrollTabsBar[0].scrollLeft + (rightSidePosition – this.scrollTabsBar.width()) + gap;
} else {
scroll = this.scrollTabsBar[0].scrollLeft;
}
// start scrolling
scroll = Math.floor(scroll);
var delta = scroll – this.scrollTabsBar[0].scrollLeft;
var startedDown = false;
if (delta !== 0) {
clearInterval(this.scrollInterval);
var distance = 0;
var direction = (delta > 0 ? 1 : -1);
var speed = 1;
var factor = 1.25; // for parabolic acceleration
this.scrollInterval = setInterval(function() {
if (distance >= Math.abs(delta)) {
this.stopScrolling();
}
this.scrollTabsBar[0].scrollLeft += (Math.max(1, Math.floor(speed)) * direction);
distance += Math.max(1, Math.floor(speed));
if (distance * 2 >= Math.abs(delta)) { // if we’ve traversed more than half
if (factor == 1.25) { // 5/4
factor = 1; // 4/4
} else {
factor = 0.8; // 4/5
}
}
speed *= factor;
}.bind(this), 20);
}
}
});
return TabbedBox;
})();
if (typeof _ElementDefinition == ‘undefined’ || typeof _ElementDefinition == ‘null’) {
var _ElementDefinition = PlatformElement.extend({});
}
var _Element = _ElementDefinition.extend({
initialize: function() {
// we still want to call the initialize function defined by the developer
// however, we don’t want to call it until placeholders have been replaced
this.placeholderInterval = setInterval(function() {
// so use setInterval to check for placeholders.
if (this.$(‘.platform-element-child-placeholder’).length == 0) {
clearInterval(this.placeholderInterval);
this.constructor.__super__.initialize.apply(this);
}
}.bind(this), 100);
}
});
_Element.prototype.settings = new PlatformElementSettings({“tabs_each”:[{“tabs_index”:0},{“tabs_index”:1},{“tabs_index”:2},{“tabs_index”:3}],”activeTabIndexInternal_each”:[{“activeTabIndexInternal_index”:0},{“activeTabIndexInternal_index”:1},{“activeTabIndexInternal_index”:2}],”theme”:”standard”,”tabs”:4,”active_tab”:”white”,”inactive_tab”:”#F7F7F7″,”border_color”:”#CCCCCC”,”activeTabIndexInternal”:3});
_Element.prototype.settings.page_element_id = “478405877357248263”;
_Element.prototype.element_id = “9322d4c1-1441-427b-b72b-246e57af0554”;
_Element.prototype.user_id = “3466466”;
_Element.prototype.site_id = “484589221176252212”;
_Element.prototype.assets_path = “//marketplace.editmysite.com/elements/135397292802228534-1.3.6/assets/”;
new _Element({
el: ‘#element-9322d4c1-1441-427b-b72b-246e57af0554’
});
});
});
}
if (typeof document.documentElement.appReady == ‘undefined’) {
document.documentElement.appReady = 0;
}
if (document.documentElement.appReady || (window.inEditor && window.inEditor())) {
setupElement478405877357248263();
} else if (document.createEvent && document.addEventListener) {
document.addEventListener(‘appReady’, setupElement478405877357248263, false);
} else {
document.documentElement.attachEvent(‘onpropertychange’, function(event){
if (event.propertyName == ‘appReady’) {
setupElement478405877357248263();
}
});
}

The following bus types are used:

#element-87876e88-6e90-4e57-9718-343e355a9e67 .border-box {
-moz-box-sizing: border-box;
-webkit-box-sizing: border-box;
-ms-box-sizing: border-box;
box-sizing: border-box;
}
#element-87876e88-6e90-4e57-9718-343e355a9e67 .tabbed-box {
position: relative;
margin: 20px 0;
}
#element-87876e88-6e90-4e57-9718-343e355a9e67 .tabbed-box-tab-group {
font-size: 0;
margin: 0;
padding: 0;
float: left;
list-style: none;
height: 60px;
width: 100%;
-moz-box-sizing: border-box;
-webkit-box-sizing: border-box;
-ms-box-sizing: border-box;
box-sizing: border-box;
white-space: nowrap;
}
#element-87876e88-6e90-4e57-9718-343e355a9e67 .tabbed-box-tab {
margin: 0;
cursor: pointer;
height: 60px;
display: inline-block;
min-width: 19%;
position: relative;
background-color: #F7F7F7;
-moz-box-sizing: border-box;
-webkit-box-sizing: border-box;
-ms-box-sizing: border-box;
box-sizing: border-box;
}
#element-87876e88-6e90-4e57-9718-343e355a9e67 .tabbed-box-content-group {
clear: both;
float: left;
width: 100%;
-moz-box-sizing: border-box;
-webkit-box-sizing: border-box;
-ms-box-sizing: border-box;
box-sizing: border-box;
}
#element-87876e88-6e90-4e57-9718-343e355a9e67 .tabbed-box-content {
padding: 40px 20px 40px 20px;
display: none;
}
#element-87876e88-6e90-4e57-9718-343e355a9e67 .scrollArrow {
width: 25px;
background-color: white;
text-align: center;
position: absolute;
z-index: 3;
top: 0;
display: none;
cursor: pointer;
height: 60px;
line-height: 60px;
font-weight: bold;
-moz-box-sizing: border-box;
-webkit-box-sizing: border-box;
-ms-box-sizing: border-box;
box-sizing: border-box;
-webkit-touch-callout: none;
-webkit-user-select: none;
-khtml-user-select: none;
-moz-user-select: none;
-ms-user-select: none;
user-select: none;
}
#element-87876e88-6e90-4e57-9718-343e355a9e67 .scrollArrow.scrollArrow-left {
left: 0;
}
#element-87876e88-6e90-4e57-9718-343e355a9e67 .scrollArrow.scrollArrow-right {
right: 0;
}
#element-87876e88-6e90-4e57-9718-343e355a9e67 .tabbed-box.scrollable .tabbed-box-tab-group {
border-bottom: none;
overflow-x: hidden;
overflow-y: hidden;
}
#element-87876e88-6e90-4e57-9718-343e355a9e67 .tabbed-box.scrollable .tabbed-box-bar:hover .scrollArrow.active {
display: block;
}
@media only screen and (min-device-width: 414px) and (max-device-width: 736px) and (-webkit-min-device-pixel-ratio: 3),only screen and (min-device-width: 375px) and (max-device-width: 667px) and (-webkit-min-device-pixel-ratio: 2),only screen and (min-device-width: 320px) and (max-device-width: 568px) and (-webkit-min-device-pixel-ratio: 2),only screen and (min-device-width: 320px) and (max-device-width: 480px) and (-webkit-min-device-pixel-ratio: 2),only screen and (max-width: 499px) {
#element-87876e88-6e90-4e57-9718-343e355a9e67 .tabbed-box-tab-group {
overflow-x: scroll !important;
}
}
#element-87876e88-6e90-4e57-9718-343e355a9e67 .standard .tabbed-box-tab-group {
border-left: 1px solid #CCCCCC;
border-bottom: 1px solid #CCCCCC;
}
#element-87876e88-6e90-4e57-9718-343e355a9e67 .standard .tabbed-box-tab {
border: 1px solid #CCCCCC;
border-left: none;
}
#element-87876e88-6e90-4e57-9718-343e355a9e67 .standard .tabbed-box-tab .paragraph {
color: #A8ABAC;
}
#element-87876e88-6e90-4e57-9718-343e355a9e67 .standard .tabbed-box-tab.active {
border-bottom: 1px solid white;
background-color: white;
}
#element-87876e88-6e90-4e57-9718-343e355a9e67 .standard .tabbed-box-content-group {
border: 1px solid #CCCCCC;
border-top: none;
}
#element-87876e88-6e90-4e57-9718-343e355a9e67 .standard.scrollable .tabbed-box-tab-group {
border-right: 1px solid #CCCCCC;
}
#element-87876e88-6e90-4e57-9718-343e355a9e67 .standard.scrollable .tabbed-box-tab-group .tabbed-box-tab:last-child {
border-right: none;
}
#element-87876e88-6e90-4e57-9718-343e355a9e67 .standard.scrollable .scrollArrow-left {
border: 1px solid #CCCCCC;
}
#element-87876e88-6e90-4e57-9718-343e355a9e67 .standard.scrollable .scrollArrow-right {
border: 1px solid #CCCCCC;
}
#element-87876e88-6e90-4e57-9718-343e355a9e67 .line .tabbed-box-tab-group {
border: 1px solid #CCCCCC;
border-bottom: none;
}
#element-87876e88-6e90-4e57-9718-343e355a9e67 .line .tabbed-box-tab {
border-bottom: 1px solid #CCCCCC;
}
#element-87876e88-6e90-4e57-9718-343e355a9e67 .line .tabbed-box-tab .paragraph {
color: #BDC2C2;
}
#element-87876e88-6e90-4e57-9718-343e355a9e67 .line .tabbed-box-tab.active {
border-bottom: 1px solid black;
background-color: white;
}
#element-87876e88-6e90-4e57-9718-343e355a9e67 .line .tabbed-box-content-group {
border: 1px solid #CCCCCC;
}
#element-87876e88-6e90-4e57-9718-343e355a9e67 .line.scrollable .tabbed-box-tab-group {
height: 61px;
}
#element-87876e88-6e90-4e57-9718-343e355a9e67 .line.scrollable .tabbed-box-content-group {
border-top: none;
}
#element-87876e88-6e90-4e57-9718-343e355a9e67 .line.scrollable .scrollArrow-left,
#element-87876e88-6e90-4e57-9718-343e355a9e67 .line.scrollable .scrollArrow-right {
border: 1px solid #CCCCCC;
border-bottom: none;
border-top: none;
height: 61px;
}
#element-87876e88-6e90-4e57-9718-343e355a9e67 .simple .tabbed-box-tab {
border-bottom: 1px solid #CCCCCC;
height: 61px;
}
#element-87876e88-6e90-4e57-9718-343e355a9e67 .simple .tabbed-box-tab .paragraph {
color: #BDC2C2;
}
#element-87876e88-6e90-4e57-9718-343e355a9e67 .simple .tabbed-box-tab.active {
border-bottom: 1px solid black;
background-color: white;
}
#element-87876e88-6e90-4e57-9718-343e355a9e67 .simple .tabbed-box-content-group {
border-top: 1px solid #CCCCCC;
}
#element-87876e88-6e90-4e57-9718-343e355a9e67 .simple .tabbed-box-content {
padding: 20px 0px 20px 0px;
}
#element-87876e88-6e90-4e57-9718-343e355a9e67 .simple .scrollArrow-left {
border-right: 1px solid #CCCCCC;
}
#element-87876e88-6e90-4e57-9718-343e355a9e67 .simple .scrollArrow-right {
border-left: 1px solid #CCCCCC;
}
#element-87876e88-6e90-4e57-9718-343e355a9e67 .s3d-shadow {
-webkit-box-shadow: #f5f5f5;
-moz-box-shadow: #f5f5f5;
box-shadow: #f5f5f5;
}
#element-87876e88-6e90-4e57-9718-343e355a9e67 .s3d-content-shadow {
-webkit-box-shadow: 0px 0px 30px 4px #f5f5f5;
-moz-box-shadow: 0px 0px 30px 4px #f5f5f5;
box-shadow: 0px 0px 30px 4px #f5f5f5;
}
#element-87876e88-6e90-4e57-9718-343e355a9e67 .s3d .tabbed-box-tab .paragraph {
color: #A8ABAC;
background-color: #F7F7F7;
}
#element-87876e88-6e90-4e57-9718-343e355a9e67 .s3d .tabbed-box-tab.active {
border-bottom: 1px solid white;
background-color: white;
-webkit-box-shadow: 0px -10px 31px -4px #f5f5f5, -12px -4px 40px -16px #f5f5f5, 12px -4px 40px -16px #f5f5f5;
-moz-box-shadow: 0px -10px 31px -4px #f5f5f5, -12px -4px 40px -16px #f5f5f5, 12px -4px 40px -16px #f5f5f5;
box-shadow: 0px -10px 31px -4px #f5f5f5, -12px -4px 40px -16px #f5f5f5, 12px -4px 40px -16px #f5f5f5;
}
#element-87876e88-6e90-4e57-9718-343e355a9e67 .s3d .tabbed-box-tab.active .paragraph {
background-color: white;
}
#element-87876e88-6e90-4e57-9718-343e355a9e67 .s3d .tabbed-box-content-group {
-webkit-box-shadow: 0px 0px 30px 4px #f5f5f5;
-moz-box-shadow: 0px 0px 30px 4px #f5f5f5;
box-shadow: 0px 0px 30px 4px #f5f5f5;
}
#element-87876e88-6e90-4e57-9718-343e355a9e67 .tabbed-box-tab .paragraph {
padding: 0px;
line-height: 60px !important;
text-align: center !important;
font-weight: bold;
font-size: 16px !important;
margin: 0 20px;
}
#element-87876e88-6e90-4e57-9718-343e355a9e67 .tabbed-box-content .paragraph {
padding: 0;
line-height: 30px;
}
#element-87876e88-6e90-4e57-9718-343e355a9e67 .tabbed-box-tab:last-child .w-delete-outer {
display: none;
position: relative;
float: right;
}

  • Gillig Phantom
  • MCI D4500 (67x Series)
  • MCI D4500 (68x Series)
<
>
The Gillig Phantom 40-footer Suburban Coach is primarily used on the Route 20, operating between Fairfield and Vacaville. These have high-back reclining seats, luggage racks, overhead reading lights, and air vents.
Numbered 670 to 678, these MCI commuter coaches are owned by FAST. These have overhead TVs (satellite), personalized audio, reclining seats, and an undercarriage rack for bikes and strollers.
Numbered 679 to 689, these MCI buses are leased from SolTrans (formerly Vallejo Transit). Those buses have essentially the same features as the 67x series minus the TVs and personalized audio.

function setupElement129045103538933616() {
var requireFunc = window.platformElementRequire || window.require;
// Relies on a global require, specific to platform elements
requireFunc([
‘w-global’,
‘underscore’,
‘jquery’,
‘backbone’,
‘util/platform/elements/PlatformElement’,
‘util/platform/elements/PlatformElementSettings’
], function(
_W,
_,
$,
Backbone,
PlatformElement,
PlatformElementSettings
) {
var dependencies = null || [];
var platform_element_id = “135397292802228534-1.3.6”;
if (typeof _W.loadedPlatformDependencies === ‘undefined’) {
_W.loadedPlatformDependencies = [];
}
if (typeof _W.platformElements === ‘undefined’) {
_W.platformElements = [];
}
if (typeof _W.platformElements[platform_element_id] === ‘undefined’) {
_W.platformElements[platform_element_id] = {};
_W.platformElements[platform_element_id].deferredObject = new $.Deferred();
_W.platformElements[platform_element_id].deferredPromise = _W.platformElements[platform_element_id].deferredObject.promise();
}
if(_.intersection(_W.loadedPlatformDependencies, dependencies).length !== dependencies.length){
_.reduce(dependencies, function(promise, nextScript){
_W.loadedPlatformDependencies.push(nextScript);
return promise.then(function(){
return $.getScript(nextScript);
});
}, $().promise()).then(function(){
_W.platformElements[platform_element_id].deferredObject.resolve();
});
}
if (dependencies.length === 0){
_W.platformElements[platform_element_id].deferredObject.resolve();
}
_W.platformElements[platform_element_id].deferredPromise.done(function(){
var _ElementDefinition = /**
* This is required for element rendering to be possible
* @type {PlatformElement}
*/
(function() {
var TabbedBox = PlatformElement.extend({
events: {
‘click .tabbed-box-tab’: ‘clickTab’,
// in case they type and that causes an overflow, we should determine scrollability here
‘keyup .tabbed-box-tab .paragraph’: ‘determineScrollability’,
‘mousedown .scrollArrow-left’: ‘scrollLeft’,
‘mousedown .scrollArrow-right’: ‘scrollRight’,
‘touchstart .scrollArrow-left’: ‘scrollLeft’,
‘touchstart .scrollArrow-right’: ‘scrollRight’
},
initialize: function() {
var view = this;
// optimization
this.scrollArrowLeft = this.$(‘> .tabbed-box > .tabbed-box-bar > .scrollArrow-left’);
this.scrollArrowRight = this.$(‘> .tabbed-box > .tabbed-box-bar > .scrollArrow-right’);
this.scrollTabsBar = this.$(‘> .tabbed-box > .tabbed-box-bar > .tabbed-box-tab-group’);
// resize handler and mouseup handler
// since we want to be able to handle mouseup wherever the user releases (not just over the element)
// we set it here as a property of the window.
$(window).resize(function() {
this.determineScrollability();
}.bind(this)).on(‘mouseup touchend’, function() {
this.stopScrolling();
}.bind(this));
// since scroll events don’t propagate up, we have to bind it here as opposed to in the events object
this.scrollTabsBar.scroll(function() {
this.determineHandlers();
}.bind(this));
// determine whether or not we should show the scroll handlers
this.determineScrollability();
// load the first tab.
$(document).ready(function() {
this.scrollTabsBar.children().first().click();
}.bind(this));
},
/*
Handle click event on a tab.
Uses ‘rel’ attribute of each tab as an index to access
the class of the corresponding content area.
*/
clickTab: function(e) {
var active = $(e.currentTarget); // Clicked tab
var content_wrapper = this.$(‘> .tabbed-box > .tabbed-box-content-group’); // wrapper for all content divs
this.stopScrolling();
this.determineClickScroll(active);
// Set new active tab
active.siblings().removeClass(‘active’);
active.addClass(‘active’);
// mark the new active tab
this.settings.set(‘activeTabIndexInternal’, this.scrollTabsBar.children().index(active));
this.settings.save();
// trigger children first
content_wrapper.find(‘.tabbed-box-tab.active’).click();
// Set new active content
content_wrapper.children().hide();
content_wrapper.find(‘> .’ + active.attr(‘rel’)).fadeIn();
this.determineHandlers();
// fire resize event to handle any deterministic elements now appearing
$(window).resize();
// Stop propagation in case this is a nested tab app
e.stopPropagation();
},
// determines whether or not the two arrows (left and right scroll handlers) should be visible or not.
determineScrollability: function() {
var group = this.scrollTabsBar[0];
if (group.scrollWidth > group.clientWidth) {
this.$el.children().addClass(‘scrollable’);
this.determineHandlers();
} else {
this.$el.children().removeClass(‘scrollable’);
}
},
// determines whether or not the two arrows (left and right scroll handlers) should be active or not.
determineHandlers: function() {
var target = this.scrollTabsBar[0];
// left handler
if (target.scrollLeft !== 0) {
this.scrollArrowLeft.addClass(‘active’);
} else {
this.scrollArrowLeft.removeClass(‘active’);
}
// right handler
if (target.scrollLeft + target.clientWidth < target.scrollWidth – 1) {
this.scrollArrowRight.addClass(‘active’);
} else {
this.scrollArrowRight.removeClass(‘active’);
}
},
// scrolls the tabs bar to the left.
scrollLeft: function(e) {
e.stopPropagation();
this.stopScrolling();
var scrollEl = this.scrollTabsBar[0];
var view = this;
var factor = 2;
this.scrollArrowRight.addClass(‘active’);
this.scrollInterval = setInterval(function() {
scrollEl.scrollLeft -= Math.floor(factor);
factor *= 1.05;
if (scrollEl.scrollLeft === 0) {
view.stopScrolling();
}
}, 10);
},
// scrolls the tabs bar to the right.
scrollRight: function(e) {
e.stopPropagation();
this.stopScrolling();
var scrollEl = this.scrollTabsBar[0];
var view = this;
var factor = 2;
this.scrollArrowLeft.addClass(‘active’);
this.scrollInterval = setInterval(function() {
scrollEl.scrollLeft += Math.floor(factor);
factor *= 1.05;
// forcefully stop the interval if it’s not doing anything anymore
if (scrollEl.scrollLeft + scrollEl.clientWidth == scrollEl.scrollWidth) {
view.stopScrolling();
}
}, 10);
},
stopScrolling: function() {
clearInterval(this.scrollInterval);
this.determineHandlers();
},
determineClickScroll: function(active) {
// figure out where the element is, and if we need to change our view to show it
var scroll;
// determine where the element we’re going to is in respect to the tabs bar
// 25px is the size of the scroll arrows
var leftSidePosition = active.position().left – 50;
var rightSidePosition = active.position().left + active.width() + 50;
// the gap is how much space we want there to be between the selected element
// when it’s out of view, and we go to it.
var gap = 25;
if (this.scrollTabsBar.children().index(active) === 0) {
// this the first element, so define the scroll to be 0.
scroll = 0;
} else if (this.scrollTabsBar.children().index(active) == this.scrollTabsBar.children().length – 1) {
// this the last element, so define the scroll to be all the way to the right.
scroll = this.scrollTabsBar[0].scrollWidth – this.scrollTabsBar[0].clientWidth;
} else if (leftSidePosition this.scrollTabsBar.width()) {
// the right corner is out of view.
scroll = this.scrollTabsBar[0].scrollLeft + (rightSidePosition – this.scrollTabsBar.width()) + gap;
} else {
scroll = this.scrollTabsBar[0].scrollLeft;
}
// start scrolling
scroll = Math.floor(scroll);
var delta = scroll – this.scrollTabsBar[0].scrollLeft;
var startedDown = false;
if (delta !== 0) {
clearInterval(this.scrollInterval);
var distance = 0;
var direction = (delta > 0 ? 1 : -1);
var speed = 1;
var factor = 1.25; // for parabolic acceleration
this.scrollInterval = setInterval(function() {
if (distance >= Math.abs(delta)) {
this.stopScrolling();
}
this.scrollTabsBar[0].scrollLeft += (Math.max(1, Math.floor(speed)) * direction);
distance += Math.max(1, Math.floor(speed));
if (distance * 2 >= Math.abs(delta)) { // if we’ve traversed more than half
if (factor == 1.25) { // 5/4
factor = 1; // 4/4
} else {
factor = 0.8; // 4/5
}
}
speed *= factor;
}.bind(this), 20);
}
}
});
return TabbedBox;
})();
if (typeof _ElementDefinition == ‘undefined’ || typeof _ElementDefinition == ‘null’) {
var _ElementDefinition = PlatformElement.extend({});
}
var _Element = _ElementDefinition.extend({
initialize: function() {
// we still want to call the initialize function defined by the developer
// however, we don’t want to call it until placeholders have been replaced
this.placeholderInterval = setInterval(function() {
// so use setInterval to check for placeholders.
if (this.$(‘.platform-element-child-placeholder’).length == 0) {
clearInterval(this.placeholderInterval);
this.constructor.__super__.initialize.apply(this);
}
}.bind(this), 100);
}
});
_Element.prototype.settings = new PlatformElementSettings({“tabs_each”:[{“tabs_index”:0},{“tabs_index”:1},{“tabs_index”:2}],”theme”:”standard”,”tabs”:3,”active_tab”:”white”,”inactive_tab”:”#F7F7F7″,”border_color”:”#CCCCCC”,”activeTabIndexInternal”:0});
_Element.prototype.settings.page_element_id = “129045103538933616”;
_Element.prototype.element_id = “87876e88-6e90-4e57-9718-343e355a9e67”;
_Element.prototype.user_id = “3466466”;
_Element.prototype.site_id = “484589221176252212”;
_Element.prototype.assets_path = “//marketplace.editmysite.com/elements/135397292802228534-1.3.6/assets/”;
new _Element({
el: ‘#element-87876e88-6e90-4e57-9718-343e355a9e67’
});
});
});
}
if (typeof document.documentElement.appReady == ‘undefined’) {
document.documentElement.appReady = 0;
}
if (document.documentElement.appReady || (window.inEditor && window.inEditor())) {
setupElement129045103538933616();
} else if (document.createEvent && document.addEventListener) {
document.addEventListener(‘appReady’, setupElement129045103538933616, false);
} else {
document.documentElement.attachEvent(‘onpropertychange’, function(event){
if (event.propertyName == ‘appReady’) {
setupElement129045103538933616();
}
});
}

The following fare matrix applies:

#element-b4d889a8-21d2-4c90-8bd4-2c3ec5181662 .border-box {
-moz-box-sizing: border-box;
-webkit-box-sizing: border-box;
-ms-box-sizing: border-box;
box-sizing: border-box;
}
#element-b4d889a8-21d2-4c90-8bd4-2c3ec5181662 .tabbed-box {
position: relative;
margin: 20px 0;
}
#element-b4d889a8-21d2-4c90-8bd4-2c3ec5181662 .tabbed-box-tab-group {
font-size: 0;
margin: 0;
padding: 0;
float: left;
list-style: none;
height: 60px;
width: 100%;
-moz-box-sizing: border-box;
-webkit-box-sizing: border-box;
-ms-box-sizing: border-box;
box-sizing: border-box;
white-space: nowrap;
}
#element-b4d889a8-21d2-4c90-8bd4-2c3ec5181662 .tabbed-box-tab {
margin: 0;
cursor: pointer;
height: 60px;
display: inline-block;
min-width: 19%;
position: relative;
background-color: #F7F7F7;
-moz-box-sizing: border-box;
-webkit-box-sizing: border-box;
-ms-box-sizing: border-box;
box-sizing: border-box;
}
#element-b4d889a8-21d2-4c90-8bd4-2c3ec5181662 .tabbed-box-content-group {
clear: both;
float: left;
width: 100%;
-moz-box-sizing: border-box;
-webkit-box-sizing: border-box;
-ms-box-sizing: border-box;
box-sizing: border-box;
}
#element-b4d889a8-21d2-4c90-8bd4-2c3ec5181662 .tabbed-box-content {
padding: 40px 20px 40px 20px;
display: none;
}
#element-b4d889a8-21d2-4c90-8bd4-2c3ec5181662 .scrollArrow {
width: 25px;
background-color: white;
text-align: center;
position: absolute;
z-index: 3;
top: 0;
display: none;
cursor: pointer;
height: 60px;
line-height: 60px;
font-weight: bold;
-moz-box-sizing: border-box;
-webkit-box-sizing: border-box;
-ms-box-sizing: border-box;
box-sizing: border-box;
-webkit-touch-callout: none;
-webkit-user-select: none;
-khtml-user-select: none;
-moz-user-select: none;
-ms-user-select: none;
user-select: none;
}
#element-b4d889a8-21d2-4c90-8bd4-2c3ec5181662 .scrollArrow.scrollArrow-left {
left: 0;
}
#element-b4d889a8-21d2-4c90-8bd4-2c3ec5181662 .scrollArrow.scrollArrow-right {
right: 0;
}
#element-b4d889a8-21d2-4c90-8bd4-2c3ec5181662 .tabbed-box.scrollable .tabbed-box-tab-group {
border-bottom: none;
overflow-x: hidden;
overflow-y: hidden;
}
#element-b4d889a8-21d2-4c90-8bd4-2c3ec5181662 .tabbed-box.scrollable .tabbed-box-bar:hover .scrollArrow.active {
display: block;
}
@media only screen and (min-device-width: 414px) and (max-device-width: 736px) and (-webkit-min-device-pixel-ratio: 3),only screen and (min-device-width: 375px) and (max-device-width: 667px) and (-webkit-min-device-pixel-ratio: 2),only screen and (min-device-width: 320px) and (max-device-width: 568px) and (-webkit-min-device-pixel-ratio: 2),only screen and (min-device-width: 320px) and (max-device-width: 480px) and (-webkit-min-device-pixel-ratio: 2),only screen and (max-width: 499px) {
#element-b4d889a8-21d2-4c90-8bd4-2c3ec5181662 .tabbed-box-tab-group {
overflow-x: scroll !important;
}
}
#element-b4d889a8-21d2-4c90-8bd4-2c3ec5181662 .standard .tabbed-box-tab-group {
border-left: 1px solid #CCCCCC;
border-bottom: 1px solid #CCCCCC;
}
#element-b4d889a8-21d2-4c90-8bd4-2c3ec5181662 .standard .tabbed-box-tab {
border: 1px solid #CCCCCC;
border-left: none;
}
#element-b4d889a8-21d2-4c90-8bd4-2c3ec5181662 .standard .tabbed-box-tab .paragraph {
color: #A8ABAC;
}
#element-b4d889a8-21d2-4c90-8bd4-2c3ec5181662 .standard .tabbed-box-tab.active {
border-bottom: 1px solid white;
background-color: white;
}
#element-b4d889a8-21d2-4c90-8bd4-2c3ec5181662 .standard .tabbed-box-content-group {
border: 1px solid #CCCCCC;
border-top: none;
}
#element-b4d889a8-21d2-4c90-8bd4-2c3ec5181662 .standard.scrollable .tabbed-box-tab-group {
border-right: 1px solid #CCCCCC;
}
#element-b4d889a8-21d2-4c90-8bd4-2c3ec5181662 .standard.scrollable .tabbed-box-tab-group .tabbed-box-tab:last-child {
border-right: none;
}
#element-b4d889a8-21d2-4c90-8bd4-2c3ec5181662 .standard.scrollable .scrollArrow-left {
border: 1px solid #CCCCCC;
}
#element-b4d889a8-21d2-4c90-8bd4-2c3ec5181662 .standard.scrollable .scrollArrow-right {
border: 1px solid #CCCCCC;
}
#element-b4d889a8-21d2-4c90-8bd4-2c3ec5181662 .line .tabbed-box-tab-group {
border: 1px solid #CCCCCC;
border-bottom: none;
}
#element-b4d889a8-21d2-4c90-8bd4-2c3ec5181662 .line .tabbed-box-tab {
border-bottom: 1px solid #CCCCCC;
}
#element-b4d889a8-21d2-4c90-8bd4-2c3ec5181662 .line .tabbed-box-tab .paragraph {
color: #BDC2C2;
}
#element-b4d889a8-21d2-4c90-8bd4-2c3ec5181662 .line .tabbed-box-tab.active {
border-bottom: 1px solid black;
background-color: white;
}
#element-b4d889a8-21d2-4c90-8bd4-2c3ec5181662 .line .tabbed-box-content-group {
border: 1px solid #CCCCCC;
}
#element-b4d889a8-21d2-4c90-8bd4-2c3ec5181662 .line.scrollable .tabbed-box-tab-group {
height: 61px;
}
#element-b4d889a8-21d2-4c90-8bd4-2c3ec5181662 .line.scrollable .tabbed-box-content-group {
border-top: none;
}
#element-b4d889a8-21d2-4c90-8bd4-2c3ec5181662 .line.scrollable .scrollArrow-left,
#element-b4d889a8-21d2-4c90-8bd4-2c3ec5181662 .line.scrollable .scrollArrow-right {
border: 1px solid #CCCCCC;
border-bottom: none;
border-top: none;
height: 61px;
}
#element-b4d889a8-21d2-4c90-8bd4-2c3ec5181662 .simple .tabbed-box-tab {
border-bottom: 1px solid #CCCCCC;
height: 61px;
}
#element-b4d889a8-21d2-4c90-8bd4-2c3ec5181662 .simple .tabbed-box-tab .paragraph {
color: #BDC2C2;
}
#element-b4d889a8-21d2-4c90-8bd4-2c3ec5181662 .simple .tabbed-box-tab.active {
border-bottom: 1px solid black;
background-color: white;
}
#element-b4d889a8-21d2-4c90-8bd4-2c3ec5181662 .simple .tabbed-box-content-group {
border-top: 1px solid #CCCCCC;
}
#element-b4d889a8-21d2-4c90-8bd4-2c3ec5181662 .simple .tabbed-box-content {
padding: 20px 0px 20px 0px;
}
#element-b4d889a8-21d2-4c90-8bd4-2c3ec5181662 .simple .scrollArrow-left {
border-right: 1px solid #CCCCCC;
}
#element-b4d889a8-21d2-4c90-8bd4-2c3ec5181662 .simple .scrollArrow-right {
border-left: 1px solid #CCCCCC;
}
#element-b4d889a8-21d2-4c90-8bd4-2c3ec5181662 .s3d-shadow {
-webkit-box-shadow: #f5f5f5;
-moz-box-shadow: #f5f5f5;
box-shadow: #f5f5f5;
}
#element-b4d889a8-21d2-4c90-8bd4-2c3ec5181662 .s3d-content-shadow {
-webkit-box-shadow: 0px 0px 30px 4px #f5f5f5;
-moz-box-shadow: 0px 0px 30px 4px #f5f5f5;
box-shadow: 0px 0px 30px 4px #f5f5f5;
}
#element-b4d889a8-21d2-4c90-8bd4-2c3ec5181662 .s3d .tabbed-box-tab .paragraph {
color: #A8ABAC;
background-color: #F7F7F7;
}
#element-b4d889a8-21d2-4c90-8bd4-2c3ec5181662 .s3d .tabbed-box-tab.active {
border-bottom: 1px solid white;
background-color: white;
-webkit-box-shadow: 0px -10px 31px -4px #f5f5f5, -12px -4px 40px -16px #f5f5f5, 12px -4px 40px -16px #f5f5f5;
-moz-box-shadow: 0px -10px 31px -4px #f5f5f5, -12px -4px 40px -16px #f5f5f5, 12px -4px 40px -16px #f5f5f5;
box-shadow: 0px -10px 31px -4px #f5f5f5, -12px -4px 40px -16px #f5f5f5, 12px -4px 40px -16px #f5f5f5;
}
#element-b4d889a8-21d2-4c90-8bd4-2c3ec5181662 .s3d .tabbed-box-tab.active .paragraph {
background-color: white;
}
#element-b4d889a8-21d2-4c90-8bd4-2c3ec5181662 .s3d .tabbed-box-content-group {
-webkit-box-shadow: 0px 0px 30px 4px #f5f5f5;
-moz-box-shadow: 0px 0px 30px 4px #f5f5f5;
box-shadow: 0px 0px 30px 4px #f5f5f5;
}
#element-b4d889a8-21d2-4c90-8bd4-2c3ec5181662 .tabbed-box-tab .paragraph {
padding: 0px;
line-height: 60px !important;
text-align: center !important;
font-weight: bold;
font-size: 16px !important;
margin: 0 20px;
}
#element-b4d889a8-21d2-4c90-8bd4-2c3ec5181662 .tabbed-box-content .paragraph {
padding: 0;
line-height: 30px;
}
#element-b4d889a8-21d2-4c90-8bd4-2c3ec5181662 .tabbed-box-tab:last-child .w-delete-outer {
display: none;
position: relative;
float: right;
}

  • Regular Fares
  • Short Trip Fares
<
>
Note: * – SDM = Seniors (65+), Disabled, and Medicare Cardholders
The regular fares are payable by cash or Clipper Card (see restrictions).

#element-a4b5c893-a2c5-4bf1-b9ae-764520efc618 .simple-table-wrapper {
padding: 20px 0;
}
#element-a4b5c893-a2c5-4bf1-b9ae-764520efc618 .simple-table {
width: 100%;
border: 1px solid #C9CDCF;
border-spacing: 0;
}
#element-a4b5c893-a2c5-4bf1-b9ae-764520efc618 .simple-table td.cell {
border-right: 1px solid #C9CDCF;
border-bottom: 1px solid #C9CDCF;
word-break: break-word;
background-color: #FFFFFF;
width: 14.285714285714%;
}
#element-a4b5c893-a2c5-4bf1-b9ae-764520efc618 .simple-table td.cell .paragraph {
width: 90%;
margin: 0 5%;
padding-bottom: 10px;
padding-top: 10px;
text-align: center;
}
#element-a4b5c893-a2c5-4bf1-b9ae-764520efc618 .simple-table.style-top tr:first-child td,
#element-a4b5c893-a2c5-4bf1-b9ae-764520efc618 .simple-table.style-side td:first-of-type {
background-color: #F8F8F8;
}
#element-a4b5c893-a2c5-4bf1-b9ae-764520efc618 .simple-table.style-top tr:first-child td .paragraph,
#element-a4b5c893-a2c5-4bf1-b9ae-764520efc618 .simple-table.style-side td:first-of-type .paragraph {
font-weight: 700;
}
#element-a4b5c893-a2c5-4bf1-b9ae-764520efc618 .simple-table tr:last-child td {
border-bottom: none;
}
#element-a4b5c893-a2c5-4bf1-b9ae-764520efc618 .simple-table td:last-of-type {
border-right: none;
}
#element-a4b5c893-a2c5-4bf1-b9ae-764520efc618 .simple-table .empty-content-area-element {
padding-left: 0px !important;
}

Route
Adult
31-Day Adult Pass
Youth
31-Day Youth Pass
SDM*
31-Day SDM* Pass
20
$2.75
$70
$2.00
$50
$1.35
$35
Full trips on 30, 40, and 90
$5.75
$130
$4.75
$109
$2.85
$65
Short trips (see restrictions) on 30, 40
$2.75
$70
$2.00
$50
$1.35
$35

function setupElement659781135376335070() {
var requireFunc = window.platformElementRequire || window.require;
// Relies on a global require, specific to platform elements
requireFunc([
‘w-global’,
‘underscore’,
‘jquery’,
‘backbone’,
‘util/platform/elements/PlatformElement’,
‘util/platform/elements/PlatformElementSettings’
], function(
_W,
_,
$,
Backbone,
PlatformElement,
PlatformElementSettings
) {
var dependencies = null || [];
var platform_element_id = “702688850553606843-1.4.3”;
if (typeof _W.loadedPlatformDependencies === ‘undefined’) {
_W.loadedPlatformDependencies = [];
}
if (typeof _W.platformElements === ‘undefined’) {
_W.platformElements = [];
}
if (typeof _W.platformElements[platform_element_id] === ‘undefined’) {
_W.platformElements[platform_element_id] = {};
_W.platformElements[platform_element_id].deferredObject = new $.Deferred();
_W.platformElements[platform_element_id].deferredPromise = _W.platformElements[platform_element_id].deferredObject.promise();
}
if(_.intersection(_W.loadedPlatformDependencies, dependencies).length !== dependencies.length){
_.reduce(dependencies, function(promise, nextScript){
_W.loadedPlatformDependencies.push(nextScript);
return promise.then(function(){
return $.getScript(nextScript);
});
}, $().promise()).then(function(){
_W.platformElements[platform_element_id].deferredObject.resolve();
});
}
if (dependencies.length === 0){
_W.platformElements[platform_element_id].deferredObject.resolve();
}
_W.platformElements[platform_element_id].deferredPromise.done(function(){
var _ElementDefinition = /**
* This is required for element rendering to be possible
* @type {PlatformElement}
*/
(function() {
var SimpleTable = PlatformElement.extend({
initialize: function() {
this.setSizes();
},
setSizes: function() {
var sizes = this.settings.get(‘tableSizes’);
// if the # of columns isn’t the size of the array of lengths, ignore it.
if (sizes && sizes != “default” && this.settings.get(‘columns’) == sizes.length) {
var columns = this.$(‘tr’).each(function(index, value) {
var cells = $(value).find(‘td’).each(function(index2, value2) {
$(value2).css(‘width’, sizes[index2] + ‘%’);
});
});
}
}
});
return SimpleTable;
})();;
if (typeof _ElementDefinition == ‘undefined’ || typeof _ElementDefinition == ‘null’) {
var _ElementDefinition = PlatformElement.extend({});
}
var _Element = _ElementDefinition.extend({
initialize: function() {
// we still want to call the initialize function defined by the developer
// however, we don’t want to call it until placeholders have been replaced
this.placeholderInterval = setInterval(function() {
// so use setInterval to check for placeholders.
if (this.$(‘.platform-element-child-placeholder’).length == 0) {
clearInterval(this.placeholderInterval);
this.constructor.__super__.initialize.apply(this);
}
}.bind(this), 100);
}
});
_Element.prototype.settings = new PlatformElementSettings({“columns_each”:[{“columns_index”:0},{“columns_index”:1},{“columns_index”:2},{“columns_index”:3},{“columns_index”:4},{“columns_index”:5},{“columns_index”:6}],”rows_each”:[{“rows_index”:0},{“rows_index”:1},{“rows_index”:2},{“rows_index”:3}],”columns”:7,”rows”:4,”style”:”top”,”alignment”:”center”,”titleColor”:”#F8F8F8″,”backgroundColor”:”#FFFFFF”,”borderColor”:”#C9CDCF”,”tableSizes”:[20,11,12,13,14,12,14]});
_Element.prototype.settings.page_element_id = “659781135376335070”;
_Element.prototype.element_id = “a4b5c893-a2c5-4bf1-b9ae-764520efc618”;
_Element.prototype.user_id = “3466466”;
_Element.prototype.site_id = “484589221176252212”;
_Element.prototype.assets_path = “//marketplace.editmysite.com/elements/702688850553606843-1.4.3/assets/”;
new _Element({
el: ‘#element-a4b5c893-a2c5-4bf1-b9ae-764520efc618’
});
});
});
}
if (typeof document.documentElement.appReady == ‘undefined’) {
document.documentElement.appReady = 0;
}
if (document.documentElement.appReady || (window.inEditor && window.inEditor())) {
setupElement659781135376335070();
} else if (document.createEvent && document.addEventListener) {
document.addEventListener(‘appReady’, setupElement659781135376335070, false);
} else {
document.documentElement.attachEvent(‘onpropertychange’, function(event){
if (event.propertyName == ‘appReady’) {
setupElement659781135376335070();
}
});
}

Short versus Full Trips (Routes 30 and 40 only)

To pay the short trip fare on the following routes, pay by cash or show a valid pass. Do not use Clipper Card to pay as it will denote you are paying for a full trip (cf. below), and review the regular fares before determining how much you will need to pay.

#element-2f8d9a7d-1ada-4def-bf7b-f7d4fa4a140d .simple-table-wrapper {
padding: 20px 0;
}
#element-2f8d9a7d-1ada-4def-bf7b-f7d4fa4a140d .simple-table {
width: 100%;
border: 1px solid #C9CDCF;
border-spacing: 0;
}
#element-2f8d9a7d-1ada-4def-bf7b-f7d4fa4a140d .simple-table td.cell {
border-right: 1px solid #C9CDCF;
border-bottom: 1px solid #C9CDCF;
word-break: break-word;
background-color: #FFFFFF;
width: 20%;
}
#element-2f8d9a7d-1ada-4def-bf7b-f7d4fa4a140d .simple-table td.cell .paragraph {
width: 90%;
margin: 0 5%;
padding-bottom: 10px;
padding-top: 10px;
text-align: center;
}
#element-2f8d9a7d-1ada-4def-bf7b-f7d4fa4a140d .simple-table.style-top tr:first-child td,
#element-2f8d9a7d-1ada-4def-bf7b-f7d4fa4a140d .simple-table.style-side td:first-of-type {
background-color: #F8F8F8;
}
#element-2f8d9a7d-1ada-4def-bf7b-f7d4fa4a140d .simple-table.style-top tr:first-child td .paragraph,
#element-2f8d9a7d-1ada-4def-bf7b-f7d4fa4a140d .simple-table.style-side td:first-of-type .paragraph {
font-weight: 700;
}
#element-2f8d9a7d-1ada-4def-bf7b-f7d4fa4a140d .simple-table tr:last-child td {
border-bottom: none;
}
#element-2f8d9a7d-1ada-4def-bf7b-f7d4fa4a140d .simple-table td:last-of-type {
border-right: none;
}
#element-2f8d9a7d-1ada-4def-bf7b-f7d4fa4a140d .simple-table .empty-content-area-element {
padding-left: 0px !important;
}

Route
Short Trip Portions
Adult Fare
Youth Fare
Seniors, Disabled, and Medicare Fare
30
  • Fairfield – Vacaville
  • Fairfield – Dixon
  • Vacaville – Dixon
  • Vacaville – UC Davis
  • Dixon – UC Davis
  • Dixon – Sacramento
  • UC Davis – Sacramento
$2.75
$2.00
$1.35
40
  • Vacaville – Fairfield
  • Vacaville – Benicia
  • Fairfield – Benicia
  • Benicia – Pleasant Hill BART
  • Benicia – Walnut Creek BART
$2.75
$2.00
$1.35

function setupElement396998056705703837() {
var requireFunc = window.platformElementRequire || window.require;
// Relies on a global require, specific to platform elements
requireFunc([
‘w-global’,
‘underscore’,
‘jquery’,
‘backbone’,
‘util/platform/elements/PlatformElement’,
‘util/platform/elements/PlatformElementSettings’
], function(
_W,
_,
$,
Backbone,
PlatformElement,
PlatformElementSettings
) {
var dependencies = null || [];
var platform_element_id = “702688850553606843-1.4.3”;
if (typeof _W.loadedPlatformDependencies === ‘undefined’) {
_W.loadedPlatformDependencies = [];
}
if (typeof _W.platformElements === ‘undefined’) {
_W.platformElements = [];
}
if (typeof _W.platformElements[platform_element_id] === ‘undefined’) {
_W.platformElements[platform_element_id] = {};
_W.platformElements[platform_element_id].deferredObject = new $.Deferred();
_W.platformElements[platform_element_id].deferredPromise = _W.platformElements[platform_element_id].deferredObject.promise();
}
if(_.intersection(_W.loadedPlatformDependencies, dependencies).length !== dependencies.length){
_.reduce(dependencies, function(promise, nextScript){
_W.loadedPlatformDependencies.push(nextScript);
return promise.then(function(){
return $.getScript(nextScript);
});
}, $().promise()).then(function(){
_W.platformElements[platform_element_id].deferredObject.resolve();
});
}
if (dependencies.length === 0){
_W.platformElements[platform_element_id].deferredObject.resolve();
}
_W.platformElements[platform_element_id].deferredPromise.done(function(){
var _ElementDefinition = /**
* This is required for element rendering to be possible
* @type {PlatformElement}
*/
(function() {
var SimpleTable = PlatformElement.extend({
initialize: function() {
this.setSizes();
},
setSizes: function() {
var sizes = this.settings.get(‘tableSizes’);
// if the # of columns isn’t the size of the array of lengths, ignore it.
if (sizes && sizes != “default” && this.settings.get(‘columns’) == sizes.length) {
var columns = this.$(‘tr’).each(function(index, value) {
var cells = $(value).find(‘td’).each(function(index2, value2) {
$(value2).css(‘width’, sizes[index2] + ‘%’);
});
});
}
}
});
return SimpleTable;
})();;
if (typeof _ElementDefinition == ‘undefined’ || typeof _ElementDefinition == ‘null’) {
var _ElementDefinition = PlatformElement.extend({});
}
var _Element = _ElementDefinition.extend({
initialize: function() {
// we still want to call the initialize function defined by the developer
// however, we don’t want to call it until placeholders have been replaced
this.placeholderInterval = setInterval(function() {
// so use setInterval to check for placeholders.
if (this.$(‘.platform-element-child-placeholder’).length == 0) {
clearInterval(this.placeholderInterval);
this.constructor.__super__.initialize.apply(this);
}
}.bind(this), 100);
}
});
_Element.prototype.settings = new PlatformElementSettings({“columns_each”:[{“columns_index”:0},{“columns_index”:1},{“columns_index”:2},{“columns_index”:3},{“columns_index”:4}],”rows_each”:[{“rows_index”:0},{“rows_index”:1},{“rows_index”:2}],”columns”:5,”rows”:3,”style”:”top”,”alignment”:”center”,”titleColor”:”#F8F8F8″,”backgroundColor”:”#FFFFFF”,”borderColor”:”#C9CDCF”,”tableSizes”:[11,31,19,19,18]});
_Element.prototype.settings.page_element_id = “396998056705703837”;
_Element.prototype.element_id = “2f8d9a7d-1ada-4def-bf7b-f7d4fa4a140d”;
_Element.prototype.user_id = “3466466”;
_Element.prototype.site_id = “484589221176252212”;
_Element.prototype.assets_path = “//marketplace.editmysite.com/elements/702688850553606843-1.4.3/assets/”;
new _Element({
el: ‘#element-2f8d9a7d-1ada-4def-bf7b-f7d4fa4a140d’
});
});
});
}
if (typeof document.documentElement.appReady == ‘undefined’) {
document.documentElement.appReady = 0;
}
if (document.documentElement.appReady || (window.inEditor && window.inEditor())) {
setupElement396998056705703837();
} else if (document.createEvent && document.addEventListener) {
document.addEventListener(‘appReady’, setupElement396998056705703837, false);
} else {
document.documentElement.attachEvent(‘onpropertychange’, function(event){
if (event.propertyName == ‘appReady’) {
setupElement396998056705703837();
}
});
}

Clipper Card

Payment by Clipper Card means you will be paying for a full trip, as listed below:

#element-e53cce53-edb4-4d61-a1d7-62a3a82a9748 .simple-table-wrapper {
padding: 20px 0;
}
#element-e53cce53-edb4-4d61-a1d7-62a3a82a9748 .simple-table {
width: 100%;
border: 1px solid #C9CDCF;
border-spacing: 0;
}
#element-e53cce53-edb4-4d61-a1d7-62a3a82a9748 .simple-table td.cell {
border-right: 1px solid #C9CDCF;
border-bottom: 1px solid #C9CDCF;
word-break: break-word;
background-color: #FFFFFF;
width: 25%;
}
#element-e53cce53-edb4-4d61-a1d7-62a3a82a9748 .simple-table td.cell .paragraph {
width: 90%;
margin: 0 5%;
padding-bottom: 10px;
padding-top: 10px;
text-align: center;
}
#element-e53cce53-edb4-4d61-a1d7-62a3a82a9748 .simple-table.style-top tr:first-child td,
#element-e53cce53-edb4-4d61-a1d7-62a3a82a9748 .simple-table.style-side td:first-of-type {
background-color: #F8F8F8;
}
#element-e53cce53-edb4-4d61-a1d7-62a3a82a9748 .simple-table.style-top tr:first-child td .paragraph,
#element-e53cce53-edb4-4d61-a1d7-62a3a82a9748 .simple-table.style-side td:first-of-type .paragraph {
font-weight: 700;
}
#element-e53cce53-edb4-4d61-a1d7-62a3a82a9748 .simple-table tr:last-child td {
border-bottom: none;
}
#element-e53cce53-edb4-4d61-a1d7-62a3a82a9748 .simple-table td:last-of-type {
border-right: none;
}
#element-e53cce53-edb4-4d61-a1d7-62a3a82a9748 .simple-table .empty-content-area-element {
padding-left: 0px !important;
}

Route 20
Route 30
(Service to Davis, Sacramento)
Route 40
(Pleasant Hill BART, Walnut Creek BART)
Route 90
(El Cerrito del Norte BART)
  • ​Fairfield – Vacaville
  • Fairfield – UC Davis
  • Fairfield – Sacramento
  • Vacaville – Sacramento
  • Vacaville – BART
  • Fairfield – BART
  • Suisun City – BART
  • Fairfield – BART

function setupElement189975364667137885() {
var requireFunc = window.platformElementRequire || window.require;
// Relies on a global require, specific to platform elements
requireFunc([
‘w-global’,
‘underscore’,
‘jquery’,
‘backbone’,
‘util/platform/elements/PlatformElement’,
‘util/platform/elements/PlatformElementSettings’
], function(
_W,
_,
$,
Backbone,
PlatformElement,
PlatformElementSettings
) {
var dependencies = null || [];
var platform_element_id = “702688850553606843-1.4.3”;
if (typeof _W.loadedPlatformDependencies === ‘undefined’) {
_W.loadedPlatformDependencies = [];
}
if (typeof _W.platformElements === ‘undefined’) {
_W.platformElements = [];
}
if (typeof _W.platformElements[platform_element_id] === ‘undefined’) {
_W.platformElements[platform_element_id] = {};
_W.platformElements[platform_element_id].deferredObject = new $.Deferred();
_W.platformElements[platform_element_id].deferredPromise = _W.platformElements[platform_element_id].deferredObject.promise();
}
if(_.intersection(_W.loadedPlatformDependencies, dependencies).length !== dependencies.length){
_.reduce(dependencies, function(promise, nextScript){
_W.loadedPlatformDependencies.push(nextScript);
return promise.then(function(){
return $.getScript(nextScript);
});
}, $().promise()).then(function(){
_W.platformElements[platform_element_id].deferredObject.resolve();
});
}
if (dependencies.length === 0){
_W.platformElements[platform_element_id].deferredObject.resolve();
}
_W.platformElements[platform_element_id].deferredPromise.done(function(){
var _ElementDefinition = /**
* This is required for element rendering to be possible
* @type {PlatformElement}
*/
(function() {
var SimpleTable = PlatformElement.extend({
initialize: function() {
this.setSizes();
},
setSizes: function() {
var sizes = this.settings.get(‘tableSizes’);
// if the # of columns isn’t the size of the array of lengths, ignore it.
if (sizes && sizes != “default” && this.settings.get(‘columns’) == sizes.length) {
var columns = this.$(‘tr’).each(function(index, value) {
var cells = $(value).find(‘td’).each(function(index2, value2) {
$(value2).css(‘width’, sizes[index2] + ‘%’);
});
});
}
}
});
return SimpleTable;
})();;
if (typeof _ElementDefinition == ‘undefined’ || typeof _ElementDefinition == ‘null’) {
var _ElementDefinition = PlatformElement.extend({});
}
var _Element = _ElementDefinition.extend({
initialize: function() {
// we still want to call the initialize function defined by the developer
// however, we don’t want to call it until placeholders have been replaced
this.placeholderInterval = setInterval(function() {
// so use setInterval to check for placeholders.
if (this.$(‘.platform-element-child-placeholder’).length == 0) {
clearInterval(this.placeholderInterval);
this.constructor.__super__.initialize.apply(this);
}
}.bind(this), 100);
}
});
_Element.prototype.settings = new PlatformElementSettings({“columns_each”:[{“columns_index”:0},{“columns_index”:1},{“columns_index”:2},{“columns_index”:3}],”rows_each”:[{“rows_index”:0},{“rows_index”:1}],”columns”:4,”rows”:2,”style”:”top”,”alignment”:”center”,”titleColor”:”#F8F8F8″,”backgroundColor”:”#FFFFFF”,”borderColor”:”#C9CDCF”,”tableSizes”:[21,27,27,23]});
_Element.prototype.settings.page_element_id = “189975364667137885”;
_Element.prototype.element_id = “e53cce53-edb4-4d61-a1d7-62a3a82a9748”;
_Element.prototype.user_id = “3466466”;
_Element.prototype.site_id = “484589221176252212”;
_Element.prototype.assets_path = “//marketplace.editmysite.com/elements/702688850553606843-1.4.3/assets/”;
new _Element({
el: ‘#element-e53cce53-edb4-4d61-a1d7-62a3a82a9748’
});
});
});
}
if (typeof document.documentElement.appReady == ‘undefined’) {
document.documentElement.appReady = 0;
}
if (document.documentElement.appReady || (window.inEditor && window.inEditor())) {
setupElement189975364667137885();
} else if (document.createEvent && document.addEventListener) {
document.addEventListener(‘appReady’, setupElement189975364667137885, false);
} else {
document.documentElement.attachEvent(‘onpropertychange’, function(event){
if (event.propertyName == ‘appReady’) {
setupElement189975364667137885();
}
});
}

function setupElement906666144101851964() {
var requireFunc = window.platformElementRequire || window.require;
// Relies on a global require, specific to platform elements
requireFunc([
‘w-global’,
‘underscore’,
‘jquery’,
‘backbone’,
‘util/platform/elements/PlatformElement’,
‘util/platform/elements/PlatformElementSettings’
], function(
_W,
_,
$,
Backbone,
PlatformElement,
PlatformElementSettings
) {
var dependencies = null || [];
var platform_element_id = “135397292802228534-1.3.6”;
if (typeof _W.loadedPlatformDependencies === ‘undefined’) {
_W.loadedPlatformDependencies = [];
}
if (typeof _W.platformElements === ‘undefined’) {
_W.platformElements = [];
}
if (typeof _W.platformElements[platform_element_id] === ‘undefined’) {
_W.platformElements[platform_element_id] = {};
_W.platformElements[platform_element_id].deferredObject = new $.Deferred();
_W.platformElements[platform_element_id].deferredPromise = _W.platformElements[platform_element_id].deferredObject.promise();
}
if(_.intersection(_W.loadedPlatformDependencies, dependencies).length !== dependencies.length){
_.reduce(dependencies, function(promise, nextScript){
_W.loadedPlatformDependencies.push(nextScript);
return promise.then(function(){
return $.getScript(nextScript);
});
}, $().promise()).then(function(){
_W.platformElements[platform_element_id].deferredObject.resolve();
});
}
if (dependencies.length === 0){
_W.platformElements[platform_element_id].deferredObject.resolve();
}
_W.platformElements[platform_element_id].deferredPromise.done(function(){
var _ElementDefinition = /**
* This is required for element rendering to be possible
* @type {PlatformElement}
*/
(function() {
var TabbedBox = PlatformElement.extend({
events: {
‘click .tabbed-box-tab’: ‘clickTab’,
// in case they type and that causes an overflow, we should determine scrollability here
‘keyup .tabbed-box-tab .paragraph’: ‘determineScrollability’,
‘mousedown .scrollArrow-left’: ‘scrollLeft’,
‘mousedown .scrollArrow-right’: ‘scrollRight’,
‘touchstart .scrollArrow-left’: ‘scrollLeft’,
‘touchstart .scrollArrow-right’: ‘scrollRight’
},
initialize: function() {
var view = this;
// optimization
this.scrollArrowLeft = this.$(‘> .tabbed-box > .tabbed-box-bar > .scrollArrow-left’);
this.scrollArrowRight = this.$(‘> .tabbed-box > .tabbed-box-bar > .scrollArrow-right’);
this.scrollTabsBar = this.$(‘> .tabbed-box > .tabbed-box-bar > .tabbed-box-tab-group’);
// resize handler and mouseup handler
// since we want to be able to handle mouseup wherever the user releases (not just over the element)
// we set it here as a property of the window.
$(window).resize(function() {
this.determineScrollability();
}.bind(this)).on(‘mouseup touchend’, function() {
this.stopScrolling();
}.bind(this));
// since scroll events don’t propagate up, we have to bind it here as opposed to in the events object
this.scrollTabsBar.scroll(function() {
this.determineHandlers();
}.bind(this));
// determine whether or not we should show the scroll handlers
this.determineScrollability();
// load the first tab.
$(document).ready(function() {
this.scrollTabsBar.children().first().click();
}.bind(this));
},
/*
Handle click event on a tab.
Uses ‘rel’ attribute of each tab as an index to access
the class of the corresponding content area.
*/
clickTab: function(e) {
var active = $(e.currentTarget); // Clicked tab
var content_wrapper = this.$(‘> .tabbed-box > .tabbed-box-content-group’); // wrapper for all content divs
this.stopScrolling();
this.determineClickScroll(active);
// Set new active tab
active.siblings().removeClass(‘active’);
active.addClass(‘active’);
// mark the new active tab
this.settings.set(‘activeTabIndexInternal’, this.scrollTabsBar.children().index(active));
this.settings.save();
// trigger children first
content_wrapper.find(‘.tabbed-box-tab.active’).click();
// Set new active content
content_wrapper.children().hide();
content_wrapper.find(‘> .’ + active.attr(‘rel’)).fadeIn();
this.determineHandlers();
// fire resize event to handle any deterministic elements now appearing
$(window).resize();
// Stop propagation in case this is a nested tab app
e.stopPropagation();
},
// determines whether or not the two arrows (left and right scroll handlers) should be visible or not.
determineScrollability: function() {
var group = this.scrollTabsBar[0];
if (group.scrollWidth > group.clientWidth) {
this.$el.children().addClass(‘scrollable’);
this.determineHandlers();
} else {
this.$el.children().removeClass(‘scrollable’);
}
},
// determines whether or not the two arrows (left and right scroll handlers) should be active or not.
determineHandlers: function() {
var target = this.scrollTabsBar[0];
// left handler
if (target.scrollLeft !== 0) {
this.scrollArrowLeft.addClass(‘active’);
} else {
this.scrollArrowLeft.removeClass(‘active’);
}
// right handler
if (target.scrollLeft + target.clientWidth < target.scrollWidth – 1) {
this.scrollArrowRight.addClass(‘active’);
} else {
this.scrollArrowRight.removeClass(‘active’);
}
},
// scrolls the tabs bar to the left.
scrollLeft: function(e) {
e.stopPropagation();
this.stopScrolling();
var scrollEl = this.scrollTabsBar[0];
var view = this;
var factor = 2;
this.scrollArrowRight.addClass(‘active’);
this.scrollInterval = setInterval(function() {
scrollEl.scrollLeft -= Math.floor(factor);
factor *= 1.05;
if (scrollEl.scrollLeft === 0) {
view.stopScrolling();
}
}, 10);
},
// scrolls the tabs bar to the right.
scrollRight: function(e) {
e.stopPropagation();
this.stopScrolling();
var scrollEl = this.scrollTabsBar[0];
var view = this;
var factor = 2;
this.scrollArrowLeft.addClass(‘active’);
this.scrollInterval = setInterval(function() {
scrollEl.scrollLeft += Math.floor(factor);
factor *= 1.05;
// forcefully stop the interval if it’s not doing anything anymore
if (scrollEl.scrollLeft + scrollEl.clientWidth == scrollEl.scrollWidth) {
view.stopScrolling();
}
}, 10);
},
stopScrolling: function() {
clearInterval(this.scrollInterval);
this.determineHandlers();
},
determineClickScroll: function(active) {
// figure out where the element is, and if we need to change our view to show it
var scroll;
// determine where the element we’re going to is in respect to the tabs bar
// 25px is the size of the scroll arrows
var leftSidePosition = active.position().left – 50;
var rightSidePosition = active.position().left + active.width() + 50;
// the gap is how much space we want there to be between the selected element
// when it’s out of view, and we go to it.
var gap = 25;
if (this.scrollTabsBar.children().index(active) === 0) {
// this the first element, so define the scroll to be 0.
scroll = 0;
} else if (this.scrollTabsBar.children().index(active) == this.scrollTabsBar.children().length – 1) {
// this the last element, so define the scroll to be all the way to the right.
scroll = this.scrollTabsBar[0].scrollWidth – this.scrollTabsBar[0].clientWidth;
} else if (leftSidePosition this.scrollTabsBar.width()) {
// the right corner is out of view.
scroll = this.scrollTabsBar[0].scrollLeft + (rightSidePosition – this.scrollTabsBar.width()) + gap;
} else {
scroll = this.scrollTabsBar[0].scrollLeft;
}
// start scrolling
scroll = Math.floor(scroll);
var delta = scroll – this.scrollTabsBar[0].scrollLeft;
var startedDown = false;
if (delta !== 0) {
clearInterval(this.scrollInterval);
var distance = 0;
var direction = (delta > 0 ? 1 : -1);
var speed = 1;
var factor = 1.25; // for parabolic acceleration
this.scrollInterval = setInterval(function() {
if (distance >= Math.abs(delta)) {
this.stopScrolling();
}
this.scrollTabsBar[0].scrollLeft += (Math.max(1, Math.floor(speed)) * direction);
distance += Math.max(1, Math.floor(speed));
if (distance * 2 >= Math.abs(delta)) { // if we’ve traversed more than half
if (factor == 1.25) { // 5/4
factor = 1; // 4/4
} else {
factor = 0.8; // 4/5
}
}
speed *= factor;
}.bind(this), 20);
}
}
});
return TabbedBox;
})();
if (typeof _ElementDefinition == ‘undefined’ || typeof _ElementDefinition == ‘null’) {
var _ElementDefinition = PlatformElement.extend({});
}
var _Element = _ElementDefinition.extend({
initialize: function() {
// we still want to call the initialize function defined by the developer
// however, we don’t want to call it until placeholders have been replaced
this.placeholderInterval = setInterval(function() {
// so use setInterval to check for placeholders.
if (this.$(‘.platform-element-child-placeholder’).length == 0) {
clearInterval(this.placeholderInterval);
this.constructor.__super__.initialize.apply(this);
}
}.bind(this), 100);
}
});
_Element.prototype.settings = new PlatformElementSettings({“tabs_each”:[{“tabs_index”:0},{“tabs_index”:1}],”activeTabIndexInternal_each”:[{“activeTabIndexInternal_index”:0}],”theme”:”standard”,”tabs”:2,”active_tab”:”white”,”inactive_tab”:”#F7F7F7″,”border_color”:”#CCCCCC”,”activeTabIndexInternal”:1});
_Element.prototype.settings.page_element_id = “906666144101851964”;
_Element.prototype.element_id = “b4d889a8-21d2-4c90-8bd4-2c3ec5181662”;
_Element.prototype.user_id = “3466466”;
_Element.prototype.site_id = “484589221176252212”;
_Element.prototype.assets_path = “//marketplace.editmysite.com/elements/135397292802228534-1.3.6/assets/”;
new _Element({
el: ‘#element-b4d889a8-21d2-4c90-8bd4-2c3ec5181662’
});
});
});
}
if (typeof document.documentElement.appReady == ‘undefined’) {
document.documentElement.appReady = 0;
}
if (document.documentElement.appReady || (window.inEditor && window.inEditor())) {
setupElement906666144101851964();
} else if (document.createEvent && document.addEventListener) {
document.addEventListener(‘appReady’, setupElement906666144101851964, false);
} else {
document.documentElement.attachEvent(‘onpropertychange’, function(event){
if (event.propertyName == ‘appReady’) {
setupElement906666144101851964();
}
});
}

Top