You are here
Home > bay area buses > marin transit
Marin Transit operates community shuttles, local bus routes, and rural services within Marin County. Currently, local bus services are contracted out to Golden Gate Transit, which in turn uses Golden Gate Transit-branded buses (with Marin Transit decals affixed to them). Its community shuttles are contracted to Marin Airporter, and select school runs and all rural services (called West Marin Stagecoach) are contracted to MV Transportation, both of which use cutaway vans and buses with Marin Transit decals.
Notes: 

  • While Golden Gate Transit is the contractor for bus routes operating within Marin County, such routes may also be operated by other buses owned by Golden Gate Transit. For images of such buses, click here.
  • The vehicles shown below are those that operate within Marin County only. Although the buses are owned by Golden Gate Transit or MV Transportation, these buses are not used on commute and regional routes to San Francisco, the East Bay, or Sonoma County.

Services Operated by Golden Gate Transit

#element-7e5a9daf-9cd3-4f08-8d0f-aa9eba890345 .border-box {
-moz-box-sizing: border-box;
-webkit-box-sizing: border-box;
-ms-box-sizing: border-box;
box-sizing: border-box;
}
#element-7e5a9daf-9cd3-4f08-8d0f-aa9eba890345 .tabbed-box {
position: relative;
margin: 20px 0;
}
#element-7e5a9daf-9cd3-4f08-8d0f-aa9eba890345 .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-7e5a9daf-9cd3-4f08-8d0f-aa9eba890345 .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-7e5a9daf-9cd3-4f08-8d0f-aa9eba890345 .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-7e5a9daf-9cd3-4f08-8d0f-aa9eba890345 .tabbed-box-content {
padding: 40px 20px 40px 20px;
display: none;
}
#element-7e5a9daf-9cd3-4f08-8d0f-aa9eba890345 .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-7e5a9daf-9cd3-4f08-8d0f-aa9eba890345 .scrollArrow.scrollArrow-left {
left: 0;
}
#element-7e5a9daf-9cd3-4f08-8d0f-aa9eba890345 .scrollArrow.scrollArrow-right {
right: 0;
}
#element-7e5a9daf-9cd3-4f08-8d0f-aa9eba890345 .tabbed-box.scrollable .tabbed-box-tab-group {
border-bottom: none;
overflow-x: hidden;
overflow-y: hidden;
}
#element-7e5a9daf-9cd3-4f08-8d0f-aa9eba890345 .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-7e5a9daf-9cd3-4f08-8d0f-aa9eba890345 .tabbed-box-tab-group {
overflow-x: scroll !important;
}
}
#element-7e5a9daf-9cd3-4f08-8d0f-aa9eba890345 .standard .tabbed-box-tab-group {
border-left: 1px solid #CCCCCC;
border-bottom: 1px solid #CCCCCC;
}
#element-7e5a9daf-9cd3-4f08-8d0f-aa9eba890345 .standard .tabbed-box-tab {
border: 1px solid #CCCCCC;
border-left: none;
}
#element-7e5a9daf-9cd3-4f08-8d0f-aa9eba890345 .standard .tabbed-box-tab .paragraph {
color: #A8ABAC;
}
#element-7e5a9daf-9cd3-4f08-8d0f-aa9eba890345 .standard .tabbed-box-tab.active {
border-bottom: 1px solid white;
background-color: white;
}
#element-7e5a9daf-9cd3-4f08-8d0f-aa9eba890345 .standard .tabbed-box-content-group {
border: 1px solid #CCCCCC;
border-top: none;
}
#element-7e5a9daf-9cd3-4f08-8d0f-aa9eba890345 .standard.scrollable .tabbed-box-tab-group {
border-right: 1px solid #CCCCCC;
}
#element-7e5a9daf-9cd3-4f08-8d0f-aa9eba890345 .standard.scrollable .tabbed-box-tab-group .tabbed-box-tab:last-child {
border-right: none;
}
#element-7e5a9daf-9cd3-4f08-8d0f-aa9eba890345 .standard.scrollable .scrollArrow-left {
border: 1px solid #CCCCCC;
}
#element-7e5a9daf-9cd3-4f08-8d0f-aa9eba890345 .standard.scrollable .scrollArrow-right {
border: 1px solid #CCCCCC;
}
#element-7e5a9daf-9cd3-4f08-8d0f-aa9eba890345 .line .tabbed-box-tab-group {
border: 1px solid #CCCCCC;
border-bottom: none;
}
#element-7e5a9daf-9cd3-4f08-8d0f-aa9eba890345 .line .tabbed-box-tab {
border-bottom: 1px solid #CCCCCC;
}
#element-7e5a9daf-9cd3-4f08-8d0f-aa9eba890345 .line .tabbed-box-tab .paragraph {
color: #BDC2C2;
}
#element-7e5a9daf-9cd3-4f08-8d0f-aa9eba890345 .line .tabbed-box-tab.active {
border-bottom: 1px solid black;
background-color: white;
}
#element-7e5a9daf-9cd3-4f08-8d0f-aa9eba890345 .line .tabbed-box-content-group {
border: 1px solid #CCCCCC;
}
#element-7e5a9daf-9cd3-4f08-8d0f-aa9eba890345 .line.scrollable .tabbed-box-tab-group {
height: 61px;
}
#element-7e5a9daf-9cd3-4f08-8d0f-aa9eba890345 .line.scrollable .tabbed-box-content-group {
border-top: none;
}
#element-7e5a9daf-9cd3-4f08-8d0f-aa9eba890345 .line.scrollable .scrollArrow-left,
#element-7e5a9daf-9cd3-4f08-8d0f-aa9eba890345 .line.scrollable .scrollArrow-right {
border: 1px solid #CCCCCC;
border-bottom: none;
border-top: none;
height: 61px;
}
#element-7e5a9daf-9cd3-4f08-8d0f-aa9eba890345 .simple .tabbed-box-tab {
border-bottom: 1px solid #CCCCCC;
height: 61px;
}
#element-7e5a9daf-9cd3-4f08-8d0f-aa9eba890345 .simple .tabbed-box-tab .paragraph {
color: #BDC2C2;
}
#element-7e5a9daf-9cd3-4f08-8d0f-aa9eba890345 .simple .tabbed-box-tab.active {
border-bottom: 1px solid black;
background-color: white;
}
#element-7e5a9daf-9cd3-4f08-8d0f-aa9eba890345 .simple .tabbed-box-content-group {
border-top: 1px solid #CCCCCC;
}
#element-7e5a9daf-9cd3-4f08-8d0f-aa9eba890345 .simple .tabbed-box-content {
padding: 20px 0px 20px 0px;
}
#element-7e5a9daf-9cd3-4f08-8d0f-aa9eba890345 .simple .scrollArrow-left {
border-right: 1px solid #CCCCCC;
}
#element-7e5a9daf-9cd3-4f08-8d0f-aa9eba890345 .simple .scrollArrow-right {
border-left: 1px solid #CCCCCC;
}
#element-7e5a9daf-9cd3-4f08-8d0f-aa9eba890345 .s3d-shadow {
-webkit-box-shadow: #f5f5f5;
-moz-box-shadow: #f5f5f5;
box-shadow: #f5f5f5;
}
#element-7e5a9daf-9cd3-4f08-8d0f-aa9eba890345 .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-7e5a9daf-9cd3-4f08-8d0f-aa9eba890345 .s3d .tabbed-box-tab .paragraph {
color: #A8ABAC;
background-color: #F7F7F7;
}
#element-7e5a9daf-9cd3-4f08-8d0f-aa9eba890345 .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-7e5a9daf-9cd3-4f08-8d0f-aa9eba890345 .s3d .tabbed-box-tab.active .paragraph {
background-color: white;
}
#element-7e5a9daf-9cd3-4f08-8d0f-aa9eba890345 .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-7e5a9daf-9cd3-4f08-8d0f-aa9eba890345 .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-7e5a9daf-9cd3-4f08-8d0f-aa9eba890345 .tabbed-box-content .paragraph {
padding: 0;
line-height: 30px;
}
#element-7e5a9daf-9cd3-4f08-8d0f-aa9eba890345 .tabbed-box-tab:last-child .w-delete-outer {
display: none;
position: relative;
float: right;
}

  • Description and Routes
  • New Flyer DE35LFW
  • New Flyer D60LF
  • Gillig BRT
