<!DOCTYPE html><html ng-app="brewervacations-app" lang="en-US" id="html-main"><head prefix="og: http://ogp.me/ns# fb: http://ogp.me/ns/fb# place: http://ogp.me/ns/place#"><link rel="dns-prefetch" href="//fonts.googleapis.com"><meta charset="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1"/><meta name="format-detection" content="telephone=no"><meta name="apple-mobile-web-app-capable" content="yes"><meta name="mobile-web-app-capable" content="yes">
<!--<meta name="viewport" content="width=device-width, maximum-scale=1"/>-->
<meta name="viewport" content="width=device-width, maximum-scale=5"/>
<base href="/"><title ng-bind="MetaTags.title">The Grand Hotel at Bridgeport | Tigard, OR</title><meta name="description" content="Indulge in a world-class experience at The Grand Hotel at Bridgeport, the perfect escape for your next leisure vacation, wedding retreat or group outing. Enjoy spacious, generously appointed rooms, with incredible views of Tigard, OR. Book online or call us today at 1 503-968-5757 to book your next unforgettable vacation."><meta property="og:site_name" content="The Grand Hotel at Bridgeport"><meta property="og:locale" content="en_US"><meta ng-show="!contentLoaded" property="og:type" content="place"><meta property="og:title" content="The Grand Hotel at Bridgeport | Tigard, OR"><meta property="og:description" content="Indulge in a world-class experience at The Grand Hotel at Bridgeport, the perfect escape for your next leisure vacation, wedding retreat or group outing. Enjoy spacious, generously appointed rooms, with incredible views of Tigard, OR. Book online or call us today at 1 503-968-5757 to book your next unforgettable vacation."><meta property="og:url" content="https://www.grandhotelbridgeport.com/feed" ><meta property="og:image" content="https://lh3.googleusercontent.com/PBzloX_rIPOZLmFMIWkL2i7RyJC-veajFpElBWLmz6jeYJEBiftJLkQX-kXdGatnPkifO15pAfOWXDHyCfHoAB4t5qz3HImcJ9X_5A=s0" ><meta property="twitter:card" content="summary_large_image" ><meta property="twitter:description" content="Indulge in a world-class experience at The Grand Hotel at Bridgeport, the perfect escape for your next leisure vacation, wedding retreat or group outing. Enjoy spacious, generously appointed rooms, with incredible views of Tigard, OR. Book online or call us today at 1 503-968-5757 to book your next unforgettable vacation."><meta property="twitter:title" content="The Grand Hotel at Bridgeport | Tigard, OR" ><meta property="twitter:site" content="The Grand Hotel at Bridgeport" ><meta ng-show="!contentLoaded" property="twitter:domain" content="The Grand Hotel at Bridgeport" ><meta ng-show="!contentLoaded" property="twitter:image:src" content="https://lh3.googleusercontent.com/PBzloX_rIPOZLmFMIWkL2i7RyJC-veajFpElBWLmz6jeYJEBiftJLkQX-kXdGatnPkifO15pAfOWXDHyCfHoAB4t5qz3HImcJ9X_5A=s0" ><meta ng-show="!contentLoaded" property="twitter:creator" content="The Grand Hotel at Bridgeport"><meta property="place:location:latitude" content="45.392678" /><meta property="place:location:longitude" content="-122.749957" /><meta property="place:location:street" 	content="7265 SW Hazel Fern Rd." /> <meta property="place:location:city" content="Tigard" /><meta property="place:location:region" content="OR" /> <meta property="place:location:zip" content="97224" /> <meta property="place:location:country" content="United States" /><meta property="place:location:overall_rating" content="5" ><meta property="place:location:price_range" content="$$$" ><meta ng-repeat="(key, value) in MetaTags.properties" property="{{key}}" content="{{value}}" ><link ng-show="!contentLoaded" rel="canonical" href="https://www.grandhotelbridgeport.com/feed">
<!--<link rel="stylesheet prefetch" href="https://fonts.googleapis.com/css?family=Roboto:300,400,500,700,400italic">-->
<link href="https://fonts.googleapis.com/css?family=Cabin:400,400i,700" rel="stylesheet prefetch"><!--<link rel="stylesheet prefetch" href="https://cdnjs.cloudflare.com/ajax/libs/angular-material/1.1.1/angular-material.min.css">--><style type="text/css">[ng\:cloak],[ng-cloak],[data-ng-cloak],[x-ng-cloak],.ng-cloak,.x-ng-cloak{display:none!important;}</style>
<link href="https://storage.googleapis.com/brewer-vacations-frontend.appspot.com/content/css/style.microsite.emerald.min.css?ver=1781161259" media="all" rel="stylesheet" type="text/css"/>
<!--<link href="https://www.grandhotelbridgeport.com/dist/css/style.microsite.emerald.min.css?ver=1781161259" media="all" rel="stylesheet" type="text/css"/>-->
	<link href="https://storage.googleapis.com/brewer-vacations-frontend.appspot.com/content/css/style.microsite.emerald.brown.min.css?ver=1781161259" media="all" rel="stylesheet" type="text/css"/>
