{"id":735,"date":"2025-11-24T21:23:16","date_gmt":"2025-11-24T21:23:16","guid":{"rendered":"https:\/\/wcaa.preprod.fruitionqa.com\/?page_id=735"},"modified":"2026-05-08T15:08:22","modified_gmt":"2026-05-08T19:08:22","slug":"picking-up-and-dropping-off","status":"publish","type":"page","link":"https:\/\/wcaa.preprod.fruitionqa.com\/zh\/parking-and-transportation\/picking-up-and-dropping-off\/","title":{"rendered":"Picking Up and Dropping Off"},"content":{"rendered":"<div class=\"blockGlobal paddingTopMD paddingBottomLG heroFluid bottomLeftRadius bottomRightRadius\" style=\"background-image:url(https:\/\/wcaa.preprod.fruitionqa.com\/wp-content\/uploads\/2025\/12\/picking-up-and-dropping-off-01-scaled.webp);background-size:cover;background-position:center center;\">\n\t<img decoding=\"async\" src=\"https:\/\/wcaa.preprod.fruitionqa.com\/wp-content\/themes\/wcaa\/images\/GraphicSwoop2.svg\" class=\"graphicSwoopDouble\" alt=\"\"><div class=\"overlay\"><\/div>\t<div class=\"container\">\n\t\t<div class=\"grid\">\n\t\t\t\t\t\t\t<div class=\"col-sm-10 col-md-8\">\n\t\t\t\t\t\t\t\t\t\t\t<div class=\"breadcrumbsStyle ghost dark left\"><p id=\"breadcrumbs\"><span><span><a href=\"https:\/\/wcaa.preprod.fruitionqa.com\/\">Home<\/a><\/span><\/span><\/p><\/div>\t\t\t\t\n\n<div class=\"wysiwyg \">\n\t<div class=\"maincopy dark\">\n\t\t\t\t\t<h1>Picking up and Dropping off<\/h1>\n\t\t\t\t\t<\/div>\n\n\t\n\t<\/div>\n\n\t\t\t\t\n\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t<\/div>\n<\/div>\n\n\n\n\n<div class=\"blockGlobal paddingTopXS paddingBottomSM\">\n\t\t<div class=\"container\">\n\t\t<div class=\"grid\">\n            <div class=\"col-md-4 mediaLeft\">\n                <div class=\"maincopy\">\n                    <h2 class=\"h4\">Smooth Pickups and Drop-Offs<\/h2>\n                    <p><p>Whether you&#8217;re welcoming loved ones or sending someone off, DTW offers convenient options to help you find your traveler quickly and keep traffic flowing.<\/p>\n<\/p>\n                <\/div>\n\n                \n\n\t\t\t<a\nhref=\"https:\/\/maps.metroairport.com\/?poiId=123\"\nclass=\"primaryButton light\"\ntitle=\"View Terminal Maps\" target=\"_blank\" rel=\"noopener noreferrer\">\nView Terminal Maps<span class=\"fa-light fa-arrow-up-right-from-square\"><\/span>\n<\/a>\n\t\n\t\t\t<a\nhref=\"https:\/\/wcaa.preprod.fruitionqa.com\/services\/\"\nclass=\"primaryButton outlined light\"\ntitle=\"Accessibility Services\">\nAccessibility Services<\/a>\n\t\n            <\/div>\n            <div class=\"col-md-4\">\n                <div class=\"cardWidget cardWidgetTSA\">\n                                    <h2 class=\"h5\">TSA Security Wait Times<\/h2>\n                \n                                <!-- FlyFruition Widget Dependencies -->\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n<link rel=\"preconnect\" href=\"https:\/\/fonts.googleapis.com\" \/>\n<link rel=\"preconnect\" href=\"https:\/\/fonts.gstatic.com\" crossorigin=\"anonymous\" \/>\n<link href=\"https:\/\/fonts.googleapis.com\/css2?family=Lato:wght@400;700&#038;family=Roboto:wght@400;500;700&#038;family=Space+Grotesk:wght@400;500;600;700&#038;display=swap\" rel=\"stylesheet\" \/>\n<link rel=\"stylesheet\" href=\"https:\/\/pages.fruitionqa.com\/styles\/widget.css\" \/>\n<link rel=\"stylesheet\" href=\"https:\/\/pages.fruitionqa.com\/styles\/airports\/dtw.css\" \/>\n<script>\n(function() {\n  if (!document.querySelector('script[src*=\"kit.fontawesome.com\"]')) {\n    var s = document.createElement('script');\n    s.src = 'https:\/\/kit.fontawesome.com\/f2144e7b52.js';\n    s.crossOrigin = 'anonymous';\n    s.async = true;\n    document.head.appendChild(s);\n  }\n  if (!document.querySelector('[data-typekit-loaded], link[href*=\"typekit.net\"], script[src*=\"typekit.net\"], script[src*=\"use.typekit.net\"]')) {\n    var l = document.createElement('link');\n    l.rel = 'stylesheet';\n    l.href = 'https:\/\/use.typekit.net\/lly7wdy.css';\n    document.head.appendChild(l);\n  }\n})();\n<\/script>\n<style>\n\/* FlyFruition Widget Styles *\/\n.flyfruition-widget {\n  font-family: var(--font-family-body, 'Space Grotesk', -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif);\n  color: var(--airport-text-secondary, #3a3e46);\n  line-height: 1.5;\n}\n\n.flyfruition-widget-status {\n  display: inline-flex;\n  align-items: center;\n  gap: 6px;\n  font-size: 12px;\n  color: var(--airport-text-muted, #7d8796);\n  padding: 4px 8px;\n  background: var(--airport-bg-secondary, #f7fafc);\n  border-radius: 12px;\n  margin-bottom: 12px;\n}\n\n.flyfruition-widget-status__indicator {\n  width: 8px;\n  height: 8px;\n  border-radius: 50%;\n  animation: flyfruition-pulse 2s infinite;\n}\n\n.flyfruition-widget-status__indicator--connecting {\n  background: #fbbf24;\n}\n\n.flyfruition-widget-status__indicator--connected {\n  background: #22c55e;\n}\n\n.flyfruition-widget-status__indicator--disconnected,\n.flyfruition-widget-status__indicator--error {\n  background: #7d8796;\n  animation: none;\n}\n\n@keyframes flyfruition-pulse {\n  0%, 100% { opacity: 1; }\n  50% { opacity: 0.5; }\n}\n\n\/* Mini widget specific styles *\/\n.flyfruition-widget--mini .flight-table-wrapper {\n  max-width: 100%;\n}\n\n.flyfruition-widget--mini .filter-bar {\n  display: none;\n}\n\n.flyfruition-widget--mini .flight-table__results-count {\n  display: none;\n}\n\n.flyfruition-widget--mini .load-more-container {\n  display: none;\n}\n<\/style>\n\n<div id=\"flyfruition-security-DTW-1780478971632\" class=\"flyfruition-widget flyfruition-widget--security flyfruition-widget--mini\" data-airport=\"DTW\" data-widget=\"security\">\n  \n  <div class=\"flyfruition-widget__content\">\n    \n<style>\n\/* Minimal TSA Component Styles *\/\n.tsa-container {\n    display: flex;\n    flex-direction: column;\n    gap: var(--spacing-lg, 16px);\n    width: 100%;\n    max-width: 100%;\n}\n\n.tsa-rows {\n    display: flex;\n    flex-wrap: wrap;\n    gap: 28px;\n    align-items: flex-start;\n    width: 100%;\n}\n\n.security-wait-time {\n    background-color: #f7fafc;\n    border: 1px solid var(--color-border-medium, #e6e9eb);\n    border-radius: var(--radius-lg, 12px);\n    display: flex;\n    align-items: center;\n    gap: var(--spacing-sm, 8px);\n    padding: var(--spacing-sm, 8px) var(--spacing-xl, 20px);\n}\n\n.terminal-name-wrapper {\n    display: flex;\n    align-items: center;\n}\n\n.terminal-name {\n    font-family: 'dm-sans', -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif;\n    font-weight: var(--font-weight-bold, 700);\n    font-size: var(--font-size-lg, 18px);\n    line-height: 28px;\n    color: #05243D;\n    white-space: nowrap;\n    margin: 0;\n}\n\n.wait-time-badge {\n    background-color: #0064A7;\n    border-radius: var(--radius-md, 8px);\n    display: flex;\n    flex-direction: column;\n    align-items: center;\n    justify-content: center;\n    padding: var(--spacing-xs, 4px);\n    width: 46px;\n    height: 46px;\n    flex-shrink: 0;\n}\n\n.wait-time-number {\n    font-family: 'aktiv-grotesk', -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif;\n    font-weight: var(--font-weight-bold, 700);\n    font-size: var(--font-size-xl, 22px);\n    line-height: 32px;\n    color: #ffffff;\n    text-align: center;\n    width: 100%;\n    margin: 0;\n}\n\n.minutes-wrapper {\n    display: flex;\n    align-items: center;\n}\n\n.minutes-text {\n    font-family: 'dm-sans', -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif;\n    font-weight: var(--font-weight-regular, 400);\n    font-size: var(--font-size-lg, 18px);\n    line-height: 28px;\n    color: #05243D;\n    white-space: nowrap;\n    margin: 0;\n}\n\n@media (max-width: 767px) {\n    .security-wait-time {\n        width: 100%;\n    }\n}\n<\/style><div class=\"tsa-container\">\n    <div class=\"tsa-rows\">\n    <div class=\"security-wait-time\">\n      <div class=\"terminal-name-wrapper\">\n        <p class=\"terminal-name\">\n          Evans\n        <\/p>\n      <\/div>\n      <div class=\"wait-time-badge\">\n        <p class=\"wait-time-number\">\n          4\n        <\/p>\n      <\/div>\n      <div class=\"minutes-wrapper\">\n        <p class=\"minutes-text\">\n          Minutes\n        <\/p>\n      <\/div>\n    <\/div>\n  <\/div>\n<div class=\"tsa-rows\">\n    <div class=\"security-wait-time\">\n      <div class=\"terminal-name-wrapper\">\n        <p class=\"terminal-name\">\n          McNamara\n        <\/p>\n      <\/div>\n      <div class=\"wait-time-badge\">\n        <p class=\"wait-time-number\">\n          5\n        <\/p>\n      <\/div>\n      <div class=\"minutes-wrapper\">\n        <p class=\"minutes-text\">\n          Minutes\n        <\/p>\n      <\/div>\n    <\/div>\n  <\/div>\n  <\/div>\n  <\/div>\n<\/div>\n\n<!-- FlyFruition Live Update Script -->\n<script>\n(function() {\n  const widgetId = 'flyfruition-security-DTW-1780478971632';\n  const widgetType = 'security';\n  const airport = 'DTW';\n  const channel = 'dtw-tsa';\n  const wsUrl = 'wss:\/\/dev-api.flyfruition.com\/';\n  const wsKey = '2QicQPH7AOM7ASWXGY4VkRiUlYMhOtW';\n  const refreshUrl = 'https:\/\/pages.fruitionqa.com\/api\/widgets\/dtw\/security?mini=true';\n  const dataUrl = 'https:\/\/pages.fruitionqa.com\/api\/widgets\/dtw\/security\/data';\n  \n  let ws = null;\n  let reconnectAttempts = 0;\n  const maxReconnectAttempts = 5;\n  const reconnectDelay = 3000;\n  \n  function connect() {\n    if (ws && ws.readyState === WebSocket.OPEN) return;\n    \n    try {\n      ws = new WebSocket(wsUrl + '?publicKey=' + wsKey);\n      \n      ws.onopen = function() {\n        console.log('[FlyFruition Widget] WebSocket connected');\n        reconnectAttempts = 0;\n        \/\/ Join the channel\n        ws.send(JSON.stringify({ action: 'joinchannel', channel: channel }));\n        updateStatus('connected');\n      };\n      \n      ws.onmessage = function(event) {\n        try {\n          const data = JSON.parse(event.data);\n          if (data.channel === channel || data.type === 'update') {\n            console.log('[FlyFruition Widget] Update received, refreshing...');\n            refreshWidget().catch(function(error) {\n              console.error('[FlyFruition Widget] Failed to refresh on WebSocket update:', error);\n            });\n          }\n        } catch (e) {\n          \/\/ Non-JSON message, might be a heartbeat\n        }\n      };\n      \n      ws.onclose = function() {\n        console.log('[FlyFruition Widget] WebSocket disconnected');\n        updateStatus('disconnected');\n        scheduleReconnect();\n      };\n      \n      ws.onerror = function(error) {\n        console.error('[FlyFruition Widget] WebSocket error:', error);\n        updateStatus('error');\n      };\n    } catch (error) {\n      console.error('[FlyFruition Widget] Failed to connect:', error);\n      scheduleReconnect();\n    }\n  }\n  \n  function scheduleReconnect() {\n    if (reconnectAttempts < maxReconnectAttempts) {\n      reconnectAttempts++;\n      console.log('[FlyFruition Widget] Reconnecting in ' + (reconnectDelay \/ 1000) + 's (attempt ' + reconnectAttempts + ')');\n      setTimeout(connect, reconnectDelay);\n    }\n  }\n  \n  function updateStatus(status) {\n    const statusEl = document.querySelector('#' + widgetId + ' .flyfruition-widget-status');\n    if (statusEl) {\n      statusEl.setAttribute('data-status', status);\n      const indicator = statusEl.querySelector('.flyfruition-widget-status__indicator');\n      if (indicator) {\n        indicator.className = 'flyfruition-widget-status__indicator flyfruition-widget-status__indicator--' + status;\n      }\n    }\n  }\n  \n  function refreshWidget() {\n    const container = document.getElementById(widgetId);\n    if (!container) return Promise.reject(new Error('Container not found'));\n\n    \/\/ Try JSON data update first (for widgets with implemented DOM update logic)\n    if (hasJsonUpdateSupport(widgetType)) {\n      console.log('[FlyFruition Widget] Fetching fresh JSON data from:', dataUrl);\n      return fetch(dataUrl)\n        .then(function(response) {\n          if (!response.ok) throw new Error('Failed to fetch JSON data');\n          return response.json();\n        })\n        .then(function(data) {\n          console.log('[FlyFruition Widget] Fresh JSON data received:', data);\n          updateWidgetWithData(container, data, widgetType, airport);\n        })\n        .catch(function(error) {\n          console.error('[FlyFruition Widget] Failed to fetch JSON data, falling back to HTML:', error);\n          return refreshWidgetWithHtml(container);\n        });\n    } else {\n      \/\/ Fall back to HTML replacement for widgets without JSON update logic\n      return refreshWidgetWithHtml(container);\n    }\n  }\n\n  function hasJsonUpdateSupport(type) {\n    \/\/ Widgets with fully implemented DOM update logic using shared rendering utilities\n    return ['weather', 'security', 'parking', 'tsa-cards', 'dine-shop-relax'].indexOf(type) !== -1;\n  }\n\n  function refreshWidgetWithHtml(container) {\n    console.log('[FlyFruition Widget] Fetching fresh HTML from:', refreshUrl);\n    return fetch(refreshUrl)\n      .then(function(response) {\n        if (!response.ok) throw new Error('Failed to fetch HTML');\n        return response.text();\n      })\n      .then(function(html) {\n        console.log('[FlyFruition Widget] Fresh HTML received, updating widget');\n        \/\/ Extract just the widget content (not dependencies)\n        var parser = new DOMParser();\n        var doc = parser.parseFromString(html, 'text\/html');\n        var newContent = doc.querySelector('.flyfruition-widget__content');\n        var currentContent = container.querySelector('.flyfruition-widget__content');\n        if (newContent &#038;&#038; currentContent) {\n          currentContent.innerHTML = newContent.innerHTML;\n        }\n      })\n      .catch(function(error) {\n        console.error('[FlyFruition Widget] Failed to refresh with HTML:', error);\n        throw error;\n      });\n  }\n\n  function updateWidgetWithData(container, data, type, airportCode) {\n    \/\/ Widget-specific JSON-to-DOM update logic\n    switch(type) {\n      case 'weather':\n        updateWeatherWidget(container, data);\n        break;\n      case 'security':\n        updateSecurityWidget(container, data);\n        break;\n      case 'parking':\n        updateParkingWidget(container, data);\n        break;\n      case 'tsa-cards':\n        updateTSACardsWidget(container, data);\n        break;\n      case 'dine-shop-relax':\n        updateDineShopRelaxWidget(container, data);\n        break;\n      default:\n        console.warn('[FlyFruition Widget] No JSON update logic for widget type:', type);\n    }\n  }\n\n  function updateWeatherWidget(container, data) {\n    var weatherEl = container.querySelector('.weather');\n    if (!weatherEl || !data) return;\n\n    var tempF = Math.round(data.temp_f);\n    var tempC = Math.round(data.temp_c);\n    var weather = data.weather;\n    var icon = getWeatherIcon(weather);\n\n    \/\/ Clear existing content\n    weatherEl.innerHTML = '';\n\n    \/\/ Create icon span safely\n    var iconSpan = document.createElement('span');\n    iconSpan.className = icon;\n    weatherEl.appendChild(iconSpan);\n\n    \/\/ Create text node to prevent XSS\n    var textNode = document.createTextNode(tempF + '\u00b0F \/ ' + tempC + '\u00b0C \/ ' + weather);\n    weatherEl.appendChild(textNode);\n  }\n\n  function getWeatherIcon(weather) {\n    var w = (weather || '').toLowerCase();\n    if (w.includes('clear') || w.includes('sunny')) return 'fa-solid fa-sun';\n    if (w.includes('cloud')) return 'fa-solid fa-clouds';\n    if (w.includes('rain')) return 'fa-solid fa-cloud-rain';\n    if (w.includes('snow')) return 'fa-solid fa-snowflake';\n    if (w.includes('storm') || w.includes('thunder')) return 'fa-solid fa-cloud-bolt';\n    if (w.includes('fog') || w.includes('mist')) return 'fa-solid fa-smog';\n    return 'fa-solid fa-cloud-sun';\n  }\n\n  \/\/ Security Widget Update\n  function updateSecurityWidget(container, data) {\n    var tsaContainer = container.querySelector('.tsa-container');\n    if (!tsaContainer || !data || !data.checkpoints) return;\n\n    var newHtml = renderMinimalSecurityWidget(data.checkpoints);\n    var temp = document.createElement('div');\n    temp.innerHTML = newHtml;\n    var newContainer = temp.firstElementChild;\n\n    if (newContainer) {\n      tsaContainer.parentElement.replaceChild(newContainer, tsaContainer);\n    }\n  }\n\n  function renderMinimalSecurityWidget(checkpoints) {\n    if (checkpoints.length === 0) {\n      return '<div class=\"tsa-container\"><div class=\"tsa-row tsa-row-last\"><div class=\"tsa-name\"><p>No TSA checkpoint information available.<\/p><\/div><\/div><\/div>';\n    }\n\n    var rowsHtml = checkpoints.map(function(checkpoint, index) {\n      return renderMinimalSecurityRow(checkpoint, index === checkpoints.length - 1);\n    }).join('\\n');\n\n    return '<div class=\"tsa-container\">' + rowsHtml + '<\/div>';\n  }\n\n  function renderMinimalSecurityRow(checkpoint, isLast) {\n    var lowestWaitTime = getLowestWaitTime(checkpoint);\n    var statusClass = lowestWaitTime ? 'status-tag--open' : 'status-tag--closed';\n    var statusIcon = lowestWaitTime ? 'fa-circle-check' : 'fa-circle-xmark';\n    var statusText = lowestWaitTime || 'Closed';\n    var rowClass = isLast ? 'tsa-row tsa-row-last' : 'tsa-row';\n\n    return '<div class=\"' + rowClass + '\"><div class=\"tsa-name\"><p>' + checkpoint.title + '<\/p><\/div><div class=\"status-tag ' + statusClass + '\"><i class=\"fa-light ' + statusIcon + '\"><\/i>' + statusText + '<\/div><\/div>';\n  }\n\n  function getLowestWaitTime(checkpoint) {\n    if (!checkpoint.lanes || checkpoint.lanes.length === 0) return null;\n    var times = checkpoint.lanes.filter(function(lane) { return lane.wait_time; }).map(function(lane) { return lane.wait_time; });\n    return times.length > 0 ? times.sort()[0] : null;\n  }\n\n  \/\/ Parking Widget Update\n  function updateParkingWidget(container, data) {\n    var parkingContainer = container.querySelector('.parking-container');\n    if (!parkingContainer || !data || !data.parkingLots) return;\n\n    var newHtml = renderMinimalParkingWidget(data.parkingLots);\n    var temp = document.createElement('div');\n    temp.innerHTML = newHtml;\n    var newContainer = temp.firstElementChild;\n\n    if (newContainer) {\n      parkingContainer.parentElement.replaceChild(newContainer, parkingContainer);\n    }\n  }\n\n  function renderMinimalParkingWidget(lots) {\n    if (lots.length === 0) {\n      return '<div class=\"parking-container\"><div class=\"parking-row parking-row-last\"><div class=\"parking-name\"><p>No parking information available.<\/p><\/div><\/div><\/div>';\n    }\n\n    var rowsHtml = lots.map(function(lot, index) {\n      return renderMinimalParkingRow(lot, index === lots.length - 1);\n    }).join('\\n');\n\n    return '<div class=\"parking-container\">' + rowsHtml + '<\/div>';\n  }\n\n  function renderMinimalParkingRow(lot, isLast) {\n    var parkingStatus = getParkingStatus(lot.status);\n    var isOpen = parkingStatus === 'open' || parkingStatus === 'limited';\n    var statusClass = isOpen ? 'status-tag--open' : 'status-tag--closed';\n    var statusIcon = isOpen ? 'fa-circle-check' : 'fa-circle-xmark';\n    var statusText = isOpen ? 'Open' : 'Closed';\n    var rowClass = isLast ? 'parking-row parking-row-last' : 'parking-row';\n\n    return '<div class=\"' + rowClass + '\"><div class=\"parking-name\"><p>' + lot.title + '<\/p><\/div><div class=\"status-tag ' + statusClass + '\"><i class=\"fa-light ' + statusIcon + '\"><\/i>' + statusText + '<\/div><\/div>';\n  }\n\n  function getParkingStatus(status) {\n    if (!status) return 'unknown';\n    var s = status.toLowerCase();\n    if (s.includes('open')) return 'open';\n    if (s.includes('closed')) return 'closed';\n    if (s.includes('limited') || s.includes('full')) return 'limited';\n    return 'unknown';\n  }\n\n  \/\/ TSA Cards Widget Update\n  function updateTSACardsWidget(container, data) {\n    var cardsContainer = container.querySelector('.tsa-cards-container');\n    if (!cardsContainer || !data || !data.checkpoints) return;\n\n    var newHtml = renderTSACardsWidget(data.checkpoints);\n    var temp = document.createElement('div');\n    temp.innerHTML = newHtml;\n    var newContainer = temp.firstElementChild;\n\n    if (newContainer) {\n      cardsContainer.parentElement.replaceChild(newContainer, cardsContainer);\n    }\n  }\n\n  function renderTSACardsWidget(checkpoints) {\n    if (checkpoints.length === 0) {\n      return '<div class=\"tsa-cards-container\"><div class=\"tsa-card tsa-card--primary\"><div class=\"tsa-card__body\"><p class=\"tsa-card__wait-time\">No checkpoint information available.<\/p><\/div><\/div><\/div>';\n    }\n\n    var cardsHtml = checkpoints.map(function(checkpoint, index) {\n      return renderTSACard(checkpoint, index);\n    }).join('\\n    ');\n\n    return '<div class=\"tsa-cards-container\">' + cardsHtml + '<\/div>';\n  }\n\n  function renderTSACard(checkpoint, index) {\n    var variant = getCardVariant(index);\n    var lowestWaitTime = getLowestWaitTime(checkpoint);\n    var gatesInfo = extractGatesInfo(checkpoint);\n    var infoList = getCheckpointInfoList(checkpoint);\n    var displayWaitTime = lowestWaitTime || 'N\/A';\n\n    var gatesHtml = gatesInfo ? '<p class=\"tsa-card__gates\">' + gatesInfo + '<\/p>' : '';\n    var infoListHtml = infoList.length > 0 ? '<ul class=\"tsa-card__info-list\">' + infoList.map(function(item) { return '<li>' + item + '<\/li>'; }).join('\\n        ') + '<\/ul>' : '';\n\n    return '<div class=\"tsa-card tsa-card--' + variant + '\"><div class=\"tsa-card__header tsa-card__header--' + variant + '\"><h2 class=\"tsa-card__terminal\">' + checkpoint.title + '<\/h2>' + gatesHtml + '<\/div><div class=\"tsa-card__body\"><p class=\"tsa-card__wait-time\">' + displayWaitTime + '<\/p>' + infoListHtml + '<\/div><\/div>';\n  }\n\n  function getCardVariant(index) {\n    var variants = ['primary', 'secondary', 'tertiary'];\n    return variants[index % 3];\n  }\n\n  function extractGatesInfo(checkpoint) {\n    var searchText = (checkpoint.location || '') + ' ' + (checkpoint.description || '');\n    var gateMatch = searchText.match(\/Gates?\\s+[\\d\\-,\\s]+\/i);\n    return gateMatch ? gateMatch[0] : null;\n  }\n\n  function getCheckpointInfoList(checkpoint) {\n    var infoItems = [];\n    var openingInfo = checkpoint.lanes.find(function(lane) { return lane.opening_info; });\n    if (openingInfo) infoItems.push(openingInfo.opening_info);\n\n    var hasPreCheck = checkpoint.lanes.some(function(lane) {\n      var title = lane.title.toLowerCase();\n      return title.includes('precheck') || title.includes('pre-check') || title.includes('pre\u2713');\n    });\n    if (hasPreCheck) infoItems.push('TSA PreCheck');\n\n    var hasClear = checkpoint.lanes.some(function(lane) {\n      return lane.title.toLowerCase().includes('clear');\n    }) || (checkpoint.description && checkpoint.description.toLowerCase().includes('clear'));\n    if (hasClear) infoItems.push('CLEAR+');\n\n    return infoItems;\n  }\n\n  \/\/ Dine Shop Relax Widget Update\n  function updateDineShopRelaxWidget(container, data) {\n    var gridEl = container.querySelector('.amenities-grid');\n    if (!gridEl || !data || !data.amenities) return;\n\n    var newHtml = renderAmenitiesGrid(data.amenities);\n    var temp = document.createElement('div');\n    temp.innerHTML = newHtml;\n    var newGridOrEmpty = temp.firstElementChild;\n\n    if (!newGridOrEmpty) return;\n    gridEl.parentElement.replaceChild(newGridOrEmpty, gridEl);\n\n    \/\/ Trigger event to notify filter script that grid was updated\n    var event = new CustomEvent('flyfruition:grid-updated', { bubbles: true });\n    container.dispatchEvent(event);\n  }\n\n  \/\/ Helper functions for time formatting\n  function convertTo12Hour(time) {\n    var match = time.match(\/(\\d{1,2}):(\\d{2})\/);\n    if (!match) return time;\n\n    var hours = parseInt(match[1], 10);\n    var minutes = match[2];\n    var ampm = hours >= 12 ? 'pm' : 'am';\n\n    if (hours === 0) {\n      hours = 12; \/\/ Midnight\n    } else if (hours > 12) {\n      hours -= 12; \/\/ Convert to 12-hour\n    }\n\n    return hours + ':' + minutes + ampm;\n  }\n\n  function formatOperationHours(hours) {\n    if (!hours) return '';\n    \/\/ Replace all time patterns (HH:MM) with 12-hour format\n    return hours.replace(\/(\\d{1,2}):(\\d{2})\/g, function(match) {\n      return convertTo12Hour(match);\n    });\n  }\n\n  function renderAmenitiesGrid(items) {\n    if (items.length === 0) {\n      return '<div class=\"amenities-grid__empty\"><i class=\"fa-light fa-magnifying-glass\" aria-hidden=\"true\"><\/i><p class=\"amenities-grid__empty-title\">No results found<\/p><p class=\"amenities-grid__empty-text\">Try adjusting your search or filters<\/p><\/div>';\n    }\n\n    \/\/ Sort items by category (Dine, Shop, Relax) then alphabetically within each category\n    var categoryOrder = { dine: 0, shop: 1, relax: 2 };\n    var sortedItems = items.slice().sort(function(a, b) {\n      var categoryA = getAmenityCategory(a.type);\n      var categoryB = getAmenityCategory(b.type);\n\n      \/\/ First sort by category\n      var categoryDiff = categoryOrder[categoryA] - categoryOrder[categoryB];\n      if (categoryDiff !== 0) {\n        return categoryDiff;\n      }\n\n      \/\/ Within same category, sort alphabetically by name\n      return a.name.localeCompare(b.name);\n    });\n\n    var cardsHtml = sortedItems.map(function(item) {\n      return renderAmenityCard(item);\n    }).join('\\n');\n\n    return '<div class=\"amenities-grid\" role=\"region\" aria-label=\"Airport amenities\">' + cardsHtml + '<\/div>';\n  }\n\n  function renderAmenityCard(item) {\n    var category = getAmenityCategory(item.type);\n    var imageUrl = item.thumbnail || (item.images && item.images[0]) || getPlaceholderImage(category);\n    var location = (item.coordinates && item.coordinates.structureName) || 'Airport';\n    var mapUrl = 'https:\/\/maps.metroairport.com\/?poiId=' + item.sourceId;\n    var altText = item.name + ' ' + (category === 'dine' ? 'dining location' : category === 'shop' ? 'retail location' : 'relaxation area');\n    var description = item.description || '';\n\n    \/\/ Prepare search text and offer status for filtering\n    var searchText = (item.description || '').replace(\/\"\/g, '&quot;');\n    var hasOffer = item.metadata && item.metadata.dealTitle && item.metadata.dealTitle.trim() ? 'true' : 'false';\n\n    \/\/ Render info tags (location with airplane icon and hours without background)\n    var infoTags = [];\n    if (item.nearbyLandmark) {\n      infoTags.push('<div class=\"amenity-card__info-tag--location\"><i class=\"fa-light fa-plane-departure\" aria-hidden=\"true\"><\/i><span>' + item.nearbyLandmark + '<\/span><\/div>');\n    }\n    if (item.operationHours) {\n      infoTags.push('<div class=\"amenity-card__info-tag--hours\"><i class=\"fa-light fa-clock\" aria-hidden=\"true\"><\/i><span>' + formatOperationHours(item.operationHours) + '<\/span><\/div>');\n    }\n    var infoTagsHtml = infoTags.length > 0 ? '<div class=\"amenity-card__info-tags\">' + infoTags.join('') + '<\/div>' : '';\n\n    \/\/ Truncate description if longer than 150 characters\n    var maxDescriptionLength = 150;\n    var needsTruncation = description && description.length > maxDescriptionLength;\n    var truncatedDescription = needsTruncation ? description.substring(0, maxDescriptionLength) + '...' : description;\n\n    var tagHtml = renderAmenityTag(item.type);\n    var descHtml = description ? '<p class=\"amenity-card__description\" data-full-text=\"' + description.replace(\/\"\/g, '&quot;') + '\" data-truncated-text=\"' + truncatedDescription.replace(\/\"\/g, '&quot;') + '\">' + truncatedDescription + '<\/p>' : '';\n    var toggleHtml = needsTruncation ? '<button class=\"amenity-card__toggle-description\" aria-expanded=\"false\"><span class=\"amenity-card__toggle-text\">Show full description<\/span><i class=\"fa-light fa-circle-plus\" aria-hidden=\"true\"><\/i><\/button>' : '';\n\n    return '<article class=\"amenity-card\" data-category=\"' + category + '\" data-location=\"' + location + '\" data-search-text=\"' + searchText + '\" data-has-offer=\"' + hasOffer + '\"><div class=\"amenity-card__image-wrapper\"><img decoding=\"async\" src=\"' + imageUrl + '\" alt=\"' + altText + '\" class=\"amenity-card__image\" loading=\"lazy\">' + tagHtml + '<\/div><div class=\"amenity-card__content\">' + infoTagsHtml + '<div class=\"amenity-card__body\"><h3 class=\"amenity-card__title\">' + item.name + '<\/h3>' + descHtml + toggleHtml + '<\/div><a href=\"' + mapUrl + '\" class=\"amenity-card__map-btn\" target=\"_blank\" rel=\"noopener noreferrer\" aria-label=\"Open interactive map for ' + item.name + ' (opens in new window)\" title=\"Open interactive map for ' + item.name + '\"><i class=\"fa-light fa-location-dot\"><\/i>Open Interactive Map<\/a><\/div><\/article>';\n  }\n\n  function renderAmenityTag(type) {\n    var category = getAmenityCategory(type);\n    var label = getAmenityCategoryLabel(category);\n    var icon = getAmenityCategoryIcon(category);\n    var cssClass = getAmenityCategoryClass(category);\n    return '<span class=\"amenity-card__tag ' + cssClass + '\" aria-label=\"Category: ' + label + '\"><i class=\"fa-light ' + icon + '\" aria-hidden=\"true\"><\/i>' + label + '<\/span>';\n  }\n\n  function getAmenityCategory(type) {\n    if (!type) return 'relax';\n    var t = type.toLowerCase();\n    if (t.includes('restaurant') || t.includes('dining') || t.includes('food')) return 'dine';\n    if (t.includes('shop') || t.includes('retail') || t.includes('store')) return 'shop';\n    return 'relax';\n  }\n\n  function getAmenityCategoryLabel(category) {\n    return category === 'dine' ? 'Dine' : category === 'shop' ? 'Shop' : 'Relax';\n  }\n\n  function getAmenityCategoryIcon(category) {\n    return category === 'dine' ? 'fa-utensils' : category === 'shop' ? 'fa-bag-shopping' : 'fa-couch';\n  }\n\n  function getAmenityCategoryClass(category) {\n    return 'amenity-card__tag--' + category;\n  }\n\n  function getPlaceholderImage(category) {\n    return category === 'dine' ? '\/images\/placeholder-dine.jpg' : category === 'shop' ? '\/images\/placeholder-shop.jpg' : '\/images\/placeholder-relax.jpg';\n  }\n\n  function initialize() {\n    console.log('[FlyFruition Widget] Fetching fresh data before connecting...');\n    \/\/ First, refresh the widget with fresh data from the endpoint\n    refreshWidget()\n      .then(function() {\n        console.log('[FlyFruition Widget] Fresh data loaded, now connecting to WebSocket...');\n        \/\/ Then connect to WebSocket for live updates\n        connect();\n      })\n      .catch(function(error) {\n        console.error('[FlyFruition Widget] Failed to fetch initial data, connecting to WebSocket anyway...');\n        \/\/ Even if initial fetch fails, still connect to WebSocket\n        connect();\n      });\n  }\n\n  \/\/ Initialize when DOM is ready\n  if (document.readyState === 'loading') {\n    document.addEventListener('DOMContentLoaded', initialize);\n  } else {\n    initialize();\n  }\n  \n  \/\/ Cleanup on page unload\n  window.addEventListener('beforeunload', function() {\n    if (ws) {\n      ws.close();\n    }\n  });\n})();\n<\/script>                                \n<a class=\"links medium light \" target=\"_self\" rel=\"noopener noreferrer\"  href=\"\/security\/\">\n\n\t\n\t<span class=\"linksTitle\">Safety and Security Info<\/span>\n    \n\t\t<span class=\"fa-light fa-arrow-right iconRight\"><\/span>\n\t<\/a>\n                <\/div>\n            <\/div>\n            <div class=\"col-md-4\">\n                <div class=\"cardWidget\">\n                    \n<h2 class=\"h5\">DTW has two terminals: McNamara and Evans. <\/h2>\n<p>Enter and clear security at your airline\u2019s terminal.<\/p>\n    <script>\n(function(d){var config={kitId:'lly7wdy',scriptTimeout:3000,async:true},h=d.documentElement,t=setTimeout(function(){h.className=h.className.replace(\/\bwf-loading\b\/g,\"\")+\" wf-inactive\";},config.scriptTimeout),tk=d.createElement(\"script\"),f=false,s=d.getElementsByTagName(\"script\")[0],a;h.className+=\" wf-loading\";tk.src='https:\/\/use.typekit.net\/'+config.kitId+'.js';tk.async=true;tk.onload=tk.onreadystatechange=function(){a=this.readyState;if(f||a&&a!=\"complete\"&&a!=\"loaded\")return;f=true;clearTimeout(t);try{Typekit.load(config)}catch(e){}};s.parentNode.insertBefore(tk,s)})(document);\n<\/script>\n<style>\n\/* FlyFruition Design System - Design Tokens (DTW) *\/\n:root {\n    --font-family-body: 'aktiv-grotesk', -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif;\n    --font-family-heading: 'aktiv-grotesk', -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif;\n    --font-size-xs: 11px;\n    --font-size-sm: 13px;\n    --font-size-base: 15px;\n    --font-size-md: 17px;\n    --font-size-lg: 18px;\n    --font-size-xl: 22px;\n    --font-weight-regular: 400;\n    --font-weight-medium: 500;\n    --font-weight-semibold: 600;\n    --font-weight-bold: 700;\n    --line-height-normal: 1.5;\n    --color-primary: #0064A7;\n    --color-text-heading: #05243D;\n    --color-text-body: #3a3e46;\n    --color-text-light: #7d8796;\n    --color-border-medium: #e6e9eb;\n    --color-border-neutral: #C6C8CF;\n    --color-bg-primary: #ffffff;\n    --color-bg-light: #f7fafc;\n    --color-bg-blue-light: #d2e0fe;\n    --spacing-xs: 4px;\n    --spacing-sm: 8px;\n    --spacing-md: 12px;\n    --spacing-lg: 16px;\n    --spacing-xl: 20px;\n    --spacing-2xl: 24px;\n    --spacing-3xl: 32px;\n    --radius-sm: 4px;\n    --radius-lg: 12px;\n    --transition-fast: 0.15s ease;\n}\n\n\/* Airline Search Component Styles *\/\n.airline-search {\n    display: flex;\n    flex-direction: column;\n    gap: var(--spacing-3xl);\n    position: relative;\n    max-width: 480px;\n    font-family: var(--font-family-body);\n}\n\n.airline-search__input-group {\n    display: flex;\n    flex-direction: column;\n    gap: var(--spacing-xs);\n    position: relative;\n}\n\n.airline-search__label-row {\n    display: flex;\n    align-items: center;\n    justify-content: space-between;\n    gap: var(--spacing-lg);\n}\n\n.airline-search__label {\n    font-size: var(--font-size-md);\n    font-weight: var(--font-weight-medium);\n    line-height: 26px;\n    color: #3A3E48;\n}\n\n.airline-search__input-wrapper {\n    position: relative;\n    display: flex;\n    align-items: center;\n}\n\n.airline-search__select {\n    width: 100%;\n    padding: var(--spacing-md) var(--spacing-lg);\n    padding-right: 48px;\n    font-size: var(--font-size-base);\n    font-weight: var(--font-weight-regular);\n    line-height: 22px;\n    color: var(--color-text-body);\n    background: var(--color-bg-primary);\n    border: 1px solid var(--color-border-neutral);\n    border-radius: var(--radius-sm);\n    appearance: none;\n    cursor: pointer;\n    transition: border-color var(--transition-fast);\n}\n\n.airline-search__select:hover {\n    border-color: var(--color-primary);\n}\n\n.airline-search__select:focus {\n    outline: none;\n    border-color: var(--color-primary);\n    box-shadow: 0 0 0 2px var(--color-bg-blue-light);\n}\n\n.airline-search__select-icon {\n    position: absolute;\n    right: var(--spacing-lg);\n    color: var(--color-text-light);\n    font-size: 16px;\n    pointer-events: none;\n}\n\n.airline-search__reset {\n    font-size: var(--font-size-md);\n    font-weight: var(--font-weight-medium);\n    line-height: 26px;\n    color: var(--color-primary);\n    text-decoration: underline;\n    cursor: pointer;\n    background: none;\n    border: none;\n    padding: 0;\n    transition: opacity var(--transition-fast);\n}\n\n.airline-search__reset--hidden {\n    display: none;\n}\n\n.airline-search__reset:hover {\n    opacity: 0.8;\n}\n\n.airline-search__results {\n    display: flex;\n    flex-direction: column;\n    gap: var(--spacing-3xl);\n}\n\n.airline-search__results--hidden {\n    display: none;\n}\n\n.airline-search__logo {\n    max-height: 40px;\n    width: auto;\n    object-fit: contain;\n    align-self: flex-start;\n}\n\n.airline-search__terminal-info {\n    font-size: var(--font-size-lg);\n    font-weight: var(--font-weight-medium);\n    line-height: 30px;\n    color: var(--color-text-body);\n    margin: 0;\n}\n\n.airline-search__links {\n    display: flex;\n    flex-direction: column;\n    gap: var(--spacing-sm);\n}\n\n.airline-search__link {\n    display: inline-flex;\n    align-items: center;\n    gap: var(--spacing-sm);\n    padding: 0 2px;\n    font-size: var(--font-size-md);\n    font-weight: var(--font-weight-medium);\n    line-height: 26px;\n    color: var(--color-primary);\n    text-decoration: none;\n    transition: opacity var(--transition-fast);\n}\n\n.airline-search__link:hover {\n    opacity: 0.8;\n}\n\n.airline-search__link-icon {\n    font-size: 16px;\n    color: var(--color-primary);\n}\n\n.airline-search__link--hidden {\n    display: none;\n}\n\n@media (max-width: 767px) {\n    .airline-search {\n        gap: var(--spacing-2xl);\n        max-width: 100%;\n    }\n}\n<\/style>\n\n<div id=\"flyfruition-airline-search-DTW-1780478972246\" class=\"flyfruition-widget flyfruition-widget--airline-search\" data-airport=\"DTW\" data-widget=\"airline-search\">\n  <div class=\"flyfruition-widget__content\">\n    <div class=\"airline-search\" role=\"search\" aria-label=\"Find your terminal by airline\">\n    <!-- Airline Selection -->\n    <div class=\"airline-search__input-group\">\n        <div class=\"airline-search__label-row\">\n            <label class=\"airline-search__label\" for=\"flyfruition-airline-search-DTW-1780478972246-select\">What airline are you flying?<\/label>\n            <button class=\"airline-search__reset airline-search__reset--hidden\" type=\"button\" id=\"flyfruition-airline-search-DTW-1780478972246-reset\" aria-label=\"Reset search results\">\n                Reset Results\n            <\/button>\n        <\/div>\n        <div class=\"airline-search__input-wrapper\">\n            <select class=\"airline-search__select\" id=\"flyfruition-airline-search-DTW-1780478972246-select\" name=\"airline\">\n                <option value=\"\">Select an airline&#8230;<\/option>\n                <option value=\"am\" data-logo=\"https:\/\/cdn.flyfruition.com\/airlines\/AM\/logo.png\" data-terminal=\"McNamara\" data-concourse=\"A\">AeroMexico<\/option>\n                <option value=\"ac\" data-logo=\"https:\/\/cdn.flyfruition.com\/airlines\/AC\/logo.png\" data-terminal=\"Evans\" data-concourse=\"D\">Air Canada<\/option>\n                <option value=\"af\" data-logo=\"https:\/\/cdn.flyfruition.com\/airlines\/AF\/logo.png\" data-terminal=\"McNamara\" data-concourse=\"A\">Air France<\/option>\n                <option value=\"as\" data-logo=\"https:\/\/cdn.flyfruition.com\/airlines\/AS\/logo.png\" data-terminal=\"Evans\" data-concourse=\"D\">Alaska Airlines<\/option>\n                <option value=\"aa\" data-logo=\"https:\/\/cdn.flyfruition.com\/airlines\/AA\/logo.png\" data-terminal=\"Evans\" data-concourse=\"D\">American Airlines<\/option>\n                <option value=\"dl\" data-logo=\"https:\/\/cdn.flyfruition.com\/airlines\/DL\/logo.png\" data-terminal=\"McNamara\" data-concourse=\"A\">Delta Air Lines<\/option>\n                <option value=\"f9\" data-logo=\"https:\/\/cdn.flyfruition.com\/airlines\/F9\/logo.png\" data-terminal=\"Evans\" data-concourse=\"D\">Frontier<\/option>\n                <option value=\"b6\" data-logo=\"https:\/\/cdn.flyfruition.com\/airlines\/B6\/logo.png\" data-terminal=\"Evans\" data-concourse=\"D\">JetBlue<\/option>\n                <option value=\"kl\" data-logo=\"https:\/\/cdn.flyfruition.com\/airlines\/KL\/logo.png\" data-terminal=\"\" data-concourse=\"\">KLM<\/option>\n                <option value=\"lh\" data-logo=\"https:\/\/cdn.flyfruition.com\/airlines\/LH\/logo.png\" data-terminal=\"Evans\" data-concourse=\"D\">Lufthansa<\/option>\n                <option value=\"rj\" data-logo=\"https:\/\/cdn.flyfruition.com\/airlines\/RJ\/logo.png\" data-terminal=\"Evans\" data-concourse=\"\">Royal Jordanian<\/option>\n                <option value=\"oo\" data-logo=\"https:\/\/cdn.flyfruition.com\/airlines\/OO\/logo.svg\" data-terminal=\"\" data-concourse=\"\">SkyWest Airlines<\/option>\n                <option value=\"wn\" data-logo=\"https:\/\/cdn.flyfruition.com\/airlines\/WN\/logo.png\" data-terminal=\"Evans\" data-concourse=\"D\">Southwest<\/option>\n                <option value=\"sy\" data-logo=\"https:\/\/cdn.flyfruition.com\/airlines\/SY\/logo.png\" data-terminal=\"Evans\" data-concourse=\"\">Sun Country Airlines<\/option>\n                <option value=\"tk\" data-logo=\"https:\/\/cdn.flyfruition.com\/airlines\/TK\/logo.png\" data-terminal=\"Evans\" data-concourse=\"D\">Turkish Airlines<\/option>\n                <option value=\"ua\" data-logo=\"https:\/\/cdn.flyfruition.com\/airlines\/UA\/logo.png\" data-terminal=\"Evans\" data-concourse=\"D\">United<\/option>\n                <option value=\"va\" data-logo=\"https:\/\/cdn.flyfruition.com\/airlines\/VA\/logo.png\" data-terminal=\"\" data-concourse=\"D\">V Australia<\/option>\n                <option value=\"ws\" data-logo=\"https:\/\/cdn.flyfruition.com\/airlines\/WS\/logo.png\" data-terminal=\"McNamara\" data-concourse=\"\">WestJet Airlines<\/option>\n            <\/select>\n            <i class=\"fa-regular fa-chevron-down airline-search__select-icon\" aria-hidden=\"true\"><\/i>\n        <\/div>\n    <\/div>\n\n    <!-- Results Section -->\n    <div class=\"airline-search__results airline-search__results--hidden\" id=\"flyfruition-airline-search-DTW-1780478972246-results\">\n        <img decoding=\"async\" src=\"\" alt=\"\" class=\"airline-search__logo\" id=\"flyfruition-airline-search-DTW-1780478972246-logo\">\n        <p class=\"airline-search__terminal-info\" id=\"flyfruition-airline-search-DTW-1780478972246-terminal-info\"><\/p>\n    <\/div>\n\n    <!-- Action Links -->\n    <div class=\"airline-search__links\">\n        <a href=\"#\" target=\"\" class=\"airline-search__link airline-search__link--hidden\" id=\"flyfruition-airline-search-DTW-1780478972246-parking-link\">\n            <span>View Terminal Parking Info<\/span>\n            <i class=\"fa-light fa-arrow-right airline-search__link-icon\" aria-hidden=\"true\"><\/i>\n        <\/a>\n        <a href=\"#\" target=\"_blank\" class=\"airline-search__link airline-search__link--hidden\" id=\"flyfruition-airline-search-DTW-1780478972246-map-link\">\n            <span>Open Interactive Map<\/span>\n            <i class=\"fa-light fa-arrow-right airline-search__link-icon\" aria-hidden=\"true\"><\/i>\n        <\/a>\n        <a href=\"\/airlines\" class=\"airline-search__link\" id=\"flyfruition-airline-search-DTW-1780478972246-all-airlines-link\">\n            <span>View all Airline Information<\/span>\n            <i class=\"fa-light fa-arrow-right airline-search__link-icon\" aria-hidden=\"true\"><\/i>\n        <\/a>\n    <\/div>\n<\/div>\n  <\/div>\n<\/div>\n\n<script>\n(function() {\n    \/\/ Airline Search Widget - flyfruition-airline-search-DTW-1780478972246 (Static)\n    const widgetId = 'flyfruition-airline-search-DTW-1780478972246';\n    \n    \/\/ Parking URLs by terminal (lowercase keys)\n    \/\/ Using relative URLs with hash anchors so they work in all environments (ddev, preprod, prod)\n    var parkingUrls = {\n        'mcnamara': '\/parking-and-transportation\/parking\/#parkingoptions',\n        'evans': '\/parking-and-transportation\/parking\/#parkingoptions'\n    };\n    \n    \/\/ Interactive map URLs by terminal + concourse (lowercase keys)\n    var mapUrls = {\n        'mcnamara-a': 'https:\/\/maps.metroairport.com\/?poiId=712',\n        'mcnamara-b': 'https:\/\/maps.metroairport.com\/?poiId=715',\n        'mcnamara-c': 'https:\/\/maps.metroairport.com\/?poiId=714',\n        'evans-d': 'https:\/\/maps.metroairport.com\/?poiId=713'\n    };\n    \n    \/\/ DOM Elements\n    const select = document.getElementById(widgetId + '-select');\n    const results = document.getElementById(widgetId + '-results');\n    const logo = document.getElementById(widgetId + '-logo');\n    const terminalInfo = document.getElementById(widgetId + '-terminal-info');\n    const resetButton = document.getElementById(widgetId + '-reset');\n    const parkingLink = document.getElementById(widgetId + '-parking-link');\n    const mapLink = document.getElementById(widgetId + '-map-link');\n    \n    if (!select || !results || !logo || !terminalInfo || !resetButton) {\n        console.error('[AirlineSearch] Widget elements not found');\n        return;\n    }\n    \n    \/\/ Update results when airline changes\n    select.addEventListener('change', function() {\n        var selectedOption = this.options[this.selectedIndex];\n        \n        if (selectedOption && selectedOption.value) {\n            var airlineName = selectedOption.textContent;\n            var airlineLogo = selectedOption.getAttribute('data-logo');\n            var terminal = selectedOption.getAttribute('data-terminal');\n            var concourse = selectedOption.getAttribute('data-concourse');\n            \n            logo.src = airlineLogo || '';\n            logo.alt = airlineName + ' logo';\n            \n            if (terminal) {\n                terminalInfo.textContent = airlineName + ' flies out of ' + terminal + ' Terminal';\n                parkingLink.querySelector('span').textContent = 'View ' + terminal + ' Terminal Parking Info';\n                mapLink.querySelector('span').textContent = 'Open ' + terminal + ' Interactive Map';\n                \n                \/\/ Normalize terminal and concourse for URL lookup (trim + lowercase)\n                var terminalKey = terminal.trim().toLowerCase();\n                var concourseKey = concourse ? concourse.trim().toLowerCase() : '';\n                \n                \/\/ Set parking link URL based on terminal\n                var parkingUrl = parkingUrls[terminalKey];\n                if (parkingUrl) {\n                    parkingLink.href = parkingUrl;\n                    parkingLink.classList.remove('airline-search__link--hidden');\n                } else {\n                    parkingLink.classList.add('airline-search__link--hidden');\n                }\n                \n                \/\/ Set map link URL based on terminal + concourse\n                var mapKey = terminalKey + '-' + concourseKey;\n                var mapUrl = mapUrls[mapKey];\n                if (mapUrl) {\n                    mapLink.href = mapUrl;\n                    mapLink.classList.remove('airline-search__link--hidden');\n                } else {\n                    mapLink.classList.add('airline-search__link--hidden');\n                }\n            } else {\n                terminalInfo.textContent = airlineName + ' operates at this airport';\n                parkingLink.classList.add('airline-search__link--hidden');\n                mapLink.classList.add('airline-search__link--hidden');\n            }\n            \n            results.classList.remove('airline-search__results--hidden');\n            resetButton.classList.remove('airline-search__reset--hidden');\n        } else {\n            results.classList.add('airline-search__results--hidden');\n            resetButton.classList.add('airline-search__reset--hidden');\n            parkingLink.classList.add('airline-search__link--hidden');\n            mapLink.classList.add('airline-search__link--hidden');\n        }\n    });\n    \n    \/\/ Reset button functionality\n    resetButton.addEventListener('click', function() {\n        select.value = '';\n        results.classList.add('airline-search__results--hidden');\n        resetButton.classList.add('airline-search__reset--hidden');\n        parkingLink.classList.add('airline-search__link--hidden');\n        mapLink.classList.add('airline-search__link--hidden');\n    });\n})();\n<\/script>                <\/div>\n            <\/div>\n        <\/div>\n\t<\/div>\n<\/div>\n\n\n<div class=\"blockGlobal paddingTopNone paddingBottomSM cardImageFluid\" style=\"background-color:#fff;\">\n\t\t<div class=\"container\">\n\t\t<div class=\"cardImagelWrap light\">\n\t\t\t\n\n<!--Option 1-->\n<div class=\"grid wysiwyg wysiwygOption1 intro\">\n\t<div class=\"col-sm-8\">\n\n\t\t\t<div class=\"maincopy light\">\n\t\t\t\t\t\t\t\t\t<h2 class=\"h2 \">Where to Pick Up or Drop Off<\/h2>\n\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\n\t\t\t\n\t\t\t\n\t\t\t\n\t<\/div>\n<\/div>\n\n\n<!--Option 2-->\n\n\n<!--Option 3-->\n\n\n\t\t\t\t\t\t\t<div class=\"grid\">\n\t\t\t\n\t\t\t\t\t\t\t\t<div class=\"col-grid col-md-auto col-sm-6 \">\n\t\t\t\t\t\t\n<div class=\"cardImage ghost\">\n\t<div class=\"imageZoomWrap\" style=\"aspect-ratio: 3 \/ 2;\">\n<div class=\"primaryImageWrap\">\n\n\t\n\t\n\t<img decoding=\"async\" src=\"https:\/\/wcaa.preprod.fruitionqa.com\/wp-content\/uploads\/2025\/12\/picking-up-and-dropping-off-02.webp\" \n\t\talt=\"\" \n\t\tclass=\"aspectRatio radiusImage primaryImage\" \n\t\tstyle=\"aspect-ratio: 3 \/ 2;\" \/>\n\n\t\n\t\n\t\n<\/div>\n\n\n<!-- This style is only needed for the first example with aspectRatio -->\n<style>\n\t.aspectRatio:not([style*=\"aspect-ratio\"]) {\n\t\taspect-ratio: 21 \/ 5;\n\t}\n<\/style>\n<\/div>            \n\t<div class=\"cardImageBody\">\n\t\t<h2 class=\"h5\">Curbside Access <\/h2>\n\t\t<p><strong>Active loading\/unloading only<\/strong>. No parking or waiting at the curb.<\/p>\n<ul role=\"list\">\n<li>Evans Terminal &amp; McNamara Terminals: Upper level \u2013 departures, Lower level \u2013 arrivals<\/li>\n<\/ul>\n\t\t\t\t\t\n<a class=\"links medium light \" target=\"_self\" rel=\"noopener noreferrer\"  href=\"https:\/\/wcaa.preprod.fruitionqa.com\/interactive-map\/\">\n\n\t\n\t<span class=\"linksTitle\">Directions to DTW<\/span>\n    \n\t\t<span class=\"fa-light fa-arrow-right iconRight\"><\/span>\n\t<\/a>\n\t\t\t<\/div>\n\n\t\t\t<a href=\"https:\/\/wcaa.preprod.fruitionqa.com\/interactive-map\/\" class=\"linkOverlay\" target=\"_self\" aria-label=\"Curbside Access \"><\/a>\n\t\t\n\t<\/div>\n\n\t\t\t\t\t<\/div>\n\t\t\t\t\t\t\t\t\t<div class=\"col-grid col-md-auto col-sm-6 \">\n\t\t\t\t\t\t\n<div class=\"cardImage ghost\">\n\t<div class=\"imageZoomWrap\" style=\"aspect-ratio: 3 \/ 2;\">\n<div class=\"primaryImageWrap\">\n\n\t\n\t\n\t<img decoding=\"async\" src=\"https:\/\/wcaa.preprod.fruitionqa.com\/wp-content\/uploads\/2025\/12\/picking-up-and-dropping-off-03.webp\" \n\t\talt=\"\" \n\t\tclass=\"aspectRatio radiusImage primaryImage\" \n\t\tstyle=\"aspect-ratio: 3 \/ 2;\" \/>\n\n\t\n\t\n\t\n<\/div>\n\n\n<!-- This style is only needed for the first example with aspectRatio -->\n<style>\n\t.aspectRatio:not([style*=\"aspect-ratio\"]) {\n\t\taspect-ratio: 21 \/ 5;\n\t}\n<\/style>\n<\/div>            \n\t<div class=\"cardImageBody\">\n\t\t<h2 class=\"h5\">North Cell Phone Waiting Lot<\/h2>\n\t\t<p><strong>Wait Free<\/strong> &#8211; Use the Cell Phone Lot<\/p>\n<ul role=\"list\">\n<li>Location: Off I-94, accessible to both terminals<\/li>\n<li>Time Limit: Free to use, but remain in your vehicle<\/li>\n<\/ul>\n\t\t\t\t\t\n<a class=\"links medium light \" target=\"_blank\" rel=\"noopener noreferrer\"  href=\"https:\/\/www.google.com\/maps\/place\/North+Cell+Phone+Parking+Lot,+Romulus,+MI+48242\/@42.2341199,-83.3393377,17z\/data=!4m6!3m5!1s0x883b4f2c6679eb39:0xf0ded7ee493610eb!8m2!3d42.234128!4d-83.3393665!16s%2Fg%2F11cn3ph1j8?entry=ttu\">\n\n\t\n\t<span class=\"linksTitle\">Google Maps<\/span>\n    \n\t\t<span class=\"fa-light fa-arrow-up-right-from-square iconRight\"><\/span>\n\t<\/a>\n\t\t\t<\/div>\n\n\t\t\t<a href=\"https:\/\/www.google.com\/maps\/place\/North+Cell+Phone+Parking+Lot,+Romulus,+MI+48242\/@42.2341199,-83.3393377,17z\/data=!4m6!3m5!1s0x883b4f2c6679eb39:0xf0ded7ee493610eb!8m2!3d42.234128!4d-83.3393665!16s%2Fg%2F11cn3ph1j8?entry=ttu\" class=\"linkOverlay\" target=\"_blank\" aria-label=\"North Cell Phone Waiting Lot\"><\/a>\n\t\t\n\t<\/div>\n\n\t\t\t\t\t<\/div>\n\t\t\t\t\t\t\t\t\t<div class=\"col-grid col-md-auto col-sm-6 \">\n\t\t\t\t\t\t\n<div class=\"cardImage ghost\">\n\t<div class=\"imageZoomWrap\" style=\"aspect-ratio: 3 \/ 2;\">\n<div class=\"primaryImageWrap\">\n\n\t\n\t\n\t<img decoding=\"async\" src=\"https:\/\/wcaa.preprod.fruitionqa.com\/wp-content\/uploads\/2025\/12\/picking-up-and-dropping-off-03.webp\" \n\t\talt=\"\" \n\t\tclass=\"aspectRatio radiusImage primaryImage\" \n\t\tstyle=\"aspect-ratio: 3 \/ 2;\" \/>\n\n\t\n\t\n\t\n<\/div>\n\n\n<!-- This style is only needed for the first example with aspectRatio -->\n<style>\n\t.aspectRatio:not([style*=\"aspect-ratio\"]) {\n\t\taspect-ratio: 21 \/ 5;\n\t}\n<\/style>\n<\/div>            \n\t<div class=\"cardImageBody\">\n\t\t<h2 class=\"h5\">South Cell Phone Waiting Lot<\/h2>\n\t\t<p><strong>Wait Free<\/strong> &#8211; Use the Cell Phone Lot<\/p>\n<ul role=\"list\">\n<li>Location: Off I-94, accessible to both terminals<\/li>\n<li>Time Limit: Free to use, but remain in your vehicle<\/li>\n<\/ul>\n\t\t\t\t\t\n<a class=\"links medium light \" target=\"_blank\" rel=\"noopener noreferrer\"  href=\"https:\/\/www.google.com\/maps\/place\/South+Cell+Phone+Parking,+Eureka+Rd,+Romulus,+MI+48174\/@42.1941321,-83.3771795,1333m\/data=!3m1!1e3!4m6!3m5!1s0x883b4582c20bb2e9:0x86bf8e086e273089!8m2!3d42.1941365!4d-83.3771652!16s%2Fg%2F11bvt9kdk5?entry=ttu&#038;g_ep=EgoyMDI1MTIwOS4wIKXMDSoKLDEwMDc5MjA3MUgBUAM%3D\">\n\n\t\n\t<span class=\"linksTitle\">Google Maps<\/span>\n    \n\t\t<span class=\"fa-light fa-arrow-up-right-from-square iconRight\"><\/span>\n\t<\/a>\n\t\t\t<\/div>\n\n\t\t\t<a href=\"https:\/\/www.google.com\/maps\/place\/South+Cell+Phone+Parking,+Eureka+Rd,+Romulus,+MI+48174\/@42.1941321,-83.3771795,1333m\/data=!3m1!1e3!4m6!3m5!1s0x883b4582c20bb2e9:0x86bf8e086e273089!8m2!3d42.1941365!4d-83.3771652!16s%2Fg%2F11bvt9kdk5?entry=ttu&#038;g_ep=EgoyMDI1MTIwOS4wIKXMDSoKLDEwMDc5MjA3MUgBUAM%3D\" class=\"linkOverlay\" target=\"_blank\" aria-label=\"South Cell Phone Waiting Lot\"><\/a>\n\t\t\n\t<\/div>\n\n\t\t\t\t\t<\/div>\n\t\t\t\t\t\t\t\t\t<div class=\"col-grid col-md-auto col-sm-6 \">\n\t\t\t\t\t\t\n<div class=\"cardImage ghost\">\n\t<div class=\"imageZoomWrap\" style=\"aspect-ratio: 3 \/ 2;\">\n<div class=\"primaryImageWrap\">\n\n\t\n\t\n\t<img decoding=\"async\" src=\"https:\/\/wcaa.preprod.fruitionqa.com\/wp-content\/uploads\/2025\/12\/Short-Term-Parking.jpg\" \n\t\talt=\"\" \n\t\tclass=\"aspectRatio radiusImage primaryImage\" \n\t\tstyle=\"aspect-ratio: 3 \/ 2;\" \/>\n\n\t\n\t\n\t\n<\/div>\n\n\n<!-- This style is only needed for the first example with aspectRatio -->\n<style>\n\t.aspectRatio:not([style*=\"aspect-ratio\"]) {\n\t\taspect-ratio: 21 \/ 5;\n\t}\n<\/style>\n<\/div>            \n\t<div class=\"cardImageBody\">\n\t\t<h2 class=\"h5\">Short-Term Parking Option<\/h2>\n\t\t<p>Park in Short-Term lots (Evans or McNamara garage)<\/p>\n<ul role=\"list\">\n<li><strong>Pricing Summary<\/strong>: First 30 mins = $4 | Hourly = $6\/hour<\/li>\n<\/ul>\n\t\t\t\t\t\n<a class=\"links medium light \" target=\"_self\" rel=\"noopener noreferrer\"  href=\"https:\/\/wcaa.preprod.fruitionqa.com\/parking-and-transportation\/parking\/\">\n\n\t\n\t<span class=\"linksTitle\">Parking Info<\/span>\n    \n\t\t<span class=\"fa-light fa-arrow-right iconRight\"><\/span>\n\t<\/a>\n\t\t\t<\/div>\n\n\t\t\t<a href=\"https:\/\/wcaa.preprod.fruitionqa.com\/parking-and-transportation\/parking\/\" class=\"linkOverlay\" target=\"_self\" aria-label=\"Short-Term Parking Option\"><\/a>\n\t\t\n\t<\/div>\n\n\t\t\t\t\t<\/div>\n\t\t\t\t\t\t\t<\/div>\n\n\t\t\t\n\t\t\t\n\t\t<\/div>\n\t<\/div>\n<\/div>\n\n\n\n<div class=\"blockGlobal paddingTopXS paddingBottomMD accordionFluid\">\n\t\t<div class=\"container\">\n\t\t\t\t\t<div class=\"grid\">\n\t\t\t\t<div class=\"col-md-6 mediaLeft\">\n\t\t\t\t\t\n\n<div class=\"wysiwyg\">\n\t<div class=\"maincopy light\">\n\n\t\t\n\t\t\t\t\t\t\t\t\t<h2 class=\"h2 \">Helpful Reminders<\/h2>\n\t\t\t\t\t\t\t\t\t\t<p>Find quick tips and important reminders to help make your pickup or drop-off experience smooth and efficient. From accessibility services to real-time traffic guidance, we\u2019ve got you covered.<\/p>\n\t\t\t<\/div>\n\n\t\n\t\t\t<a\nhref=\"https:\/\/wcaa.preprod.fruitionqa.com\/about-dtw\/contact\/\"\nclass=\"primaryButton light\"\ntitle=\"Contact DTW\">\nContact DTW<\/a>\n\t\n\t\t\t<a\nhref=\"https:\/\/wcaa.preprod.fruitionqa.com\/gates-and-terminals\/\"\nclass=\"primaryButton outlined light\"\ntitle=\"Gates and Terminal Info\">\nGates and Terminal Info<\/a>\n\t\n\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"col-md-6 mediaRight\">\n\t\t\t\t\t\n<div class=\"beefup openAccordion accordionStyle boxed\">\n\t<button title=\"Show ADA \/ Accessibility Accommodations\" class=\"openTitle beefup__head h6 \"><span class=\"beefup__head--title\">ADA \/ Accessibility Accommodations<\/span><\/button>\n\t<div class=\"beefup__body maincopy\" role=\"region\" hidden=\"hidden\" style=\"display: none;\">\n\t\t<ul role=\"list\">\n<li>Curbside loading\/unloading assistance available<\/li>\n<li>Wheelchair assistance must be requested through your airline<\/li>\n<\/ul>\n<p><a href=\"https:\/\/wcaa.preprod.fruitionqa.com\/services\/wheelchairs\/\">Wheelchair Information<\/a><\/p>\n\t\t\t<\/div>\n<\/div>\n\n<div class=\"beefup openAccordion accordionStyle boxed\">\n\t<button title=\"Show Traffic Tips &amp; Timing\" class=\"openTitle beefup__head h6 \"><span class=\"beefup__head--title\">Traffic Tips &amp; Timing<\/span><\/button>\n\t<div class=\"beefup__body maincopy\" role=\"region\" hidden=\"hidden\" style=\"display: none;\">\n\t\t<ul role=\"list\">\n<li>Plan Ahead for Busy Travel Times<\/li>\n<li>Avoid peak congestion: holidays, 5\u20138 AM, 4\u20137 PM<\/li>\n<li>Follow signage and airport staff directions<\/li>\n<\/ul>\n<p><a href=\"https:\/\/wcaa.preprod.fruitionqa.com\/parking-and-transportation\/directions\/\">Directions to DTW<\/a> <em>\u2192<\/em><\/p>\n\t\t\t<\/div>\n<\/div>\n\n<div class=\"beefup openAccordion accordionStyle boxed\">\n\t<button title=\"Show Prohibited Behaviors\" class=\"openTitle beefup__head h6 \"><span class=\"beefup__head--title\">Prohibited Behaviors<\/span><\/button>\n\t<div class=\"beefup__body maincopy\" role=\"region\" hidden=\"hidden\" style=\"display: none;\">\n\t\t<ul role=\"list\">\n<li>No unattended vehicles<\/li>\n<li>No curbside parking or waiting<\/li>\n<li>Violators may be ticketed or towed<\/li>\n<li>Security and TSA actively monitor curbsides<\/li>\n<\/ul>\n\t\t\t<\/div>\n<\/div>\n\t\t\t\t<\/div>      \n\t\t\t<\/div>\n\t\t\t<\/div>\n<\/div>\n\n<div class=\"blockGlobal blueDarkblueDarkMedium paddingTopMD paddingBottomMD cardImageFluid topLeftRadius topRightRadius\">\n\t<img decoding=\"async\" src=\"https:\/\/wcaa.preprod.fruitionqa.com\/wp-content\/themes\/wcaa\/images\/GraphicSwoop.svg\" class=\"graphicSwoopSingle\" alt=\"\">\t<div class=\"container\">\n\t\t<div class=\"cardImagelWrap dark\">\n\t\t\t\n\n<!--Option 1-->\n\n\n<!--Option 2-->\n<div class=\"grid align-end wysiwyg wysiwygOption2 intro\">\n\t<div class=\"col-md-7 mediaLeft\">\n\t\t<div class=\"maincopy dark\">\n\t\t\t\t\t\t\t<h2 class=\"h2 titleBlue\">Explore All Transportation Options<\/h2>\n\t\t\t\t\t\t\t\t<\/div>\n\t<\/div>\n\t<div class=\"col-md-5 mediaRight\">\n\t\t\t\n\t\t\t\n\t\t\t\t<\/div>\n<\/div>\n\n\n<!--Option 3-->\n\n\n\t\t\t\t\t\t\t\t\t\t\t<div class=\"cardImageSlider\" data-items-to-show=\"3\">\n\t\t\t\n\t\t\t\t\t\t\t\t\t<div class=\"col-grid  \">\n\t\t\t\t\t\t\t\n<div class=\"cardImage contained\">\n\t<div class=\"imageZoomWrap\" style=\"aspect-ratio: 3 \/ 2;\">\n<div class=\"primaryImageWrap\">\n\n\t\n\t\n\t<img decoding=\"async\" src=\"https:\/\/wcaa.preprod.fruitionqa.com\/wp-content\/uploads\/2025\/12\/parking-and-transportation-01-1024x247.webp\" \n\t\talt=\"Transportation\" \n\t\tclass=\"aspectRatio primaryImage\" \n\t\tstyle=\"aspect-ratio: 3 \/ 2;\" \/>\n\n\t\n\t\n\t\n<\/div>\n\n\n<!-- This style is only needed for the first example with aspectRatio -->\n<style>\n\t.aspectRatio:not([style*=\"aspect-ratio\"]) {\n\t\taspect-ratio: 21 \/ 5;\n\t}\n<\/style>\n<\/div>            \n\t<div class=\"cardImageBody\">\n\t\t<h2 class=\"h4\">Transportation<\/h2>\n\t\t<p>Explore DTW parking, rideshare, taxis, rental cars, and public transit. Find real-time availability, directions, cell phone lots, and shuttle info for both terminals.<\/p>\t\t\t\t\t\n<a class=\"links medium light \" target=\"_self\" rel=\"noopener noreferrer\"  href=\"https:\/\/wcaa.preprod.fruitionqa.com\/zh\/parking-and-transportation\/\">\n\n\t\n\t<span class=\"linksTitle\">Learn More<\/span>\n    \n\t\t<span class=\"fa-light fa-arrow-right iconRight\"><\/span>\n\t<\/a>\n\t\t\t<\/div>\n\n\t\t\t<a href=\"https:\/\/wcaa.preprod.fruitionqa.com\/zh\/parking-and-transportation\/\" class=\"linkOverlay\" target=\"_self\" aria-label=\"Transportation\"><\/a>\n\t\t\n\t<\/div>\n\n\t\t\t\t\t\t<\/div>\n\t\t\t\t\t\t\t\t\t\t\t\t<div class=\"col-grid  \">\n\t\t\t\t\t\t\t\n<div class=\"cardImage contained\">\n\t<div class=\"imageZoomWrap\" style=\"aspect-ratio: 3 \/ 2;\">\n<div class=\"primaryImageWrap\">\n\n\t\n\t\n\t<img decoding=\"async\" src=\"https:\/\/wcaa.preprod.fruitionqa.com\/wp-content\/uploads\/2025\/12\/Parking-at-DTW-1024x573.jpeg\" \n\t\talt=\"Parking\" \n\t\tclass=\"aspectRatio primaryImage\" \n\t\tstyle=\"aspect-ratio: 3 \/ 2;\" \/>\n\n\t\n\t\n\t\n<\/div>\n\n\n<!-- This style is only needed for the first example with aspectRatio -->\n<style>\n\t.aspectRatio:not([style*=\"aspect-ratio\"]) {\n\t\taspect-ratio: 21 \/ 5;\n\t}\n<\/style>\n<\/div>            \n\t<div class=\"cardImageBody\">\n\t\t<h2 class=\"h4\">Parking<\/h2>\n\t\t<p>Find DTW parking rates, real-time availability, and options for short-term, long-term, and valet. Includes EV charging, accessibility info, and cashless payment.<\/p>\t\t\t\t\t\n<a class=\"links medium light \" target=\"_self\" rel=\"noopener noreferrer\"  href=\"https:\/\/wcaa.preprod.fruitionqa.com\/zh\/parking-and-transportation\/parking\/\">\n\n\t\n\t<span class=\"linksTitle\">Learn More<\/span>\n    \n\t\t<span class=\"fa-light fa-arrow-right iconRight\"><\/span>\n\t<\/a>\n\t\t\t<\/div>\n\n\t\t\t<a href=\"https:\/\/wcaa.preprod.fruitionqa.com\/zh\/parking-and-transportation\/parking\/\" class=\"linkOverlay\" target=\"_self\" aria-label=\"Parking\"><\/a>\n\t\t\n\t<\/div>\n\n\t\t\t\t\t\t<\/div>\n\t\t\t\t\t\t\t\t\t\t\t\t<div class=\"col-grid  \">\n\t\t\t\t\t\t\t\n<div class=\"cardImage contained\">\n\t<div class=\"imageZoomWrap\" style=\"aspect-ratio: 3 \/ 2;\">\n<div class=\"primaryImageWrap\">\n\n\t\n\t\n\t<img decoding=\"async\" src=\"https:\/\/wcaa.preprod.fruitionqa.com\/wp-content\/uploads\/2025\/12\/directions-01-1024x247.webp\" \n\t\talt=\"Directions\" \n\t\tclass=\"aspectRatio primaryImage\" \n\t\tstyle=\"aspect-ratio: 3 \/ 2;\" \/>\n\n\t\n\t\n\t\n<\/div>\n\n\n<!-- This style is only needed for the first example with aspectRatio -->\n<style>\n\t.aspectRatio:not([style*=\"aspect-ratio\"]) {\n\t\taspect-ratio: 21 \/ 5;\n\t}\n<\/style>\n<\/div>            \n\t<div class=\"cardImageBody\">\n\t\t<h2 class=\"h4\">Directions<\/h2>\n\t\t<p>Get driving directions to DTW with live traffic updates, terminal maps, and travel times from nearby cities. Find parking info and accessible drop-off zones.<\/p>\t\t\t\t\t\n<a class=\"links medium light \" target=\"_self\" rel=\"noopener noreferrer\"  href=\"https:\/\/wcaa.preprod.fruitionqa.com\/zh\/parking-and-transportation\/directions\/\">\n\n\t\n\t<span class=\"linksTitle\">Learn More<\/span>\n    \n\t\t<span class=\"fa-light fa-arrow-right iconRight\"><\/span>\n\t<\/a>\n\t\t\t<\/div>\n\n\t\t\t<a href=\"https:\/\/wcaa.preprod.fruitionqa.com\/zh\/parking-and-transportation\/directions\/\" class=\"linkOverlay\" target=\"_self\" aria-label=\"Directions\"><\/a>\n\t\t\n\t<\/div>\n\n\t\t\t\t\t\t<\/div>\n\t\t\t\t\t\t\t\t\t\t\t\t<div class=\"col-grid  \">\n\t\t\t\t\t\t\t\n<div class=\"cardImage contained\">\n\t<div class=\"imageZoomWrap\" style=\"aspect-ratio: 3 \/ 2;\">\n<div class=\"primaryImageWrap\">\n\n\t\n\t\n\t<img decoding=\"async\" src=\"https:\/\/wcaa.preprod.fruitionqa.com\/wp-content\/uploads\/2025\/12\/public-transportations-01-1024x247.webp\" \n\t\talt=\"Public Transportation\" \n\t\tclass=\"aspectRatio primaryImage\" \n\t\tstyle=\"aspect-ratio: 3 \/ 2;\" \/>\n\n\t\n\t\n\t\n<\/div>\n\n\n<!-- This style is only needed for the first example with aspectRatio -->\n<style>\n\t.aspectRatio:not([style*=\"aspect-ratio\"]) {\n\t\taspect-ratio: 21 \/ 5;\n\t}\n<\/style>\n<\/div>            \n\t<div class=\"cardImageBody\">\n\t\t<h2 class=\"h4\">Public Transportation<\/h2>\n\t\t<p>Access DTW via SMART Bus, AirRide from Ann Arbor, or Michigan Flyer from Lansing. Find routes, schedules, fares, and terminal pickup\/drop-off locations.<\/p>\t\t\t\t\t\n<a class=\"links medium light \" target=\"_self\" rel=\"noopener noreferrer\"  href=\"https:\/\/wcaa.preprod.fruitionqa.com\/zh\/parking-and-transportation\/public-transportation\/\">\n\n\t\n\t<span class=\"linksTitle\">Learn More<\/span>\n    \n\t\t<span class=\"fa-light fa-arrow-right iconRight\"><\/span>\n\t<\/a>\n\t\t\t<\/div>\n\n\t\t\t<a href=\"https:\/\/wcaa.preprod.fruitionqa.com\/zh\/parking-and-transportation\/public-transportation\/\" class=\"linkOverlay\" target=\"_self\" aria-label=\"Public Transportation\"><\/a>\n\t\t\n\t<\/div>\n\n\t\t\t\t\t\t<\/div>\n\t\t\t\t\t\t\t\t\t\t\t\t<div class=\"col-grid  \">\n\t\t\t\t\t\t\t\n<div class=\"cardImage contained\">\n\t<div class=\"imageZoomWrap\" style=\"aspect-ratio: 3 \/ 2;\">\n<div class=\"primaryImageWrap\">\n\n\t\n\t\n\t<img decoding=\"async\" src=\"https:\/\/wcaa.preprod.fruitionqa.com\/wp-content\/uploads\/2025\/12\/Prearranged-1024x686.jpg\" \n\t\talt=\"Prearranged\" \n\t\tclass=\"aspectRatio primaryImage\" \n\t\tstyle=\"aspect-ratio: 3 \/ 2;\" \/>\n\n\t\n\t\n\t\n<\/div>\n\n\n<!-- This style is only needed for the first example with aspectRatio -->\n<style>\n\t.aspectRatio:not([style*=\"aspect-ratio\"]) {\n\t\taspect-ratio: 21 \/ 5;\n\t}\n<\/style>\n<\/div>            \n\t<div class=\"cardImageBody\">\n\t\t<h2 class=\"h4\">Prearranged<\/h2>\n\t\t<p>Prearranged transportation at DTW requires advance reservations. Find motor coach, charter bus, and private car pickup locations at McNamara and Evans terminals.<\/p>\t\t\t\t\t\n<a class=\"links medium light \" target=\"_self\" rel=\"noopener noreferrer\"  href=\"https:\/\/wcaa.preprod.fruitionqa.com\/zh\/parking-and-transportation\/prearranged\/\">\n\n\t\n\t<span class=\"linksTitle\">Learn More<\/span>\n    \n\t\t<span class=\"fa-light fa-arrow-right iconRight\"><\/span>\n\t<\/a>\n\t\t\t<\/div>\n\n\t\t\t<a href=\"https:\/\/wcaa.preprod.fruitionqa.com\/zh\/parking-and-transportation\/prearranged\/\" class=\"linkOverlay\" target=\"_self\" aria-label=\"Prearranged\"><\/a>\n\t\t\n\t<\/div>\n\n\t\t\t\t\t\t<\/div>\n\t\t\t\t\t\t\t\t\t\t\t\t<div class=\"col-grid  \">\n\t\t\t\t\t\t\t\n<div class=\"cardImage contained\">\n\t<div class=\"imageZoomWrap\" style=\"aspect-ratio: 3 \/ 2;\">\n<div class=\"primaryImageWrap\">\n\n\t\n\t\n\t<img decoding=\"async\" src=\"https:\/\/wcaa.preprod.fruitionqa.com\/wp-content\/uploads\/2025\/12\/Rental-Car-Center-DTW.jpg\" \n\t\talt=\"Rental Car Center\" \n\t\tclass=\"aspectRatio primaryImage\" \n\t\tstyle=\"aspect-ratio: 3 \/ 2;\" \/>\n\n\t\n\t\n\t\n<\/div>\n\n\n<!-- This style is only needed for the first example with aspectRatio -->\n<style>\n\t.aspectRatio:not([style*=\"aspect-ratio\"]) {\n\t\taspect-ratio: 21 \/ 5;\n\t}\n<\/style>\n<\/div>            \n\t<div class=\"cardImageBody\">\n\t\t<h2 class=\"h4\">Rental Car Center<\/h2>\n\t\t<p>DTW Rental Car Center features 10+ agencies with 24\/7 shuttle service every 5-10 minutes from both terminals. Reserve ahead and find directions to Lucas Drive.<\/p>\t\t\t\t\t\n<a class=\"links medium light \" target=\"_self\" rel=\"noopener noreferrer\"  href=\"https:\/\/wcaa.preprod.fruitionqa.com\/zh\/parking-and-transportation\/rental-car-center\/\">\n\n\t\n\t<span class=\"linksTitle\">Learn More<\/span>\n    \n\t\t<span class=\"fa-light fa-arrow-right iconRight\"><\/span>\n\t<\/a>\n\t\t\t<\/div>\n\n\t\t\t<a href=\"https:\/\/wcaa.preprod.fruitionqa.com\/zh\/parking-and-transportation\/rental-car-center\/\" class=\"linkOverlay\" target=\"_self\" aria-label=\"Rental Car Center\"><\/a>\n\t\t\n\t<\/div>\n\n\t\t\t\t\t\t<\/div>\n\t\t\t\t\t\t\t\t\t\t\t\t<div class=\"col-grid  \">\n\t\t\t\t\t\t\t\n<div class=\"cardImage contained\">\n\t<div class=\"imageZoomWrap\" style=\"aspect-ratio: 3 \/ 2;\">\n<div class=\"primaryImageWrap\">\n\n\t\n\t\n\t<img decoding=\"async\" src=\"https:\/\/wcaa.preprod.fruitionqa.com\/wp-content\/uploads\/2025\/12\/arriving-01-1024x247.webp\" \n\t\talt=\"Arriving to DTW\" \n\t\tclass=\"aspectRatio primaryImage\" \n\t\tstyle=\"aspect-ratio: 3 \/ 2;\" \/>\n\n\t\n\t\n\t\n<\/div>\n\n\n<!-- This style is only needed for the first example with aspectRatio -->\n<style>\n\t.aspectRatio:not([style*=\"aspect-ratio\"]) {\n\t\taspect-ratio: 21 \/ 5;\n\t}\n<\/style>\n<\/div>            \n\t<div class=\"cardImageBody\">\n\t\t<h2 class=\"h4\">Arriving to DTW<\/h2>\n\t\t<p>Arriving at DTW? Find your terminal, explore ground transportation options including rideshare and rental cars, and access baggage claim and amenities.<\/p>\t\t\t\t\t\n<a class=\"links medium light \" target=\"_self\" rel=\"noopener noreferrer\"  href=\"https:\/\/wcaa.preprod.fruitionqa.com\/zh\/arriving\/\">\n\n\t\n\t<span class=\"linksTitle\">Learn More<\/span>\n    \n\t\t<span class=\"fa-light fa-arrow-right iconRight\"><\/span>\n\t<\/a>\n\t\t\t<\/div>\n\n\t\t\t<a href=\"https:\/\/wcaa.preprod.fruitionqa.com\/zh\/arriving\/\" class=\"linkOverlay\" target=\"_self\" aria-label=\"Arriving to DTW\"><\/a>\n\t\t\n\t<\/div>\n\n\t\t\t\t\t\t<\/div>\n\t\t\t\t\t\t\t\t\t\t\t\t<div class=\"col-grid  \">\n\t\t\t\t\t\t\t\n<div class=\"cardImage contained\">\n\t<div class=\"imageZoomWrap\" style=\"aspect-ratio: 3 \/ 2;\">\n<div class=\"primaryImageWrap\">\n\n\t\n\t\n\t<img decoding=\"async\" src=\"https:\/\/wcaa.preprod.fruitionqa.com\/wp-content\/uploads\/2025\/12\/rideshare-01-1024x247.webp\" \n\t\talt=\"Rideshare\" \n\t\tclass=\"aspectRatio primaryImage\" \n\t\tstyle=\"aspect-ratio: 3 \/ 2;\" \/>\n\n\t\n\t\n\t\n<\/div>\n\n\n<!-- This style is only needed for the first example with aspectRatio -->\n<style>\n\t.aspectRatio:not([style*=\"aspect-ratio\"]) {\n\t\taspect-ratio: 21 \/ 5;\n\t}\n<\/style>\n<\/div>            \n\t<div class=\"cardImageBody\">\n\t\t<h2 class=\"h4\">Rideshare<\/h2>\n\t\t<p>Uber and Lyft pickup at DTW: McNamara Terminal Level 2 parking garage, Evans Terminal Ground Transportation Center. Find designated zones and drop-off info.<\/p>\t\t\t\t\t\n<a class=\"links medium light \" target=\"_self\" rel=\"noopener noreferrer\"  href=\"https:\/\/wcaa.preprod.fruitionqa.com\/zh\/parking-and-transportation\/rideshare\/\">\n\n\t\n\t<span class=\"linksTitle\">Learn More<\/span>\n    \n\t\t<span class=\"fa-light fa-arrow-right iconRight\"><\/span>\n\t<\/a>\n\t\t\t<\/div>\n\n\t\t\t<a href=\"https:\/\/wcaa.preprod.fruitionqa.com\/zh\/parking-and-transportation\/rideshare\/\" class=\"linkOverlay\" target=\"_self\" aria-label=\"Rideshare\"><\/a>\n\t\t\n\t<\/div>\n\n\t\t\t\t\t\t<\/div>\n\t\t\t\t\t\t\t\t\t\t\t\t<div class=\"col-grid  \">\n\t\t\t\t\t\t\t\n<div class=\"cardImage contained\">\n\t<div class=\"imageZoomWrap\" style=\"aspect-ratio: 3 \/ 2;\">\n<div class=\"primaryImageWrap\">\n\n\t\n\t\n\t<img decoding=\"async\" src=\"https:\/\/wcaa.preprod.fruitionqa.com\/wp-content\/uploads\/2025\/12\/taxi-and-luxary-sedans-01-1024x247.webp\" \n\t\talt=\"Taxis and Luxury Sedans\" \n\t\tclass=\"aspectRatio primaryImage\" \n\t\tstyle=\"aspect-ratio: 3 \/ 2;\" \/>\n\n\t\n\t\n\t\n<\/div>\n\n\n<!-- This style is only needed for the first example with aspectRatio -->\n<style>\n\t.aspectRatio:not([style*=\"aspect-ratio\"]) {\n\t\taspect-ratio: 21 \/ 5;\n\t}\n<\/style>\n<\/div>            \n\t<div class=\"cardImageBody\">\n\t\t<h2 class=\"h4\">Taxis and Luxury Sedans<\/h2>\n\t\t<p>Taxis and luxury sedans available 24\/7 at both DTW terminals with metered, state-regulated fares. No reservation needed. Accessible vehicles accommodate mobility devices.<\/p>\t\t\t\t\t\n<a class=\"links medium light \" target=\"_self\" rel=\"noopener noreferrer\"  href=\"https:\/\/wcaa.preprod.fruitionqa.com\/zh\/parking-and-transportation\/taxis-and-luxury-sedans\/\">\n\n\t\n\t<span class=\"linksTitle\">Learn More<\/span>\n    \n\t\t<span class=\"fa-light fa-arrow-right iconRight\"><\/span>\n\t<\/a>\n\t\t\t<\/div>\n\n\t\t\t<a href=\"https:\/\/wcaa.preprod.fruitionqa.com\/zh\/parking-and-transportation\/taxis-and-luxury-sedans\/\" class=\"linkOverlay\" target=\"_self\" aria-label=\"Taxis and Luxury Sedans\"><\/a>\n\t\t\n\t<\/div>\n\n\t\t\t\t\t\t<\/div>\n\t\t\t\t\t\t\t\t\t\t\t\t<div class=\"col-grid  \">\n\t\t\t\t\t\t\t\n<div class=\"cardImage contained\">\n\t<div class=\"imageZoomWrap\" style=\"aspect-ratio: 3 \/ 2;\">\n<div class=\"primaryImageWrap\">\n\n\t\n\t\n\t<img decoding=\"async\" src=\"https:\/\/wcaa.preprod.fruitionqa.com\/wp-content\/uploads\/2025\/12\/shuttles-01-1024x247.webp\" \n\t\talt=\"Shuttles\" \n\t\tclass=\"aspectRatio primaryImage\" \n\t\tstyle=\"aspect-ratio: 3 \/ 2;\" \/>\n\n\t\n\t\n\t\n<\/div>\n\n\n<!-- This style is only needed for the first example with aspectRatio -->\n<style>\n\t.aspectRatio:not([style*=\"aspect-ratio\"]) {\n\t\taspect-ratio: 21 \/ 5;\n\t}\n<\/style>\n<\/div>            \n\t<div class=\"cardImageBody\">\n\t\t<h2 class=\"h4\">Shuttles<\/h2>\n\t\t<p>Free DTW shuttles run 24\/7 between terminals, rental cars, parking lots, and hotels. ADA-compliant service departs every 10 minutes from Ground Transportation Centers.<\/p>\t\t\t\t\t\n<a class=\"links medium light \" target=\"_self\" rel=\"noopener noreferrer\"  href=\"https:\/\/wcaa.preprod.fruitionqa.com\/zh\/parking-and-transportation\/shuttles\/\">\n\n\t\n\t<span class=\"linksTitle\">Learn More<\/span>\n    \n\t\t<span class=\"fa-light fa-arrow-right iconRight\"><\/span>\n\t<\/a>\n\t\t\t<\/div>\n\n\t\t\t<a href=\"https:\/\/wcaa.preprod.fruitionqa.com\/zh\/parking-and-transportation\/shuttles\/\" class=\"linkOverlay\" target=\"_self\" aria-label=\"Shuttles\"><\/a>\n\t\t\n\t<\/div>\n\n\t\t\t\t\t\t<\/div>\n\t\t\t\t\t\t\t\t\t<\/div>\n\n\t\t\t\t\t\t\t<div class=\"arrowContainer\">\n\t\t\t\t\t<button class=\"prev\" aria-label=\"Previous slide\"><span class=\"fa-light fa-arrow-left\" aria-hidden=\"true\"><\/span><\/button>\n\t\t\t\t\t<button class=\"next\" aria-label=\"Next slide\"><span class=\"fa-light fa-arrow-right\" aria-hidden=\"true\"><\/span><\/button>\n\t\t\t\t<\/div>\n\t\t\t\n\t\t\t\n\t\t<\/div>\n\t<\/div>\n<\/div>\n\n\n\n\n\n\t<div class=\"blockGlobal paddingTopSM paddingBottomSM container calloutBannerMiniContainer \" style=\"background-color:#fff;\">\n\t\t\n\t\t<div class=\"innerContent\"  style=\"background-color: #004A78;\" >\n\t\t\t<div class=\"maincopy dark\">\n\t\t\t\t\t\t\t\t\t<h2 class=\"h4\">Need support? Contact us.<\/h2>\n\t\t\t\t\t\t\t<\/div>\n\t\t\t<div class=\"buttonGroup\">\t\t\t\n\t\t\t\t\t\t\t\t\t<a\nhref=\"https:\/\/wcaa.preprod.fruitionqa.com\/airlines\/\"\nclass=\"primaryButton dark\"\ntitle=\"Contact Your Airline\">\nContact Your Airline<\/a>\n\t\t\t\t\n\t\t\t\t\t\t\t\t\t<a\nhref=\"https:\/\/wcaa.preprod.fruitionqa.com\/about-dtw\/contact\/\"\nclass=\"primaryButton outlined dark\"\ntitle=\"Contact DTW\">\nContact DTW<\/a>\n\t\t\t\t\t\t\t<\/div>\n\t\t<\/div>\n\n\t<\/div>\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>Pick up or drop off at DTW curbside, use free cell phone lots, or choose short-term parking. Find terminal locations, traffic tips, and accessibility info.<\/p>","protected":false},"author":7,"featured_media":2143,"parent":717,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"_acf_changed":false,"footnotes":""},"class_list":["post-735","page","type-page","status-publish","has-post-thumbnail","hentry"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v26.5 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Picking Up and Dropping Off - WCAA<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/wcaa.preprod.fruitionqa.com\/zh\/parking-and-transportation\/picking-up-and-dropping-off\/\" \/>\n<meta property=\"og:locale\" content=\"zh_CN\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Picking Up and Dropping Off - WCAA\" \/>\n<meta property=\"og:description\" content=\"Pick up or drop off at DTW curbside, use free cell phone lots, or choose short-term parking. Find terminal locations, traffic tips, and accessibility info.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/wcaa.preprod.fruitionqa.com\/zh\/parking-and-transportation\/picking-up-and-dropping-off\/\" \/>\n<meta property=\"og:site_name\" content=\"WCAA\" \/>\n<meta property=\"article:modified_time\" content=\"2026-05-08T19:08:22+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/wcaa.preprod.fruitionqa.com\/wp-content\/uploads\/2025\/12\/picking-up-and-dropping-off-01-scaled.webp\" \/>\n\t<meta property=\"og:image:width\" content=\"2560\" \/>\n\t<meta property=\"og:image:height\" content=\"616\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/webp\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data1\" content=\"1 minute\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\/\/wcaa.preprod.fruitionqa.com\/parking-and-transportation\/picking-up-and-dropping-off\/\",\"url\":\"https:\/\/wcaa.preprod.fruitionqa.com\/parking-and-transportation\/picking-up-and-dropping-off\/\",\"name\":\"Picking Up and Dropping Off - WCAA\",\"isPartOf\":{\"@id\":\"https:\/\/wcaa.preprod.fruitionqa.com\/nl\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/wcaa.preprod.fruitionqa.com\/parking-and-transportation\/picking-up-and-dropping-off\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/wcaa.preprod.fruitionqa.com\/parking-and-transportation\/picking-up-and-dropping-off\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/wcaa.preprod.fruitionqa.com\/wp-content\/uploads\/2025\/12\/picking-up-and-dropping-off-01-scaled.webp\",\"datePublished\":\"2025-11-24T21:23:16+00:00\",\"dateModified\":\"2026-05-08T19:08:22+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/wcaa.preprod.fruitionqa.com\/parking-and-transportation\/picking-up-and-dropping-off\/#breadcrumb\"},\"inLanguage\":\"zh-CN\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/wcaa.preprod.fruitionqa.com\/parking-and-transportation\/picking-up-and-dropping-off\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"zh-CN\",\"@id\":\"https:\/\/wcaa.preprod.fruitionqa.com\/parking-and-transportation\/picking-up-and-dropping-off\/#primaryimage\",\"url\":\"https:\/\/wcaa.preprod.fruitionqa.com\/wp-content\/uploads\/2025\/12\/picking-up-and-dropping-off-01-scaled.webp\",\"contentUrl\":\"https:\/\/wcaa.preprod.fruitionqa.com\/wp-content\/uploads\/2025\/12\/picking-up-and-dropping-off-01-scaled.webp\",\"width\":2560,\"height\":616},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/wcaa.preprod.fruitionqa.com\/parking-and-transportation\/picking-up-and-dropping-off\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/wcaa.preprod.fruitionqa.com\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Transportation\",\"item\":\"https:\/\/wcaa.preprod.fruitionqa.com\/parking-and-transportation\/\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Picking Up and Dropping Off\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/wcaa.preprod.fruitionqa.com\/nl\/#website\",\"url\":\"https:\/\/wcaa.preprod.fruitionqa.com\/nl\/\",\"name\":\"WCAA\",\"description\":\"\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/wcaa.preprod.fruitionqa.com\/nl\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"zh-CN\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Picking Up and Dropping Off - WCAA","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/wcaa.preprod.fruitionqa.com\/zh\/parking-and-transportation\/picking-up-and-dropping-off\/","og_locale":"zh_CN","og_type":"article","og_title":"Picking Up and Dropping Off - WCAA","og_description":"Pick up or drop off at DTW curbside, use free cell phone lots, or choose short-term parking. Find terminal locations, traffic tips, and accessibility info.","og_url":"https:\/\/wcaa.preprod.fruitionqa.com\/zh\/parking-and-transportation\/picking-up-and-dropping-off\/","og_site_name":"WCAA","article_modified_time":"2026-05-08T19:08:22+00:00","og_image":[{"width":2560,"height":616,"url":"https:\/\/wcaa.preprod.fruitionqa.com\/wp-content\/uploads\/2025\/12\/picking-up-and-dropping-off-01-scaled.webp","type":"image\/webp"}],"twitter_card":"summary_large_image","twitter_misc":{"Est. reading time":"1 minute"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/wcaa.preprod.fruitionqa.com\/parking-and-transportation\/picking-up-and-dropping-off\/","url":"https:\/\/wcaa.preprod.fruitionqa.com\/parking-and-transportation\/picking-up-and-dropping-off\/","name":"Picking Up and Dropping Off - WCAA","isPartOf":{"@id":"https:\/\/wcaa.preprod.fruitionqa.com\/nl\/#website"},"primaryImageOfPage":{"@id":"https:\/\/wcaa.preprod.fruitionqa.com\/parking-and-transportation\/picking-up-and-dropping-off\/#primaryimage"},"image":{"@id":"https:\/\/wcaa.preprod.fruitionqa.com\/parking-and-transportation\/picking-up-and-dropping-off\/#primaryimage"},"thumbnailUrl":"https:\/\/wcaa.preprod.fruitionqa.com\/wp-content\/uploads\/2025\/12\/picking-up-and-dropping-off-01-scaled.webp","datePublished":"2025-11-24T21:23:16+00:00","dateModified":"2026-05-08T19:08:22+00:00","breadcrumb":{"@id":"https:\/\/wcaa.preprod.fruitionqa.com\/parking-and-transportation\/picking-up-and-dropping-off\/#breadcrumb"},"inLanguage":"zh-CN","potentialAction":[{"@type":"ReadAction","target":["https:\/\/wcaa.preprod.fruitionqa.com\/parking-and-transportation\/picking-up-and-dropping-off\/"]}]},{"@type":"ImageObject","inLanguage":"zh-CN","@id":"https:\/\/wcaa.preprod.fruitionqa.com\/parking-and-transportation\/picking-up-and-dropping-off\/#primaryimage","url":"https:\/\/wcaa.preprod.fruitionqa.com\/wp-content\/uploads\/2025\/12\/picking-up-and-dropping-off-01-scaled.webp","contentUrl":"https:\/\/wcaa.preprod.fruitionqa.com\/wp-content\/uploads\/2025\/12\/picking-up-and-dropping-off-01-scaled.webp","width":2560,"height":616},{"@type":"BreadcrumbList","@id":"https:\/\/wcaa.preprod.fruitionqa.com\/parking-and-transportation\/picking-up-and-dropping-off\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/wcaa.preprod.fruitionqa.com\/"},{"@type":"ListItem","position":2,"name":"Transportation","item":"https:\/\/wcaa.preprod.fruitionqa.com\/parking-and-transportation\/"},{"@type":"ListItem","position":3,"name":"Picking Up and Dropping Off"}]},{"@type":"WebSite","@id":"https:\/\/wcaa.preprod.fruitionqa.com\/nl\/#website","url":"https:\/\/wcaa.preprod.fruitionqa.com\/nl\/","name":"WCAA","description":"","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/wcaa.preprod.fruitionqa.com\/nl\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"zh-CN"}]}},"_links":{"self":[{"href":"https:\/\/wcaa.preprod.fruitionqa.com\/zh\/wp-json\/wp\/v2\/pages\/735","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wcaa.preprod.fruitionqa.com\/zh\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/wcaa.preprod.fruitionqa.com\/zh\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/wcaa.preprod.fruitionqa.com\/zh\/wp-json\/wp\/v2\/users\/7"}],"replies":[{"embeddable":true,"href":"https:\/\/wcaa.preprod.fruitionqa.com\/zh\/wp-json\/wp\/v2\/comments?post=735"}],"version-history":[{"count":33,"href":"https:\/\/wcaa.preprod.fruitionqa.com\/zh\/wp-json\/wp\/v2\/pages\/735\/revisions"}],"predecessor-version":[{"id":5124,"href":"https:\/\/wcaa.preprod.fruitionqa.com\/zh\/wp-json\/wp\/v2\/pages\/735\/revisions\/5124"}],"up":[{"embeddable":true,"href":"https:\/\/wcaa.preprod.fruitionqa.com\/zh\/wp-json\/wp\/v2\/pages\/717"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wcaa.preprod.fruitionqa.com\/zh\/wp-json\/wp\/v2\/media\/2143"}],"wp:attachment":[{"href":"https:\/\/wcaa.preprod.fruitionqa.com\/zh\/wp-json\/wp\/v2\/media?parent=735"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}