<
>

The following routes operated by Marin Transit are contracted out to Golden Gate Transit:

  • Route 17 between San Rafael Transit Center and Sausalito via Strawberry, Mill Valley, and Marin City
  • Route 23 between Fairfax Manor and San Rafael Target (at Shoreline Pkwy) via San Anselmo and Canal
  • Route 23X between Canal and Fairfax Manor via 2nd/3rd Streets (express between San Rafael TC and San Anselmo Hub)
  • Route 29 between San Rafael Transit Center and Marin General Hospital via Larkspur Landing and College of Marin
  • Route 35 between San Rafael Transit Center and Canal
  • Route 36 between Canal and Marin City via Highway 101 bus pads
  • Route 71X between Novato and Sausalito via San Rafael (skips select bus pads along US-101)
One of two bus types operated solely within Marin County, these 35-foot buses (33xx series) are owned by Golden Gate Transit. These have the full decals of Marin Transit, with Golden Gate Transit stickers affixed in small stickers on the top. 
These articulated buses, despite the fact that Golden Gate Transit owns them, are operated within Marin County only. While the original design involves Golden Gate Transit, Marin Transit stickers are placed on the top and bottom areas of these buses, showing that these buses are used for Marin Transit routes as well. These buses are used on the busiest bus lines operating in the county, including Routes 35, 36, 45, and 71.
Those buses have been subsequently repainted to reflect Marin Transit’s ownership.
In January 2018, Golden Gate Transit received its first batch of ten Gillig BRT Hybrid buses (40-footer, 1701 to 1710) as part of Marin Transit’s order to replace the former’s oldest Orion V buses. Similar to the New Flyer buses Golden Gate has earlier received, these buses are meant to be operated within Marin County only, not on regional or commuter services to San Francisco, Santa Rosa, or the East Bay. A few differences can be seen between the Gillig BRTs with Golden Gate (17xx series) and those operated by Marin Airporter (15xx series), including the number of seats, automated vehicle locator machines, bike rack arrangements, WiFi connectivity (Golden Gate vehicles have WiFi, while Marin Airporter vehicles don’t), and overhead sign designs.

function setupElement288749244274754142() {
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}],”theme”:”s3d”,”tabs”:4,”active_tab”:”white”,”inactive_tab”:”#F7F7F7″,”border_color”:”#CCCCCC”,”activeTabIndexInternal”:1});
_Element.prototype.settings.page_element_id = “288749244274754142”;
_Element.prototype.element_id = “7e5a9daf-9cd3-4f08-8d0f-aa9eba890345”;
_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-7e5a9daf-9cd3-4f08-8d0f-aa9eba890345’
});
});
});
}
if (typeof document.documentElement.appReady == ‘undefined’) {
document.documentElement.appReady = 0;
}
if (document.documentElement.appReady || (window.inEditor && window.inEditor())) {
setupElement288749244274754142();
} else if (document.createEvent && document.addEventListener) {
document.addEventListener(‘appReady’, setupElement288749244274754142, false);
} else {
document.documentElement.attachEvent(‘onpropertychange’, function(event){
if (event.propertyName == ‘appReady’) {
setupElement288749244274754142();
}
});
}


Services Operated by Marin Airporter