<script>window.APP_VERSION="1781161259";window.SITE_ID="88haoa2-fkfa2alf2-ao8ofja1f-g3nln1rt";window.APP_DOMAIN="grandhotelbridgeport.com";window.APP_CLIENT="The Grand Hotel at Bridgeport";window.APP_CLIENT_PHONE="1 503-968-5757";window.APP_CLIENT_PHONE_RESERVATIONS="1 866-968-5757";window.APP_CLIENT_EMAIL="reservations@grandhotelbridgeport.com";window.PROPERTY_CITY="Tigard";window.PROPERTY_STATE="OR";window.APP_URL="/";window.CDN_URL="app/microsite/";window.PROPERTY_ID="0005-fs33s3-h5hdhd3-hv7gd3q-jklr3tgu4";window.BOOKING_URL="https://res.windsurfercrs.com/ibe/index.aspx?propertyID=15353&langID=1&currID=0";window.APP_CONFIG={"core":{"tracking":{"vwo":"58356"},"themes":{"template":"emerald","themeColor":"brown","color":"#624e41","customHead":"<script>window.CUSTOM_GDPR=1;<\/script>\n<!-- OneTrust Cookies Consent Notice start for www.grandhotelbridgeport.com -->\n<script src=\"https:\/\/cdn.cookielaw.org\/scripttemplates\/otSDKStub.js\"  type=\"text\/javascript\" charset=\"UTF-8\" data-domain-script=\"018f11d2-c5c0-74be-9eef-4cd659a2ccfb\" ><\/script>\n<script type=\"text\/javascript\">\nfunction OptanonWrapper() { }\n<\/script>\n<!-- OneTrust Cookies Consent Notice end for www.grandhotelbridgeport.com -->\n<!-- Sojern Container Tag cp_v3_js, Pixel Version: 1 -->\n<script src=&rsquo;https:\/\/static.sojern.com\/utils\/sjrn_autocx.js&rsquo;><\/script>\n<!-- Sojern Container Tag cp_v3_js, Pixel Version: 1 -->\n<!-- Google Tag Manager -->\n<script>(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({&rsquo;gtm.start&rsquo;:\nnew Date().getTime(),event:&rsquo;gtm.js&rsquo;});var f=d.getElementsByTagName(s)[0],\nj=d.createElement(s),dl=l!=&rsquo;dataLayer&rsquo;?&rsquo;&l=&rsquo;+l:&rsquo;&rsquo;;j.async=true;j.src=\n&rsquo;https:\/\/www.googletagmanager.com\/gtm.js?id=&rsquo;+i+dl;f.parentNode.insertBefore(j,f);\n})(window,document,&rsquo;script&rsquo;,&rsquo;dataLayer&rsquo;,&rsquo;GTM-P3FKLVQD&rsquo;);<\/script>\n<!-- End Google Tag Manager -->\n<script>(function(w,d,t,r,u){var f,n,i;w[u]=w[u]||[],f=function(){var o={ti:&rsquo;21002037&rsquo;};o.q=w[u],w[u]=new UET(o),w[u].push(&rsquo;pageLoad&rsquo;)},n=d.createElement(t),n.src=r,n.async=1,n.onload=n.onreadystatechange=function(){var s=this.readyState;s&&s!==&rsquo;loaded&rsquo;&&s!==&rsquo;complete&rsquo;||(f(),n.onload=n.onreadystatechange=null)},i=d.getElementsByTagName(t)[0],i.parentNode.insertBefore(n,i)})(window,document,&rsquo;script&rsquo;,&rsquo;\/\/bat.bing.com\/bat.js&rsquo;,&rsquo;uetq&rsquo;);<\/script><script>window.trackerName=&rsquo;gtag_UA_486659_5&rsquo;;<\/script><script async src=&rsquo;https:\/\/www.googletagmanager.com\/gtag\/js?id=UA-486659-5&rsquo;><\/script><script>window.dataLayer = window.dataLayer || []; function gtag(){dataLayer.push(arguments);}gtag(&rsquo;js&rsquo;, new Date());gtag(&rsquo;config&rsquo;, &rsquo;UA-486659-5&rsquo;, {&rsquo;linker&rsquo;: {&rsquo;domains&rsquo;: [&rsquo;grandhotelbridgeport.com&rsquo;, &rsquo;windsurfercrs.com&rsquo;],&rsquo;decorate_forms&rsquo;: true}});<\/script><script>(function () {var pl = document.createElement(&rsquo;script&rsquo;);pl.type = &rsquo;text\/javascript&rsquo;;pl.async = true;pl.src = &rsquo;https:\/\/beacon.sojern.com\/pixel\/p\/5620&rsquo;;(document.getElementsByTagName(&rsquo;head&rsquo;)[0] || document.getElementsByTagName(&rsquo;body&rsquo;)[0]).appendChild(pl);})();<\/script><link rel=\"apple-touch-icon\" sizes=\"180x180\" href=\"https:\/\/storage.googleapis.com\/brewer-vacations-frontend.appspot.com\/clientmedia\/brands\/vips\/favicon-grand\/apple-touch-icon.png\">\n<link rel=\"icon\" type=\"image\/png\" sizes=\"32x32\" href=\"https:\/\/storage.googleapis.com\/brewer-vacations-frontend.appspot.com\/clientmedia\/brands\/vips\/favicon-grand\/favicon-32x32.png\">\n<link rel=\"icon\" type=\"image\/png\" sizes=\"16x16\" href=\"https:\/\/storage.googleapis.com\/brewer-vacations-frontend.appspot.com\/clientmedia\/brands\/vips\/favicon-grand\/favicon-16x16.png\">\n<link rel=\"manifest\" href=\"https:\/\/storage.googleapis.com\/brewer-vacations-frontend.appspot.com\/clientmedia\/brands\/vips\/favicon-grand\/site.webmanifest\">\n<link rel=\"mask-icon\" href=\"https:\/\/storage.googleapis.com\/brewer-vacations-frontend.appspot.com\/clientmedia\/brands\/vips\/favicon-grand\/safari-pinned-tab.svg\" color=\"#624e41\">\n<link rel=\"shortcut icon\" href=\"https:\/\/storage.googleapis.com\/brewer-vacations-frontend.appspot.com\/clientmedia\/brands\/vips\/favicon-grand\/favicon.ico\">\n<meta name=\"msapplication-TileColor\" content=\"#624e41\">\n<meta name=\"msapplication-config\" content=\"https:\/\/storage.googleapis.com\/brewer-vacations-frontend.appspot.com\/clientmedia\/brands\/vips\/favicon-grand\/browserconfig.xml\">\n<meta name=\"theme-color\" content=\"#624e41\">\n<link href=\"https:\/\/fonts.googleapis.com\/css?family=Raleway:300,400,700\" rel=\"stylesheet prefetch\">\n\n<style>\n.header-phone.md-button.md-icon-button{\nborder-radius: 50%;\n}\n.header-phone.md-button.md-icon-button md-icon{\nfill: #624E41;\n}\n\n\n@font-face {\n    font-family: \"brilon\";\n    src: url(\"https:\/\/storage.googleapis.com\/brewer-vacations-frontend.appspot.com\/content\/fonts\/brilon-regular.woff2\") format(\"woff2\"),\n         url(\"https:\/\/storage.googleapis.com\/brewer-vacations-frontend.appspot.com\/content\/fonts\/brilon-regular.woff\") format(\"woff\");\n    font-weight: normal;\n    font-style: normal;\n}\n.brilon-font{font-family:brilon,futura-lt,sans-serif!important}\n\n@font-face{font-family:\"futura-lt\";\nsrc:url(https:\/\/storage.googleapis.com\/brewer-vacations-frontend.appspot.com\/content\/fonts\/futuralt.eot);\nsrc:url(https:\/\/storage.googleapis.com\/brewer-vacations-frontend.appspot.com\/content\/fonts\/futuralt.eot?#iefix) format(\"embedded-opentype\"),\nurl(https:\/\/storage.googleapis.com\/brewer-vacations-frontend.appspot.com\/content\/fonts\/futuralt.woff2) format(\"woff2\"),\nurl(https:\/\/storage.googleapis.com\/brewer-vacations-frontend.appspot.com\/content\/fonts\/futuralt.woff) format(\"woff\"),\nurl(https:\/\/storage.googleapis.com\/brewer-vacations-frontend.appspot.com\/content\/fonts\/futuralt.ttf) format(\"truetype\"),\nurl(https:\/\/storage.googleapis.com\/brewer-vacations-frontend.appspot.com\/content\/fonts\/futuralt.svg#futura_ltregular) format(\"svg\");\nfont-weight:400;font-style:normal}\n.alt-font, .md-button, .md-headline, .md-tab, .md-title, .page-title, button, .image-link-block-name,\n.home-body-section .md-display-1,\nh1,h2,h3,h4,h5,h6{\n    font-family: futura-lt;\n}\n.button, button, h1, h2, h3, h4, h5, h6, html, input, select, textarea {\n    font-family: Raleway,Roboto,\"Helvetica Neue\",sans-serif;\n}\n.description-text, .home-description {\n    font-size: 16px;\n    font-weight: 500;\n}\n.image-link-block-text-overlay {\n    padding: 8px 0px 4px;\n}\n.image-link-block-text {\n    top: 30%;\n}\n.md-button{\nborder-radius: 0px;\n}\n\n.gray-page {background: #f4f4f2;}\n#header-logo {width: auto;}\n\n\/*\n.image-link-block-wrap:first-child .image-link-block-link,*\/\n.offers-offer-item .offer-terms{\ndisplay:none;\n}\nmd-tabs.md-default-theme .md-tab.md-active, md-tabs .md-tab.md-active, md-tabs.md-default-theme .md-tab.md-active md-icon, md-tabs .md-tab.md-active md-icon, md-tabs.md-default-theme .md-tab.md-focused, md-tabs .md-tab.md-focused, md-tabs.md-default-theme .md-tab.md-focused md-icon, md-tabs .md-tab.md-focused md-icon,\n.primary-color.a1, a {\n    color: #947b57;\n    color: #816a4b;\n}\n.book-bar,\n.loading-overlay,\n.md-button.md-default-theme.md-primary.md-raised, .md-button.md-primary.md-raised, .md-button.md-default-theme.md-primary.md-fab, .md-button.md-primary.md-fab {\n    color: rgba(255,255,255,0.87);\n    color: rgba(255,255,255,1);\n    background-color: #947b57;\n    background-color: #816a4b;\n}\n.md-button.md-default-theme.md-primary.md-raised:not([disabled]):hover, .md-button.md-primary.md-raised:not([disabled]):hover, .md-button.md-default-theme.md-primary.md-fab:not([disabled]):hover, .md-button.md-primary.md-fab:not([disabled]):hover {\n    background-color: #bc9b6a;\n}\n\n.carousel-img-div-text, .hero-text-wrap {\n    background-color: rgba(148, 123, 87, 0.8)!important\n}\n.home-body-section a .card-shadow{box-shadow:none;}\n.figure.imgleft, figure.imgright{clear:both;}\n\n.hotel-amenities-box img {\ndisplay: none;\n}\n\n\/*Hide Amenities Pet Status*\/\n.amenities-pets-wrap{display:none;}\n<\/style>","mapMarkerIcon":"https:\/\/storage.googleapis.com\/brewer-vacations-frontend.appspot.com\/clientmedia\/brands\/vips\/grand-hotel-map-marker.png","loadingIcon":"https:\/\/storage.googleapis.com\/brewer-vacations-frontend.appspot.com\/clientmedia\/brands\/vips\/grand-hotel-loading-icon.png","customBody":"<!-- Google Tag Manager (noscript) -->\n<noscript><iframe src=\"https:\/\/www.googletagmanager.com\/ns.html?id=GTM-P3FKLVQD\"\nheight=\"0\" width=\"0\" style=\"display:none;visibility:hidden\"><\/iframe><\/noscript>\n<!-- End Google Tag Manager (noscript) -->\n\n\n<button id=\"agentic-hospitality-chat-btn\" type=\"button\" style=\"position: fixed; bottom: 20px; right: 20px; z-index: 9999; padding: 16px; background: #816a4b; color: white; border: none; border-radius: 50%; cursor: pointer; box-shadow: 0 4px 12px rgba(0,0,0,0.15); width: 60px; height: 60px; display: flex; align-items: center; justify-content: center; font-size: 24px;\" onclick=\"window.setupInHotelChat()\">\n\n  <svg width=\"100%\" height=\"100%\" viewBox=\"0 0 25 24\" fill=\"none\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" fit=\"\" preserveAspectRatio=\"xMidYMid meet\" focusable=\"false\">\n<path d=\"M11.5005 23.3473C8.99428 17.4373 6.83431 15.3633 0.679118 12.9596C-0.226373 12.6062 -0.226373 11.3938 0.679118 11.0402C6.83706 8.63648 8.99428 6.56255 11.5005 0.649906C11.8685 -0.216635 13.1312 -0.216635 13.4967 0.649906C16.003 6.55991 18.1629 8.63384 24.3209 11.0402C25.2264 11.3936 25.2264 12.606 24.3209 12.9596C18.1657 15.3636 16.0057 17.4373 13.4967 23.3499C13.1285 24.2167 11.866 24.2167 11.5005 23.3499V23.3473Z\" fill=\"#D9C973\"><\/path>\n<\/svg>\n\n<\/button>\n\n\n<focus-chat\n  agent_card_url=\"\/.well-known\/agent-card.json\"\n  config='{\"source_trigger_selector\":\"#agentic-hospitality-chat-btn\",\"greeting\":\"Welcome to The Grand Hotel Bridgeport! How can I help you today?\",\"header_background_color\":\"#0A0A0A\",\"user_message_background_color\":\"#816a4b\",\"send_button_background_color\":\"#816a4b\",\"title\":\"The Grand Hotel at Bridgeport\",\"input_message_placeholder\":\"Ask about our hotel amenities and services.\"}'>\n<\/focus-chat>\n\n<script src=\"https:\/\/embed.agents.inhotel.io\/focus-chat\/latest\/focus-chat.min.js\"><\/script>\n<script>\nconst FIRESTORE_ENDPOINT = 'https:\/\/api.agentichospitality.ai\/firestore\/write\/';\n\n\/\/ Generate or retrieve session ID (using in-memory fallback)\nlet currentSessionId = null;\n\nfunction getSessionId() {\n  if (currentSessionId) {\n    return currentSessionId;\n  }\n  \n  \/\/ Try sessionStorage first\n  try {\n    let sessionId = sessionStorage.getItem('chatSessionId');\n    if (!sessionId) {\n      sessionId = `session_${Date.now()}_${Math.random().toString(36).substr(2, 9)}`;\n      sessionStorage.setItem('chatSessionId', sessionId);\n    }\n    currentSessionId = sessionId;\n    return sessionId;\n  } catch (e) {\n    \/\/ Fallback if sessionStorage fails\n    if (!currentSessionId) {\n      currentSessionId = `session_${Date.now()}_${Math.random().toString(36).substr(2, 9)}`;\n    }\n    return currentSessionId;\n  }\n}\n\n\/\/ Store message via POST request\nasync function storeMessage(sessionId, role, content, timestamp) {\n  try {\n    const response = await fetch(FIRESTORE_ENDPOINT, {\n      method: 'POST',\n      headers: {\n        'Content-Type': 'application\/json',\n      },\n      body: JSON.stringify({\n        sessionId: sessionId,\n        role: role,\n        content: content,\n        timestamp: timestamp\n      })\n    });\n\n    if (!response.ok) {\n      const errorData = await response.json();\n      console.error('Failed to store message:', errorData);\n      return;\n    }\n\n    const result = await response.json();\n  } catch (error) {\n    console.error('Error storing message:', error);\n  }\n}\n\n\/\/ Extract text content from message elements\nfunction extractMessageContent(node) {\n  return node.innerText || node.textContent || \"\";\n}\n\n\/\/ Find shadow root and chat container\nfunction findChatContainer() {\n  \/\/ Look for the chat popup element with shadow root\n  const chatPopup = document.querySelector('[class*=\"ih-popup\"]') || \n                    document.querySelector('[role=\"dialog\"]') ||\n                    document.querySelector('div[class*=\"chat\"]');\n  \n  if (!chatPopup) {\n    \/\/ Search through all elements for shadow roots\n    const allElements = document.querySelectorAll('*');\n    for (const element of allElements) {\n      if (element.shadowRoot) {\n        const bodyInShadow = element.shadowRoot.querySelector('.ih-body');\n        if (bodyInShadow) {\n          return bodyInShadow;\n        }\n      }\n    }\n    return null;\n  }\n  \n  \/\/ Check if the element has a shadow root\n  if (chatPopup.shadowRoot) {\n    const container = chatPopup.shadowRoot.querySelector('.ih-body');\n    if (container) {\n      return container;\n    }\n  }\n  \n  return null;\n}\n\n\/\/ Track processed messages and pending assistant messages\nconst processedMessages = new Set();\nconst pendingAssistantMessages = new Map(); \/\/ Map of message nodes to their monitoring data\n\n\/\/ Hide branding element wherever it appears\nfunction hideBranding() {\n  try {\n    \/\/ Search all shadow roots for branding\n    const allElements = document.querySelectorAll('*');\n    for (const element of allElements) {\n      if (element.shadowRoot) {\n        const branding = element.shadowRoot.querySelector('.ih-branding');\n        if (branding) {\n          branding.style.display = 'none';\n        }\n      }\n    }\n  } catch (e) {\n    \/\/ Silently fail\n  }\n}\n\n\/\/ Continuously watch for branding and hide it\nlet brandingWatcherStarted = false;\nfunction startBrandingWatcher() {\n  if (brandingWatcherStarted) return;\n  brandingWatcherStarted = true;\n  \n  \/\/ Check every 500ms for branding element\n  setInterval(hideBranding, 50);\n  \n  \/\/ Also hide on chat button click\n  const chatBtn = document.getElementById('agentic-hospitality-chat-btn');\n  if (chatBtn) {\n    chatBtn.addEventListener('click', () => {\n      \/\/ Hide immediately and again after a short delay (for re-renders)\n      hideBranding();\n      setTimeout(hideBranding, 10);\n      setTimeout(hideBranding, 25);\n      setTimeout(hideBranding, 50);\n      setTimeout(hideBranding, 75);\n      setTimeout(hideBranding, 100);\n      setTimeout(hideBranding, 150);\n      setTimeout(hideBranding, 200);\n    });\n  }\n}\n\n\/\/ Monitor assistant message for completion\nfunction monitorAssistantMessage(node, messageId, timestamp) {\n  let lastContent = '';\n  let unchangedCount = 0;\n  const STABLE_THRESHOLD = 3; \/\/ Number of checks with no change before considering complete\n  const CHECK_INTERVAL = 500; \/\/ Check every 500ms\n  \n  const checkInterval = setInterval(() => {\n    const currentContent = extractMessageContent(node);\n    \n    if (currentContent === lastContent) {\n      unchangedCount++;\n      \n      \/\/ If content hasn't changed for STABLE_THRESHOLD checks, consider it complete\n      if (unchangedCount >= STABLE_THRESHOLD) {\n        clearInterval(checkInterval);\n        \n        \/\/ Save the message\n        if (currentContent && currentContent.length > 1) {\n          console.log('AI Resonse: ', currentContent);\n          const sessionId = getSessionId();\n          storeMessage(sessionId, 'assistant', currentContent, timestamp);\n          processedMessages.add(messageId);\n        }\n        \n        \/\/ Remove from pending\n        pendingAssistantMessages.delete(node);\n      }\n    } else {\n      \/\/ Content changed, reset counter\n      unchangedCount = 0;\n      lastContent = currentContent;\n    }\n  }, CHECK_INTERVAL);\n  \n  \/\/ Store the interval ID so we can cancel if needed\n  pendingAssistantMessages.set(node, {\n    messageId: messageId,\n    timestamp: timestamp,\n    intervalId: checkInterval\n  });\n  \n  \/\/ Safety timeout - save after 30 seconds regardless\n  setTimeout(() => {\n    if (pendingAssistantMessages.has(node)) {\n      clearInterval(checkInterval);\n      const content = extractMessageContent(node);\n      if (content && content.length > 1) {\n        console.log('AI response: ', content);\n        const sessionId = getSessionId();\n        storeMessage(sessionId, 'assistant', content, timestamp);\n        processedMessages.add(messageId);\n      }\n      pendingAssistantMessages.delete(node);\n    }\n  }, 30000);\n}\n\n\/\/ Parse and store new messages\nfunction processNewMessages(mutations) {\n  const sessionId = getSessionId();\n  \n  mutations.forEach(mutation => {\n    mutation.addedNodes.forEach(node => {\n      if (node.nodeType === 1) { \/\/ Element node\n        \/\/ Check if it's a message container\n        if (node.classList && node.classList.contains('ih-msg')) {\n          const timestamp = Date.now();\n          \n          \/\/ Create a unique identifier for this message\n          const messageId = `${node.className}_${timestamp}`;\n          \n          \/\/ Skip if already processed\n          if (processedMessages.has(messageId)) {\n            return;\n          }\n          \n          let role, content;\n\n         \n          \n          \/\/ Check for user message - save immediately\n          if (node.classList.contains('user')) {\n            role = 'user';\n            content = extractMessageContent(node);\n            \n            if (content && content.length > 1) {\n              storeMessage(sessionId, role, content, timestamp);\n              processedMessages.add(messageId);\n            }\n          } \n          \/\/ Check for assistant message - monitor for completion\n          else if (node.classList.contains('assistant')) {\n            monitorAssistantMessage(node, messageId, timestamp);\n          }\n          \/\/ Check for greeting - save immediately\n          else if (node.classList.contains('greeting')) {\n            role = 'assistant';\n            content = extractMessageContent(node);\n            \n            if (content && content.length > 1) {\n              storeMessage(sessionId, role, content, timestamp);\n              processedMessages.add(messageId);\n            }\n          }\n        }\n      }\n    });\n  });\n}\n\n\/\/ Set up MutationObserver\nfunction initChatMonitor() {\n  const chatContainer = findChatContainer();\n  \n  if (!chatContainer) {\n\n    setTimeout(initChatMonitor, 1000);\n    return;\n  }\n\n  hideBranding();\n  startBrandingWatcher();\n  \n  const observer = new MutationObserver(processNewMessages);\n  \n  observer.observe(chatContainer, {\n    childList: true,\n    subtree: true\n  });\n  \n  \n  \/\/ Also capture existing messages\n  const existingMessages = chatContainer.querySelectorAll('.ih-msg');\n}\n\n\/\/ Start monitoring when DOM is ready\nfunction startMonitoring() {\n  if (document.readyState === 'loading') {\n    document.addEventListener('DOMContentLoaded', () => {\n      setTimeout(initChatMonitor, 500);\n    });\n  } else {\n    setTimeout(initChatMonitor, 500);\n  }\n}\n\nstartMonitoring();\nstartBrandingWatcher();\n\n\/\/ Export functions for external use\nwindow.chatMonitor = {\n  getSessionId,\n  storeMessage,\n  findChatContainer,\n  reinitialize: initChatMonitor\n};\n<\/script>","headerCTALink":"","headerCTAText":""},"header":{"logo":"https:\/\/storage.googleapis.com\/brewer-vacations-frontend.appspot.com\/clientmedia\/jfj8afo2la2w-fjjgo5ss-sjo8sh2e-gwij3qf\/0005-fs33s3-h5hdhd3-hv7gd3q-jklr3tgu4\/grand-hotel-bridgeport-logo.png"},"sitemap":{"pageTitle":"Sitemap","bodyContent":"","headerImage":""},"footer":{"address":"7265 SW Hazel Fern Rd. Tigard, OR 97224","brand":"","privacyLink":"\/privacy-statement","rewardsLink":"","rewardsImage":"","subscribeHeading":"","subscribeText":"Looking for the latest vacation specials, news and updates? Enter your email below!","text":"<div><a class=\"inline-block line-0 margin-r-8\" href=\"https:\/\/apps.apple.com\/us\/app\/grand-hotel-bridgeport\/id1254479778\" target=\"_blank\" rel=\"nofollow\"><img src=\"https:\/\/storage.googleapis.com\/brewer-vacations-frontend.appspot.com\/content\/img\/App-Store-111.png\" alt=\"The Grand Hotel at Bridgeport on the App Store\"><\/a><a class=\"inline-block line-0\" href=\"https:\/\/play.google.com\/store\/apps\/details?id=mobi.gndbridgectg&hl=en_US\" target=\"_blank\" rel=\"nofollow\"><img src=\"https:\/\/storage.googleapis.com\/brewer-vacations-frontend.appspot.com\/content\/img\/Play-Store-116.png\" alt=\"The Grand Hotel at Bridgeport on the Play Store\"><\/a><\/div>"},"gallery":{"useTagAsCategory":"1"}},"menu":{"Home":{"isActive":1,"url":"","state":"home","icon":"hotel","pageTitle":"The Grand Hotel at Bridgeport | Tigard Oregon Hotel | SW Portland Hotel","headerImage":"","bodyContent":"<div layout=\"row\" layout-wrap=\"\" class=\"\">\n<div flex-xs=\"100\" flex-sm=\"100\" flex-gt-sm=\"100\" class=\"pad-r-16 no-pad-xs pad-b-30\">\n<div class=\"su-column su-column-size-1-3\">\n<div class=\"su-column-inner su-clearfix\">\n<div class=\"su-animate fadeInUp animated\" data-animation=\"fadeInUp\" data-duration=\"1\" data-delay=\"0.5\">\n<blockquote>\n<p><strong><img class=\"pad-8\" src=\"https:\/\/lh3.googleusercontent.com\/ff0JwPfgxgJVqZ3lEDg3l5z6b-bg54SggPBsg9Ga5iLZystQrBEwhq3t8X_nurBoGh3v_5XuTpUknZFQXCYAlbvQvP0LnVwwCh2hi6vlMC6NYZ6dH8A=s0\" alt=\"\" width=\"200\" height=\"220\" style=\"float: right;\" \/><\/strong><\/p>\n<p><strong>EXCELLENT!<\/strong><br \/><br \/>\"The staff is always very helpful. This is the second time we have stayed here and will continue to put this as a first choice. We tried another hotel and checked out of it to move to The Grand. The morning buffet was fresh and nice variety. The new beds and pillows are very comfy and my wife is trying to order the pillows they have for home. Parking is easy and you have a choice of garage or outside for taller vehicles. Rooms are spacious and well laid out. Wish the shower was bigger and they had more closet space but still plenty of room.\"<br \/><br \/>Joseph, April, 2026<br \/><br \/>\"Will be a continued repeat guest.\u00a0 Very friendly staff.\u00a0 Very clean, quiet, and very good service.\u00a0 Great breakfast & salsa!\u00a0 Good, safe, easy to access location.\u00a0 Thank you.\u00a0 Best hotel experience since Covid.\u00a0\u00a0Every single employee is professional & friendly, and that's rare.\"<br \/><br \/>Nicole, April, 2026<\/p>\n<p><strong><br \/>Love it!<\/strong><\/p>\n<p>Lovely upscale hotel! On my way back from the Super Bowl and checked in later! Always had family just around the corner!! What a welcome surprise!! Had the whole pool\/Jacuzzi area to myself and the breakfast buffet with classical music was awesome!! Rooms are first class!! Will be my go to always when I'm back in town!! Always enjoyed this area and Bridgeport shopping is as good as it gets!!\ud83e\udd17\ud83d\ude0e\ud83e\udd17<br \/><br \/>Joanne\u00a0 -\u00a0 Feb 27, 2026<\/p>\n<p><strong><br \/>\"5 Star Hotel\"<\/strong><strong><\/strong><\/p>\n<p>The beds and pillows were extremely comfortable, the hotel is clean and well kept... staff seems to take pride in having a nice and welcoming place to stay. How refreshing to stay at a place where it is clear that the staff cares how comfortable the stay is! The homemade applesauce was a great \"personal\" touch by the hotel.<\/p>\n<cite>Brooke - February 25, 2026<br \/><br \/><\/cite><cite><strong>For more reviews, please click\u00a0<a href=\"reviews\" target=\"_blank\" rel=\"noopener noreferrer\">HERE<\/a><\/strong><\/cite><\/blockquote>\n<h2>Location<\/h2>\n<p>Located within walking distance of the <a href=\"https:\/\/www.bridgeport-village.com\/\" target=\"_blank\" rel=\"noopener noreferrer\" title=\"Bridgeport Village Shopping District\">Bridgeport Village Shopping District<\/a> in Tigard, Oregon, The Grand Hotel at Bridgeport has 124 guest rooms and suites that offer first-class service and amenities, and includes a free hot breakfast buffet, covered parking and high speed WiFi.<\/p>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"su-column su-column-size-1-3\">\n<div class=\"su-column-inner su-clearfix\">\n<div class=\"su-animate fadeInUp animated\" data-animation=\"fadeInUp\" data-duration=\"1\" data-delay=\"0.8\">\n<h2>Rooms<\/h2>\n<p>At The Grand Hotel at Bridgeport, our guests enjoy\u00a0classic, yet distinctive <a href=\"https:\/\/www.grandhotelbridgeport.com\/rooms\" target=\"_blank\" rel=\"noopener noreferrer\">accommodations<\/a>. Each of our oversized guest rooms and suites come standard with leather furniture in the seating area, a work desk with an ergonomic chair, and a double-sized bathroom.\u00a0Hearing accessibility kits are available upon request. Kits contain visual alarm and notification devices for the door, alarm clock, incoming phone calls, and a TTY communications device.<\/p>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"su-column su-column-size-1-3\">\n<div class=\"su-column-inner su-clearfix\">\n<div class=\"su-animate fadeInUp animated\" data-animation=\"fadeInUp\" data-duration=\"1\" data-delay=\"1.2\">\n<h2>Meetings<\/h2>\n<p>The Grand Hotel at Bridgeport features over 2,150 square-feet of flexible meeting and event space to accommodate your next corporate meeting in the SW Portland area.\u00a0<a href=\"meetings\">Host Your Business Meeting or Company Training Session With Us!<\/a><\/p>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>","menuName":"Home","featuredImage":null,"featuredImageURL":"","metaDescription":"The Grand Hotel at Bridgeport Village in Tigard Oregon is located just off I-5 near Tualatin, in the Bridge Village Shopping District.","h1":"The Grand Hotel at Bridgeport","h2":"","keyAmenities":[],"featuredLinks":{"0":{"subtitle":"Free hot buffet breakfast available for each guest.","title":"Breakfast On Us!","image":"https:\/\/lh3.googleusercontent.com\/ssCvwGPiog-8OHll1XnXK-0g9NmAsTMYoNtFOfierjgMRrdhrd-l1MwG-RgLj08D-hH_KkQc9dcUsC_NgaIlr3RfV-SE2c8I33xIxryOMlPYZ2ttIylj=s0","cta":"Learn More","url":"amenities"},"1":{"subtitle":"Enjoy everything Tigard has to offer! We feature packages for the young and the young at heart!","url":"offers","cta":"Learn More","title":"Special Offers","image":"https:\/\/lh3.googleusercontent.com\/8wVqp5HrFsUAGiZa1BdYoPynMqbQT41ifETjOFDlNoUiykFuUmHlT5s4q9ziBCd5NskTQpiAOJ-IPj5YeOy-OPyM2Pn6j42Lk7DFVSiwpPBvL0z0egY=s0"},"2":{"image":"https:\/\/lh3.googleusercontent.com\/ipjDYwYgZK3XOaC7Jdt9q09sLychWIrLK-SWZ_G6J_KgLfZwcOJ4uhIZmIOqiWmfBGW6d_8IT8gO-sCC86kVjAYlyZ1CAafiPxqkYw=w434-h250-c","cta":"Learn More","title":"Meet Here!","subtitle":"Make Your Next Meeting or Event a Grand Success!","url":"meetings"}},"featuredImageCaption":"","heroVideo":"0","isMenuItem":1,"isFooterMenuItem":1,"type":"core","ordering":1},"Rooms":{"isActive":1,"url":"rooms","state":"rooms","icon":"room","pageTitle":"Tigard Hotel Suites | Tualatin Hotel Rooms | The Grand Hotel in Bridgeport | SW Portland Hotel","title":"","bodyContent":"<p>At The Grand Hotel at Bridgeport, located in the SW Portland area, guests enjoy classic, yet distinctive accommodations. Each of our oversized rooms and suites come standard with leather furniture in the seating area, a work desk and ergonomic chair, complimentary high-speed internet access (both hard-wired and Wi-Fi), refrigerator, microwave, a coffee station complete with organic NW coffee and local teas, and a double-sized bathroom featuring a separate shower and tub.\u00a0Hearing accessibility kits are available upon request. Kits contain visual alarm and notification devices for the door, alarm clock, and incoming phone calls, and TTY communications device.<\/p>\n<h3>Please choose from following rooms and suites for more information:<\/h3>","menuName":"Rooms","metaDescription":"Looking for a hotel suite in Tigard, Oregon? Each of our oversize hotel rooms and suites comes standard with leather furniture in the living room area, a working desk and ergonomic office chair, complimentary high-speed internet access (either hard-wired or Wi-Fi).","h1":"Rooms & Suites","h2":"","headerImage":"https:\/\/lh3.googleusercontent.com\/TMY8Ho4L9M1ugd3xezpZWOKKNNgBfZndbu9mvEM-jv97KgvHmg_ubazVEnH-Ckf2lyU03m__u73zSbSFwjW7bfg2BUDuZdbxh_Wv86t07dpce80tCBID=s0","featuredImage":"https:\/\/lh3.googleusercontent.com\/RzLQ3NNMEPAR1e1zjMVrF8MwAjO1lAS7JXDpArd7hYbIM6XlQumXKNZCs8Eaf3gKTIohh7cIj5SSBh5eTfKwA2JuEw2gYd6KqdbFlkDcI6lxNAZELy18=s0","heroVideo":"0","showInSubMenu":"1","parent":"0","isMenuItem":1,"isFooterMenuItem":1,"type":"core","ordering":1},"Amenities":{"isActive":1,"url":"amenities","state":"amenities","icon":"spa","pageTitle":"Amenities and Services at The Grand Hotel at Bridgeport","headerImage":"https:\/\/lh3.googleusercontent.com\/rOJaqEy8t-URPYTnFf91ENIhqmJEmsICNnWkFLPKetZXSeZmgdr_y09cLjSa9WPUzy_s5V1lNQdsu7Fgv_hQ-Cg0mtJMjrTYy25KcGhZ93AdOPHYRQ=s0","bodyContent":"<p>Whether you are in town for a family-friendly adventure, business travel, or a wedding, The Grand Hotel at Bridgeport in SW Portland has you covered! Once you&rsquo;re here, you&rsquo;ll discover all the cozy and comfortable amenities we have to offer. Our luxury hotel and exceptional guest service are a short drive from Oregon&rsquo;s renowned wine country &amp; downtown Portland.<\/p>\n<h3><img class=\"imgright\" src=\"https:\/\/lh3.googleusercontent.com\/feBZ2vTZB1sOtBUbngBg0KzL4DBQrutSj0Lxb4BGLoaqjZeCD-yEG63u6kLsgmpO8Bh_dZi4i-O4U8f2GTCwBzD6kt1fwYwaeJKz9g=s0\" alt=\"Pool at The Grand Hotel at Bridgeport\" width=\"560\" height=\"336\" \/><\/h3>\n<h3>Located within walking distance of the Bridgeport Village Shopping District and fine dining<\/h3>\n<ul>\n<li>124 guest rooms and suites.<\/li>\n<li><span>Free hot buffet breakfast available for each guest.<\/span><br \/>\n<ul>\n<li><span>&nbsp;6:30 to 9:30am Weekdays, 7:00 to 10am Weekends<\/span>.<\/li>\n<\/ul>\n<\/li>\n<li><strong>Check-in<\/strong> time is <strong>3pm<\/strong>: <strong>Check-out<\/strong> time is <strong>11am<\/strong><\/li>\n<li>Indoor pool, jetted spa, and fitness room featuring 2026 state of the art equipment.<\/li>\n<li>Complimentary high-speed internet access.<\/li>\n<li>First class service and amenities.<\/li>\n<li>Located within walking distance of the Bridgeport Village Shopping District and fine dining.<\/li>\n<li>Meeting and event space on-site. Please call the hotel direct for further information and to make arrangements.<\/li>\n<li>Complimentary parking garage access.<a title=\"Travel Oregon Link\" href=\"https:\/\/traveloregon.com\/plan-your-trip\/places-to-stay\/hotels-motels\/the-grand-hotel-in-salem\/\" target=\"_blank\" rel=\"noopener noreferrer\"><\/a><\/li>\n<li>1 Electric Vehicle charging station with 2 ports, Level 2, located in parking garage.&nbsp; Station operated by Blink.&nbsp; Please consider having the Blink App downloaded and ready to use prior to arrival.&nbsp; Standard charging fees apply.<\/li>\n<li>Wheel Chair accessible rooms&nbsp;available upon request.<\/li>\n<li>Hearing accessibility kits are available upon request. Kits contain visual alarm and notification devices for the door, alarm clock, incoming phone calls, and a TTY communications device.<\/li>\n<li>Per company policy, age requirement to rent a room is 21 years or older.&nbsp; Guest must present a valid photo ID and matching credit card upon check in.<\/li>\n<\/ul>","menuName":"Amenities","metaDescription":"Whether you are in town for a family-friendly adventure, business travel, or a wedding, The Grand Hotel at Bridgeport has you covered! Discover the cozy and comfortable amenities, and the friendly service we have to offer at our luxury hotel. We are a short drive from Oregon\u2019s renowned wine country & downtown Portland.","featuredImage":"https:\/\/lh3.googleusercontent.com\/qut4IEWHpIJvZjXlbEufuxp2HEUryuS92Uo8faPrk5T_bsG5Y4nGJjXdU1C4Ewpfo3Dxi1vMM9XTohUNnUqFJg4kcjU6YJBEJccHqSpUqaWDlxE_9A=s0","h1":"Amenities and Services","h2":"","heroVideo":"0","isMenuItem":1,"isFooterMenuItem":1,"parent":"0","type":"core","ordering":1,"headerImagePositionY":"20%"},"Photos":{"isActive":1,"url":"photos","state":"photos","icon":"camera","pageTitle":"Photos of The Grand Hotel at Bridgeport","headerImage":"https:\/\/lh3.googleusercontent.com\/RzLQ3NNMEPAR1e1zjMVrF8MwAjO1lAS7JXDpArd7hYbIM6XlQumXKNZCs8Eaf3gKTIohh7cIj5SSBh5eTfKwA2JuEw2gYd6KqdbFlkDcI6lxNAZELy18=s0","bodyContent":"","menuName":"Photos","metaDescription":"View photos of The Grand Hotel at Bridgeport in Tigard, OR. Our 124 hotel guest rooms and suites offer first class service and amenities and include a complimentary hot breakfast buffet.","headerImagePositionY":"65%","heroVideo":"0","h1":"The Grand Hotel at Bridgeport Photo Gallery","parent":"0","isMenuItem":1,"isFooterMenuItem":1,"type":"core","ordering":2},"Offers":{"isActive":1,"url":"offers","state":"offers","icon":"specials","pageTitle":"Tigard Hotel Packages | Tualtin Hotel Deals | The Grand Hotel at Bridgeport | SW Portland Hotel","headerImage":"https:\/\/lh3.googleusercontent.com\/VH834CV_LZrmNxWfQW3V_B3VbPKmmc3OfJOVbW_IKfIFx5H0CcX7RewQ5pbn-kQbyKSrZJVQRqZI-RVsrNJl0sPBAs7p-K0EoYuezgFCeoGqFBb0cL8=s0","bodyContent":"<p>The only thing better than reserving a room or suite at The Grand Hotel at Bridgeport is reserving a package at The Grand Hotel at Bridgeport. Packages combine our luxurious guest rooms and suites with some of the best adventures that the Bridgeport, Tigard, and Tualatin, Oregon areas have to offer. We currently offer the following packages:<\/p>","featuredImage":"https:\/\/lh3.googleusercontent.com\/HLuHR4xpUxznCLNEnUaUssThqksRjb5ZMDf5oEGWKc8GY6E8BaI4zmdLAzOnhsB5EcyRKJjKkjJsauiE440RDP1igCpMFLIoxFAp=s0","menuName":"Packages","metaDescription":"Packages combine our luxurious guest rooms and suites with some of the best that the Bridgeport area has to offer at The Grand Hotel at Bridgeport.","h1":"Celebrate with Offers & Packages while at The Grand Hotel at Bridgeport","h2":"Enjoy Our Many Options With Enhancing your Stay at The Grand Hotel at Bridgeport","heroVideo":"0","showInSubMenu":"1","parent":"0","isMenuItem":1,"isFooterMenuItem":1,"type":"core","ordering":3,"headerImagePositionY":"60%"},"Nearby":{"isActive":1,"url":"nearby","state":"nearby","icon":"explore","pageTitle":"Things to Do Near The Grand Hotel at Bridgeport","headerImage":"","bodyContent":"","menuName":"Nearby","metaDescription":"Things to do nearby The Grand Hotel at Bridgeport, Tigard, OR. Located within walking distance of the Bridgeport Village Shopping District in Tigard, Oregon, our 124 hotel guest rooms and suites offer first class service and amenities and include a complimentary hot breakfast buffet.","h1":"Things to Do Near The Grand Hotel at Bridgeport in SW Portland","h2":"","headerImagePositionY":"","heroVideo":"0","showInSubMenu":"0","parent":"0","isMenuItem":1,"isFooterMenuItem":1,"type":"core","ordering":4},"Meetings":{"bodyContent":"<div class=\"su-column su-column-size-1-2\">\n<div class=\"su-column-inner su-clearfix\">\n<p>Experience our warm and inviting interior and professionally trained staff for your next meeting. The&nbsp;Grand Hotel at Bridgeport is a distinctively different upscale facility to host your next event. Whether you&nbsp;are planning a corporate event for 80 or a professional business lunch for 10, The Grand Hotel has over&nbsp;2,150 square feet of flexible meeting space to accommodate your next meeting.<br \/><br \/>Host Your Business Meeting or Company Training Session With Us!<br \/><br \/><strong>Exceptional Services and Amenities-<\/strong> Our travelers are frequently impressed with the level of service and&nbsp;amenities our hotel offers. Awaiting your arrival is a pristine indoor pool and fitness center, a spacious&nbsp;and warm hotel lobby that is ideal for meeting and socializing, free covered parking, High Speed WiFi,&nbsp;and a free hot breakfast buffet.<br \/><br \/>FYI: There is a reason we received the TripAdvisor&rsquo;s Certificate of Excellence 4 years in a row!<\/p>\n<\/div>\n<\/div>\n<div class=\"su-column su-column-size-1-2\">\n<div class=\"su-column-inner su-clearfix\">\n<p>&nbsp;<\/p>\n<p><strong><a href=\"audio-visual\">Ideal IT Classroom space and equipment<\/a><\/strong>&ndash; LCD projectors, screens, 55-inch flat panel display, microphones and House Sound, DVD\/VCR Players, Flip Charts and Whiteboards, and Speakerphones.<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p style=\"text-align: center;\"><a href=\"http:\/\/www.grandhotelsalem.com\/\" target=\"_blank\" rel=\"noopener noreferrer\"><img class=\"alignleft\" src=\"https:\/\/lh3.googleusercontent.com\/iCPebMd9gvTluvs9wC_hUKXowUvt0Mmi6uKnWplt0lj3GR8ZapdN7GMA5NWku5nW1EFcFcEiB9D91ILHD5mjYF2poMKbsbbfoRnA=s0\" alt=\"Also Visit the Grand Hotel in Salem\" width=\"295\" \/><\/a><\/p>\n<\/div>\n<\/div>","featuredImage":"https:\/\/lh3.googleusercontent.com\/nYlJVS_KLvGfVyVd4wKkk3YSgEMgkgkIWSdTe_gf1opVitpAyDCzG8TvBYoPO2CP1SOmfj5gybn8STatMMJ3daCEUJSmOXQnCjbnQA=s0","h1":"Groups & Events","h2":"","headerImage":"https:\/\/lh3.googleusercontent.com\/ipjDYwYgZK3XOaC7Jdt9q09sLychWIrLK-SWZ_G6J_KgLfZwcOJ4uhIZmIOqiWmfBGW6d_8IT8gO-sCC86kVjAYlyZ1CAafiPxqkYw=s0","icon":"people","isActive":1,"menuName":"Meetings","metaDescription":"Host your next Meeting or Special Event at The Grand Hotel in Bridgeport serving Tigard, Tualatin!","pageTitle":"Tigard Meeting Facilities | Tualatin Meeting Rooms | The Grand Hotel in Bridgeport | SW Portland Hotel","state":"meetings","url":"meetings","RFPID":"0001-0000002a-5b15b2aa-058f-1f7d58e2","heroVideo":"0","parent":"0","isMenuItem":1,"isFooterMenuItem":1,"type":"core","ordering":5},"Events":{"isActive":1,"url":"events","state":"events","icon":"deals","pageTitle":"Upcoming Events Near The Grand Hotel at Bridgeport","headerImage":"","bodyContent":"","menuName":"Events","metaDescription":"Enjoy Events in the Portland area near The Grand Hotel at Bridgeport.","h1":"Upcoming Events Near The Grand Hotel at Bridgeport","parent":"nearby","isMenuItem":1,"isFooterMenuItem":1,"type":"core","ordering":7},"Location":{"bodyContent":"<div class=\"su-column su-column-size-1-2\">\n<div class=\"su-column-inner su-clearfix\">\n<h2>Grand Hotel at Bridgeport<\/h2>\n<p>The Grand Hotel at Bridgeport is located across the street from the Bridgeport Village Shopping Center, near SW Portland.<br \/>7265 SW Hazel Fern Rd.<br \/>Tigard, OR 97224<\/p>\n<p><strong>Phone:<\/strong> <a href=\"tel:15039685757\">(503) 968-5757<\/a><br \/><strong>Reservations:<\/strong> <a href=\"tel:18669685757\">(866) 968-5757<\/a><\/p>\n<p><a href=\"mailto:reservations@grandhotelbridgeport.com\" target=\"_blank\" rel=\"noopener noreferrer\">Email Us<\/a><\/p>\n<\/div>\n<\/div>\n<div class=\"su-column su-column-size-1-2\">\n<div class=\"su-column-inner su-clearfix\">\n<h3>Driving Directions<\/h3>\n<p><strong>From the North:<\/strong><br \/>Interstate 5 south to exit 290. Turn right onto Lower Boones Ferry Road (which turns into Bridgeport Rd). Drive straight through intersection of Lower Boones Ferry Road and SW 72nd Avenue. Turn left. Drive the short distance around curve until you see the hotels entrance on the right.<\/p>\n<p><strong>From the South:<\/strong><br \/>Interstate 5 north to exit 290. Turn left onto Lower Boones Ferry Road. Drive straight through intersection of Lower Boones Ferry Road (which turns into Bridgeport Rd.) and SW 72nd Avenue. Turn left . Drive short distance around curve until you see the hotels entrance on the right.<\/p>\n<p><strong>Free Parking:<\/strong><br \/>Please use our 3 level covered parking garage on the right of the hotel.<\/p>\n<\/div>\n<\/div>\n<p>\u00a0<\/p>\n<p><strong>Also visit our other location in the heart of downtown Salem:<\/strong><br \/>The Grand Hotel in Salem<br \/>201 Liberty St. SE<br \/>Salem, OR 97301<br \/><a href=\"tel:18775407800\">1-877-540-7800<\/a><br \/><a href=\"http:\/\/www.grandhotelsalem.com\/\" target=\"_blank\" rel=\"noopener noreferrer\">www.grandhotelsalem.com<\/a><\/p>","icon":"location","pageTitle":"Tigard, Tualatin, Lake Oswego, SW Portland, Bridgeport Village | The Grand Hotel in Bridgeport | SW Portland Hotel","state":"location","isActive":1,"url":"location","menuName":"Location","h1":"About the Grand Hotel","metaDescription":"Located within walking distance of the Bridgeport Village Shopping District, The Grand Hotel at Bridgeport is Portland\u2019s Newest Luxury Hotel.","h2":"","headerImage":"https:\/\/lh3.googleusercontent.com\/5o3ExVAk9oGDfFNkg83QJSbYH71rkxIuz_JzSQwn2hcMkihRqd-I0fA9pfNuiFA0yMoTcIPKAMaqKerL-ck_HAUXFOz4YI_IaKSYeVcCCJCb1ZH9Aw=s0","featuredImage":"https:\/\/lh3.googleusercontent.com\/R_YdqSR5teXofhaTA56k7gl-8BFg4r-4k6fm726KbdWS5Vflotw4Z6y0lg77P4SJrGMP4SQ4CngeDL-sJjxhpoDlOaMB8CGejMjXVC-vOlZ1j8dMsg=s0","featuredImageURL":"\/offers","heroVideo":"0","type":"core","ordering":8,"parent":"0","isMenuItem":1,"isFooterMenuItem":1,"headerImagePositionY":"85%"},"Dining":{"altState":"dining","altLogo":"","bodyContent":"","headerImage":"","featuredImage":"","icon":"dining","isActive":0,"menuName":"Dining","pageTitle":"","metaTitle":"","metaDescription":"","h1":"","h2":"","template":"","state":"dining","url":"dining","featuredImageURL":"","headerImagePositionY":"","type":"core","ordering":13},"Reviews":{"bodyContent":"<br \/>At Grand Hotel at Bridgeport in Tigard, Oregon, we believe exceptional stays begin with genuine hospitality. From our first-class service to thoughtful amenities like a complimentary hot breakfast buffet, covered parking, and high-speed WiFi, every detail is designed with your comfort in mind. But don&rsquo;t just take our word for it &mdash; hear directly from the guests who have experienced it.<br \/><br \/>\n<p><strong><\/strong><strong>\"Excellent\"<\/strong><br \/><br \/>We were very impressed with the hotel itself, but even more so by the staff. Every staff member we dealt with was courteous, professional and helpful. They went above and beyond to assist us with finding a local auto glass repair shop that could replace a window that was smashed when our car was broken into while we were in Portland near Washington Park. We were able to get the window replaced on a Sunday! Thanks Dr. Glassman. Breakfast was excellent.<\/p>\n<cite><cite>Kathleen - May 19, 2025 <br \/><br \/><\/cite><\/cite>\n<p><strong><\/strong><strong>\"Excellent\"<\/strong><br \/><br \/>The Grand had all the right stuff . Clean room with very comfortable beds. Outstanding staff who were all extraordinarily attentive. Excellent pool that could be a touch warmer. But best of all is the morning BREAKFAST. It looked like a normal hotel buffet line but the selection and Quality was amazing . This isn&rsquo;t heat and serve stuff - they make it all right there, much of it made from scratch. 10 stars for Breakfast<\/p>\n<p><cite><cite>Ray - Jan 24, 2025<br \/><\/cite><\/cite><\/p>\n<p><cite><cite><\/cite><\/cite><\/p>\n<h2><\/h2>","headerImage":"https:\/\/lh3.googleusercontent.com\/5o3ExVAk9oGDfFNkg83QJSbYH71rkxIuz_JzSQwn2hcMkihRqd-I0fA9pfNuiFA0yMoTcIPKAMaqKerL-ck_HAUXFOz4YI_IaKSYeVcCCJCb1ZH9Aw=s0","isActive":0,"url":"reviews","state":"reviews","icon":"star","pageTitle":"Guest Reviews | The Grand Hotel at Bridgeport","menuName":"Reviews","h1":"Guest Reviews","h2":"See Why Guests Love Staying With Us","metaDescription":"We invite you to explore our reviews that share real stories from travelers who appreciate our welcoming team, convenient location, clean and spacious accommodations, and the little extras that make a big difference. At Grand Hotel at Bridgeport in Tigard, Oregon, we believe exceptional stays begin with genuine hospitality.","type":"core","ordering":12,"parent":"0","isMenuItem":0,"isFooterMenuItem":0,"headerImagePositionY":"90%"},"Stories":{"bodyContent":"","headerImage":"","icon":"stories","pageTitle":"Stories from The Grand Hotel at Bridgeport","state":"stories","isActive":0,"url":"stories","menuName":"Stories","metaDescription":"Read the latest stories, events, things to do, and news from The Grand Hotel at Bridgeport in Tigard, OR.","featuredImage":null,"h1":"Stories from The Grand Hotel at Bridgeport","h2":"","headerImagePositionY":"","heroVideo":"0","type":"core","ordering":9,"parent":"0","isMenuItem":0,"isFooterMenuItem":0},"Contact":{"isActive":1,"url":"contact","state":"contact","icon":"phone","pageTitle":"Contact The Grand Hotel in Bridgeport near Tigard, Tualatin, SW Portland | The Grand Hotel in Bridgeport | SW Portland Hotel","headerImage":"https:\/\/lh3.googleusercontent.com\/REeoM3jjdAHrpLu_zL5su5v4X1Ku06xNbGUhndlTnorDFq_v93nEVvIRDzQxSgX5fLU5XKX-wy9Gf9rUBZcQQd1rgY7mDCb8NksITT1yh5PtP1Wy7ys=s0","bodyContent":"<p>The Grand Hotel at Bridgeport is proud to be a part of the Bridgeport Village community!<\/p>\n<p><span style=\"font-weight: 400;\">We are excited to be SW Portland&rsquo;s Upscale Hotel and look forward to serving the Portland, Tigard, Tualatin, and Lake Oswego communities.<\/span><\/p>\n<p>Please feel free to email us at&nbsp;<a href=\"mailto:reservations@grandhotelbridgeport.com\">reservations@grandhotelbridgeport.com.<\/a><\/p>\n<p>For inquiries about meeting or events space, group blocks or negotiated corporate rates please email us at <a href=\"mailto:molly.lechner@grandhotelbridgeport.com\">molly.lechner@grandhotelbridgeport.com.<\/a><\/p>\n<p>You can also reach us by phone <br \/><strong>(503) 968-5757<\/strong> or toll-free at&nbsp;<strong>(866) 968-5757.<\/strong><\/p>\n<p><em><br \/><strong>We look forward to hearing from you!<\/strong><\/em><\/p>\n<p>&nbsp;<\/p>\n<p>Bill Sheldon<br \/>General Manager<\/p>","menuName":"Contact","featuredImage":null,"metaDescription":"We are actively working with companies and individuals preparing to become a part of the Bridgeport Village community, and we would love to hear from you. Contact The Grand Hotel in Bridgeport near Tigard, Tualatin in OR.","h1":"Contact Us","h2":"","headerImagePositionY":"60%","heroVideo":"0","type":"core","ordering":10,"parent":"0","isMenuItem":1,"isFooterMenuItem":1}}};window.LANDING_PAGES=[{"lid":568,"id":"0004-0000002a-5b155f8f-84fb-011d35dd","siteId":"88haoa2-fkfa2alf2-ao8ofja1f-g3nln1rt","parent":"meetings","slug":"bridgeport-room","template":"","templateUrl":"","ordering":1568,"title":"Bridgeport Room","pageTitle":"Tigard Meeting Space | Tualatin Meeting Space | Grand Hotel in Bridgeport (74 characters) description  | SW Portland Meeting Rooms","metaDescription":"The Bridgeport Room offers 1,750 square feet of flexible meeting space, perfect for your next special event.","preheader":null,"h1":"Bridgeport Room","h2":"","tertiaryBodyContent":null,"altState":"","altLogo":"","isMenuItem":1,"headerPhone":"","isFooterMenuItem":0,"hideBookingBarNumber":0,"isActive":1,"noIndex":0,"hasGallery":0,"requiresLogin":0,"requiresPassword":0,"galleries":"","hasRFP":true,"RFPID":"0001-0000002a-5b15b2aa-058f-1f7d58e2","RFPPosition":"","hideHeader":0,"headerImage":"https:\/\/lh3.googleusercontent.com\/ipjDYwYgZK3XOaC7Jdt9q09sLychWIrLK-SWZ_G6J_KgLfZwcOJ4uhIZmIOqiWmfBGW6d_8IT8gO-sCC86kVjAYlyZ1CAafiPxqkYw=s0","headerImageURL":"","headerImagePositionY":"","headerImageAlt":"","mobileHeaderImage":"","heroVideo":0,"heroVideoUrl":null,"xsHeroVideoUrl":null,"featuredImage":"https:\/\/lh3.googleusercontent.com\/lvOWeyRPSZqtax5_tjfz-RHUSaBD8_RbbRoZ8fgvZLvKl2bbC8WfQzMxufvbTvT3UEBOd_cvVuCTKZqtasEMjoLoMVHr3lfhkcIjcQ_5A43XBA3iQgc=s0","featuredImageURL":"","featuredImageCaption":"","featuredImagePosition":"","featuredPropertiesCtaText":null,"featuredPropertiesCtaUrl":null,"socialImage":"","socialText":"","socialDescriptionFacebook":null,"socialDescriptionTwitter":null,"socialTagsTwitter":null,"hasFixedWidthHero":0,"hasFullWidthContent":0,"hasFullWidthSecondaryContent":0,"thankYouPage":"","formSubmitEvent":"","campaignName":"","controller":"","sectionOrdering":"body_content,destinations,offer_categories,properties,secondary_body_content","propertyId":"","promoCode":"","productId":"","gaEvent":"","modified":"2026-03-20 21:42:30"},{"lid":569,"id":"0004-0000002a-5b156046-cc00-9a5affaa","siteId":"88haoa2-fkfa2alf2-ao8ofja1f-g3nln1rt","parent":"meetings","slug":"breakfast-room","template":"","templateUrl":"","ordering":1569,"title":"Breakfast Room","pageTitle":"Tigard Meeting Rooms | Tualatin Meeting Rooms | Grand Hotel in Bridgeport | SW Portland Meeting Rooms","metaDescription":"Available in the afternoon and evening, our Breakfast Room is perfect for casual luncheons, dinners and social events in and around Tigard or Tualatin. It is a little known secret that The Grand Hotel at Bridgeport is one of the best options for corporate group meetings and events in our area.","preheader":null,"h1":"Breakfast Room","h2":"","tertiaryBodyContent":null,"altState":"","altLogo":"","isMenuItem":1,"headerPhone":"","isFooterMenuItem":0,"hideBookingBarNumber":0,"isActive":1,"noIndex":0,"hasGallery":0,"requiresLogin":0,"requiresPassword":0,"galleries":"","hasRFP":true,"RFPID":"0001-0000002a-5b15b2aa-058f-1f7d58e2","RFPPosition":"","hideHeader":0,"headerImage":"https:\/\/lh3.googleusercontent.com\/ez_rlFz9SAJr4sghfHTVy9SE4PTB4v0ekV7kXrUdcWogdR60nH4T3oh5NN-iyFw1AFVQXV7gTKYq3reIbwzNdhTk1SlaAgcLy8jX3deXl_HnQA-48-VX=s0","headerImageURL":"","headerImagePositionY":"60%","headerImageAlt":"","mobileHeaderImage":"","heroVideo":0,"heroVideoUrl":null,"xsHeroVideoUrl":null,"featuredImage":"https:\/\/lh3.googleusercontent.com\/PalPNSv8uNutHD_IAmeaHkX63J3r3bhya2qJVVHl6eGVOGrLgOyNOPm4BZc4jZOeJ5zsjAB5BT52huHP59HmZ3-8VsiAP-Am_ccr5woCvNQuyCg7Qzw=s0","featuredImageURL":"","featuredImageCaption":"","featuredImagePosition":"","featuredPropertiesCtaText":null,"featuredPropertiesCtaUrl":null,"socialImage":"","socialText":"","socialDescriptionFacebook":null,"socialDescriptionTwitter":null,"socialTagsTwitter":null,"hasFixedWidthHero":0,"hasFullWidthContent":0,"hasFullWidthSecondaryContent":0,"thankYouPage":"","formSubmitEvent":"","campaignName":"","controller":"","sectionOrdering":"body_content,destinations,offer_categories,properties,secondary_body_content","propertyId":"","promoCode":"","productId":"","gaEvent":"","modified":"2026-02-11 06:03:10"},{"lid":570,"id":"0004-0000002a-5b1560cc-e73b-49aed0e0","siteId":"88haoa2-fkfa2alf2-ao8ofja1f-g3nln1rt","parent":"meetings","slug":"board-room","template":"","templateUrl":"","ordering":1570,"title":"Board Room","pageTitle":"Tigard Board Meeting Space | Tualatin Workshop Space | The Grand Hotel in Bridgeport | SW Portland Meeting Rooms","metaDescription":"At 415 square feet, our Executive Board Room is ideal for board meetings, breakout sessions and workshops.","preheader":null,"h1":"Board Room","h2":"","tertiaryBodyContent":null,"altState":"","altLogo":"","isMenuItem":1,"headerPhone":"","isFooterMenuItem":0,"hideBookingBarNumber":0,"isActive":1,"noIndex":0,"hasGallery":0,"requiresLogin":0,"requiresPassword":0,"galleries":"","hasRFP":true,"RFPID":"0001-0000002a-5b15b2aa-058f-1f7d58e2","RFPPosition":"","hideHeader":0,"headerImage":"https:\/\/lh3.googleusercontent.com\/CgwbZduaLY3wKncDeLSnItHqW7ghsDTmtoLVlFEBzrrP0L2ihqBZRzyp30PwDVKyZRc595znSKaCp7cSpEiNRLEEQyTtQLOSYgm8tg=s0","headerImageURL":"","headerImagePositionY":"","headerImageAlt":"","mobileHeaderImage":"","heroVideo":0,"heroVideoUrl":null,"xsHeroVideoUrl":null,"featuredImage":"https:\/\/lh3.googleusercontent.com\/btxObQ-1Y_SQB2wWGdMUKMxBwyPdtZEQRglWM3WFQtd2wa4KjTkBcHwqqJS4kcEdhb9rlLcxBG0X29VQTky5UcPqno-2mQJ9pAvaKYWNZGMzmdzKRjEb=s0","featuredImageURL":"","featuredImageCaption":"","featuredImagePosition":"","featuredPropertiesCtaText":null,"featuredPropertiesCtaUrl":null,"socialImage":"","socialText":"","socialDescriptionFacebook":null,"socialDescriptionTwitter":null,"socialTagsTwitter":null,"hasFixedWidthHero":0,"hasFullWidthContent":0,"hasFullWidthSecondaryContent":0,"thankYouPage":"","formSubmitEvent":"","campaignName":"","controller":"","sectionOrdering":"body_content,destinations,offer_categories,properties,secondary_body_content","propertyId":"","promoCode":"","productId":"","gaEvent":"","modified":"2026-02-11 06:03:10"},{"lid":572,"id":"0004-0000002a-5b156269-6fce-a5543e6f","siteId":"88haoa2-fkfa2alf2-ao8ofja1f-g3nln1rt","parent":"meetings","slug":"audio-visual","template":"","templateUrl":"","ordering":1572,"title":"Audio Visual","pageTitle":"Meeting Space in Tigard | Classroom Space | Workshop Space | The Grand Hotel in Bridgeport | SW Portland Meeting Rooms","metaDescription":"The Grand Hotel can provide LCD Projectors Screens, Plasma Television, Wireless Microphones, House Sound, and DVD\/VCR Players for your meetings and events.","preheader":null,"h1":"Audio Visual","h2":"","tertiaryBodyContent":null,"altState":"","altLogo":"","isMenuItem":1,"headerPhone":"","isFooterMenuItem":0,"hideBookingBarNumber":0,"isActive":1,"noIndex":0,"hasGallery":0,"requiresLogin":0,"requiresPassword":0,"galleries":"","hasRFP":true,"RFPID":"0001-0000002a-5b15b2aa-058f-1f7d58e2","RFPPosition":"","hideHeader":0,"headerImage":"https:\/\/lh3.googleusercontent.com\/btxObQ-1Y_SQB2wWGdMUKMxBwyPdtZEQRglWM3WFQtd2wa4KjTkBcHwqqJS4kcEdhb9rlLcxBG0X29VQTky5UcPqno-2mQJ9pAvaKYWNZGMzmdzKRjEb=s0","headerImageURL":"","headerImagePositionY":"40%","headerImageAlt":"","mobileHeaderImage":"","heroVideo":0,"heroVideoUrl":null,"xsHeroVideoUrl":null,"featuredImage":"https:\/\/lh3.googleusercontent.com\/WC9nWRxlRgt_nT6EKqUE_pJkKWszvWQDU50U0JSuM4PzxlycYnEFH1oiPcvLLwpPeJR7FB0W7CON3amkCVb6LVSepWStbDH7CNvsnKg2KUbS2FI_f14=s0","featuredImageURL":"","featuredImageCaption":"","featuredImagePosition":"","featuredPropertiesCtaText":null,"featuredPropertiesCtaUrl":null,"socialImage":"","socialText":"","socialDescriptionFacebook":null,"socialDescriptionTwitter":null,"socialTagsTwitter":null,"hasFixedWidthHero":0,"hasFullWidthContent":0,"hasFullWidthSecondaryContent":0,"thankYouPage":"","formSubmitEvent":"","campaignName":"","controller":"","sectionOrdering":"body_content,destinations,offer_categories,properties,secondary_body_content","propertyId":"","promoCode":"","productId":"","gaEvent":"","modified":"2026-02-11 06:03:10"},{"lid":573,"id":"0004-0000002a-5b157a25-e92c-498ea944","siteId":"88haoa2-fkfa2alf2-ao8ofja1f-g3nln1rt","parent":"location","slug":"bridgeport-neighborhood","template":"","templateUrl":"","ordering":1573,"title":"Bridgeport Village Neighborhood","pageTitle":"Hotel near Bridgeport Village Shopping Center | The Grand Hotel in Bridgeport","metaDescription":"Bridgeport Village is the Pacific Northwest's preeminent fashion and lifestyle shopping center.","preheader":null,"h1":"Bridgeport Village Neighborhood","h2":"","tertiaryBodyContent":null,"altState":"","altLogo":"","isMenuItem":1,"headerPhone":"","isFooterMenuItem":1,"hideBookingBarNumber":0,"isActive":1,"noIndex":0,"hasGallery":0,"requiresLogin":0,"requiresPassword":0,"galleries":"","hasRFP":false,"RFPID":"","RFPPosition":"","hideHeader":0,"headerImage":"https:\/\/lh3.googleusercontent.com\/nUnlHuM2ShLZWh2uJMRdPYow6bhUXFrRwnrfBvps1L21tr1lDF2aCUsE0p2M9ly6-Oi5qvZL6A6Sq1-pZNxoCO1i6eO0_tXPS24uoTssk4-VciITfFiT=s0","headerImageURL":"","headerImagePositionY":"","headerImageAlt":"","mobileHeaderImage":"","heroVideo":0,"heroVideoUrl":null,"xsHeroVideoUrl":null,"featuredImage":"","featuredImageURL":"","featuredImageCaption":"","featuredImagePosition":"","featuredPropertiesCtaText":null,"featuredPropertiesCtaUrl":null,"socialImage":"","socialText":"","socialDescriptionFacebook":null,"socialDescriptionTwitter":null,"socialTagsTwitter":null,"hasFixedWidthHero":0,"hasFullWidthContent":0,"hasFullWidthSecondaryContent":0,"thankYouPage":"","formSubmitEvent":"","campaignName":"","controller":"","sectionOrdering":"body_content,destinations,offer_categories,properties,secondary_body_content","propertyId":"","promoCode":"","productId":"","gaEvent":"","modified":"2026-02-11 06:03:10"},{"lid":574,"id":"0004-0000002a-5b157aac-46af-c9e08551","siteId":"88haoa2-fkfa2alf2-ao8ofja1f-g3nln1rt","parent":"contact","slug":"employment","template":"","templateUrl":"","ordering":1574,"title":"Employment","pageTitle":"Jobs in Tigard Oregon | The Grand Hotel in Bridgeport","metaDescription":"At the Grand Hotel at Bridgeport we believe that excellent guest service is an art. As a company our goal is to offer each guest the highest quality guest service and overall hotel experience.","preheader":null,"h1":"Employment","h2":"","tertiaryBodyContent":null,"altState":"","altLogo":"","isMenuItem":1,"headerPhone":"","isFooterMenuItem":1,"hideBookingBarNumber":0,"isActive":1,"noIndex":0,"hasGallery":0,"requiresLogin":0,"requiresPassword":0,"galleries":"","hasRFP":false,"RFPID":"","RFPPosition":"","hideHeader":0,"headerImage":"https:\/\/lh3.googleusercontent.com\/WOldboYrgIz5vOoklAA2hPdkfAryIFyYfGC-onWpDQUEFk-u8Zz8cQ3jmqYSohZn6DER5wKAZFdODrGapvsA4zz6Uiw2Bj2c3eoIf40=s0","headerImageURL":"","headerImagePositionY":"","headerImageAlt":"","mobileHeaderImage":"","heroVideo":0,"heroVideoUrl":null,"xsHeroVideoUrl":null,"featuredImage":"","featuredImageURL":"","featuredImageCaption":"","featuredImagePosition":"","featuredPropertiesCtaText":null,"featuredPropertiesCtaUrl":null,"socialImage":"","socialText":"","socialDescriptionFacebook":null,"socialDescriptionTwitter":null,"socialTagsTwitter":null,"hasFixedWidthHero":0,"hasFullWidthContent":0,"hasFullWidthSecondaryContent":0,"thankYouPage":"","formSubmitEvent":"","campaignName":"","controller":"","sectionOrdering":"body_content,destinations,offer_categories,properties,secondary_body_content","propertyId":"","promoCode":"","productId":"","gaEvent":"","modified":"2026-02-11 06:03:10"},{"lid":575,"id":"0004-0000002a-5b157c7f-a4c5-b44a5b45","siteId":"88haoa2-fkfa2alf2-ao8ofja1f-g3nln1rt","parent":"contact","slug":"employment\/night-auditor-part-time","template":"","templateUrl":"","ordering":1575,"title":"Night Auditor \u2013 Relief","pageTitle":"Night Auditor - Relief (30 hours) | The Grand Hotel in Bridgeport","metaDescription":"This is a part time position offering 30 hours per week, and possibly more. Our new upscale hotel is located in the prestigious Bridgeport shopping district. We are looking for an individual to assist our guests efficiently, courteously and professionally","preheader":null,"h1":"Night Auditor \u2013 Relief","h2":"","tertiaryBodyContent":null,"altState":"","altLogo":"","isMenuItem":0,"headerPhone":"","isFooterMenuItem":0,"hideBookingBarNumber":0,"isActive":1,"noIndex":0,"hasGallery":0,"requiresLogin":0,"requiresPassword":0,"galleries":"","hasRFP":false,"RFPID":"","RFPPosition":"","hideHeader":0,"headerImage":"","headerImageURL":"","headerImagePositionY":"","headerImageAlt":"","mobileHeaderImage":"","heroVideo":0,"heroVideoUrl":null,"xsHeroVideoUrl":null,"featuredImage":"","featuredImageURL":"","featuredImageCaption":"","featuredImagePosition":"","featuredPropertiesCtaText":null,"featuredPropertiesCtaUrl":null,"socialImage":"","socialText":"","socialDescriptionFacebook":null,"socialDescriptionTwitter":null,"socialTagsTwitter":null,"hasFixedWidthHero":0,"hasFullWidthContent":0,"hasFullWidthSecondaryContent":0,"thankYouPage":"","formSubmitEvent":"","campaignName":"","controller":"","sectionOrdering":"body_content,destinations,offer_categories,properties,secondary_body_content","propertyId":"","promoCode":"","productId":"","gaEvent":"","modified":"2026-02-11 06:03:10"},{"lid":576,"id":"0004-0000002a-5b157d0a-c2d7-3c487309","siteId":"88haoa2-fkfa2alf2-ao8ofja1f-g3nln1rt","parent":"contact","slug":"employment\/front-desk-associate","template":"","templateUrl":"","ordering":1576,"title":"Front Desk Associate","pageTitle":"Front Desk Associate | The Grand Hotel in Bridgeport","metaDescription":"We're looking for cheerful people to join our team at the Front Desk of The Grand Hotel. Qualified applicants will enjoy working with people, take pride in their jobs and have a flexible schedule. The successful applicant will be available and willing to ","preheader":null,"h1":"Front Desk Associate","h2":"","tertiaryBodyContent":null,"altState":"","altLogo":"","isMenuItem":0,"headerPhone":"","isFooterMenuItem":0,"hideBookingBarNumber":0,"isActive":1,"noIndex":0,"hasGallery":0,"requiresLogin":0,"requiresPassword":0,"galleries":"","hasRFP":false,"RFPID":"","RFPPosition":"","hideHeader":0,"headerImage":"","headerImageURL":"","headerImagePositionY":"","headerImageAlt":"","mobileHeaderImage":"","heroVideo":0,"heroVideoUrl":null,"xsHeroVideoUrl":null,"featuredImage":"","featuredImageURL":"","featuredImageCaption":"","featuredImagePosition":"","featuredPropertiesCtaText":null,"featuredPropertiesCtaUrl":null,"socialImage":"","socialText":"","socialDescriptionFacebook":null,"socialDescriptionTwitter":null,"socialTagsTwitter":null,"hasFixedWidthHero":0,"hasFullWidthContent":0,"hasFullWidthSecondaryContent":0,"thankYouPage":"","formSubmitEvent":"","campaignName":"","controller":"","sectionOrdering":"body_content,destinations,offer_categories,properties,secondary_body_content","propertyId":"","promoCode":"","productId":"","gaEvent":"","modified":"2026-02-11 06:03:10"},{"lid":577,"id":"0004-0000002a-5b15819e-8509-3cb01240","siteId":"88haoa2-fkfa2alf2-ao8ofja1f-g3nln1rt","parent":"contact","slug":"employment\/housekeeping-room-attendant","template":"","templateUrl":"","ordering":1577,"title":"Housekeeping Room Attendant","pageTitle":"Housekeeping Room Attendant | The Grand Hotel in Bridgeport","metaDescription":"Grand Hotel in Bridgeport is seeking a Housekeeping Room Attendants to take pride in the cleanliness and overall appearance of hotel guest rooms.","preheader":null,"h1":"Now Hiring \u2013 Housekeeping Room Attendant","h2":"","tertiaryBodyContent":null,"altState":"","altLogo":"","isMenuItem":0,"headerPhone":"","isFooterMenuItem":0,"hideBookingBarNumber":0,"isActive":1,"noIndex":0,"hasGallery":0,"requiresLogin":0,"requiresPassword":0,"galleries":"","hasRFP":false,"RFPID":"","RFPPosition":"","hideHeader":0,"headerImage":"","headerImageURL":"","headerImagePositionY":"","headerImageAlt":"","mobileHeaderImage":"","heroVideo":0,"heroVideoUrl":null,"xsHeroVideoUrl":null,"featuredImage":"","featuredImageURL":"","featuredImageCaption":"","featuredImagePosition":"","featuredPropertiesCtaText":null,"featuredPropertiesCtaUrl":null,"socialImage":"","socialText":"","socialDescriptionFacebook":null,"socialDescriptionTwitter":null,"socialTagsTwitter":null,"hasFixedWidthHero":0,"hasFullWidthContent":0,"hasFullWidthSecondaryContent":0,"thankYouPage":"","formSubmitEvent":"","campaignName":"","controller":"","sectionOrdering":"body_content,destinations,offer_categories,properties,secondary_body_content","propertyId":"","promoCode":"","productId":"","gaEvent":"","modified":"2026-02-11 06:03:10"},{"lid":578,"id":"0004-62b9f080-5b15cbdc-2c26-c89dc823","siteId":"88haoa2-fkfa2alf2-ao8ofja1f-g3nln1rt","parent":"contact","slug":"privacy-statement","template":"","templateUrl":"","ordering":1578,"title":"Privacy Statement","pageTitle":"Privacy Statement | The Grand Hotel in Bridgeport","metaDescription":"WEBSITE PRIVACY POLICY EFFECTIVE DATE: July 20121. INTRODUCTION1.1. PURPOSE OF POLICY. VIP's Hotels, Inc. and its affiliates (\u201cus,\u201d \u201cwe,\u201d or \u201cCompany\u201d) is committed to respecting the privacy rights of its customers, visitors, and other users of the Company Website (the \u201cSite\u201d). We created this Websi","preheader":null,"h1":"Privacy Statement","h2":"","tertiaryBodyContent":null,"altState":"","altLogo":"","isMenuItem":0,"headerPhone":"","isFooterMenuItem":0,"hideBookingBarNumber":0,"isActive":1,"noIndex":0,"hasGallery":0,"requiresLogin":0,"requiresPassword":0,"galleries":"","hasRFP":false,"RFPID":"","RFPPosition":"","hideHeader":0,"headerImage":"","headerImageURL":"","headerImagePositionY":"","headerImageAlt":"","mobileHeaderImage":"","heroVideo":0,"heroVideoUrl":null,"xsHeroVideoUrl":null,"featuredImage":"","featuredImageURL":"","featuredImageCaption":"","featuredImagePosition":"","featuredPropertiesCtaText":null,"featuredPropertiesCtaUrl":null,"socialImage":"","socialText":"","socialDescriptionFacebook":null,"socialDescriptionTwitter":null,"socialTagsTwitter":null,"hasFixedWidthHero":0,"hasFullWidthContent":0,"hasFullWidthSecondaryContent":0,"thankYouPage":"","formSubmitEvent":"","campaignName":"","controller":"","sectionOrdering":"body_content,destinations,offer_categories,properties,secondary_body_content","propertyId":"","promoCode":"","productId":"","gaEvent":"","modified":"2026-02-11 06:03:10"},{"lid":1318,"id":"0004-18055cf9-5cb8f376-e9a3-cf648816","siteId":"88haoa2-fkfa2alf2-ao8ofja1f-g3nln1rt","parent":"contact","slug":"accessibility","template":null,"templateUrl":null,"ordering":2318,"title":"ADA Policy","pageTitle":"Website Accessibility | The Grand Hotel at Bridgeport","metaDescription":"Website accessibility information for The Grand Hotel at Bridgeport","preheader":null,"h1":"Website Accessibility","h2":"Website accessibility information for https:\/\/www.grandhotelbridgeport.com\/","tertiaryBodyContent":null,"altState":"","altLogo":"","isMenuItem":0,"headerPhone":"","isFooterMenuItem":1,"hideBookingBarNumber":0,"isActive":1,"noIndex":0,"hasGallery":0,"requiresLogin":0,"requiresPassword":0,"galleries":"","hasRFP":false,"RFPID":"","RFPPosition":"","hideHeader":0,"headerImage":"https:\/\/lh3.googleusercontent.com\/DPSVoApuochRCnFPHwuNFdtkO6-DJXFD4_Pz4mKoZ4NkbEXcDbcbzLmtF_AOMSIkhp9aAZeKUg29riVDXbIOMPaabZDp7kJeLQCA=s0","headerImageURL":"","headerImagePositionY":"63%","headerImageAlt":"","mobileHeaderImage":"","heroVideo":0,"heroVideoUrl":null,"xsHeroVideoUrl":null,"featuredImage":"","featuredImageURL":"","featuredImageCaption":null,"featuredImagePosition":"","featuredPropertiesCtaText":null,"featuredPropertiesCtaUrl":null,"socialImage":"","socialText":"","socialDescriptionFacebook":null,"socialDescriptionTwitter":null,"socialTagsTwitter":null,"hasFixedWidthHero":0,"hasFullWidthContent":0,"hasFullWidthSecondaryContent":0,"thankYouPage":null,"formSubmitEvent":null,"campaignName":null,"controller":null,"sectionOrdering":"body_content,destinations,offer_categories,properties,secondary_body_content","propertyId":null,"promoCode":"","productId":null,"gaEvent":"","modified":"2026-02-11 06:03:10"},{"lid":2323,"id":"0004-68819abb-5ed93937-c73f-41194e65","siteId":"88haoa2-fkfa2alf2-ao8ofja1f-g3nln1rt","parent":"0","slug":"to-our-valued-guest","template":"","templateUrl":"","ordering":11,"title":"Enhanced Service and Cleanliness Measures","pageTitle":"Enhanced Service and Cleanliness Measures by The Grand Hotel at Bridgeport","metaDescription":"On behalf of the entire team at The Grand Hotel, thank you for your patience, loyalty, and support. The past few months have been unlike anything we could imagine. While our doors were closed, we developed a long-term strategy, which includes enhanced service and cleanliness measures, for the increased safety and well-being of our guests and employees.","preheader":null,"h1":"To our Valued Guests at The Grand Hotel at Bridgeport:","h2":"","tertiaryBodyContent":null,"altState":"","altLogo":"","isMenuItem":0,"headerPhone":"","isFooterMenuItem":0,"hideBookingBarNumber":0,"isActive":1,"noIndex":1,"hasGallery":0,"requiresLogin":0,"requiresPassword":0,"galleries":"","hasRFP":false,"RFPID":"","RFPPosition":"","hideHeader":0,"headerImage":"https:\/\/lh3.googleusercontent.com\/ijza4HQy4lpOucEIP4tVxLB01VEEkI1R2KzkLgU6jt7AGSaERxfAWM05gUG5rNq8kS63cutQO29hqE0adUBacxp0LqfqBuMr86--fKc=s0","headerImageURL":"","headerImagePositionY":"35%","headerImageAlt":"","mobileHeaderImage":"","heroVideo":0,"heroVideoUrl":null,"xsHeroVideoUrl":null,"featuredImage":"https:\/\/lh3.googleusercontent.com\/bVtqU0OeTFOhMx2VuLSWor8nrHgEtvLxaZuN50mQoXuz_gCKf2GeiSHOHY9DDXa79MU9o8Fp0uyvcz5Yvm6bSdgBUPSbjdgSAJzTFH8=s0","featuredImageURL":"","featuredImageCaption":"","featuredImagePosition":"","featuredPropertiesCtaText":null,"featuredPropertiesCtaUrl":null,"socialImage":"","socialText":"","socialDescriptionFacebook":null,"socialDescriptionTwitter":null,"socialTagsTwitter":null,"hasFixedWidthHero":0,"hasFullWidthContent":0,"hasFullWidthSecondaryContent":0,"thankYouPage":"","formSubmitEvent":"","campaignName":"","controller":"","sectionOrdering":"body_content,destinations,offer_categories,properties,secondary_body_content","propertyId":"","promoCode":"","productId":"","gaEvent":"","modified":"2026-02-11 06:03:10"},{"lid":2589,"id":"0004-68819aba-604676e3-7fe8-6cf8e9a3","siteId":"88haoa2-fkfa2alf2-ao8ofja1f-g3nln1rt","parent":"0","slug":"team-travel","template":null,"templateUrl":null,"ordering":6,"title":"Team Travel","pageTitle":"Team Travel | Free parking | Free Breakfast | Free Wifi | Team Rates | The Grand Hotel at Bridgeport","metaDescription":"We do Team Travel right!  From bus parking to free breakfast and wifi, team meeting space and dinners.","preheader":null,"h1":"Team Travel, Portland, Oregon","h2":"Booking Your Team With Us Is Easy!","tertiaryBodyContent":null,"altState":"","altLogo":"","isMenuItem":1,"headerPhone":null,"isFooterMenuItem":1,"hideBookingBarNumber":0,"isActive":1,"noIndex":0,"hasGallery":0,"requiresLogin":0,"requiresPassword":0,"galleries":"","hasRFP":true,"RFPID":"0001-68819aba-60466dd3-5713-d384c040","RFPPosition":"rightSidebar","hideHeader":0,"headerImage":"https:\/\/lh3.googleusercontent.com\/1GMYH7fc8ffGS7cbvA5iy4l9RiNreS8yot6P4oPdR1wbUGs7ry6s1yQ4CpAcc_XZVFoq69Fr5jH27dD7PTTQleYjg2ovtLaZKFGLbmFXpu5t1P7qPxI=s0","headerImageURL":"","headerImagePositionY":null,"headerImageAlt":"","mobileHeaderImage":"","heroVideo":0,"heroVideoUrl":null,"xsHeroVideoUrl":null,"featuredImage":"https:\/\/lh3.googleusercontent.com\/kEF4N1H6LmpK8TTeYPMbN7yzEpgha_gMZ1nfFkb-cg7yFUwHcew-K0Zkbo3J-Mu4APM5kffAgq6sIUBmVMxTNuUylO8KoszFBkYAY_A0iAKuT65kdWQK=s0","featuredImageURL":"","featuredImageCaption":null,"featuredImagePosition":"","featuredPropertiesCtaText":null,"featuredPropertiesCtaUrl":null,"socialImage":null,"socialText":null,"socialDescriptionFacebook":null,"socialDescriptionTwitter":null,"socialTagsTwitter":null,"hasFixedWidthHero":0,"hasFullWidthContent":0,"hasFullWidthSecondaryContent":0,"thankYouPage":null,"formSubmitEvent":null,"campaignName":null,"controller":null,"sectionOrdering":"body_content,destinations,offer_categories,properties,secondary_body_content","propertyId":null,"promoCode":"","productId":null,"gaEvent":"","modified":"2026-02-11 06:03:10"},{"lid":3087,"id":"0004-68819abb-63d45db1-3be2-6ea0dd3b","siteId":"88haoa2-fkfa2alf2-ao8ofja1f-g3nln1rt","parent":"contact","slug":"employment\/breakfast-room-attendant","template":"","templateUrl":"","ordering":1,"title":"Breakfast Room Attendant","pageTitle":"Breakfast Room Attendant | The Grand Hotel in Bridgeport","metaDescription":"This is a part time position offering 30 hours per week, and possibly more. Our new upscale hotel is located in the prestigious Bridgeport shopping district. We are looking for an individual to assist our guests efficiently, courteously and professionally","preheader":null,"h1":"Breakfast Room Attendant","h2":"","tertiaryBodyContent":null,"altState":"","altLogo":"","isMenuItem":0,"headerPhone":"","isFooterMenuItem":0,"hideBookingBarNumber":0,"isActive":1,"noIndex":0,"hasGallery":0,"requiresLogin":0,"requiresPassword":0,"galleries":"","hasRFP":false,"RFPID":"","RFPPosition":"","hideHeader":0,"headerImage":"","headerImageURL":"","headerImagePositionY":"","headerImageAlt":"","mobileHeaderImage":"","heroVideo":0,"heroVideoUrl":null,"xsHeroVideoUrl":null,"featuredImage":"","featuredImageURL":"","featuredImageCaption":"","featuredImagePosition":"","featuredPropertiesCtaText":null,"featuredPropertiesCtaUrl":null,"socialImage":"","socialText":"","socialDescriptionFacebook":"","socialDescriptionTwitter":"","socialTagsTwitter":"","hasFixedWidthHero":0,"hasFullWidthContent":0,"hasFullWidthSecondaryContent":0,"thankYouPage":"","formSubmitEvent":"","campaignName":"","controller":"","sectionOrdering":"body_content,destinations,offer_categories,properties,secondary_body_content","propertyId":"","promoCode":"","productId":"","gaEvent":"","modified":"2026-02-11 06:03:10"},{"lid":5217,"id":"0004-a9fe0101-67e433aa-dc3e-665a696f","siteId":"88haoa2-fkfa2alf2-ao8ofja1f-g3nln1rt","parent":"nearby","slug":"event-centers","template":null,"templateUrl":null,"ordering":1,"title":"Nearby Event Centers","pageTitle":"Event Centers Near Us","metaDescription":"A perfect location when your visit includes Wingspan or The Reser","preheader":null,"h1":"WINGSPAN AND THE RESER","h2":null,"tertiaryBodyContent":null,"altState":"","altLogo":"","isMenuItem":1,"headerPhone":null,"isFooterMenuItem":1,"hideBookingBarNumber":0,"isActive":1,"noIndex":0,"hasGallery":0,"requiresLogin":0,"requiresPassword":0,"galleries":"","hasRFP":false,"RFPID":"","RFPPosition":"","hideHeader":0,"headerImage":"https:\/\/lh3.googleusercontent.com\/fzNLJAi4XjjztmHTdlB-9UewRS1nG5QOTIH67x3HbFXqhn8uEd1ex44Q__xMq4kKJyyvYijhv3KvQJkoti5GNvjrDO7GvcQumvBJJX6nKuBkKFZzCw=s0","headerImageURL":null,"headerImagePositionY":null,"headerImageAlt":null,"mobileHeaderImage":null,"heroVideo":0,"heroVideoUrl":null,"xsHeroVideoUrl":null,"featuredImage":"","featuredImageURL":"","featuredImageCaption":null,"featuredImagePosition":"","featuredPropertiesCtaText":null,"featuredPropertiesCtaUrl":null,"socialImage":null,"socialText":null,"socialDescriptionFacebook":null,"socialDescriptionTwitter":null,"socialTagsTwitter":null,"hasFixedWidthHero":0,"hasFullWidthContent":0,"hasFullWidthSecondaryContent":0,"thankYouPage":null,"formSubmitEvent":null,"campaignName":null,"controller":null,"sectionOrdering":"body_content,destinations,offer_categories,properties,secondary_body_content","propertyId":null,"promoCode":"","productId":null,"gaEvent":"","modified":"2026-02-11 06:03:10"},{"lid":5218,"id":"0004-a9fe0101-67e43c0c-0daa-299f49e2","siteId":"88haoa2-fkfa2alf2-ao8ofja1f-g3nln1rt","parent":"0","slug":"\u30db\u30c6\u30eb\u6982\u8981","template":null,"templateUrl":null,"ordering":1,"title":"\u30db\u30c6\u30eb\u6982\u8981","pageTitle":"\u30db\u30c6\u30eb\u6982\u8981 | The Grand Hotel at Bridgeport","metaDescription":"\u30db\u30c6\u30eb\u6982\u8981. \u5f53\u30db\u30c6\u30eb\u306f\u6b74\u53f2\u7684\u306a\u8857\u4e26\u307f\u304c\u6b8b\u308b\u8857\u306e\u4e2d\u5fc3\u5730 \u306b\u4f4d\u7f6e\u3057\u3001\u6570\u5206\u306e\u3068\u3053\u308d\u306b\u30aa\u30ec\u30b4\u30f3\u5dde\u8b70\u4f1a\u8b70\u4e8b\u5802\u3084\u30a6\u30a3\u30e9\u30e1\u30c3\u30c8\u5927\u5b66\u3001\u7f8e\u8853\u9928\u306a\u3069\u304c\u3042\u308a\u3001\u514d\u7a0e\u3067\u306e\u30b7\u30e7\u30c3\u30d4\u30f3\u30b0\u3084\u9ad8\u7d1a\u30ec\u30b9\u30c8\u30e9\u30f3\u3067\u306e\u304a\u98df\u4e8b\u3001\u30a8\u30f3\u30bf\u30fc\u30c6\u30a4\u30e1\u30f3\u30c8\u306a\u3069\u3082\u304a\u697d\u3057\u307f\u3044\u305f\u3060\u3051\u307e\u3059\u3002","preheader":null,"h1":"\u30db\u30c6\u30eb\u6982\u8981 | The Grand Hotel at Bridgeport","h2":null,"tertiaryBodyContent":null,"altState":"","altLogo":"","isMenuItem":1,"headerPhone":null,"isFooterMenuItem":1,"hideBookingBarNumber":0,"isActive":1,"noIndex":0,"hasGallery":0,"requiresLogin":0,"requiresPassword":0,"galleries":"","hasRFP":false,"RFPID":"","RFPPosition":"","hideHeader":0,"headerImage":"https:\/\/lh3.googleusercontent.com\/E4S5slssbbBtXaKGzseukAYS6sHbxvHfUR7zakEuwEMWRUov34-_glJQ9iPsY1MkUW3puagvhLUf3UiX5KTywniSpe3RTwFLDUfYhg=s0","headerImageURL":null,"headerImagePositionY":null,"headerImageAlt":null,"mobileHeaderImage":null,"heroVideo":0,"heroVideoUrl":null,"xsHeroVideoUrl":null,"featuredImage":"","featuredImageURL":"","featuredImageCaption":null,"featuredImagePosition":"","featuredPropertiesCtaText":null,"featuredPropertiesCtaUrl":null,"socialImage":null,"socialText":null,"socialDescriptionFacebook":null,"socialDescriptionTwitter":null,"socialTagsTwitter":null,"hasFixedWidthHero":0,"hasFullWidthContent":0,"hasFullWidthSecondaryContent":0,"thankYouPage":null,"formSubmitEvent":null,"campaignName":null,"controller":null,"sectionOrdering":"body_content,destinations,offer_categories,properties,secondary_body_content","propertyId":null,"promoCode":"","productId":null,"gaEvent":"","modified":"2026-02-18 17:50:11"},{"lid":5227,"id":"0004-a9fe0101-6802a983-bca8-d4fbb2fc","siteId":"88haoa2-fkfa2alf2-ao8ofja1f-g3nln1rt","parent":"0","slug":"informacion-del-hotel","template":null,"templateUrl":null,"ordering":1,"title":"Informaci\u00f3n del Hotel","pageTitle":"Informaci\u00f3n del Hotel","metaDescription":"Nuestro hotel est\u00e1 ubicado en la ciudad de Tigard, a solo 15 minutos en auto del centro de Portland, Oreg\u00f3n. Estamos a poca distancia a pie del distrito comercial Bridgeport Village, donde podr\u00e1 disfrutar de tiendas exclusivas y experiencias gastron\u00f3micas elegantes.","preheader":null,"h1":"Informaci\u00f3n del Hotel","h2":null,"tertiaryBodyContent":null,"altState":"","altLogo":"","isMenuItem":0,"headerPhone":null,"isFooterMenuItem":0,"hideBookingBarNumber":0,"isActive":1,"noIndex":0,"hasGallery":0,"requiresLogin":0,"requiresPassword":0,"galleries":"","hasRFP":false,"RFPID":"","RFPPosition":"","hideHeader":0,"headerImage":"https:\/\/lh3.googleusercontent.com\/WOldboYrgIz5vOoklAA2hPdkfAryIFyYfGC-onWpDQUEFk-u8Zz8cQ3jmqYSohZn6DER5wKAZFdODrGapvsA4zz6Uiw2Bj2c3eoIf40=s0","headerImageURL":null,"headerImagePositionY":null,"headerImageAlt":null,"mobileHeaderImage":null,"heroVideo":0,"heroVideoUrl":null,"xsHeroVideoUrl":null,"featuredImage":"","featuredImageURL":"","featuredImageCaption":null,"featuredImagePosition":"","featuredPropertiesCtaText":null,"featuredPropertiesCtaUrl":null,"socialImage":null,"socialText":null,"socialDescriptionFacebook":null,"socialDescriptionTwitter":null,"socialTagsTwitter":null,"hasFixedWidthHero":0,"hasFullWidthContent":0,"hasFullWidthSecondaryContent":0,"thankYouPage":null,"formSubmitEvent":null,"campaignName":null,"controller":null,"sectionOrdering":"body_content,destinations,offer_categories,properties,secondary_body_content","propertyId":null,"promoCode":"","productId":null,"gaEvent":"","modified":"2026-02-18 17:50:26"},{"lid":5232,"id":"0004-a9fe0101-680fe4b3-3db0-80c23ae0","siteId":"88haoa2-fkfa2alf2-ao8ofja1f-g3nln1rt","parent":"0","slug":"crush-wine-tours","template":null,"templateUrl":null,"ordering":1,"title":"Crush Wine Tours, Monmouth, Oregon","pageTitle":"Crush Wine Tours","metaDescription":"Join our tours to experience the beauty of Willamette Valley's wine country with fellow wine lovers. Your Passport to Willamette Valley's Finest Wines!","preheader":null,"h1":"Crush Wine Tours","h2":null,"tertiaryBodyContent":null,"altState":"","altLogo":"","isMenuItem":1,"headerPhone":null,"isFooterMenuItem":1,"hideBookingBarNumber":0,"isActive":1,"noIndex":0,"hasGallery":0,"requiresLogin":0,"requiresPassword":0,"galleries":"","hasRFP":true,"RFPID":"0001-a9fe0101-674a128e-ae35-74ab3a7d","RFPPosition":"","hideHeader":0,"headerImage":"https:\/\/lh3.googleusercontent.com\/iukFImutfZX-UjPtYSA7tPt_1JQQCEpxXJx-snLfbimKWBUTnYUbyTIVIqGDp-RyobuvSGEg6BmqkBEQmYWO2iJvRUvIKLU09w3SjmYBn58SuiunTQ=s0","headerImageURL":null,"headerImagePositionY":null,"headerImageAlt":null,"mobileHeaderImage":null,"heroVideo":0,"heroVideoUrl":null,"xsHeroVideoUrl":null,"featuredImage":"https:\/\/lh3.googleusercontent.com\/nSq2tblK_4ALcsMIgt7xUkIrMvvOl3Csp_FrrAZ5_p2I5kjuWVz0cEBQyL9wD-VLLz2pOUr67lnjGdjlVUGvtjHiVC6FMN4y2GiRnHyKi9EUfAvIUQ=s0","featuredImageURL":"","featuredImageCaption":null,"featuredImagePosition":"","featuredPropertiesCtaText":null,"featuredPropertiesCtaUrl":null,"socialImage":null,"socialText":null,"socialDescriptionFacebook":null,"socialDescriptionTwitter":null,"socialTagsTwitter":null,"hasFixedWidthHero":0,"hasFullWidthContent":0,"hasFullWidthSecondaryContent":0,"thankYouPage":null,"formSubmitEvent":null,"campaignName":null,"controller":null,"sectionOrdering":"body_content,destinations,offer_categories,properties,secondary_body_content","propertyId":null,"promoCode":"","productId":null,"gaEvent":"","modified":"2026-02-11 06:03:10"},{"lid":5450,"id":"0004-a9fe0101-69bb2931-a789-7e3064cb","siteId":"88haoa2-fkfa2alf2-ao8ofja1f-g3nln1rt","parent":"home","slug":"group-travel","template":"","templateUrl":"","ordering":1,"title":"Group Travel","pageTitle":"Group Travel | Free parking | Free Breakfast | Free Wifi | Group Rates | The Grand Hotel at Bridgeport","metaDescription":"We love hosting groups!!  From bus parking to free breakfast and wifi, group meeting space and dinners.","preheader":null,"h1":"Group Travel, Portland, Oregon","h2":"Booking Your Group With Us Just Makes Sense!","tertiaryBodyContent":null,"altState":"","altLogo":"","isMenuItem":1,"headerPhone":"","isFooterMenuItem":1,"hideBookingBarNumber":0,"isActive":1,"noIndex":0,"hasGallery":0,"requiresLogin":0,"requiresPassword":0,"galleries":"","hasRFP":true,"RFPID":"0001-a9fe0101-69bb2567-a20b-af036776","RFPPosition":"rightSidebar","hideHeader":0,"headerImage":"https:\/\/lh3.googleusercontent.com\/-u0zHM19xocFZ4CEAvvTHx2WtV92XVhOCdqj_vQn-LGigQhMyqU0GdnsXU-0FL0d1z70Tt3v8Y7j5DKO0wSC7VbRaMrzRUW8PL4LeqoenUAeVls7lw=s0","headerImageURL":"","headerImagePositionY":"","headerImageAlt":"","mobileHeaderImage":"","heroVideo":0,"heroVideoUrl":"","xsHeroVideoUrl":"","featuredImage":"https:\/\/lh3.googleusercontent.com\/vo79_jx2DZV98UNXjSurB0KFIBZ4iPLmunjU2vfVkARmqlVNwbSEPV9QqKfyac8JGtzTiXDRv_sqp0GcS2xKfX5zWTOqciVYlVRR4IiPIgAEaW3v768=s0","featuredImageURL":"","featuredImageCaption":"","featuredImagePosition":"","featuredPropertiesCtaText":"","featuredPropertiesCtaUrl":"","socialImage":"","socialText":"","socialDescriptionFacebook":"","socialDescriptionTwitter":"","socialTagsTwitter":"","hasFixedWidthHero":0,"hasFullWidthContent":0,"hasFullWidthSecondaryContent":0,"thankYouPage":"","formSubmitEvent":"","campaignName":"","controller":"","sectionOrdering":"body_content,destinations,offer_categories,properties,secondary_body_content","propertyId":"","promoCode":"","productId":"","gaEvent":"","modified":"2026-03-18 23:39:37"},{"lid":5489,"id":"0004-a9fe0101-69c3172d-d700-692c04db","siteId":"88haoa2-fkfa2alf2-ao8ofja1f-g3nln1rt","parent":"0","slug":"reviews","template":null,"templateUrl":null,"ordering":1,"title":"Reviews","pageTitle":"Guest Reviews | The Grand Hotel at Bridgeport","metaDescription":"We invite you to explore our reviews that share real stories from travelers who appreciate our welcoming team, convenient location, clean and spacious accommodations, and the little extras that make a big difference. At","preheader":null,"h1":"Guest Reviews | The Grand Hotel at Bridgeport","h2":"See Why Guests Love Staying With Us","tertiaryBodyContent":null,"altState":"","altLogo":"","isMenuItem":1,"headerPhone":null,"isFooterMenuItem":1,"hideBookingBarNumber":0,"isActive":1,"noIndex":0,"hasGallery":0,"requiresLogin":0,"requiresPassword":0,"galleries":"","hasRFP":false,"RFPID":"","RFPPosition":"","hideHeader":0,"headerImage":"https:\/\/lh3.googleusercontent.com\/5o3ExVAk9oGDfFNkg83QJSbYH71rkxIuz_JzSQwn2hcMkihRqd-I0fA9pfNuiFA0yMoTcIPKAMaqKerL-ck_HAUXFOz4YI_IaKSYeVcCCJCb1ZH9Aw=s0","headerImageURL":null,"headerImagePositionY":null,"headerImageAlt":null,"mobileHeaderImage":null,"heroVideo":0,"heroVideoUrl":null,"xsHeroVideoUrl":null,"featuredImage":"","featuredImageURL":"","featuredImageCaption":null,"featuredImagePosition":"","featuredPropertiesCtaText":null,"featuredPropertiesCtaUrl":null,"socialImage":null,"socialText":null,"socialDescriptionFacebook":null,"socialDescriptionTwitter":null,"socialTagsTwitter":null,"hasFixedWidthHero":0,"hasFullWidthContent":0,"hasFullWidthSecondaryContent":0,"thankYouPage":null,"formSubmitEvent":null,"campaignName":null,"controller":null,"sectionOrdering":"body_content,destinations,offer_categories,properties,secondary_body_content","propertyId":null,"promoCode":"","productId":null,"gaEvent":"","modified":"2026-04-28 22:02:16"}];window.PROPERTY_DESCRIPTION="Indulge in a world-class experience at The Grand Hotel at Bridgeport, the perfect escape for your next leisure vacation, wedding retreat or group outing. Enjoy spacious, generously appointed rooms, with incredible views of Tigard, OR. Book online or call us today at 1 503-968-5757 to book your next unforgettable vacation.";window.PROPERTY_SLIDER_IMAGES=[{"href":"getting-started","icon":"overview","show":"","src":"https://lh3.googleusercontent.com/dEQmNtffKIhq1h-gaKKd6L7NBSZoKyrbC-1ltzW_EfW7hb2fH5ktQwfnyNHiw6BEiIj5N2_SumGAFX0HqrdXXfv1py6_ZqGej40OKnDiTMrrdxwkXw=s0","text":"","title":"","isActive":"1"},{"isActive":"1","seasonal":"0","url":"/amenities","title":"","src":"https://lh3.googleusercontent.com/PjvpY5L94tXadPM6gCLV7CbegJVDSQX9q-wMaC3eDS5E0-cXBEL5oDNS915YDI-IO8bccbo6o5ArRwKIaHNGpPzAxLlNfcQNLqdsqbnRaz_QFHsdu4Y=s0","text":"Free Hot Breakfast Buffet Every Morning For All Guests"},{"href":"getting-started","icon":"overview","show":"","src":"https://lh3.googleusercontent.com/TMY8Ho4L9M1ugd3xezpZWOKKNNgBfZndbu9mvEM-jv97KgvHmg_ubazVEnH-Ckf2lyU03m__u73zSbSFwjW7bfg2BUDuZdbxh_Wv86t07dpce80tCBID=s0","text":"","title":"","isActive":"1"},{"href":"getting-started","icon":"overview","show":"","src":"https://lh3.googleusercontent.com/-2ormVe6VKp2TwrlG_IIa47NHX6-7tXVD4PHK9Rpq5DXu695isoPVxQCtpvnQNHV-wVPJDpyNTWPajcBFnWIVNIf7okWuM4l6fEm-r8aDQ39TmMZ6Q=s0","text":"","title":"","isActive":"1"},{"href":"getting-started","icon":"overview","show":"","src":"https://lh3.googleusercontent.com/RaT6gb5JronfGMOZSvBIPirLTgfSU41C6jEIezRfczWk-rWk3ueXEOpB8ut-kCnAHFfWbwZVL9rGg0F0Jo0tlCnpTn5td4ckipGv86Qhme0sXC5otw=s0","text":"","title":"","isActive":"1"},{"isActive":"1","seasonal":"0","src":"https://lh3.googleusercontent.com/RzLQ3NNMEPAR1e1zjMVrF8MwAjO1lAS7JXDpArd7hYbIM6XlQumXKNZCs8Eaf3gKTIohh7cIj5SSBh5eTfKwA2JuEw2gYd6KqdbFlkDcI6lxNAZELy18=s0","text":"","title":""},{"isActive":"1","seasonal":"0","src":"https://lh3.googleusercontent.com/57ALHYRlPEODOToJVoELLRoBGTKMIizv3UcKSc9Kfjp4h6sJW10YGCU4mJviVStNJdmhYjewZuz_sRJRy__Fc4j_8CDcLsjT8EppQ6Qu7BbVVX4adw=s0","text":"","title":""}];window.APP_THEME="emerald";window.SCROLL_CONTENT=1;window.SCROLL_TOP=1;</script><script id="bdm-schema"></script>
<script>!function(a,b){var c=b.createElement("script"),d=b.getElementsByTagName("head")[0],e=a.location.pathname.replace(/^\/|\/$/g,"").length?"/"+a.location.pathname.replace(/^\/|\/$/g,""):"";b.getElementById("bdm-schema").src="https://brewer-vacations-admin.appspot.com/schema/id/0005-fs33s3-h5hdhd3-hv7gd3q-jklr3tgu4"+e+".js"+a.location.search,b.getElementById("bdm-schema").onload=function(){a.bdmSchema&&(c.type="application/ld+json",c.id="bdm-schema-output",c.innerHTML=a.bdmSchema,d.appendChild(c))}}(window,document);
</script>
	
<script>window.CUSTOM_GDPR=1;</script>
<!-- OneTrust Cookies Consent Notice start for www.grandhotelbridgeport.com -->
<script src="https://cdn.cookielaw.org/scripttemplates/otSDKStub.js"  type="text/javascript" charset="UTF-8" data-domain-script="018f11d2-c5c0-74be-9eef-4cd659a2ccfb" ></script>
<script type="text/javascript">
function OptanonWrapper() { }
</script>
<!-- OneTrust Cookies Consent Notice end for www.grandhotelbridgeport.com -->
<!-- Sojern Container Tag cp_v3_js, Pixel Version: 1 -->
<script src="https://static.sojern.com/utils/sjrn_autocx.js"></script>
<!-- Sojern Container Tag cp_v3_js, Pixel Version: 1 -->
<!-- Google Tag Manager -->
<script>(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({"gtm.start":
new Date().getTime(),event:"gtm.js"});var f=d.getElementsByTagName(s)[0],
j=d.createElement(s),dl=l!="dataLayer"?"&l="+l:"";j.async=true;j.src=
"https://www.googletagmanager.com/gtm.js?id="+i+dl;f.parentNode.insertBefore(j,f);
})(window,document,"script","dataLayer","GTM-P3FKLVQD");</script>
<!-- End Google Tag Manager -->
<script>(function(w,d,t,r,u){var f,n,i;w[u]=w[u]||[],f=function(){var o={ti:"21002037"};o.q=w[u],w[u]=new UET(o),w[u].push("pageLoad")},n=d.createElement(t),n.src=r,n.async=1,n.onload=n.onreadystatechange=function(){var s=this.readyState;s&&s!=="loaded"&&s!=="complete"||(f(),n.onload=n.onreadystatechange=null)},i=d.getElementsByTagName(t)[0],i.parentNode.insertBefore(n,i)})(window,document,"script","//bat.bing.com/bat.js","uetq");</script><script>window.trackerName="gtag_UA_486659_5";</script><script async src="https://www.googletagmanager.com/gtag/js?id=UA-486659-5"></script><script>window.dataLayer = window.dataLayer || []; function gtag(){dataLayer.push(arguments);}gtag("js", new Date());gtag("config", "UA-486659-5", {"linker": {"domains": ["grandhotelbridgeport.com", "windsurfercrs.com"],"decorate_forms": true}});</script><script>(function () {var pl = document.createElement("script");pl.type = "text/javascript";pl.async = true;pl.src = "https://beacon.sojern.com/pixel/p/5620";(document.getElementsByTagName("head")[0] || document.getElementsByTagName("body")[0]).appendChild(pl);})();</script><link rel="apple-touch-icon" sizes="180x180" href="https://storage.googleapis.com/brewer-vacations-frontend.appspot.com/clientmedia/brands/vips/favicon-grand/apple-touch-icon.png">
<link rel="icon" type="image/png" sizes="32x32" href="https://storage.googleapis.com/brewer-vacations-frontend.appspot.com/clientmedia/brands/vips/favicon-grand/favicon-32x32.png">
<link rel="icon" type="image/png" sizes="16x16" href="https://storage.googleapis.com/brewer-vacations-frontend.appspot.com/clientmedia/brands/vips/favicon-grand/favicon-16x16.png">
<link rel="manifest" href="https://storage.googleapis.com/brewer-vacations-frontend.appspot.com/clientmedia/brands/vips/favicon-grand/site.webmanifest">
<link rel="mask-icon" href="https://storage.googleapis.com/brewer-vacations-frontend.appspot.com/clientmedia/brands/vips/favicon-grand/safari-pinned-tab.svg" color="#624e41">
<link rel="shortcut icon" href="https://storage.googleapis.com/brewer-vacations-frontend.appspot.com/clientmedia/brands/vips/favicon-grand/favicon.ico">
<meta name="msapplication-TileColor" content="#624e41">
<meta name="msapplication-config" content="https://storage.googleapis.com/brewer-vacations-frontend.appspot.com/clientmedia/brands/vips/favicon-grand/browserconfig.xml">
<meta name="theme-color" content="#624e41">
<link href="https://fonts.googleapis.com/css?family=Raleway:300,400,700" rel="stylesheet prefetch">