#element-e573c1b0-8c03-4131-b581-83da6cebbbe2 .border-box {
-moz-box-sizing: border-box;
-webkit-box-sizing: border-box;
-ms-box-sizing: border-box;
box-sizing: border-box;
}
#element-e573c1b0-8c03-4131-b581-83da6cebbbe2 .tabbed-box {
position: relative;
margin: 20px 0;
}
#element-e573c1b0-8c03-4131-b581-83da6cebbbe2 .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-e573c1b0-8c03-4131-b581-83da6cebbbe2 .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-e573c1b0-8c03-4131-b581-83da6cebbbe2 .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-e573c1b0-8c03-4131-b581-83da6cebbbe2 .tabbed-box-content {
padding: 40px 20px 40px 20px;
display: none;
}
#element-e573c1b0-8c03-4131-b581-83da6cebbbe2 .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-e573c1b0-8c03-4131-b581-83da6cebbbe2 .scrollArrow.scrollArrow-left {
left: 0;
}
#element-e573c1b0-8c03-4131-b581-83da6cebbbe2 .scrollArrow.scrollArrow-right {
right: 0;
}
#element-e573c1b0-8c03-4131-b581-83da6cebbbe2 .tabbed-box.scrollable .tabbed-box-tab-group {
border-bottom: none;
overflow-x: hidden;
overflow-y: hidden;
}
#element-e573c1b0-8c03-4131-b581-83da6cebbbe2 .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-e573c1b0-8c03-4131-b581-83da6cebbbe2 .tabbed-box-tab-group {
overflow-x: scroll !important;
}
}
#element-e573c1b0-8c03-4131-b581-83da6cebbbe2 .standard .tabbed-box-tab-group {
border-left: 1px solid #CCCCCC;
border-bottom: 1px solid #CCCCCC;
}
#element-e573c1b0-8c03-4131-b581-83da6cebbbe2 .standard .tabbed-box-tab {
border: 1px solid #CCCCCC;
border-left: none;
}
#element-e573c1b0-8c03-4131-b581-83da6cebbbe2 .standard .tabbed-box-tab .paragraph {
color: #A8ABAC;
}
#element-e573c1b0-8c03-4131-b581-83da6cebbbe2 .standard .tabbed-box-tab.active {
border-bottom: 1px solid white;
background-color: white;
}
#element-e573c1b0-8c03-4131-b581-83da6cebbbe2 .standard .tabbed-box-content-group {
border: 1px solid #CCCCCC;
border-top: none;
}
#element-e573c1b0-8c03-4131-b581-83da6cebbbe2 .standard.scrollable .tabbed-box-tab-group {
border-right: 1px solid #CCCCCC;
}
#element-e573c1b0-8c03-4131-b581-83da6cebbbe2 .standard.scrollable .tabbed-box-tab-group .tabbed-box-tab:last-child {
border-right: none;
}
#element-e573c1b0-8c03-4131-b581-83da6cebbbe2 .standard.scrollable .scrollArrow-left {
border: 1px solid #CCCCCC;
}
#element-e573c1b0-8c03-4131-b581-83da6cebbbe2 .standard.scrollable .scrollArrow-right {
border: 1px solid #CCCCCC;
}
#element-e573c1b0-8c03-4131-b581-83da6cebbbe2 .line .tabbed-box-tab-group {
border: 1px solid #CCCCCC;
border-bottom: none;
}
#element-e573c1b0-8c03-4131-b581-83da6cebbbe2 .line .tabbed-box-tab {
border-bottom: 1px solid #CCCCCC;
}
#element-e573c1b0-8c03-4131-b581-83da6cebbbe2 .line .tabbed-box-tab .paragraph {
color: #BDC2C2;
}
#element-e573c1b0-8c03-4131-b581-83da6cebbbe2 .line .tabbed-box-tab.active {
border-bottom: 1px solid black;
background-color: white;
}
#element-e573c1b0-8c03-4131-b581-83da6cebbbe2 .line .tabbed-box-content-group {
border: 1px solid #CCCCCC;
}
#element-e573c1b0-8c03-4131-b581-83da6cebbbe2 .line.scrollable .tabbed-box-tab-group {
height: 61px;
}
#element-e573c1b0-8c03-4131-b581-83da6cebbbe2 .line.scrollable .tabbed-box-content-group {
border-top: none;
}
#element-e573c1b0-8c03-4131-b581-83da6cebbbe2 .line.scrollable .scrollArrow-left,
#element-e573c1b0-8c03-4131-b581-83da6cebbbe2 .line.scrollable .scrollArrow-right {
border: 1px solid #CCCCCC;
border-bottom: none;
border-top: none;
height: 61px;
}
#element-e573c1b0-8c03-4131-b581-83da6cebbbe2 .simple .tabbed-box-tab {
border-bottom: 1px solid #CCCCCC;
height: 61px;
}
#element-e573c1b0-8c03-4131-b581-83da6cebbbe2 .simple .tabbed-box-tab .paragraph {
color: #BDC2C2;
}
#element-e573c1b0-8c03-4131-b581-83da6cebbbe2 .simple .tabbed-box-tab.active {
border-bottom: 1px solid black;
background-color: white;
}
#element-e573c1b0-8c03-4131-b581-83da6cebbbe2 .simple .tabbed-box-content-group {
border-top: 1px solid #CCCCCC;
}
#element-e573c1b0-8c03-4131-b581-83da6cebbbe2 .simple .tabbed-box-content {
padding: 20px 0px 20px 0px;
}
#element-e573c1b0-8c03-4131-b581-83da6cebbbe2 .simple .scrollArrow-left {
border-right: 1px solid #CCCCCC;
}
#element-e573c1b0-8c03-4131-b581-83da6cebbbe2 .simple .scrollArrow-right {
border-left: 1px solid #CCCCCC;
}
#element-e573c1b0-8c03-4131-b581-83da6cebbbe2 .s3d-shadow {
-webkit-box-shadow: #f5f5f5;
-moz-box-shadow: #f5f5f5;
box-shadow: #f5f5f5;
}
#element-e573c1b0-8c03-4131-b581-83da6cebbbe2 .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-e573c1b0-8c03-4131-b581-83da6cebbbe2 .s3d .tabbed-box-tab .paragraph {
color: #A8ABAC;
background-color: #F7F7F7;
}
#element-e573c1b0-8c03-4131-b581-83da6cebbbe2 .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-e573c1b0-8c03-4131-b581-83da6cebbbe2 .s3d .tabbed-box-tab.active .paragraph {
background-color: white;
}
#element-e573c1b0-8c03-4131-b581-83da6cebbbe2 .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-e573c1b0-8c03-4131-b581-83da6cebbbe2 .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-e573c1b0-8c03-4131-b581-83da6cebbbe2 .tabbed-box-content .paragraph {
padding: 0;
line-height: 30px;
}
#element-e573c1b0-8c03-4131-b581-83da6cebbbe2 .tabbed-box-tab:last-child .w-delete-outer {
display: none;
position: relative;
float: right;
}

  • Description and Routes
  • Ford Cutaway Van
  • Gillig BRT
  • Novato Dial-a-Ride
  • Route 65
<
>

The following routes operated by Marin Transit are contracted out to Marin Airporter:

  • Route 22 between San Rafael Transit Center and Marin City via College of Marin and Larkspur
  • Route 49​ between San Rafael Transit Center and Downtown Novato via Northgate Mall and Hamilton
  • Route 219 between Strawberry and Tiburon
  • Route 228 between San Rafael Transit Center and Fairfax Manor via Sir Francis Drake Blvd
  • Route 233 between San Rafael Transit Center and Santa Venetia via Dominican University and Marin Civic Center
  • Route 245 between San Rafael Transit Center and Smith Ranch Road via Kaiser and Las Gallinas Avenue (service to Marin County EDD operates weekdays only)
  • Route 251 between Hamilton Theatre and San Marin in Novato via Indian Valley College and Vintage Oaks
  • Route 257 between San Rafael Transit Center and Indian Valley College in Novato via Dominican University, Kaiser Hospital, Marinwood, and Hamilton (weekdays only except holidays)

Flexible services available on the following routes:

  • Route 219F operates via the Tiburon Hills weekday peak periods only, with flag stops permitted on streets away from Tiburon Boulevard
  • Route 251: on demand service available for service to and from Novato Community Hospital
Marin Airporter uses the Ford E350 Cutaway Van to support Marin Transit’s Community Shuttles. Two types of them exist:

Vans Number 86 and 92

Vans numbered 100 to 115 (2013 to present)
Note: van number 105 is reserved for Novato Dial-a-Ride, an on-demand shuttle service serving within the City of Novato.
Third Generation Ford E450 (number 1680)
Debuted in Summer 2016, this is the next generation shuttle van that operates shuttle routes around Marin County. 
In April 2016, Marin Transit started using a larger, low-floored vehicle, the Gillig BRT Hybrid​. This type is used to augment the shuttle vans on the more popular services. Marin Airporter currently operates eleven BRT Hybrid buses, namely:

  • Four 30-footer buses (1501 to 1504)
  • Seven 40-footer buses (1505 to 1511), five of which were originally from MV Transportation (1505 to 1509)

These are used on at least four services, as of July 2018:

  • Route 22 (San Rafael – Marin City via College of Marin)
  • Route 49 (San Rafael – Novato via Northgate, Hamilton)
  • Route 251 (Hamilton – San Marin via Vintage Oaks)
  • Route 257 (San Rafael – Indian Valley College via Kaiser Hospital)

These were purchased partly to replace the aging TMC-RTS buses, and the rest will be used as expansion vehicles as the agency is about to expand its operations. Marin Transit also ordered ten Gillig BRT Hybrid 40′ buses for Golden Gate Transit to replace the latter’s oldest Orion V buses (cf. above).

Read news article here
Read my blog article here

Gillig BRT Hybrid 30-Footer
Gillig BRT Hybrid 40-Footer
Novato Dial-a-Ride is an on-demand shuttle service operating within the City of Novato and outlying areas. While it does not accept Clipper as a form of payment, it accepts cash and local passes as fare payment. The operating schedules are as follows:

#element-8852a635-57f9-4833-a529-958e9d8fa835 .simple-table-wrapper {
padding: 20px 0;
}
#element-8852a635-57f9-4833-a529-958e9d8fa835 .simple-table {
width: 100%;
border: 1px solid #C9CDCF;
border-spacing: 0;
}
#element-8852a635-57f9-4833-a529-958e9d8fa835 .simple-table td.cell {
border-right: 1px solid #C9CDCF;
border-bottom: 1px solid #C9CDCF;
word-break: break-word;
background-color: #FFFFFF;
width: 33.333333333333%;
}
#element-8852a635-57f9-4833-a529-958e9d8fa835 .simple-table td.cell .paragraph {
width: 90%;
margin: 0 5%;
padding-bottom: 10px;
padding-top: 10px;
text-align: center;
}
#element-8852a635-57f9-4833-a529-958e9d8fa835 .simple-table.style-top tr:first-child td,
#element-8852a635-57f9-4833-a529-958e9d8fa835 .simple-table.style-side td:first-of-type {
background-color: #F8F8F8;
}
#element-8852a635-57f9-4833-a529-958e9d8fa835 .simple-table.style-top tr:first-child td .paragraph,
#element-8852a635-57f9-4833-a529-958e9d8fa835 .simple-table.style-side td:first-of-type .paragraph {
font-weight: 700;
}
#element-8852a635-57f9-4833-a529-958e9d8fa835 .simple-table tr:last-child td {
border-bottom: none;
}
#element-8852a635-57f9-4833-a529-958e9d8fa835 .simple-table td:last-of-type {
border-right: none;
}
#element-8852a635-57f9-4833-a529-958e9d8fa835 .simple-table .empty-content-area-element {
padding-left: 0px !important;
}

Day of Operation
Operating Times
Notes
Weekdays
7:30am to 11am
3pm to 6pm
Advanced reservations up to seven (7) days in advance accepted. Same-day reservations also accepted if space is available.
Tuesdays
1pm to 3pm
Novato Human Needs Food Pantry shuttle
Wednesdays
11am to 1pm
​Margaret Todd Senior Center midday service
Weekends and Holidays
8:30am to 5pm
Advanced reservations up to seven (7) days in advance accepted. Same-day reservations also accepted if space is available.

function setupElement309738299248708385() {
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}],”rows_each”:[{“rows_index”:0},{“rows_index”:1},{“rows_index”:2},{“rows_index”:3},{“rows_index”:4}],”columns”:3,”rows”:5,”style”:”top”,”alignment”:”center”,”titleColor”:”#F8F8F8″,”backgroundColor”:”#FFFFFF”,”borderColor”:”#C9CDCF”,”tableSizes”:”default”});
_Element.prototype.settings.page_element_id = “309738299248708385”;
_Element.prototype.element_id = “8852a635-57f9-4833-a529-958e9d8fa835”;
_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-8852a635-57f9-4833-a529-958e9d8fa835’
});
});
});
}
if (typeof document.documentElement.appReady == ‘undefined’) {
document.documentElement.appReady = 0;
}
if (document.documentElement.appReady || (window.inEditor && window.inEditor())) {
setupElement309738299248708385();
} else if (document.createEvent && document.addEventListener) {
document.addEventListener(‘appReady’, setupElement309738299248708385, false);
} else {
document.documentElement.attachEvent(‘onpropertychange’, function(event){
if (event.propertyName == ‘appReady’) {
setupElement309738299248708385();
}
});
}

Route 65 is a West Marin Stagecoach route that actually uses the same vehicle type used for Marin Transit’s community shuttles. It operates Wednesdays only as a door-to-door service between Dillon Beach in west Marin County and Petaluma in southern Sonoma County. Its fares are the same as any local Marin Transit route, but it has pick-up windows on either end of the route:

  • Eastbound (to Petaluma): between 9:00 and 9:45am within Dillon Beach and Tomales, plus within a 3/4-mile radius of Tomales-Petaluma Road and Dillon Beach Road
  • Westbound (from Petaluma): between 12:45 and 1:30pm within Petaluma’s city limits

function setupElement863006695232667580() {
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},{“tabs_index”:4}],”activeTabIndexInternal_each”:[{“activeTabIndexInternal_index”:0},{“activeTabIndexInternal_index”:1}],”theme”:”s3d”,”tabs”:5,”active_tab”:”white”,”inactive_tab”:”#F7F7F7″,”border_color”:”#CCCCCC”,”activeTabIndexInternal”:2});
_Element.prototype.settings.page_element_id = “863006695232667580”;
_Element.prototype.element_id = “e573c1b0-8c03-4131-b581-83da6cebbbe2”;
_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-e573c1b0-8c03-4131-b581-83da6cebbbe2’
});
});
});
}
if (typeof document.documentElement.appReady == ‘undefined’) {
document.documentElement.appReady = 0;
}
if (document.documentElement.appReady || (window.inEditor && window.inEditor())) {
setupElement863006695232667580();
} else if (document.createEvent && document.addEventListener) {
document.addEventListener(‘appReady’, setupElement863006695232667580, false);
} else {
document.documentElement.attachEvent(‘onpropertychange’, function(event){
if (event.propertyName == ‘appReady’) {
setupElement863006695232667580();
}
});
}


Services Operated by MV Transportation

Three distinct operations are contracted out to MV Transportation on behalf of Marin Transit:

  • West Marin Stagecoach (Routes 61 and 68)
  • Marin County School Services (1xx route series)
  • Muir Woods Shuttle
West Marin Stagecoach ​is a rural service which operates between the more urbanized eastern Marin County with communities in West Marin. It currently operates two routes, namely:

  • Route 61 (South Route) between Marin City and Bolinas via Panoramic Highway, with an extension to Sausalito Ferry weekends and holidays
  • Route 68 (North Route) between San Rafael Transit Center and Inverness via Sir Francis Drake Boulevard, with short trips to Lagunitas and Woodacre

These use Ford Super Duty E450 Cutaway Vans and Chevrolet Converted Cutaways, all of which can handle up to 25 passengers, perfect for rural operations. And in 2016, it debuted its first El Dorado National XHF 30-footer bus (no. 301) that carries 29 passengers on board, and it is currently used on the both the Stagecoach and Muir Woods Shuttle.

#element-557cc2a7-cbdf-47b4-8b53-efc646d1b1c5 .border-box {
-moz-box-sizing: border-box;
-webkit-box-sizing: border-box;
-ms-box-sizing: border-box;
box-sizing: border-box;
}
#element-557cc2a7-cbdf-47b4-8b53-efc646d1b1c5 .tabbed-box {
position: relative;
margin: 20px 0;
}
#element-557cc2a7-cbdf-47b4-8b53-efc646d1b1c5 .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-557cc2a7-cbdf-47b4-8b53-efc646d1b1c5 .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-557cc2a7-cbdf-47b4-8b53-efc646d1b1c5 .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-557cc2a7-cbdf-47b4-8b53-efc646d1b1c5 .tabbed-box-content {
padding: 40px 20px 40px 20px;
display: none;
}
#element-557cc2a7-cbdf-47b4-8b53-efc646d1b1c5 .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-557cc2a7-cbdf-47b4-8b53-efc646d1b1c5 .scrollArrow.scrollArrow-left {
left: 0;
}
#element-557cc2a7-cbdf-47b4-8b53-efc646d1b1c5 .scrollArrow.scrollArrow-right {
right: 0;
}
#element-557cc2a7-cbdf-47b4-8b53-efc646d1b1c5 .tabbed-box.scrollable .tabbed-box-tab-group {
border-bottom: none;
overflow-x: hidden;
overflow-y: hidden;
}
#element-557cc2a7-cbdf-47b4-8b53-efc646d1b1c5 .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-557cc2a7-cbdf-47b4-8b53-efc646d1b1c5 .tabbed-box-tab-group {
overflow-x: scroll !important;
}
}
#element-557cc2a7-cbdf-47b4-8b53-efc646d1b1c5 .standard .tabbed-box-tab-group {
border-left: 1px solid #CCCCCC;
border-bottom: 1px solid #CCCCCC;
}
#element-557cc2a7-cbdf-47b4-8b53-efc646d1b1c5 .standard .tabbed-box-tab {
border: 1px solid #CCCCCC;
border-left: none;
}
#element-557cc2a7-cbdf-47b4-8b53-efc646d1b1c5 .standard .tabbed-box-tab .paragraph {
color: #A8ABAC;
}
#element-557cc2a7-cbdf-47b4-8b53-efc646d1b1c5 .standard .tabbed-box-tab.active {
border-bottom: 1px solid white;
background-color: white;
}
#element-557cc2a7-cbdf-47b4-8b53-efc646d1b1c5 .standard .tabbed-box-content-group {
border: 1px solid #CCCCCC;
border-top: none;
}
#element-557cc2a7-cbdf-47b4-8b53-efc646d1b1c5 .standard.scrollable .tabbed-box-tab-group {
border-right: 1px solid #CCCCCC;
}
#element-557cc2a7-cbdf-47b4-8b53-efc646d1b1c5 .standard.scrollable .tabbed-box-tab-group .tabbed-box-tab:last-child {
border-right: none;
}
#element-557cc2a7-cbdf-47b4-8b53-efc646d1b1c5 .standard.scrollable .scrollArrow-left {
border: 1px solid #CCCCCC;
}
#element-557cc2a7-cbdf-47b4-8b53-efc646d1b1c5 .standard.scrollable .scrollArrow-right {
border: 1px solid #CCCCCC;
}
#element-557cc2a7-cbdf-47b4-8b53-efc646d1b1c5 .line .tabbed-box-tab-group {
border: 1px solid #CCCCCC;
border-bottom: none;
}
#element-557cc2a7-cbdf-47b4-8b53-efc646d1b1c5 .line .tabbed-box-tab {
border-bottom: 1px solid #CCCCCC;
}
#element-557cc2a7-cbdf-47b4-8b53-efc646d1b1c5 .line .tabbed-box-tab .paragraph {
color: #BDC2C2;
}
#element-557cc2a7-cbdf-47b4-8b53-efc646d1b1c5 .line .tabbed-box-tab.active {
border-bottom: 1px solid black;
background-color: white;
}
#element-557cc2a7-cbdf-47b4-8b53-efc646d1b1c5 .line .tabbed-box-content-group {
border: 1px solid #CCCCCC;
}
#element-557cc2a7-cbdf-47b4-8b53-efc646d1b1c5 .line.scrollable .tabbed-box-tab-group {
height: 61px;
}
#element-557cc2a7-cbdf-47b4-8b53-efc646d1b1c5 .line.scrollable .tabbed-box-content-group {
border-top: none;
}
#element-557cc2a7-cbdf-47b4-8b53-efc646d1b1c5 .line.scrollable .scrollArrow-left,
#element-557cc2a7-cbdf-47b4-8b53-efc646d1b1c5 .line.scrollable .scrollArrow-right {
border: 1px solid #CCCCCC;
border-bottom: none;
border-top: none;
height: 61px;
}
#element-557cc2a7-cbdf-47b4-8b53-efc646d1b1c5 .simple .tabbed-box-tab {
border-bottom: 1px solid #CCCCCC;
height: 61px;
}
#element-557cc2a7-cbdf-47b4-8b53-efc646d1b1c5 .simple .tabbed-box-tab .paragraph {
color: #BDC2C2;
}
#element-557cc2a7-cbdf-47b4-8b53-efc646d1b1c5 .simple .tabbed-box-tab.active {
border-bottom: 1px solid black;
background-color: white;
}
#element-557cc2a7-cbdf-47b4-8b53-efc646d1b1c5 .simple .tabbed-box-content-group {
border-top: 1px solid #CCCCCC;
}
#element-557cc2a7-cbdf-47b4-8b53-efc646d1b1c5 .simple .tabbed-box-content {
padding: 20px 0px 20px 0px;
}
#element-557cc2a7-cbdf-47b4-8b53-efc646d1b1c5 .simple .scrollArrow-left {
border-right: 1px solid #CCCCCC;
}
#element-557cc2a7-cbdf-47b4-8b53-efc646d1b1c5 .simple .scrollArrow-right {
border-left: 1px solid #CCCCCC;
}
#element-557cc2a7-cbdf-47b4-8b53-efc646d1b1c5 .s3d-shadow {
-webkit-box-shadow: #f5f5f5;
-moz-box-shadow: #f5f5f5;
box-shadow: #f5f5f5;
}
#element-557cc2a7-cbdf-47b4-8b53-efc646d1b1c5 .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-557cc2a7-cbdf-47b4-8b53-efc646d1b1c5 .s3d .tabbed-box-tab .paragraph {
color: #A8ABAC;
background-color: #F7F7F7;
}
#element-557cc2a7-cbdf-47b4-8b53-efc646d1b1c5 .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-557cc2a7-cbdf-47b4-8b53-efc646d1b1c5 .s3d .tabbed-box-tab.active .paragraph {
background-color: white;
}
#element-557cc2a7-cbdf-47b4-8b53-efc646d1b1c5 .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-557cc2a7-cbdf-47b4-8b53-efc646d1b1c5 .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-557cc2a7-cbdf-47b4-8b53-efc646d1b1c5 .tabbed-box-content .paragraph {
padding: 0;
line-height: 30px;
}
#element-557cc2a7-cbdf-47b4-8b53-efc646d1b1c5 .tabbed-box-tab:last-child .w-delete-outer {
display: none;
position: relative;
float: right;
}

  • Old Logo
  • Heavy-Duty Vans
  • El Dorado National XHF30 Bus