<style>
.header-phone.md-button.md-icon-button{
border-radius: 50%;
}
.header-phone.md-button.md-icon-button md-icon{
fill: #624E41;
}


@font-face {
    font-family: "brilon";
    src: url("https://storage.googleapis.com/brewer-vacations-frontend.appspot.com/content/fonts/brilon-regular.woff2") format("woff2"),
         url("https://storage.googleapis.com/brewer-vacations-frontend.appspot.com/content/fonts/brilon-regular.woff") format("woff");
    font-weight: normal;
    font-style: normal;
}
.brilon-font{font-family:brilon,futura-lt,sans-serif!important}

@font-face{font-family:"futura-lt";
src:url(https://storage.googleapis.com/brewer-vacations-frontend.appspot.com/content/fonts/futuralt.eot);
src:url(https://storage.googleapis.com/brewer-vacations-frontend.appspot.com/content/fonts/futuralt.eot?#iefix) format("embedded-opentype"),
url(https://storage.googleapis.com/brewer-vacations-frontend.appspot.com/content/fonts/futuralt.woff2) format("woff2"),
url(https://storage.googleapis.com/brewer-vacations-frontend.appspot.com/content/fonts/futuralt.woff) format("woff"),
url(https://storage.googleapis.com/brewer-vacations-frontend.appspot.com/content/fonts/futuralt.ttf) format("truetype"),
url(https://storage.googleapis.com/brewer-vacations-frontend.appspot.com/content/fonts/futuralt.svg#futura_ltregular) format("svg");
font-weight:400;font-style:normal}
.alt-font, .md-button, .md-headline, .md-tab, .md-title, .page-title, button, .image-link-block-name,
.home-body-section .md-display-1,
h1,h2,h3,h4,h5,h6{
    font-family: futura-lt;
}
.button, button, h1, h2, h3, h4, h5, h6, html, input, select, textarea {
    font-family: Raleway,Roboto,"Helvetica Neue",sans-serif;
}
.description-text, .home-description {
    font-size: 16px;
    font-weight: 500;
}
.image-link-block-text-overlay {
    padding: 8px 0px 4px;
}
.image-link-block-text {
    top: 30%;
}
.md-button{
border-radius: 0px;
}

.gray-page {background: #f4f4f2;}
#header-logo {width: auto;}

/*
.image-link-block-wrap:first-child .image-link-block-link,*/
.offers-offer-item .offer-terms{
display:none;
}
md-tabs.md-default-theme .md-tab.md-active, md-tabs .md-tab.md-active, md-tabs.md-default-theme .md-tab.md-active md-icon, md-tabs .md-tab.md-active md-icon, md-tabs.md-default-theme .md-tab.md-focused, md-tabs .md-tab.md-focused, md-tabs.md-default-theme .md-tab.md-focused md-icon, md-tabs .md-tab.md-focused md-icon,
.primary-color.a1, a {
    color: #947b57;
    color: #816a4b;
}
.book-bar,
.loading-overlay,
.md-button.md-default-theme.md-primary.md-raised, .md-button.md-primary.md-raised, .md-button.md-default-theme.md-primary.md-fab, .md-button.md-primary.md-fab {
    color: rgba(255,255,255,0.87);
    color: rgba(255,255,255,1);
    background-color: #947b57;
    background-color: #816a4b;
}
.md-button.md-default-theme.md-primary.md-raised:not([disabled]):hover, .md-button.md-primary.md-raised:not([disabled]):hover, .md-button.md-default-theme.md-primary.md-fab:not([disabled]):hover, .md-button.md-primary.md-fab:not([disabled]):hover {
    background-color: #bc9b6a;
}

.carousel-img-div-text, .hero-text-wrap {
    background-color: rgba(148, 123, 87, 0.8)!important
}
.home-body-section a .card-shadow{box-shadow:none;}
.figure.imgleft, figure.imgright{clear:both;}

.hotel-amenities-box img {
display: none;
}

/*Hide Amenities Pet Status*/
.amenities-pets-wrap{display:none;}
</style><!-- BDM Event Tracking -->
<script>(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start':
new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0],
j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src=
'https://www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f);
})(window,document,'script','dataLayer','GTM-PFD9NKW');</script>
<!-- End BDM Event Tracking -->
<script>
  if (!Element.prototype.matches) {
    Element.prototype.matches = 
        Element.prototype.matchesSelector || 
        Element.prototype.mozMatchesSelector ||
        Element.prototype.msMatchesSelector || 
        Element.prototype.oMatchesSelector || 
        Element.prototype.webkitMatchesSelector ||
        function(s) {
            var matches = (this.document || this.ownerDocument).querySelectorAll(s),
                i = matches.length;
            while (--i >= 0 && matches.item(i) !== this) {}
            return i > -1;            
        };
  }
</script>
</head><body layout="row" layout-fill >
<!-- Google Tag Manager (noscript) -->
<noscript><iframe src="https://www.googletagmanager.com/ns.html?id=GTM-PFD9NKW"
height="0" width="0" style="display:none;visibility:hidden"></iframe></noscript>
<!-- End Google Tag Manager (noscript) -->
<!-- Google Tag Manager (noscript) -->
<noscript><iframe src="https://www.googletagmanager.com/ns.html?id=GTM-P3FKLVQD"
height="0" width="0" style="display:none;visibility:hidden"></iframe></noscript>
<!-- End Google Tag Manager (noscript) -->


<button id="agentic-hospitality-chat-btn" type="button" style="position: fixed; bottom: 20px; right: 20px; z-index: 9999; padding: 16px; background: #816a4b; color: white; border: none; border-radius: 50%; cursor: pointer; box-shadow: 0 4px 12px rgba(0,0,0,0.15); width: 60px; height: 60px; display: flex; align-items: center; justify-content: center; font-size: 24px;" onclick="window.setupInHotelChat()">

  <svg width="100%" height="100%" viewBox="0 0 25 24" fill="none" xmlns="http://www.w3.org/2000/svg" fit="" preserveAspectRatio="xMidYMid meet" focusable="false">
<path d="M11.5005 23.3473C8.99428 17.4373 6.83431 15.3633 0.679118 12.9596C-0.226373 12.6062 -0.226373 11.3938 0.679118 11.0402C6.83706 8.63648 8.99428 6.56255 11.5005 0.649906C11.8685 -0.216635 13.1312 -0.216635 13.4967 0.649906C16.003 6.55991 18.1629 8.63384 24.3209 11.0402C25.2264 11.3936 25.2264 12.606 24.3209 12.9596C18.1657 15.3636 16.0057 17.4373 13.4967 23.3499C13.1285 24.2167 11.866 24.2167 11.5005 23.3499V23.3473Z" fill="#D9C973"></path>
</svg>

</button>


<focus-chat
  agent_card_url="/.well-known/agent-card.json"
  config='{"source_trigger_selector":"#agentic-hospitality-chat-btn","greeting":"Welcome to The Grand Hotel Bridgeport! How can I help you today?","header_background_color":"#0A0A0A","user_message_background_color":"#816a4b","send_button_background_color":"#816a4b","title":"The Grand Hotel at Bridgeport","input_message_placeholder":"Ask about our hotel amenities and services."}'>
</focus-chat>

<script src="https://embed.agents.inhotel.io/focus-chat/latest/focus-chat.min.js"></script>
<script>
const FIRESTORE_ENDPOINT = 'https://api.agentichospitality.ai/firestore/write/';

// Generate or retrieve session ID (using in-memory fallback)
let currentSessionId = null;

function getSessionId() {
  if (currentSessionId) {
    return currentSessionId;
  }
  
  // Try sessionStorage first
  try {
    let sessionId = sessionStorage.getItem('chatSessionId');
    if (!sessionId) {
      sessionId = `session_${Date.now()}_${Math.random().toString(36).substr(2, 9)}`;
      sessionStorage.setItem('chatSessionId', sessionId);
    }
    currentSessionId = sessionId;
    return sessionId;
  } catch (e) {
    // Fallback if sessionStorage fails
    if (!currentSessionId) {
      currentSessionId = `session_${Date.now()}_${Math.random().toString(36).substr(2, 9)}`;
    }
    return currentSessionId;
  }
}

// Store message via POST request
async function storeMessage(sessionId, role, content, timestamp) {
  try {
    const response = await fetch(FIRESTORE_ENDPOINT, {
      method: 'POST',
      headers: {
        'Content-Type': 'application/json',
      },
      body: JSON.stringify({
        sessionId: sessionId,
        role: role,
        content: content,
        timestamp: timestamp
      })
    });

    if (!response.ok) {
      const errorData = await response.json();
      console.error('Failed to store message:', errorData);
      return;
    }

    const result = await response.json();
  } catch (error) {
    console.error('Error storing message:', error);
  }
}

// Extract text content from message elements
function extractMessageContent(node) {
  return node.innerText || node.textContent || "";
}

// Find shadow root and chat container
function findChatContainer() {
  // Look for the chat popup element with shadow root
  const chatPopup = document.querySelector('[class*="ih-popup"]') || 
                    document.querySelector('[role="dialog"]') ||
                    document.querySelector('div[class*="chat"]');
  
  if (!chatPopup) {
    // Search through all elements for shadow roots
    const allElements = document.querySelectorAll('*');
    for (const element of allElements) {
      if (element.shadowRoot) {
        const bodyInShadow = element.shadowRoot.querySelector('.ih-body');
        if (bodyInShadow) {
          return bodyInShadow;
        }
      }
    }
    return null;
  }
  
  // Check if the element has a shadow root
  if (chatPopup.shadowRoot) {
    const container = chatPopup.shadowRoot.querySelector('.ih-body');
    if (container) {
      return container;
    }
  }
  
  return null;
}

// Track processed messages and pending assistant messages
const processedMessages = new Set();
const pendingAssistantMessages = new Map(); // Map of message nodes to their monitoring data

// Hide branding element wherever it appears
function hideBranding() {
  try {
    // Search all shadow roots for branding
    const allElements = document.querySelectorAll('*');
    for (const element of allElements) {
      if (element.shadowRoot) {
        const branding = element.shadowRoot.querySelector('.ih-branding');
        if (branding) {
          branding.style.display = 'none';
        }
      }
    }
  } catch (e) {
    // Silently fail
  }
}

// Continuously watch for branding and hide it
let brandingWatcherStarted = false;
function startBrandingWatcher() {
  if (brandingWatcherStarted) return;
  brandingWatcherStarted = true;
  
  // Check every 500ms for branding element
  setInterval(hideBranding, 50);
  
  // Also hide on chat button click
  const chatBtn = document.getElementById('agentic-hospitality-chat-btn');
  if (chatBtn) {
    chatBtn.addEventListener('click', () => {
      // Hide immediately and again after a short delay (for re-renders)
      hideBranding();
      setTimeout(hideBranding, 10);
      setTimeout(hideBranding, 25);
      setTimeout(hideBranding, 50);
      setTimeout(hideBranding, 75);
      setTimeout(hideBranding, 100);
      setTimeout(hideBranding, 150);
      setTimeout(hideBranding, 200);
    });
  }
}

// Monitor assistant message for completion
function monitorAssistantMessage(node, messageId, timestamp) {
  let lastContent = '';
  let unchangedCount = 0;
  const STABLE_THRESHOLD = 3; // Number of checks with no change before considering complete
  const CHECK_INTERVAL = 500; // Check every 500ms
  
  const checkInterval = setInterval(() => {
    const currentContent = extractMessageContent(node);
    
    if (currentContent === lastContent) {
      unchangedCount++;
      
      // If content hasn't changed for STABLE_THRESHOLD checks, consider it complete
      if (unchangedCount >= STABLE_THRESHOLD) {
        clearInterval(checkInterval);
        
        // Save the message
        if (currentContent && currentContent.length > 1) {
          console.log('AI Resonse: ', currentContent);
          const sessionId = getSessionId();
          storeMessage(sessionId, 'assistant', currentContent, timestamp);
          processedMessages.add(messageId);
        }
        
        // Remove from pending
        pendingAssistantMessages.delete(node);
      }
    } else {
      // Content changed, reset counter
      unchangedCount = 0;
      lastContent = currentContent;
    }
  }, CHECK_INTERVAL);
  
  // Store the interval ID so we can cancel if needed
  pendingAssistantMessages.set(node, {
    messageId: messageId,
    timestamp: timestamp,
    intervalId: checkInterval
  });
  
  // Safety timeout - save after 30 seconds regardless
  setTimeout(() => {
    if (pendingAssistantMessages.has(node)) {
      clearInterval(checkInterval);
      const content = extractMessageContent(node);
      if (content && content.length > 1) {
        console.log('AI response: ', content);
        const sessionId = getSessionId();
        storeMessage(sessionId, 'assistant', content, timestamp);
        processedMessages.add(messageId);
      }
      pendingAssistantMessages.delete(node);
    }
  }, 30000);
}

// Parse and store new messages
function processNewMessages(mutations) {
  const sessionId = getSessionId();
  
  mutations.forEach(mutation => {
    mutation.addedNodes.forEach(node => {
      if (node.nodeType === 1) { // Element node
        // Check if it's a message container
        if (node.classList && node.classList.contains('ih-msg')) {
          const timestamp = Date.now();
          
          // Create a unique identifier for this message
          const messageId = `${node.className}_${timestamp}`;
          
          // Skip if already processed
          if (processedMessages.has(messageId)) {
            return;
          }
          
          let role, content;

         
          
          // Check for user message - save immediately
          if (node.classList.contains('user')) {
            role = 'user';
            content = extractMessageContent(node);
            
            if (content && content.length > 1) {
              storeMessage(sessionId, role, content, timestamp);
              processedMessages.add(messageId);
            }
          } 
          // Check for assistant message - monitor for completion
          else if (node.classList.contains('assistant')) {
            monitorAssistantMessage(node, messageId, timestamp);
          }
          // Check for greeting - save immediately
          else if (node.classList.contains('greeting')) {
            role = 'assistant';
            content = extractMessageContent(node);
            
            if (content && content.length > 1) {
              storeMessage(sessionId, role, content, timestamp);
              processedMessages.add(messageId);
            }
          }
        }
      }
    });
  });
}

// Set up MutationObserver
function initChatMonitor() {
  const chatContainer = findChatContainer();
  
  if (!chatContainer) {

    setTimeout(initChatMonitor, 1000);
    return;
  }

  hideBranding();
  startBrandingWatcher();
  
  const observer = new MutationObserver(processNewMessages);
  
  observer.observe(chatContainer, {
    childList: true,
    subtree: true
  });
  
  
  // Also capture existing messages
  const existingMessages = chatContainer.querySelectorAll('.ih-msg');
}

// Start monitoring when DOM is ready
function startMonitoring() {
  if (document.readyState === 'loading') {
    document.addEventListener('DOMContentLoaded', () => {
      setTimeout(initChatMonitor, 500);
    });
  } else {
    setTimeout(initChatMonitor, 500);
  }
}

startMonitoring();
startBrandingWatcher();

// Export functions for external use
window.chatMonitor = {
  getSessionId,
  storeMessage,
  findChatContainer,
  reinitialize: initChatMonitor
};
</script><div class="loadmain fadereveal"  ng-show="!contentLoaded"><div class="loading-overlay first-loading"><div class="page-loading"><img class="loading-w" src="https://storage.googleapis.com/brewer-vacations-frontend.appspot.com/clientmedia/brands/vips/grand-hotel-loading-icon.png" alt="Loading...">
<svg class="material-load" viewBox="25 25 50 50" aria-label="Loading Website"><circle class="material-circle" cx="50" cy="50" r="20" fill="none" stroke-width="4" stroke-miterlimit="10"/></svg></div></div></div><div layout="column" class="relative" layout-fill role="main">
<md-toolbar id="header-toolbar" class="md-whiteframe-z1">
	<div class="layout-content pad-lr-4">
		<div layout="row" layout-align-xs="space-between center">
			<div class="relative zindex4" layout="row" layout-align="center center">
				<a ui-sref="home" class="pad-lr-16 pad-tb-4 line-0">
					<img src="https://storage.googleapis.com/brewer-vacations-frontend.appspot.com/clientmedia/jfj8afo2la2w-fjjgo5ss-sjo8sh2e-gwij3qf/0005-fs33s3-h5hdhd3-hv7gd3q-jklr3tgu4/grand-hotel-bridgeport-logo.png" id="header-logo" class="max-width" alt="The Grand Hotel at Bridgeport">
				</a>
			</div>
			<div flex="noshrink" class="relative zindex3" layout="column">
				<div layout="row" layout-align="start center" id="header-upper">
					<div class="md-subhead primary-color pad-t-15 pad-lr-10" hide-xs>
						The Grand Hotel at Bridgeport					</div>
					<div flex></div>
					
						<md-button
						
										
							hide-xs
											
						class="header-phone md-primary capitalize thin no-margin margin-b-5 no-min-height line-norm gtm-header-phone" data-phone="1 866-968-5757" href="tel:1 866-968-5757">
															<span hide-xs hide-sm class="vertical-middle">
									Reservations								</span>
														<span class="vertical-middle notranslate">{{'1 866-968-5757' | tel}}</span>
						</md-button>
	
							
							<md-button hide-gt-xs class="header-top-button header-phone header-phone-mobile primary-color custom-pad md-icon-button no-margin-xs-imp gtm-header-phone" data-phone="1 866-968-5757" href="tel:1 866-968-5757" aria-label="Call Phone"><md-icon class="primary-color vertical-middle" md-svg-icon="phone"></md-icon></span></md-button>
						
												
						
					
					
				

					
					
				</div>
				<div ng-init="selectedIndex = -1;" layout="row" layout-align="space-between center" layout-align-xs="end center" id="header-lower">

									<nav role="menubar" flex="noshrink" hide-xs aria-label="Main Navigation" class="" ng-init="selectedIndex = -1;">
						<md-tabs  class="submenu-tabs desktop-stretch menu-tabs" md-selected="selectedIndex" md-no-ink> 
							
									<md-tab ng-init="highlightTabs['home'] = 0;" class="relative" id="tab-content-{{0 + 37}}" aria-label="Home" href="/" aria-controls="ui-view">
									<a class="menu-tab-link " href="/" target="{{getSubMenuTarget('/')}}">Home</a>
																	</md-tab> 
															
									<md-tab ng-init="highlightTabs['rooms'] = 1;" class="relative" id="tab-content-{{1 + 37}}" aria-label="Rooms" href="/rooms" aria-controls="ui-view">
									<a class="menu-tab-link " href="/rooms" target="{{getSubMenuTarget('/rooms')}}">Rooms</a>
																			<div class="tab-submenu md-whiteframe-z2 relative">
											<ul>
																									<li class="relative" ng-init="highlightTabs['amenities'] = 1">
														<a class="trans2 " target="{{getSubMenuTarget('/amenities')}}" href="/amenities">
															<span class="vertical-middle">Amenities</span>
																													</a>
																											</li>																			
																																				</ul>
										</div>
																	</md-tab> 
															
									<md-tab ng-init="highlightTabs['photos'] = 2;" class="relative" id="tab-content-{{2 + 37}}" aria-label="Photos" href="/photos" aria-controls="ui-view">
									<a class="menu-tab-link " href="/photos" target="{{getSubMenuTarget('/photos')}}">Photos</a>
																	</md-tab> 
															
									<md-tab ng-init="highlightTabs['offers'] = 3;" class="relative" id="tab-content-{{3 + 37}}" aria-label="Packages" href="/offers" aria-controls="ui-view">
									<a class="menu-tab-link " href="/offers" target="{{getSubMenuTarget('/offers')}}">Packages</a>
																	</md-tab> 
															
									<md-tab ng-init="highlightTabs['meetings'] = 4;" class="relative" id="tab-content-{{4 + 37}}" aria-label="Meetings" href="/meetings" aria-controls="ui-view">
									<a class="menu-tab-link " href="/meetings" target="{{getSubMenuTarget('/meetings')}}">Meetings</a>
																			<div class="tab-submenu md-whiteframe-z2 relative">
											<ul>
																									<li class="relative" ng-init="highlightTabs['0004-0000002a-5b155f8f-84fb-011d35dd'] = 4">
														<a class="trans2 " target="{{getSubMenuTarget('/bridgeport-room')}}" href="/bridgeport-room">
															<span class="vertical-middle">Bridgeport Room</span>
																													</a>
																											</li>																			
																																						<li class="relative" ng-init="highlightTabs['0004-0000002a-5b156046-cc00-9a5affaa'] = 4">
														<a class="trans2 " target="{{getSubMenuTarget('/breakfast-room')}}" href="/breakfast-room">
															<span class="vertical-middle">Breakfast Room</span>
																													</a>
																											</li>																			
																																						<li class="relative" ng-init="highlightTabs['0004-0000002a-5b1560cc-e73b-49aed0e0'] = 4">
														<a class="trans2 " target="{{getSubMenuTarget('/board-room')}}" href="/board-room">
															<span class="vertical-middle">Board Room</span>
																													</a>
																											</li>																			
																																						<li class="relative" ng-init="highlightTabs['0004-0000002a-5b156269-6fce-a5543e6f'] = 4">
														<a class="trans2 " target="{{getSubMenuTarget('/audio-visual')}}" href="/audio-visual">
															<span class="vertical-middle">Audio Visual</span>
																													</a>
																											</li>																			
																																				</ul>
										</div>
																	</md-tab> 
															
									<md-tab ng-init="highlightTabs['0004-68819aba-604676e3-7fe8-6cf8e9a3'] = 5;" class="relative" id="tab-content-{{5 + 37}}" aria-label="Team Travel" href="/team-travel" aria-controls="ui-view">
									<a class="menu-tab-link " href="/team-travel" target="{{getSubMenuTarget('/team-travel')}}">Team Travel</a>
																	</md-tab> 
															
									<md-tab ng-init="highlightTabs['0004-a9fe0101-69bb2931-a789-7e3064cb'] = 6;" class="relative" id="tab-content-{{6 + 37}}" aria-label="Group Travel" href="/group-travel" aria-controls="ui-view">
									<a class="menu-tab-link " href="/group-travel" target="{{getSubMenuTarget('/group-travel')}}">Group Travel</a>
																	</md-tab> 
															
									<md-tab ng-init="highlightTabs['location'] = 7;" class="relative" id="tab-content-{{7 + 37}}" aria-label="Location" href="/location" aria-controls="ui-view">
									<a class="menu-tab-link " href="/location" target="{{getSubMenuTarget('/location')}}">Location</a>
																			<div class="tab-submenu md-whiteframe-z2 relative">
											<ul>
																									<li class="relative" ng-init="highlightTabs['nearby'] = 7">
														<a class="trans2 " target="{{getSubMenuTarget('/nearby')}}" href="/nearby">
															<span class="vertical-middle">Nearby</span>
																													</a>
																											</li>																			
																																						<li class="relative" ng-init="highlightTabs['events'] = 7">
														<a class="trans2 " target="{{getSubMenuTarget('/events')}}" href="/events">
															<span class="vertical-middle">Events</span>
																													</a>
																											</li>																			
																																						<li class="relative" ng-init="highlightTabs['0004-a9fe0101-680fe4b3-3db0-80c23ae0'] = 7">
														<a class="trans2 " target="{{getSubMenuTarget('/crush-wine-tours')}}" href="/crush-wine-tours">
															<span class="vertical-middle">Crush Wine Tours, Monmouth, Oregon</span>
																													</a>
																											</li>																			
																																						<li class="relative" ng-init="highlightTabs['0004-a9fe0101-67e433aa-dc3e-665a696f'] = 7">
														<a class="trans2 " target="{{getSubMenuTarget('/event-centers')}}" href="/event-centers">
															<span class="vertical-middle">Nearby Event Centers</span>
																													</a>
																											</li>																			
																																						<li class="relative" ng-init="highlightTabs['0004-0000002a-5b157a25-e92c-498ea944'] = 7">
														<a class="trans2 " target="{{getSubMenuTarget('/bridgeport-neighborhood')}}" href="/bridgeport-neighborhood">
															<span class="vertical-middle">Bridgeport Neighborhood</span>
																													</a>
																											</li>																			
																																				</ul>
										</div>
																	</md-tab> 
															
									<md-tab ng-init="highlightTabs['contact'] = 9;" class="relative" id="tab-content-{{9 + 37}}" aria-label="Contact" href="/contact" aria-controls="ui-view">
									<a class="menu-tab-link " href="/contact" target="{{getSubMenuTarget('/contact')}}">Contact</a>
																			<div class="tab-submenu md-whiteframe-z2 relative">
											<ul>
																									<li class="relative" ng-init="highlightTabs['0004-0000002a-5b157aac-46af-c9e08551'] = 9">
														<a class="trans2 " target="{{getSubMenuTarget('/employment')}}" href="/employment">
															<span class="vertical-middle">Employment</span>
																													</a>
																											</li>																			
																																				</ul>
										</div>
																	</md-tab> 
																					</md-tabs>
						
					</nav>
					

					<div layout="row" flex="none" class="relative zindex3" layout-align="end center">
						<!--<span class="pad-l-20" hide-xs></span>-->
						<span flex hide-gt-xs></span>
						<!--<md-button hide-xs class="md-primary no-margin margin-l-4" href="tel:+1-1 503-968-5757">1 503-968-5757</md-button><md-button class="md-primary md-raised no-margin margin-l-4" href="https://res.windsurfercrs.com/ibe/index.aspx?propertyID=15353&langID=1&currID=0&landing_site=grandhotelbridgeport.com">Book Now</md-button>-->
						<!--
						<md-button class="md-primary md-raised no-margin margin-l-4" ng-click="bookNow($event)" ng-init="bookingText = 'https://res.windsurfercrs.com/ibe/index.aspx?propertyID=15353&langID=1&currID=0'.indexOf('https://app.yachtingsbest') == 0 ? 'Request Moorage' : 'Book Now'">{{bookingText}}</md-button>-->
						<!--
						<md-button class="md-primary md-raised no-margin margin-l-4" ng-click="bookNow($event)" ng-init="bookingText = 'https://res.windsurfercrs.com/ibe/index.aspx?propertyID=15353&langID=1&currID=0'.indexOf('mailto') == 0 ? 'Email Us' : 'Book Now'">{{bookingText}}</md-button>-->
						<md-button class="md-primary md-raised no-margin margin-l-4" ng-click="bookNow($event)" ng-init="bookingText = 'https://res.windsurfercrs.com/ibe/index.aspx?propertyID=15353&langID=1&currID=0'.indexOf('mailto') == 0 ? 'Email Us' : 'Book Now'">{{bookingText}}</md-button>
						<!--ng-hide="isSidenavOpen()"-->
						<md-button ng-click="openSidenav($event)"
							class="md-primary md-icon-button"
							aria-label="Menu"
							hide-gt-xs><md-icon class="primary-color material-icons" aria-label="Menu">menu</md-icon>
					  </md-button>
					</div>
				</div>
			</div>
		</div>
	</div>
</md-toolbar>
<!--
<md-content flex md-scroll-y class="full-width"> <ui-view layout="column" layout-fill flex class="full-width" id="ui-view"> </ui-view>
-->
<md-content flex md-scroll-y class="full-width"> <ui-view layout-fill flex class="full-width" id="ui-view"> </ui-view>


<md-toolbar id="footer-toolbar" flex="none" class="topaz-footer primary-color a1 zindex md-menu-toolbar" ng-cloak>
	<div class="layout-content">
		<div class="pad-tb-8" layout="row" layout-align="space-between start" class="fill-height" layout-wrap>
			<div flex flex-xs="100" flex-sm="50" class="pad-16" id="footer-block-left">
				<div class="md-title thin pad-b-8 accent-txt">The Grand Hotel at Bridgeport</div>
									<div class="md-body-1">7265 SW Hazel Fern Rd. Tigard, OR 97224</div>
													<div class="md-body-1">Phone: <a class="accent-color a2 gtm-footer-phone" data-phone="1 503-968-5757" href="tel:1 503-968-5757">{{'1 503-968-5757' | tel}}</a></div>
													<div class="md-body-1">Reservations: <a class="accent-color a2 gtm-footer-phone" data-phone="1 866-968-5757" ng-href="tel:1 866-968-5757">{{'1 866-968-5757' | tel}}</a></div>
																	<div class="md-body-1">Email: <a class="accent-color a2 break-all gtm-footer-email" data-email="reservations@grandhotelbridgeport.com" ng-href="mailto:reservations@grandhotelbridgeport.com"><span class="__cf_email__" data-cfemail="6e1c0b1d0b1c180f1a0701001d2e091c0f000a06011a0b020c1c070a090b1e011c1a400d0103">[email&#160;protected]</span></a></div>
								<div class="md-body-1 footer-domain"><a class="accent-color a2 break-all" href="https://www.grandhotelbridgeport.com">https://www.grandhotelbridgeport.com</a></div>
				
				<social-links></social-links>
				
				<div class="md-body-1">&copy; 2026 
						
				</div>
									<div class="md-caption"><div><a class="inline-block line-0 margin-r-8" href="https://apps.apple.com/us/app/grand-hotel-bridgeport/id1254479778" target="_blank" rel="nofollow"><img src="https://storage.googleapis.com/brewer-vacations-frontend.appspot.com/content/img/App-Store-111.png" alt="The Grand Hotel at Bridgeport on the App Store"></a><a class="inline-block line-0" href="https://play.google.com/store/apps/details?id=mobi.gndbridgectg&hl=en_US" target="_blank" rel="nofollow"><img src="https://storage.googleapis.com/brewer-vacations-frontend.appspot.com/content/img/Play-Store-116.png" alt="The Grand Hotel at Bridgeport on the Play Store"></a></div></div>
								
			</div>
			<div flex flex-xs="100" flex-sm="50" class="pad-16 text-center" id="footer-block-center">		
				<div class="md-title thin pad-b-8 accent-txt footer-subscribe-heading">
						
					<span>The Grand Hotel at Bridgeport Specials</span>
						
				</div>	
				<div class="md-body-2 footer-subscribe-text">
										<span>Looking for the latest vacation specials, news and updates? Enter your email below!</span>
									</div>
				<div class="text-center subscribe-container pad-tb-8" layout="row" layout-wrap layout-align="center center">
						
					<input class="subscribe-input left-cap" ng-model="subscriberEmail" type="email" placeholder="Email" aria-label="Subscribe to The Grand Hotel at Bridgeport Specials">
						
					<a ng-click="emailSubscribe($event)" target="_blank" rel="nofollow" class="md-button md-raised md-accent md-hue-2 right-cap no-margin gtm-footer-subscribe-cta">Subscribe</a>
				</div> 
					


					
				
				
			</div>
			
			<div flex flex-xs="100" flex-sm="50" class="pad-16" id="footer-block-right">
				<div class="md-title thin pad-b-8 accent-txt">Site Navigation</div>
				<div class="menu-links two-column">
				
				
																											<div class="menu-link-wrap vertical-top no-break-inside">
											<a class="display-block md-body-1 accent-color a2 menu-link menu-link-parent  " href="/" target="{{getMenuTarget('/')}}">Home</a>
																						
											
											
										</div> 
										
										
																			<div class="menu-link-wrap vertical-top no-break-inside">
											<a class="display-block md-body-1 accent-color a2 menu-link menu-link-parent  " href="/amenities" target="{{getMenuTarget('/amenities')}}">Amenities</a>
																						
											
											
										</div> 
										
										
																			<div class="menu-link-wrap vertical-top no-break-inside">
											<a class="display-block md-body-1 accent-color a2 menu-link menu-link-parent  " href="" target="{{getMenuTarget('')}}">Employment</a>
																						
											
											
										</div> 
										
										
																			<div class="menu-link-wrap vertical-top no-break-inside">
											<a class="display-block md-body-1 accent-color a2 menu-link menu-link-parent  " href="/rooms" target="{{getMenuTarget('/rooms')}}">Rooms</a>
																						
											
											
										</div> 
										
										
																			<div class="menu-link-wrap vertical-top no-break-inside">
											<a class="display-block md-body-1 accent-color a2 menu-link menu-link-parent  " href="/photos" target="{{getMenuTarget('/photos')}}">Photos</a>
																						
											
											
										</div> 
										
										
																			<div class="menu-link-wrap vertical-top no-break-inside">
											<a class="display-block md-body-1 accent-color a2 menu-link menu-link-parent  " href="/offers" target="{{getMenuTarget('/offers')}}">Packages</a>
																						
											
											
										</div> 
										
										
																			<div class="menu-link-wrap vertical-top no-break-inside">
											<a class="display-block md-body-1 accent-color a2 menu-link menu-link-parent  " href="/nearby" target="{{getMenuTarget('/nearby')}}">Nearby</a>
																						
											
											
										</div> 
										
										
																			<div class="menu-link-wrap vertical-top no-break-inside">
											<a class="display-block md-body-1 accent-color a2 menu-link menu-link-parent  " href="/meetings" target="{{getMenuTarget('/meetings')}}">Meetings & Events</a>
																						
											
											
										</div> 
										
										
																			<div class="menu-link-wrap vertical-top no-break-inside">
											<a class="display-block md-body-1 accent-color a2 menu-link menu-link-parent  " href="/team-travel" target="{{getMenuTarget('/team-travel')}}">Team Travel</a>
																						
											
											
										</div> 
										
										
																			<div class="menu-link-wrap vertical-top no-break-inside">
											<a class="display-block md-body-1 accent-color a2 menu-link menu-link-parent  " href="/location" target="{{getMenuTarget('/location')}}">Location</a>
																						
											
											
										</div> 
										
										
																			<div class="menu-link-wrap vertical-top no-break-inside">
											<a class="display-block md-body-1 accent-color a2 menu-link menu-link-parent  " href="/stories" target="{{getMenuTarget('/stories')}}">Stories</a>
																						
											
											
										</div> 
										
										
																			<div class="menu-link-wrap vertical-top no-break-inside">
											<a class="display-block md-body-1 accent-color a2 menu-link menu-link-parent  " href="/contact" target="{{getMenuTarget('/contact')}}">Contact</a>
																						
											
											
										</div> 
										
										
																			<div class="menu-link-wrap vertical-top no-break-inside">
											<a class="display-block md-body-1 accent-color a2 menu-link menu-link-parent  " href="/accessibility" target="{{getMenuTarget('/accessibility')}}">ADA Policy</a>
																						
											
											
										</div> 
										
										
																			<div class="menu-link-wrap vertical-top no-break-inside">
											<a class="display-block md-body-1 accent-color a2 menu-link menu-link-parent  " href="/privacy-statement" target="{{getMenuTarget('/privacy-statement')}}">Privacy Policy</a>
																						
											
											
										</div> 
										
										
																			<div class="menu-link-wrap vertical-top no-break-inside">
											<a class="display-block md-body-1 accent-color a2 menu-link menu-link-parent  " href="/sitemap" target="{{getMenuTarget('/sitemap')}}">Sitemap</a>
																						
											
											
										</div> 
										
										
																			<div class="menu-link-wrap vertical-top no-break-inside">
											<a class="display-block md-body-1 accent-color a2 menu-link menu-link-parent  ot-sdk-show-settings" href="#" target="{{getMenuTarget('#')}}">Cookie Settings</a>
																						
											
											
										</div> 
										
										
																		
															


				
				
				
				
				

					<!--
					<a class="display-block md-body-1 accent-color a2" ui-sref="sitemap">Sitemap</a>
					<a class="display-block md-body-1 accent-color a2" ng-if="footer.termsLink" ng-href="{{footer.termsLink}}">Terms</a>
					<a class="display-block md-body-1 accent-color a2" ng-if="footer.privacyLink" ng-href="{{footer.privacyLink}}">Privacy Policy</a>
					<a class="display-block md-body-1 accent-color a2" ng-if="footer.serviceMarksLink" ng-href="{{footer.serviceMarksLink}}">Service Marks</a>
					<a class="display-block md-body-1 accent-color a2" ng-if="footer.adaLink" ng-href="{{footer.adaLink}}">ADA Statement</a>
					<a class="display-block md-body-1 accent-color a2" analytics-on analytics-event="Footer Subscribe" analytics-category="Push Notifications" analytics-label="Subscribe" href="#" id="notification-button" style="display: none;">Subscribe to Notifications</a>
					-->
					
					
				</div>
			</div>
		</div>
	</div>
	
</md-toolbar>



 </md-content>
<md-sidenav class="md-sidenav-right md-whiteframe-4dp" md-component-id="right" hide-gt-xs>
	<md-toolbar class="md-theme-light">
		<div class="md-toolbar-tools overflow">
			<h1 class="">The Grand Hotel at Bridgeport</h1>
			<span flex></span>
			<md-button ng-click="closeSidenav()" class="md-icon-button" aria-label="Close Sidebar">
				<md-icon class="md-icon-button white-txt" md-svg-icon="close" aria-label="Close"></md-icon>
			</md-button>
		</div>
  </md-toolbar>
  <md-content>

	<div class="pad-16 pad-tb-8">	

				
		
			<div class="mobile-nav mobile-nav-menu">
			
								
					<div class="mobile-nav-item" ng-init="highlightTabs['home'] = 0;">
						<div layout="row" layout-align="start center">
							<a flex ng-class="{'active' : currentState == menuItem.state}" class="mobile-nav-link mobile-nav-top-link bold pad-tb-8 md-title alt-font inline-block " aria-label="{{menuItem.label}}" ng-click="closeSidenav();" href="/" target="" aria-controls="ui-view">
									<span class="vertical-middle">Home</span>
										
							</a>
						</div>		
						
						<!-- If menuItem->children -->
					</div><!--mobile-nav-item-->
				<!-- If Collection Else Regular Item -->
								
					<div class="mobile-nav-item" ng-init="highlightTabs['rooms'] = 1;">
						<div layout="row" layout-align="start center">
							<a flex ng-class="{'active' : currentState == menuItem.state}" class="mobile-nav-link mobile-nav-top-link bold pad-tb-8 md-title alt-font inline-block " aria-label="{{menuItem.label}}" ng-click="closeSidenav();" href="/rooms" target="" aria-controls="ui-view">
									<span class="vertical-middle">Rooms</span>
										
							</a>
						</div>		
						
													<div class="mobile-nav-submenu">
								<ul class="no-margin pad-l-24">

																			<li ng-init="highlightTabs['amenities'] = 1" class="relative"> 
											<div layout="row">
												<a flex class="mobile-nav-link mobile-subnav-link trans2 inline-block pad-tb-8 " target="" href="/amenities" ng-click="closeSidenav();">
														<span class="vertical-middle">Amenities</span>
															
												</a>
											</div>
											
																						
										</li><!--Child Submenu Item-->
									<!-- If childMenuItem->children -->
																		
									
								</ul><!--Child Submenu UL-->
							</div><!--mobile-nav-submenu-->
						<!-- If menuItem->children -->
					</div><!--mobile-nav-item-->
				<!-- If Collection Else Regular Item -->
								
					<div class="mobile-nav-item" ng-init="highlightTabs['photos'] = 2;">
						<div layout="row" layout-align="start center">
							<a flex ng-class="{'active' : currentState == menuItem.state}" class="mobile-nav-link mobile-nav-top-link bold pad-tb-8 md-title alt-font inline-block " aria-label="{{menuItem.label}}" ng-click="closeSidenav();" href="/photos" target="" aria-controls="ui-view">
									<span class="vertical-middle">Photos</span>
										
							</a>
						</div>		
						
						<!-- If menuItem->children -->
					</div><!--mobile-nav-item-->
				<!-- If Collection Else Regular Item -->
								
					<div class="mobile-nav-item" ng-init="highlightTabs['offers'] = 3;">
						<div layout="row" layout-align="start center">
							<a flex ng-class="{'active' : currentState == menuItem.state}" class="mobile-nav-link mobile-nav-top-link bold pad-tb-8 md-title alt-font inline-block " aria-label="{{menuItem.label}}" ng-click="closeSidenav();" href="/offers" target="" aria-controls="ui-view">
									<span class="vertical-middle">Packages</span>
										
							</a>
						</div>		
						
						<!-- If menuItem->children -->
					</div><!--mobile-nav-item-->
				<!-- If Collection Else Regular Item -->
								
					<div class="mobile-nav-item" ng-init="highlightTabs['meetings'] = 4;">
						<div layout="row" layout-align="start center">
							<a flex ng-class="{'active' : currentState == menuItem.state}" class="mobile-nav-link mobile-nav-top-link bold pad-tb-8 md-title alt-font inline-block " aria-label="{{menuItem.label}}" ng-click="closeSidenav();" href="/meetings" target="" aria-controls="ui-view">
									<span class="vertical-middle">Meetings</span>
										
							</a>
						</div>		
						
													<div class="mobile-nav-submenu">
								<ul class="no-margin pad-l-24">

																			<li ng-init="highlightTabs['0004-0000002a-5b155f8f-84fb-011d35dd'] = 4" class="relative"> 
											<div layout="row">
												<a flex class="mobile-nav-link mobile-subnav-link trans2 inline-block pad-tb-8 " target="" href="/bridgeport-room" ng-click="closeSidenav();">
														<span class="vertical-middle">Bridgeport Room</span>
															
												</a>
											</div>
											
																						
										</li><!--Child Submenu Item-->
									<!-- If childMenuItem->children -->
																			<li ng-init="highlightTabs['0004-0000002a-5b156046-cc00-9a5affaa'] = 4" class="relative"> 
											<div layout="row">
												<a flex class="mobile-nav-link mobile-subnav-link trans2 inline-block pad-tb-8 " target="" href="/breakfast-room" ng-click="closeSidenav();">
														<span class="vertical-middle">Breakfast Room</span>
															
												</a>
											</div>
											
																						
										</li><!--Child Submenu Item-->
									<!-- If childMenuItem->children -->
																			<li ng-init="highlightTabs['0004-0000002a-5b1560cc-e73b-49aed0e0'] = 4" class="relative"> 
											<div layout="row">
												<a flex class="mobile-nav-link mobile-subnav-link trans2 inline-block pad-tb-8 " target="" href="/board-room" ng-click="closeSidenav();">
														<span class="vertical-middle">Board Room</span>
															
												</a>
											</div>
											
																						
										</li><!--Child Submenu Item-->
									<!-- If childMenuItem->children -->
																			<li ng-init="highlightTabs['0004-0000002a-5b156269-6fce-a5543e6f'] = 4" class="relative"> 
											<div layout="row">
												<a flex class="mobile-nav-link mobile-subnav-link trans2 inline-block pad-tb-8 " target="" href="/audio-visual" ng-click="closeSidenav();">
														<span class="vertical-middle">Audio Visual</span>
															
												</a>
											</div>
											
																						
										</li><!--Child Submenu Item-->
									<!-- If childMenuItem->children -->
																		
									
								</ul><!--Child Submenu UL-->
							</div><!--mobile-nav-submenu-->
						<!-- If menuItem->children -->
					</div><!--mobile-nav-item-->
				<!-- If Collection Else Regular Item -->
								
					<div class="mobile-nav-item" ng-init="highlightTabs['0004-68819aba-604676e3-7fe8-6cf8e9a3'] = 5;">
						<div layout="row" layout-align="start center">
							<a flex ng-class="{'active' : currentState == menuItem.state}" class="mobile-nav-link mobile-nav-top-link bold pad-tb-8 md-title alt-font inline-block " aria-label="{{menuItem.label}}" ng-click="closeSidenav();" href="/team-travel" target="" aria-controls="ui-view">
									<span class="vertical-middle">Team Travel</span>
										
							</a>
						</div>		
						
						<!-- If menuItem->children -->
					</div><!--mobile-nav-item-->
				<!-- If Collection Else Regular Item -->
								
					<div class="mobile-nav-item" ng-init="highlightTabs['0004-a9fe0101-69bb2931-a789-7e3064cb'] = 6;">
						<div layout="row" layout-align="start center">
							<a flex ng-class="{'active' : currentState == menuItem.state}" class="mobile-nav-link mobile-nav-top-link bold pad-tb-8 md-title alt-font inline-block " aria-label="{{menuItem.label}}" ng-click="closeSidenav();" href="/group-travel" target="" aria-controls="ui-view">
									<span class="vertical-middle">Group Travel</span>
										
							</a>
						</div>		
						
						<!-- If menuItem->children -->
					</div><!--mobile-nav-item-->
				<!-- If Collection Else Regular Item -->
								
					<div class="mobile-nav-item" ng-init="highlightTabs['location'] = 7;">
						<div layout="row" layout-align="start center">
							<a flex ng-class="{'active' : currentState == menuItem.state}" class="mobile-nav-link mobile-nav-top-link bold pad-tb-8 md-title alt-font inline-block " aria-label="{{menuItem.label}}" ng-click="closeSidenav();" href="/location" target="" aria-controls="ui-view">
									<span class="vertical-middle">Location</span>
										
							</a>
						</div>		
						
													<div class="mobile-nav-submenu">
								<ul class="no-margin pad-l-24">

																			<li ng-init="highlightTabs['nearby'] = 7" class="relative"> 
											<div layout="row">
												<a flex class="mobile-nav-link mobile-subnav-link trans2 inline-block pad-tb-8 " target="" href="/nearby" ng-click="closeSidenav();">
														<span class="vertical-middle">Nearby</span>
															
												</a>
											</div>
											
																						
										</li><!--Child Submenu Item-->
									<!-- If childMenuItem->children -->
																			<li ng-init="highlightTabs['events'] = 7" class="relative"> 
											<div layout="row">
												<a flex class="mobile-nav-link mobile-subnav-link trans2 inline-block pad-tb-8 " target="" href="/events" ng-click="closeSidenav();">
														<span class="vertical-middle">Events</span>
															
												</a>
											</div>
											
																						
										</li><!--Child Submenu Item-->
									<!-- If childMenuItem->children -->
																			<li ng-init="highlightTabs['0004-a9fe0101-680fe4b3-3db0-80c23ae0'] = 7" class="relative"> 
											<div layout="row">
												<a flex class="mobile-nav-link mobile-subnav-link trans2 inline-block pad-tb-8 " target="" href="/crush-wine-tours" ng-click="closeSidenav();">
														<span class="vertical-middle">Crush Wine Tours, Monmouth, Oregon</span>
															
												</a>
											</div>
											
																						
										</li><!--Child Submenu Item-->
									<!-- If childMenuItem->children -->
																			<li ng-init="highlightTabs['0004-a9fe0101-67e433aa-dc3e-665a696f'] = 7" class="relative"> 
											<div layout="row">
												<a flex class="mobile-nav-link mobile-subnav-link trans2 inline-block pad-tb-8 " target="" href="/event-centers" ng-click="closeSidenav();">
														<span class="vertical-middle">Nearby Event Centers</span>
															
												</a>
											</div>
											
																						
										</li><!--Child Submenu Item-->
									<!-- If childMenuItem->children -->
																			<li ng-init="highlightTabs['0004-0000002a-5b157a25-e92c-498ea944'] = 7" class="relative"> 
											<div layout="row">
												<a flex class="mobile-nav-link mobile-subnav-link trans2 inline-block pad-tb-8 " target="" href="/bridgeport-neighborhood" ng-click="closeSidenav();">
														<span class="vertical-middle">Bridgeport Neighborhood</span>
															
												</a>
											</div>
											
																						
										</li><!--Child Submenu Item-->
									<!-- If childMenuItem->children -->
																		
									
								</ul><!--Child Submenu UL-->
							</div><!--mobile-nav-submenu-->
						<!-- If menuItem->children -->
					</div><!--mobile-nav-item-->
				<!-- If Collection Else Regular Item -->
								
					<div class="mobile-nav-item" ng-init="highlightTabs['contact'] = 9;">
						<div layout="row" layout-align="start center">
							<a flex ng-class="{'active' : currentState == menuItem.state}" class="mobile-nav-link mobile-nav-top-link bold pad-tb-8 md-title alt-font inline-block " aria-label="{{menuItem.label}}" ng-click="closeSidenav();" href="/contact" target="" aria-controls="ui-view">
									<span class="vertical-middle">Contact</span>
										
							</a>
						</div>		
						
													<div class="mobile-nav-submenu">
								<ul class="no-margin pad-l-24">

																			<li ng-init="highlightTabs['0004-0000002a-5b157aac-46af-c9e08551'] = 9" class="relative"> 
											<div layout="row">
												<a flex class="mobile-nav-link mobile-subnav-link trans2 inline-block pad-tb-8 " target="" href="/employment" ng-click="closeSidenav();">
														<span class="vertical-middle">Employment</span>
															
												</a>
											</div>
											
																						
										</li><!--Child Submenu Item-->
									<!-- If childMenuItem->children -->
																		
									
								</ul><!--Child Submenu UL-->
							</div><!--mobile-nav-submenu-->
						<!-- If menuItem->children -->
					</div><!--mobile-nav-item-->
				<!-- If Collection Else Regular Item -->
				<!-- Each menuItem -->
			</div><!--mobile-nav-->

						
	
	</div>	
	
	
  </md-content>
</md-sidenav>









</div>
<script data-cfasync="false" src="/cdn-cgi/scripts/5c5dd728/cloudflare-static/email-decode.min.js"></script><script async src="https://storage.googleapis.com/brewer-vacations-frontend.appspot.com/dist/brewervacations.microsite.emerald.brown.min.js?ver=1781161259"></script>
<script>
window.customTracking = function(url) {
    setTimeout(function() {
	url = url || window.location.pathname.split('/')[1];
	url = url.replace('/:template','');
	var pt;
	switch (url) {
		case '/' :
			pt = 'HOME_PAGE';
			break;
		case '/rooms/:slug':
		case '/rooms':
		case '/offers':
		case '/offers/:slug':
			pt = 'PRODUCT';
			break;
		default: 
			pt = 'TRACKING';
	}
	var params = {hpid: "15353", pt: pt };
    	/* Please do not modify the below code. */
    params.et = {"HOME_PAGE":null,"SEARCH":"hs","PRODUCT":"hpr","SHOPPING_CART":"hcart","CONVERSION":"hc","TRACKING":null}[params.pt] || '';
    try{params = Object.assign({}, sjrn_params, params);}catch(e){}
    var paramsArr = [];
    for(key in params) { paramsArr.push(key + '=' + encodeURIComponent(params[key])) };

    var pl = document.createElement('iframe');
    pl.type = 'text/html';
    pl.setAttribute('style','height:0; width: 0; display:none;');
    pl.async = true;
    pl.src = "https://static.sojern.com/cip/c/21.html?f_v=cp_v3_js&p_v=1&" + paramsArr.join('&');
    (document.getElementsByTagName('head')[0] || document.getElementsByTagName('body')[0]).appendChild(pl);

    }, 500);
}



var urlQueryGetter = function(url){
  
    var qParam = new Array();
    query = url.substring(url.indexOf('?')+1);
    query_items = query.split('&');
    for(i=0; i<query_items.length;i++){
        s = query_items[i].split('=');
        qParam[s[0]] = s[1];
    }

   return {
     getParam: function(x){
       return qParam[x];
     }, getObject: function() {
         return qParam;
     }
   }

}

function getNewClientId(){
    var GA_LOCAL_STORAGE_KEY = 'bdm:ga:clientId', clientId;
      if (window.localStorage) {
        clientId = localStorage.getItem(GA_LOCAL_STORAGE_KEY);
        if (clientId)
            return clientId;
        else {
            try {
       		var tracker = ga.getAll()[0];
       		clientId = tracker.get('clientId');
                  localStorage.setItem(GA_LOCAL_STORAGE_KEY, clientId);
		 return clientId;


    	  }
    	  catch(e) {
       		console.log("Error fetching clientId");
       		return null;
    	  }

        }
            
    }
    else {
        window.ga && ga(function(tracker) {
            var tracker = ga.getAll()[0];
       	   clientId = tracker.get('clientId');
            localStorage.setItem(GA_LOCAL_STORAGE_KEY, clientId);
            return clientId;            
        });
    }
}
function _tag_url(options) {
	
    var _ga = getLinkerParam(), url = options.url || options;
    if (typeof options == 'string')
    {
	var tmp =  urlQueryGetter(options);
         var newOptions = {
             propertyId:15353,
             url: options.split('?')[0],
             checkin: tmp.getParam('checkInDate'),
             checkout: tmp.getParam('checkOutDate'),
             numAdults: tmp.getParam('numberOfAdults') || 1,
             numChildren: tmp.getParam('numberOfChildren') || 0,
	    rooms: tmp.getParam('numberOfRooms') || 1,
	    promo: tmp.getParam('promo'),
             group: tmp.getParam('group'),
             iata: tmp.getParam('iata')
         }
         options = newOptions;

    }

    var url = options.url;


   if (options.propertyId)
    url += '?PropertyId='+options.propertyId;
   if (options.checkin)
    url += '&checkin='+options.checkin;
   if(options.checkout)
    url += '&checkout='+options.checkout;
   if(options.numAdults)
    url += '&adults='+options.numAdults;
   if(options.numChildren)
    url += '&children='+options.numChildren;
   if (options.rooms)
    url += '&rooms='+options.rooms;
   if (_ga)
        url += '&' + _ga;
   if (options.gaEvent)
        url += '&gaevent='+options.gaEvent;
   if (options.promo)
        url += '&promo='+options.promo;
   if (options.group)
        url += '&group='+options.group;
   if (options.iata)
        url += '&iata='+options.iata;
     
    return url;
}

function getLinkerParam(a){var d,b=window[window.GoogleAnalyticsObject];try{var c=b.getAll();for(d=0;d<c.length;d++){var e=c[d];if(!a||e.get("trackingId")===a)return e.get("linkerParam")};}catch(e){console.log(e);return '';}};function getClientId(){var t,e="bdm:ga:clientId";if(window.localStorage){if(t=localStorage.getItem(e))return t;window.ga&&ga(function(n){return t=n.get("clientId"),localStorage.setItem(e,t),t})}else window.ga&&ga(function(t){return t.get("clientId")})};</script><!-- Copyright Brewer Digital Marketing 2026 --></body></html>