<
>

These heavy-duty vans are used on the West Marin Stagecoach that allow oversized luggage on board for passengers heading out to West Marin communities like Stinson Beach, Bolinas, San Geronimo Valley, and Inverness.
In addition, Marin Transit has acquired five additional heavy-duty vans with different headsigns than the original vans above (number 1560 to 1564).
This minibus is being used on the West Marin Stagecoach (Routes 61 and 68) and Muir Woods Shuttle (Routes 66/66F) to augment the heavy-duty vans in service for the Stagecoach. Currently, Marin Transit operates three of these buses, units 301, 1760, and 1761.

function setupElement536181031203128893() {
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 = “536181031203128893”;
_Element.prototype.element_id = “557cc2a7-cbdf-47b4-8b53-efc646d1b1c5”;
_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-557cc2a7-cbdf-47b4-8b53-efc646d1b1c5’
});
});
});
}
if (typeof document.documentElement.appReady == ‘undefined’) {
document.documentElement.appReady = 0;
}
if (document.documentElement.appReady || (window.inEditor && window.inEditor())) {
setupElement536181031203128893();
} else if (document.createEvent && document.addEventListener) {
document.addEventListener(‘appReady’, setupElement536181031203128893, false);
} else {
document.documentElement.attachEvent(‘onpropertychange’, function(event){
if (event.propertyName == ‘appReady’) {
setupElement536181031203128893();
}
});
}


These larger buses are currently contracted out to MV Transportation for its school routes and Muir Woods Shuttle (Routes 66 and 66F):

#element-02d951f2-cf55-476f-b9ac-8a97d23d1271 .border-box {
-moz-box-sizing: border-box;
-webkit-box-sizing: border-box;
-ms-box-sizing: border-box;
box-sizing: border-box;
}
#element-02d951f2-cf55-476f-b9ac-8a97d23d1271 .tabbed-box {
position: relative;
margin: 20px 0;
}
#element-02d951f2-cf55-476f-b9ac-8a97d23d1271 .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-02d951f2-cf55-476f-b9ac-8a97d23d1271 .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-02d951f2-cf55-476f-b9ac-8a97d23d1271 .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-02d951f2-cf55-476f-b9ac-8a97d23d1271 .tabbed-box-content {
padding: 40px 20px 40px 20px;
display: none;
}
#element-02d951f2-cf55-476f-b9ac-8a97d23d1271 .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-02d951f2-cf55-476f-b9ac-8a97d23d1271 .scrollArrow.scrollArrow-left {
left: 0;
}
#element-02d951f2-cf55-476f-b9ac-8a97d23d1271 .scrollArrow.scrollArrow-right {
right: 0;
}
#element-02d951f2-cf55-476f-b9ac-8a97d23d1271 .tabbed-box.scrollable .tabbed-box-tab-group {
border-bottom: none;
overflow-x: hidden;
overflow-y: hidden;
}
#element-02d951f2-cf55-476f-b9ac-8a97d23d1271 .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-02d951f2-cf55-476f-b9ac-8a97d23d1271 .tabbed-box-tab-group {
overflow-x: scroll !important;
}
}
#element-02d951f2-cf55-476f-b9ac-8a97d23d1271 .standard .tabbed-box-tab-group {
border-left: 1px solid #CCCCCC;
border-bottom: 1px solid #CCCCCC;
}
#element-02d951f2-cf55-476f-b9ac-8a97d23d1271 .standard .tabbed-box-tab {
border: 1px solid #CCCCCC;
border-left: none;
}
#element-02d951f2-cf55-476f-b9ac-8a97d23d1271 .standard .tabbed-box-tab .paragraph {
color: #A8ABAC;
}
#element-02d951f2-cf55-476f-b9ac-8a97d23d1271 .standard .tabbed-box-tab.active {
border-bottom: 1px solid white;
background-color: white;
}
#element-02d951f2-cf55-476f-b9ac-8a97d23d1271 .standard .tabbed-box-content-group {
border: 1px solid #CCCCCC;
border-top: none;
}
#element-02d951f2-cf55-476f-b9ac-8a97d23d1271 .standard.scrollable .tabbed-box-tab-group {
border-right: 1px solid #CCCCCC;
}
#element-02d951f2-cf55-476f-b9ac-8a97d23d1271 .standard.scrollable .tabbed-box-tab-group .tabbed-box-tab:last-child {
border-right: none;
}
#element-02d951f2-cf55-476f-b9ac-8a97d23d1271 .standard.scrollable .scrollArrow-left {
border: 1px solid #CCCCCC;
}
#element-02d951f2-cf55-476f-b9ac-8a97d23d1271 .standard.scrollable .scrollArrow-right {
border: 1px solid #CCCCCC;
}
#element-02d951f2-cf55-476f-b9ac-8a97d23d1271 .line .tabbed-box-tab-group {
border: 1px solid #CCCCCC;
border-bottom: none;
}
#element-02d951f2-cf55-476f-b9ac-8a97d23d1271 .line .tabbed-box-tab {
border-bottom: 1px solid #CCCCCC;
}
#element-02d951f2-cf55-476f-b9ac-8a97d23d1271 .line .tabbed-box-tab .paragraph {
color: #BDC2C2;
}
#element-02d951f2-cf55-476f-b9ac-8a97d23d1271 .line .tabbed-box-tab.active {
border-bottom: 1px solid black;
background-color: white;
}
#element-02d951f2-cf55-476f-b9ac-8a97d23d1271 .line .tabbed-box-content-group {
border: 1px solid #CCCCCC;
}
#element-02d951f2-cf55-476f-b9ac-8a97d23d1271 .line.scrollable .tabbed-box-tab-group {
height: 61px;
}
#element-02d951f2-cf55-476f-b9ac-8a97d23d1271 .line.scrollable .tabbed-box-content-group {
border-top: none;
}
#element-02d951f2-cf55-476f-b9ac-8a97d23d1271 .line.scrollable .scrollArrow-left,
#element-02d951f2-cf55-476f-b9ac-8a97d23d1271 .line.scrollable .scrollArrow-right {
border: 1px solid #CCCCCC;
border-bottom: none;
border-top: none;
height: 61px;
}
#element-02d951f2-cf55-476f-b9ac-8a97d23d1271 .simple .tabbed-box-tab {
border-bottom: 1px solid #CCCCCC;
height: 61px;
}
#element-02d951f2-cf55-476f-b9ac-8a97d23d1271 .simple .tabbed-box-tab .paragraph {
color: #BDC2C2;
}
#element-02d951f2-cf55-476f-b9ac-8a97d23d1271 .simple .tabbed-box-tab.active {
border-bottom: 1px solid black;
background-color: white;
}
#element-02d951f2-cf55-476f-b9ac-8a97d23d1271 .simple .tabbed-box-content-group {
border-top: 1px solid #CCCCCC;
}
#element-02d951f2-cf55-476f-b9ac-8a97d23d1271 .simple .tabbed-box-content {
padding: 20px 0px 20px 0px;
}
#element-02d951f2-cf55-476f-b9ac-8a97d23d1271 .simple .scrollArrow-left {
border-right: 1px solid #CCCCCC;
}
#element-02d951f2-cf55-476f-b9ac-8a97d23d1271 .simple .scrollArrow-right {
border-left: 1px solid #CCCCCC;
}
#element-02d951f2-cf55-476f-b9ac-8a97d23d1271 .s3d-shadow {
-webkit-box-shadow: #f5f5f5;
-moz-box-shadow: #f5f5f5;
box-shadow: #f5f5f5;
}
#element-02d951f2-cf55-476f-b9ac-8a97d23d1271 .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-02d951f2-cf55-476f-b9ac-8a97d23d1271 .s3d .tabbed-box-tab .paragraph {
color: #A8ABAC;
background-color: #F7F7F7;
}
#element-02d951f2-cf55-476f-b9ac-8a97d23d1271 .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-02d951f2-cf55-476f-b9ac-8a97d23d1271 .s3d .tabbed-box-tab.active .paragraph {
background-color: white;
}
#element-02d951f2-cf55-476f-b9ac-8a97d23d1271 .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-02d951f2-cf55-476f-b9ac-8a97d23d1271 .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-02d951f2-cf55-476f-b9ac-8a97d23d1271 .tabbed-box-content .paragraph {
padding: 0;
line-height: 30px;
}
#element-02d951f2-cf55-476f-b9ac-8a97d23d1271 .tabbed-box-tab:last-child .w-delete-outer {
display: none;
position: relative;
float: right;
}

  • El Dorado National XHF
  • TMC-RTS
  • Gillig BRT
  • Muir Woods Shuttle
<
>

This 35-footer bus type is used for all of Marin County’s school runs, which include: 

  • Route 113 (Paradise Cay – Redwood High School)
  • Route 115 (Marin City – St. Hillary’s School via Tamalpais High School, Mill Valley, and Strawberry)
  • Route 117 (East Corte Madera – Hall Middle School)
  • Route 119 (Redwood High School – Tiburon via Strawberry and Belvedere)
  • Route 122 (College of Marin Express, serving both Kentfield and Indian Valley Campuses via San Rafael and San Anselmo)
  • Route 125 (Lagunitas – San Rafael Transit Center via Fairfax and San Anselmo)
  • Route 139 (Terra Linda High School – Lucas Valley via Las Gallinas Avenue)
  • Route 145 (Terra Linda High School – San Rafael Transit Center via Marin Civic Center)
  • Route 151 (Hamilton – San Marin via Ignacio Blvd, Indian Valley Campus, and Downtown Novato) 
  • Route 154 (Olive Elementary School – San Marin via Downtown Novato and Sinaloa Middle School)

​From time to time, this bus type is also used on Route 49, and this is the main bus type used for the Muir Woods Shuttle.

Three of these buses (1251, 1262, and 1264) have been handed down from Golden Gate Transit, in which these have been repainted with the full livery of Marin Transit and are operated on high-density school runs. Sadly, these buses have been subsequently retired when all of the Gillig BRT Hybrid buses have been delivered.
All five Gillig BRT buses that were operated by MV Transportation (1505 to 1509) have been transferred to Marin Airporter as of July 2018.
The Muir Woods Shuttle operates weekends and holidays between early-April and early-November, plus select weekends around Thanksgiving, Christmas, and New Year’s holidays. It serves both Pohono and Manzanita Park-and-Rides, both of which are used as alternate parking lots to the Muir Woods lots (which are often full on busy weekends). It operates with two routes, including:

  • Route 66 (Marin City)
  • Route 66F (Sausalito Ferry)
Notes:

  • Fares are collected at the Muir Woods Visitors Center along with your entrance fee, using cash or credit card. Keep the receipt upon payment.
  • No fare is collected when boarding a bus to Muir Woods; however, present the receipt to the driver when you board the bus back to Marin City or Sausalito.
  • One-way fares are not available; pay the full round-trip fare even though you are only doing a one-way trip.
  • Marin Transit Value Cards and Transit Passes are valid as fare payment for the shuttle. If coming in from a Golden Gate Transit, West Marin Stagecoach, or Community Shuttle route, purchase a day pass prior to boarding the Muir Woods Shuttle which will allow you to use it as your fare payment.
  • Clipper Cards are not accepted as form of payment.

Picture

The El Dorado National XHF bus is the vehicle used for the Muir Woods Shuttle
Fares:

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

Adults
Youths (15 and below)
$5.00
Free

function setupElement815200381974428076() {
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}],”rows_each”:[{“rows_index”:0},{“rows_index”:1}],”columns”:2,”rows”:2,”style”:”top”,”alignment”:”center”,”titleColor”:”#F8F8F8″,”backgroundColor”:”#FFFFFF”,”borderColor”:”#C9CDCF”,”tableSizes”:[49,50]});
_Element.prototype.settings.page_element_id = “815200381974428076”;
_Element.prototype.element_id = “6fd07f93-49cc-4169-a9d9-c29fbd396b65”;
_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-6fd07f93-49cc-4169-a9d9-c29fbd396b65’
});
});
});
}
if (typeof document.documentElement.appReady == ‘undefined’) {
document.documentElement.appReady = 0;
}
if (document.documentElement.appReady || (window.inEditor && window.inEditor())) {
setupElement815200381974428076();
} else if (document.createEvent && document.addEventListener) {
document.addEventListener(‘appReady’, setupElement815200381974428076, false);
} else {
document.documentElement.attachEvent(‘onpropertychange’, function(event){
if (event.propertyName == ‘appReady’) {
setupElement815200381974428076();
}
});
}

function setupElement581086728989118475() {
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}],”theme”:”s3d”,”tabs”:4,”active_tab”:”white”,”inactive_tab”:”#F7F7F7″,”border_color”:”#CCCCCC”,”activeTabIndexInternal”:2});
_Element.prototype.settings.page_element_id = “581086728989118475”;
_Element.prototype.element_id = “02d951f2-cf55-476f-b9ac-8a97d23d1271”;
_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-02d951f2-cf55-476f-b9ac-8a97d23d1271’
});
});
});
}
if (typeof document.documentElement.appReady == ‘undefined’) {
document.documentElement.appReady = 0;
}
if (document.documentElement.appReady || (window.inEditor && window.inEditor())) {
setupElement581086728989118475();
} else if (document.createEvent && document.addEventListener) {
document.addEventListener(‘appReady’, setupElement581086728989118475, false);
} else {
document.documentElement.attachEvent(‘onpropertychange’, function(event){
if (event.propertyName == ‘appReady’) {
setupElement581086728989118475();
}
});
}


Former Routes

Over the past few years, Marin Transit used to operate the following routes which have been subsequently either canceled or replaced by another route.

#element-76da8c17-0e5f-44c5-a745-7318ad2f6bb1 .simple-table-wrapper {
padding: 20px 0;
}
#element-76da8c17-0e5f-44c5-a745-7318ad2f6bb1 .simple-table {
width: 100%;
border: 1px solid #C9CDCF;
border-spacing: 0;
}
#element-76da8c17-0e5f-44c5-a745-7318ad2f6bb1 .simple-table td.cell {
border-right: 1px solid #C9CDCF;
border-bottom: 1px solid #C9CDCF;
word-break: break-word;
background-color: #FFFFFF;
width: 33.333333333333%;
}
#element-76da8c17-0e5f-44c5-a745-7318ad2f6bb1 .simple-table td.cell .paragraph {
width: 90%;
margin: 0 5%;
padding-bottom: 10px;
padding-top: 10px;
text-align: center;
}
#element-76da8c17-0e5f-44c5-a745-7318ad2f6bb1 .simple-table.style-top tr:first-child td,
#element-76da8c17-0e5f-44c5-a745-7318ad2f6bb1 .simple-table.style-side td:first-of-type {
background-color: #F8F8F8;
}
#element-76da8c17-0e5f-44c5-a745-7318ad2f6bb1 .simple-table.style-top tr:first-child td .paragraph,
#element-76da8c17-0e5f-44c5-a745-7318ad2f6bb1 .simple-table.style-side td:first-of-type .paragraph {
font-weight: 700;
}
#element-76da8c17-0e5f-44c5-a745-7318ad2f6bb1 .simple-table tr:last-child td {
border-bottom: none;
}
#element-76da8c17-0e5f-44c5-a745-7318ad2f6bb1 .simple-table td:last-of-type {
border-right: none;
}
#element-76da8c17-0e5f-44c5-a745-7318ad2f6bb1 .simple-table .empty-content-area-element {
padding-left: 0px !important;
}

Route
Route Description
Status
21
Marin City – Tiburon via Strawberry
Axed in 2008; replaced by Routes 17 and 219
45
San Rafael TC – Northgate via Civic Center
Replaced by Route 35 extension to Novato and more Route 49 trips in June 2016
45K
San Rafael TC – Kaiser Hospital via Northgate
Replaced by new shuttle route 245 and rerouted Route 257 in June 2016
49K
San Rafael TC – San Marin via Northgate, Hamilton
Replaced by Route 259 in 2013; subsequently replaced by more frequent Route 49 and two shuttle routes to Kaiser (245, 257) in June 2016
51
Ignacio – San Marin via Vintage Oaks
Replaced by daily shuttle route 251 in 2013
222
Marin City – College of Marin via Marin General Hospital
Axed in 2013; replaced by more service on Route 22
259
San Rafael TC – Novato via Northgate, Hamilton
Axed in June 2016; replaced by more frequent Route 49 service

function setupElement661662250209931394() {
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}],”rows_each”:[{“rows_index”:0},{“rows_index”:1},{“rows_index”:2},{“rows_index”:3},{“rows_index”:4},{“rows_index”:5},{“rows_index”:6},{“rows_index”:7}],”columns”:3,”rows”:8,”style”:”top”,”alignment”:”center”,”titleColor”:”#F8F8F8″,”backgroundColor”:”#FFFFFF”,”borderColor”:”#C9CDCF”,”tableSizes”:[17,45,37]});
_Element.prototype.settings.page_element_id = “661662250209931394”;
_Element.prototype.element_id = “76da8c17-0e5f-44c5-a745-7318ad2f6bb1”;
_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-76da8c17-0e5f-44c5-a745-7318ad2f6bb1’
});
});
});
}
if (typeof document.documentElement.appReady == ‘undefined’) {
document.documentElement.appReady = 0;
}
if (document.documentElement.appReady || (window.inEditor && window.inEditor())) {
setupElement661662250209931394();
} else if (document.createEvent && document.addEventListener) {
document.addEventListener(‘appReady’, setupElement661662250209931394, false);
} else {
document.documentElement.attachEvent(‘onpropertychange’, function(event){
if (event.propertyName == ‘appReady’) {
setupElement661662250209931394();
}
});
}

Top