{"id":28721,"date":"2026-08-21T08:28:04","date_gmt":"2026-08-21T15:28:04","guid":{"rendered":"https:\/\/dornsife.usc.edu\/news\/?page_id=28721"},"modified":"2026-09-02T16:24:06","modified_gmt":"2026-09-02T23:24:06","slug":"global-summer-research","status":"publish","type":"page","link":"https:\/\/dornsife.usc.edu\/news\/global-summer-research\/","title":{"rendered":"Global Summer Research"},"content":{"rendered":"\n\n  \n    \n\n\n\n\n\n\n<div\n  class=\"cc--component-container cc--rich-text \"\n\n  \n  \n  \n  \n  \n  \n  >\n  <div class=\"c--component c--rich-text\"\n    \n      >\n\n    \n      \n<div class=\"f--field f--wysiwyg\">\n\n    \n  <h1>USC Dornsife scholars venture around the world in pursuit of answers<\/h1>\n<p>This summer, researchers at the USC Dornsife College of Letters, Arts and Sciences turned the world into a laboratory, traveling across continents to pursue questions on a range of topics, from ancient civilizations and human behavior to climate change, quantum physics and the inner workings of our planet.<\/p>\n<p>The projects are part of a broad USC Dornsife research footprint that stretched across Europe, Africa, Asia and the Americas. Working in laboratories, museums, archives, communities and field sites, faculty members and students gathered data, forged international collaborations and took advantage of resources and expertise available only on location \u2014 bringing new perspectives to questions with implications both locally and around the world.<\/p>\n\n\n\n<\/div>\n\n\n  <\/div><\/div>\n\n\n  \n    \n\n\n\n\n\n\n<div\n  class=\"cc--component-container cc--embed-code \"\n\n  \n  \n  \n  \n  \n  \n  >\n  <div class=\"c--component c--embed-code\"\n    \n      >\n\n    \n  \n\n      <div class=\"f--embed\">\n      <!DOCTYPE html>\r\n<html lang=\"en\">\r\n<head>\r\n  <meta charset=\"UTF-8\">\r\n  <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\r\n  <title>USC Dornsife Global Research<\/title>\r\n\r\n  <link href=\"https:\/\/fonts.googleapis.com\/css2?family=Playfair+Display:ital,wght@0,400;0,600;0,700;1,400&#038;family=Source+Sans+3:wght@300;400;600;700&#038;display=swap\" rel=\"stylesheet\">\r\n  <link href=\"https:\/\/unpkg.com\/maplibre-gl@4.1.2\/dist\/maplibre-gl.css\" rel=\"stylesheet\" \/>\r\n\r\n  <style>\r\n    *, *::before, *::after { box-sizing: border-box; margin: 0; padding: 0; }\r\n\r\n    :root {\r\n      --cardinal:      #990000;\r\n      --cardinal-dark: #6b0000;\r\n      --gold:          #FFCC00;\r\n      --cream:         #FAF8F5;\r\n      --cream-mid:     #F2EDE6;\r\n      --cream-dark:    #E8E0D6;\r\n      --text:          #1a1a1a;\r\n      --muted:         #5a524a;\r\n      --border:        #DDD6CC;\r\n    }\r\n\r\n    html, body {\r\n      font-family: 'Source Sans 3', sans-serif;\r\n      color: var(--text);\r\n      background: var(--cream);\r\n    }\r\n\r\n    \/* \u2500 \u2500  LAYOUT \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500  *\/\r\n    #app {\r\n      display: flex;\r\n      height: 650px;\r\n      position: relative;\r\n      overflow: hidden;\r\n      border: 1px solid var(--border);\r\n    }\r\n\r\n    \/* \u2500 \u2500  LEFT PANEL \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500  *\/\r\n    #left-panel {\r\n      width: 380px;\r\n      min-width: 380px;\r\n      display: flex;\r\n      flex-direction: column;\r\n      position: relative;\r\n      background: var(--cream);\r\n      border-right: 1px solid var(--border);\r\n      z-index: 10;\r\n      transition: width 0.3s ease, min-width 0.3s ease;\r\n      overflow: hidden;\r\n    }\r\n\r\n    #left-panel.collapsed {\r\n      width: 0;\r\n      min-width: 0;\r\n    }\r\n\r\n    #panel-header {\r\n      padding: 22px 20px 14px;\r\n      border-bottom: 1px solid var(--border);\r\n      flex-shrink: 0;\r\n      display: flex;\r\n      align-items: flex-start;\r\n      justify-content: space-between;\r\n      gap: 8px;\r\n    }\r\n\r\n    #panel-header-text { flex: 1; min-width: 0; }\r\n\r\n    #panel-header h1 {\r\n      font-family: 'Playfair Display', serif;\r\n      font-size: 1.3rem;\r\n      font-weight: 700;\r\n      line-height: 1.2;\r\n      color: var(--cardinal);\r\n      white-space: nowrap;\r\n    }\r\n\r\n    #panel-header .subtitle {\r\n      font-size: 0.78rem;\r\n      color: var(--muted);\r\n      margin-top: 4px;\r\n      font-weight: 400;\r\n      white-space: nowrap;\r\n    }\r\n\r\n    \/* \u2500 \u2500  COLLAPSE TOGGLE (desktop) \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500  *\/\r\n    #collapse-btn {\r\n      flex-shrink: 0;\r\n      width: 28px;\r\n      height: 28px;\r\n      background: var(--cream-mid);\r\n      border: 1px solid var(--border);\r\n      border-radius: 6px;\r\n      cursor: pointer;\r\n      display: flex;\r\n      align-items: center;\r\n      justify-content: center;\r\n      margin-top: 2px;\r\n      transition: background 0.15s;\r\n    }\r\n    #collapse-btn:hover { background: var(--cream-dark); }\r\n\r\n    \/* Expand button \u2013 floats on map when panel is collapsed *\/\r\n    #expand-btn {\r\n      display: none;\r\n      position: absolute;\r\n      left: 10px;\r\n      top: 10px;\r\n      z-index: 1001;\r\n      width: 34px;\r\n      height: 34px;\r\n      background: rgba(250,248,245,0.95);\r\n      border: 1px solid var(--border);\r\n      border-radius: 6px;\r\n      cursor: pointer;\r\n      align-items: center;\r\n      justify-content: center;\r\n      box-shadow: 0 1px 8px rgba(0,0,0,0.14);\r\n      transition: background 0.15s;\r\n    }\r\n    #expand-btn:hover { background: white; }\r\n    #left-panel.collapsed ~ #map-panel #expand-btn { display: flex; }\r\n\r\n    \/* \u2500 \u2500  PROJECT LIST \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500  *\/\r\n    #project-list {\r\n      overflow-y: auto;\r\n      flex: 1;\r\n      \/* Native <ul> \u2014 suppress bullets *\/\r\n      list-style: none;\r\n      padding: 0;\r\n      margin: 0;\r\n    }\r\n\r\n    #project-list::-webkit-scrollbar { width: 4px; }\r\n    #project-list::-webkit-scrollbar-track { background: transparent; }\r\n    #project-list::-webkit-scrollbar-thumb { background: var(--cream-dark); border-radius: 2px; }\r\n\r\n    \/* <li> wrapper \u2014 suppress any remaining list decoration *\/\r\n    .project-item-li { list-style: none; }\r\n    .project-item-li.hidden { display: none; }\r\n\r\n    \/* Project button \u2014 full-width, left-aligned, reset native button styles *\/\r\n    .project-item {\r\n      display: block;\r\n      width: 100%;\r\n      text-align: left;\r\n      background: none;\r\n      border: none;\r\n      border-bottom: 1px solid var(--border);\r\n      border-left: 3px solid transparent;\r\n      padding: 15px 24px;\r\n      cursor: pointer;\r\n      font-family: 'Source Sans 3', sans-serif;\r\n      transition: background 0.15s, border-color 0.15s;\r\n    }\r\n\r\n    .project-item:hover { background: var(--cream-mid); }\r\n\r\n    \/* aria-pressed=\"true\" drives selected state \u2014 not color alone *\/\r\n    .project-item[aria-pressed=\"true\"] {\r\n      background: #f4ece3;\r\n      border-left-color: var(--cardinal);\r\n    }\r\n\r\n    .item-kicker {\r\n      display: block;\r\n      font-size: 0.68rem;\r\n      font-weight: 700;\r\n      text-transform: uppercase;\r\n      letter-spacing: 0.09em;\r\n      color: var(--cardinal);\r\n      margin-bottom: 4px;\r\n    }\r\n\r\n    .item-title {\r\n      display: block;\r\n      font-family: 'Playfair Display', serif;\r\n      font-size: 0.95rem;\r\n      font-weight: 600;\r\n      line-height: 1.35;\r\n      color: var(--text);\r\n    }\r\n\r\n    .item-meta {\r\n      display: block;\r\n      font-size: 0.77rem;\r\n      color: var(--muted);\r\n      margin-top: 3px;\r\n    }\r\n\r\n    \/* \u2500 \u2500  DETAIL PANEL (dialog overlay) \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500  *\/\r\n    #detail-panel {\r\n      position: absolute;\r\n      inset: 0;\r\n      background: var(--cream);\r\n      display: flex;\r\n      flex-direction: column;\r\n      transform: translateX(-100%);\r\n      transition: transform 0.3s cubic-bezier(0.4, 0, 0.2, 1);\r\n      z-index: 20;\r\n    }\r\n\r\n    #detail-panel.open { transform: translateX(0); }\r\n\r\n    #detail-back {\r\n      display: flex;\r\n      align-items: center;\r\n      gap: 7px;\r\n      padding: 14px 24px;\r\n      background: none;\r\n      border: none;\r\n      border-bottom: 1px solid var(--border);\r\n      width: 100%;\r\n      text-align: left;\r\n      cursor: pointer;\r\n      font-family: 'Source Sans 3', sans-serif;\r\n      font-size: 0.8rem;\r\n      font-weight: 700;\r\n      letter-spacing: 0.04em;\r\n      text-transform: uppercase;\r\n      color: var(--cardinal);\r\n      transition: background 0.15s;\r\n      flex-shrink: 0;\r\n    }\r\n\r\n    #detail-back:hover { background: var(--cream-mid); }\r\n    #detail-back svg { flex-shrink: 0; transition: transform 0.15s; }\r\n    #detail-back:hover svg { transform: translateX(-3px); }\r\n\r\n    #detail-content {\r\n      overflow-y: auto;\r\n      flex: 1;\r\n      padding: 26px 24px 32px;\r\n    }\r\n\r\n    #detail-content::-webkit-scrollbar { width: 4px; }\r\n    #detail-content::-webkit-scrollbar-thumb { background: var(--cream-dark); border-radius: 2px; }\r\n\r\n    .d-kicker {\r\n      font-size: 0.68rem;\r\n      font-weight: 700;\r\n      text-transform: uppercase;\r\n      letter-spacing: 0.09em;\r\n      color: var(--cardinal);\r\n      margin-bottom: 8px;\r\n    }\r\n\r\n    .d-title {\r\n      font-family: 'Playfair Display', serif;\r\n      font-size: 1.3rem;\r\n      font-weight: 700;\r\n      line-height: 1.3;\r\n      color: var(--text);\r\n      margin-bottom: 8px;\r\n    }\r\n\r\n    .d-image {\r\n      width: 100%;\r\n      aspect-ratio: 16 \/ 9;\r\n      object-fit: cover;\r\n      border-radius: 8px;\r\n      margin-bottom: 18px;\r\n      display: block;\r\n    }\r\n\r\n    .d-label {\r\n      font-size: 0.67rem;\r\n      font-weight: 700;\r\n      text-transform: uppercase;\r\n      letter-spacing: 0.1em;\r\n      color: var(--muted);\r\n      margin-top: 18px;\r\n      margin-bottom: 5px;\r\n    }\r\n\r\n    .d-value {\r\n      font-size: 0.9rem;\r\n      font-weight: 600;\r\n      color: var(--text);\r\n    }\r\n\r\n    .d-tags {\r\n      display: flex;\r\n      flex-wrap: wrap;\r\n      gap: 6px;\r\n      margin-top: 5px;\r\n    }\r\n\r\n    .tag {\r\n      background: var(--cream-dark);\r\n      color: #3a342c;\r\n      font-size: 0.73rem;\r\n      font-weight: 600;\r\n      padding: 4px 11px;\r\n      border-radius: 20px;\r\n      letter-spacing: 0.01em;\r\n    }\r\n\r\n    .d-divider {\r\n      height: 1px;\r\n      background: var(--border);\r\n      margin: 20px 0 0;\r\n    }\r\n\r\n    \/* \u2500 \u2500  MAP PANEL \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500  *\/\r\n    #map-panel {\r\n      flex: 1;\r\n      position: relative;\r\n      min-width: 0;\r\n    }\r\n\r\n    #map {\r\n      width: 100%;\r\n      height: 100%;\r\n    }\r\n\r\n    \/* \u2500 \u2500  REGION FILTER CHIPS \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500  *\/\r\n    #region-filters {\r\n      position: absolute;\r\n      bottom: 22px;\r\n      left: 50%;\r\n      transform: translateX(-50%);\r\n      z-index: 1000;\r\n      display: flex;\r\n      flex-wrap: wrap;\r\n      gap: 6px;\r\n      justify-content: center;\r\n      padding: 10px 14px;\r\n      background: rgba(250, 248, 245, 0.93);\r\n      border-radius: 50px;\r\n      box-shadow: 0 2px 16px rgba(0,0,0,0.14), 0 0 0 1px rgba(0,0,0,0.06);\r\n      backdrop-filter: blur(6px);\r\n      -webkit-backdrop-filter: blur(6px);\r\n    }\r\n\r\n    .chip {\r\n      padding: 5px 14px;\r\n      border-radius: 20px;\r\n      font-family: 'Source Sans 3', sans-serif;\r\n      font-size: 0.75rem;\r\n      font-weight: 700;\r\n      letter-spacing: 0.02em;\r\n      cursor: pointer;\r\n      border: 1.5px solid var(--border);\r\n      background: white;\r\n      color: var(--muted);\r\n      transition: background 0.15s, border-color 0.15s, color 0.15s, transform 0.1s;\r\n    }\r\n\r\n    .chip:hover {\r\n      border-color: var(--cardinal);\r\n      color: var(--cardinal);\r\n      transform: translateY(-1px);\r\n    }\r\n\r\n    \/* aria-pressed=\"true\" is the sole driver of active chip style \u2014 no .active class *\/\r\n    .chip[aria-pressed=\"true\"] {\r\n      background: var(--cardinal);\r\n      border-color: var(--cardinal);\r\n      color: white;\r\n    }\r\n\r\n    \/* \u2500 \u2500  SCREEN-READER-ONLY UTILITY \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500  *\/\r\n    .sr-only {\r\n      position: absolute;\r\n      width: 1px;\r\n      height: 1px;\r\n      padding: 0;\r\n      margin: -1px;\r\n      overflow: hidden;\r\n      clip: rect(0,0,0,0);\r\n      white-space: nowrap;\r\n      border: 0;\r\n    }\r\n\r\n    \/* \u2500 \u2500  FOCUS VISIBLE \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500  *\/\r\n    :focus-visible {\r\n      outline: 3px solid var(--cardinal);\r\n      outline-offset: 2px;\r\n      border-radius: 3px;\r\n    }\r\n\r\n    \/* \u2500 \u2500  MAP PINS \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500  *\/\r\n\r\n    \/* \u2500 \u2500  BOTTOM SHEET (mobile) \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500  *\/\r\n    #mobile-backdrop {\r\n      display: none;\r\n      position: fixed;\r\n      inset: 0;\r\n      background: rgba(0,0,0,0.35);\r\n      z-index: 499;\r\n      opacity: 0;\r\n      pointer-events: none;\r\n      transition: opacity 0.35s ease;\r\n    }\r\n    #mobile-backdrop.open {\r\n      opacity: 1;\r\n      pointer-events: auto;\r\n    }\r\n    @media (max-width: 660px) {\r\n      #mobile-backdrop { display: block; }\r\n    }\r\n\r\n    #mobile-sheet {\r\n      position: fixed;\r\n      bottom: 0; left: 0; right: 0;\r\n      height: 72vh;\r\n      background: var(--cream);\r\n      border-radius: 20px 20px 0 0;\r\n      box-shadow: 0 -4px 32px rgba(0,0,0,0.2);\r\n      transform: translateY(100%);\r\n      transition: transform 0.35s cubic-bezier(0.4,0,0.2,1);\r\n      z-index: 500;\r\n      flex-direction: column;\r\n      overflow: hidden;\r\n      display: none;\r\n    }\r\n    @media (max-width: 660px) {\r\n      #mobile-sheet { display: flex; }\r\n    }\r\n    #mobile-sheet.open { transform: translateY(0); }\r\n\r\n    .sheet-handle {\r\n      width: 40px; height: 4px;\r\n      background: var(--border);\r\n      border-radius: 2px;\r\n      margin: 12px auto 0;\r\n      flex-shrink: 0;\r\n    }\r\n\r\n    #sheet-close {\r\n      position: absolute;\r\n      top: 10px; right: 14px;\r\n      background: none;\r\n      border: none;\r\n      cursor: pointer;\r\n      color: var(--muted);\r\n      padding: 8px;\r\n      display: flex;\r\n      align-items: center;\r\n      justify-content: center;\r\n      border-radius: 6px;\r\n      transition: background 0.15s;\r\n    }\r\n    #sheet-close:hover { background: var(--cream-mid); }\r\n\r\n    #sheet-content {\r\n      overflow-y: auto;\r\n      flex: 1;\r\n      padding: 16px 24px 48px;\r\n    }\r\n    #sheet-content::-webkit-scrollbar { width: 4px; }\r\n    #sheet-content::-webkit-scrollbar-thumb { background: var(--cream-dark); border-radius: 2px; }\r\n\r\n    \/* \u2500 \u2500  MOBILE (\u2264  660px) \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500  *\/\r\n    @media (max-width: 660px) {\r\n      \/* Hide desktop panel elements \u2014 bottom sheet replaces them *\/\r\n      #left-panel       { display: none !important; }\r\n      #collapse-btn     { display: none !important; }\r\n      #expand-btn       { display: none !important; }\r\n      #mobile-close-btn { display: none !important; }\r\n\r\n      \/* Full-viewport map *\/\r\n      #app { height: 100dvh; }\r\n      #map-panel { height: 100%; }\r\n\r\n      #region-filters {\r\n        bottom: 10px;\r\n        max-width: calc(100% - 20px);\r\n        flex-wrap: nowrap;\r\n        overflow-x: auto;\r\n        justify-content: flex-start;\r\n        border-radius: 10px;\r\n        scrollbar-width: none;\r\n      }\r\n      #region-filters::-webkit-scrollbar { display: none; }\r\n\r\n      .chip { min-height: 36px; padding: 7px 14px; }\r\n    }\r\n  <\/style>\r\n<\/head>\r\n<body>\r\n<div id=\"app\">\r\n\r\n  <!-- \u2500 \u2500  LEFT PANEL \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500  -->\r\n  <div id=\"left-panel\">\r\n    <div id=\"panel-header\">\r\n      <div id=\"panel-header-text\">\r\n        <h1>USC Dornsife<br>Global Research<\/h1>\r\n        <p class=\"subtitle\" id=\"project-count\" aria-live=\"polite\" aria-atomic=\"true\">21 featured projects worldwide<\/p>\r\n      <\/div>\r\n\r\n      <!-- Desktop collapse \u2014 aria-controls omitted: button is inside the controlled element -->\r\n      <button id=\"collapse-btn\"\r\n              aria-label=\"Collapse project list\"\r\n              aria-expanded=\"true\">\r\n        <svg width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\" aria-hidden=\"true\" focusable=\"false\">\r\n          <path d=\"M9 2L4 7L9 12\" stroke=\"#6a6258\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"\/>\r\n        <\/svg>\r\n      <\/button>\r\n\r\n      <!-- Mobile close \u2014 toggled via media query -->\r\n      <button id=\"mobile-close-btn\"\r\n              aria-label=\"Close project list\"\r\n              style=\"display:none; flex-shrink:0; width:28px; height:28px; background:var(--cream-mid); border:1px solid var(--border); border-radius:6px; cursor:pointer; align-items:center; justify-content:center; margin-top:2px;\">\r\n        <svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" aria-hidden=\"true\" focusable=\"false\">\r\n          <path d=\"M1 1l10 10M11 1L1 11\" stroke=\"#6a6258\" stroke-width=\"2\" stroke-linecap=\"round\"\/>\r\n        <\/svg>\r\n      <\/button>\r\n    <\/div>\r\n\r\n    <!-- Semantic list; items injected as <li><button> by renderList() -->\r\n    <ul id=\"project-list\"><\/ul>\r\n\r\n    <!-- Detail dialog \u2014 slides over the list when a project is selected.\r\n         aria-label is updated to the project title by selectProject() before\r\n         aria-hidden is removed, avoiding a broken aria-labelledby reference on load. -->\r\n    <div id=\"detail-panel\"\r\n         role=\"dialog\"\r\n         aria-modal=\"true\"\r\n         aria-label=\"Project details\"\r\n         aria-hidden=\"true\">\r\n      <button id=\"detail-back\">\r\n        <svg width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\" aria-hidden=\"true\" focusable=\"false\">\r\n          <path d=\"M9 2L4 7L9 12\" stroke=\"#990000\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"\/>\r\n        <\/svg>\r\n        All Projects\r\n      <\/button>\r\n      <div id=\"detail-content\"><\/div>\r\n    <\/div>\r\n  <\/div>\r\n\r\n  <!-- \u2500 \u2500  MAP PANEL \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500  -->\r\n  <div id=\"map-panel\">\r\n\r\n    <!-- Shown when panel is collapsed (desktop) or always (mobile) -->\r\n    <button id=\"expand-btn\"\r\n            aria-label=\"Show project list\"\r\n            aria-expanded=\"false\"\r\n            aria-controls=\"left-panel\">\r\n      <svg width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\" aria-hidden=\"true\" focusable=\"false\">\r\n        <path d=\"M5 2l6 5-6 5\" stroke=\"#990000\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"\/>\r\n      <\/svg>\r\n    <\/button>\r\n\r\n    <!-- Accessible description: map tile text is raster \u2014 not available to AT -->\r\n    <p id=\"map-desc\" class=\"sr-only\">\r\n      Interactive map showing pins for each research project. All project information is fully accessible through the project list on the left. Use the project list to select a project and navigate to its location on the map.\r\n    <\/p>\r\n\r\n    <div id=\"map\"\r\n         role=\"application\"\r\n         aria-label=\"Research project locations\"\r\n         aria-describedby=\"map-desc\"><\/div>\r\n\r\n    <!-- Region filter toolbar \u2014 buttons use aria-pressed for exclusive-select state -->\r\n    <div id=\"region-filters\" role=\"group\" aria-label=\"Filter by region\">\r\n      <button class=\"chip\" data-region=\"all\"           aria-pressed=\"true\">All Regions<\/button>\r\n      <button class=\"chip\" data-region=\"Africa\"        aria-pressed=\"false\">Africa<\/button>\r\n      <button class=\"chip\" data-region=\"Asia\"          aria-pressed=\"false\">Asia<\/button>\r\n      <button class=\"chip\" data-region=\"Europe\"        aria-pressed=\"false\">Europe<\/button>\r\n      <button class=\"chip\" data-region=\"North America\" aria-pressed=\"false\">North America<\/button>\r\n      <button class=\"chip\" data-region=\"South America\" aria-pressed=\"false\">South America<\/button>\r\n      <button class=\"chip\" data-region=\"Oceania\"       aria-pressed=\"false\">Oceania<\/button>\r\n    <\/div>\r\n  <\/div>\r\n\r\n<\/div>\r\n\r\n<div id=\"mobile-backdrop\" aria-hidden=\"true\"><\/div>\r\n<div id=\"mobile-sheet\"\r\n     role=\"dialog\"\r\n     aria-modal=\"true\"\r\n     aria-label=\"Project details\"\r\n     aria-hidden=\"true\">\r\n  <div class=\"sheet-handle\" aria-hidden=\"true\"><\/div>\r\n  <button id=\"sheet-close\" aria-label=\"Close project details\">\r\n    <svg width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\" aria-hidden=\"true\" focusable=\"false\">\r\n      <path d=\"M1 1l10 10M11 1L1 11\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\"\/>\r\n    <\/svg>\r\n  <\/button>\r\n  <div id=\"sheet-content\"><\/div>\r\n<\/div>\r\n\r\n<script src=\"https:\/\/unpkg.com\/maplibre-gl@4.1.2\/dist\/maplibre-gl.js\"><\/script>\r\n\r\n<script>\r\n\/\/ \u2500 \u2500  DATA \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \r\nconst PROJECTS = [\r\n  {\r\n    id: 1,\r\n    title: \"What factors help Caribbean coral reefs grow and survive?\",\r\n    region: \"Europe\", country: \"Germany\",\r\n    department: \"Marine and Environmental Biology\",\r\n    scholar: [\"Associate Professor Carly Kenkel\"],\r\n    image: \"\",\r\n    lat: 53.0486, lng: 8.63,\r\n    tags: [\"Climate Change\", \"Coral Restoration\"],\r\n  },\r\n  {\r\n    id: 2,\r\n    title: \"How does gold mining affect the Amazon rainforest in the Northern Andes?\",\r\n    region: \"South America\", country: \"Peru\",\r\n    department: \"Earth Sciences; Environmental Studies\",\r\n    scholar: [\"Professor Josh West\"],\r\n    image: \"\",\r\n    lat: -13.532, lng: -71.9675,\r\n    tags: [\"Environmental Science\", \"Pollution\"],\r\n  },\r\n  {\r\n    id: 3,\r\n    title: \"How do local traditions and institutions shape who benefits when high-value agricultural products enter global markets?\",\r\n    region: \"Europe\", country: \"France\",\r\n    department: \"Political Science and International Relations\",\r\n    scholar: [\"Associate Professor Brian Palmer-Rubin\"],\r\n    image: \"https:\/\/dornsife.usc.edu\/news\/wp-content\/uploads\/sites\/7\/2026\/08\/brian-palmer-rubin-france-map-scaled.jpg\",\r\n    lat: 47.024, lng: 4.8389,\r\n    tags: [\"Economics\", \"Sociology\"],\r\n  },\r\n  {\r\n    id: 4,\r\n    title: \"How are small-scale farmers adapting to Mexico\u2019s booming berry industry and growing pressure on scarce water?\",\r\n    region: \"North America\", country: \"Mexico\",\r\n    department: \"Political Science and International Relations\",\r\n    scholar: [\"Associate Professor Brian Palmer-Rubin\"],\r\n    image: \"https:\/\/dornsife.usc.edu\/news\/wp-content\/uploads\/sites\/7\/2026\/08\/brian-palmer-rubin-mexico-map.jpg\",\r\n    lat: 20.2971, lng: -103.431,\r\n    tags: [\"Economics\", \"Sociology\"],\r\n  },\r\n  {\r\n    id: 5,\r\n    title: \"What childhood factors can increase, or reduce, the risk of addiction and poor health later in life?\",\r\n    region: \"Africa\", country: \"Mauritius\",\r\n    department: \"Psychology\",\r\n    scholar: [\"Professor Susan Luczak\"],\r\n    image: \"https:\/\/dornsife.usc.edu\/news\/wp-content\/uploads\/sites\/7\/2026\/08\/susan-luczak-mauritius-map.jpg\",\r\n    lat: -20.2636, lng: 57.4791,\r\n    tags: [\"Addiction\", \"Long-Term Health\", \"Mental Health\"],\r\n  },\r\n  {\r\n    id: 6,\r\n    title: \"What can under-studied languages in Nigeria reveal about the limits of human language?\",\r\n    region: \"Africa\", country: \"Nigeria\",\r\n    department: \"Linguistics\",\r\n    scholar: [\"Assistant Professor Travis Major\"],\r\n    image: \"https:\/\/dornsife.usc.edu\/news\/wp-content\/uploads\/sites\/7\/2026\/08\/travis-major-nigeria-map-scaled.jpg\",\r\n    lat: 5.0377, lng: 7.9128,\r\n    tags: [\"Culture\", \"Language\", \"Linguistics\"],\r\n  },\r\n  {\r\n    id: 7,\r\n    title: \"How do interactions with financial advisors affect investment choices and costly investment mistakes?\",\r\n    region: \"Europe\", country: \"France\",\r\n    department: \"Economics\",\r\n    scholar: [\"Associate Professor Marianne Andries\"],\r\n    image: \"\",\r\n    lat: 48.8566, lng: 2.3522,\r\n    tags: [\"Finance and Investment\"],\r\n  },\r\n  {\r\n    id: 8,\r\n    title: \"How do households across socioeconomic statuses cope with water shortages and limited access to piped water?\",\r\n    region: \"Africa\", country: \"Republic of Somaliland\",\r\n    department: \"Economics\",\r\n    scholar: [\"PhD Student Jingshu Chen\"],\r\n    image: \"https:\/\/dornsife.usc.edu\/news\/wp-content\/uploads\/sites\/7\/2026\/08\/jingshu-chen-somaliland-map-scaled.jpg\",\r\n    lat: 9.5624, lng: 44.077,\r\n    tags: [\"Sustainability\", \"Water\"],\r\n  },\r\n  {\r\n    id: 9,\r\n    title: \"What can historical trade and productivity data reveal about the origins of the Industrial Revolution?\",\r\n    region: \"Europe\", country: \"Switzerland\",\r\n    department: \"Economics\",\r\n    scholar: [\"Professor Thomas Chaney\"],\r\n    image: \"\",\r\n    lat: 46.2044, lng: 6.1432,\r\n    tags: [\"Civilization\", \"Industrial Revolution\"],\r\n  },\r\n  {\r\n    id: 10,\r\n    title: \"How do conservative political networks build influence and remain resilient over time?\",\r\n    region: \"South America\", country: \"Argentina\",\r\n    department: \"Sociology\",\r\n    scholar: [\"Assistant Professor Tomas Gold\"],\r\n    image: \"\",\r\n    lat: -34.6037, lng: -58.3816,\r\n    tags: [\"Socioeconomics\", \"Politics\"],\r\n  },\r\n  {\r\n    id: 11,\r\n    title: \"Can electricity control magnetism in ultrathin materials, and could this lead to faster, more energy-efficient computers?\",\r\n    region: \"Europe\", country: \"Germany\",\r\n    department: \"Physics and Astronomy\",\r\n    scholar: [\"Assistant Professor Kelly Luo\"],\r\n    image: \"https:\/\/dornsife.usc.edu\/news\/wp-content\/uploads\/sites\/7\/2026\/08\/kelly-luo-berlin-map-scaled.jpg\",\r\n    lat: 52.52, lng: 13.405,\r\n    tags: [\"Physics\", \"Quantum Mechanics\", \"Quantum Computing\"],\r\n  },\r\n  {\r\n    id: 12,\r\n    title: \"Can eye tracking reveal whether AI sees urban environments the way people do?\",\r\n    region: \"Europe\", country: \"Belgium\",\r\n    department: \"Spatial Sciences\",\r\n    scholar: [\"Associate Professor Siqin (Sisi) Wang\"],\r\n    image: \"https:\/\/dornsife.usc.edu\/news\/wp-content\/uploads\/sites\/7\/2026\/08\/siqin-wang-belgium-map-scaled.jpg\",\r\n    lat: 51.0543, lng: 3.7174,\r\n    tags: [\"Artificial Intelligence\"],\r\n  },\r\n  {\r\n    id: 13,\r\n    title: \"What can the language Avatime reveal about the ways people form sentences and associate words?\",\r\n    region: \"Africa\", country: \"Ghana\",\r\n    department: \"Linguistics\",\r\n    scholar: [\"PhD Student Jayakrishnan \u201cJK\u201d Subramony\"],\r\n    image: \"https:\/\/dornsife.usc.edu\/news\/wp-content\/uploads\/sites\/7\/2026\/08\/jayakrishnan-subramony-ghana-map.jpg\",\r\n    lat: 6.841, lng: 0.33,\r\n    tags: [\"Linguistics\", \"Culture\"],\r\n  },\r\n  {\r\n    id: 14,\r\n    title: \"Can high-speed lasers reveal the quantum behavior of molecules and help us build better sensors?\",\r\n    region: \"Europe\", country: \"United Kingdom\",\r\n    department: \"Chemistry\",\r\n    scholar: [\"PhD Student Thabassum Nattikallungal\"],\r\n    image: \"https:\/\/dornsife.usc.edu\/news\/wp-content\/uploads\/sites\/7\/2026\/08\/thabassum-nattikallungal-uk-map.jpg\",\r\n    lat: 51.4545, lng: -2.5879,\r\n    tags: [\"Quantum Chemistry\"],\r\n  },\r\n  {\r\n    id: 15,\r\n    title: \"How do microbes transform iron in oxygen-free coastal sediments?\",\r\n    region: \"North America\", country: \"Mexico\",\r\n    department: \"Earth Sciences\",\r\n    scholar: [\"PhD Student Mary Kate Dinneen\"],\r\n    image: \"\",\r\n    lat: 20.681526, lng:-106.206538,\r\n    tags: [\"Marine Biochemistry\", \"Ocean Research\"],\r\n  },\r\n  {\r\n    id: 16,\r\n    title: \"What can artifacts from ancient Kyoto reveal about the era when the world\u2019s first novel, The Tale of Gengji, was written?\",\r\n    region: \"Asia\", country: \"Japan\",\r\n    department: \"History; East Asian Languages and Cultures\",\r\n    scholar: [\"Professor Joan Piggott\"],\r\n    image: \"https:\/\/dornsife.usc.edu\/news\/wp-content\/uploads\/sites\/7\/2026\/08\/joan-piggott-japan-map.jpg\",\r\n    lat: 35.0116, lng: 135.7681,\r\n    tags: [\"Japanese History\", \"Literature\"],\r\n  },\r\n  {\r\n    id: 17,\r\n    title: \"Why was the Melisende Psalter created, and what can it reveal about the Crusader Kingdom of Jerusalem?\",\r\n    region: \"Europe\", country: \"England\",\r\n    department: \"History\",\r\n    scholar: [\"Professor Jay Rubenstein\"],\r\n    image: \"\",\r\n    lat: 51.5074, lng: -0.1278,\r\n    tags: [\"Medieval History\", \"Political History\"],\r\n  },\r\n  {\r\n    id: 18,\r\n    title: \"What can high-intensity X-ray images reveal about rotating superfluid helium droplets?\",\r\n    region: \"Europe\", country: \"Germany\",\r\n    department: \"Chemistry\",\r\n    scholar: [\"Professor Andrey Vilesov\"],\r\n    image: \"https:\/\/dornsife.usc.edu\/news\/wp-content\/uploads\/sites\/7\/2026\/08\/andrey-vilesov-hamburg-map-scaled.jpg\",\r\n    lat: 53.569633, lng: 10.000254,\r\n    tags: [\"Condensed Matter Physics\"],\r\n  },\r\n  {\r\n    id: 19,\r\n    title: \"Do people respond differently to inequality depending on whether a leader earned power, benefited from favoritism or cheated?\",\r\n    region: \"Africa\", country: \"Madagascar\",\r\n    department: \"Economics\",\r\n    scholar: [\"Professor Isabelle Brocas\"],\r\n    image: \"https:\/\/dornsife.usc.edu\/news\/wp-content\/uploads\/sites\/7\/2026\/08\/isabelle-brocas-madagascar-map-scaled.jpg\",\r\n    lat: -18.909316, lng: 47.514239,\r\n    tags: [\"Politics\", \"Civil Rights\"],\r\n  },\r\n  {\r\n    id: 20,\r\n    title: \"How does amphibole, a common rock-forming mineral, behave under the extreme heat and pressure deep within Earth\u2019s crust \u2014 and what can it tell us about how the crust itself deforms?\",\r\n    region: \"Asia\", country: \"Japan\",\r\n    department: \"Earth Sciences\",\r\n    scholar: [\"PhD Student Jessica White\"],\r\n    image: \"\",\r\n    lat: 38.269462, lng: 140.859495,\r\n    tags: [\"Geology\", \"Tectonics\"],\r\n  },\r\n  {\r\n    id: 21,\r\n    title: \"Did male and female Pachyrhinosaurus dinosaurs have differently shaped horns?\",\r\n    region: \"North America\", country: \"Canada\",\r\n    department: \"Earth Sciences\",\r\n    scholar: [\"PhD Student James Pinto\"],\r\n    image: \"https:\/\/dornsife.usc.edu\/news\/wp-content\/uploads\/sites\/7\/2026\/08\/james-pinto-pachyrhinosaurus-canada-map-scaled.jpg\",\r\n    lat: 55.172839, lng: -118.810344,\r\n    tags: [\"Paleontology\", \"Dinosaurs\"],\r\n  },\r\n{\r\n    id: 22,\r\n    title: \"Can iron from underwater hydrothermal vents help phytoplankton capture and store more carbon?\",\r\n    region: \"Oceania\", country: \"Tonga\",\r\n    department: \"Earth Sciences\",\r\n    scholar: [\"Professor Seth John\"],\r\n    image: \"https:\/\/dornsife.usc.edu\/news\/wp-content\/uploads\/sites\/7\/2026\/09\/seth-john-tonga-map.jpg\",\r\n    lat: -21.207273, lng: -175.159110,\r\n    tags: [\"Marine Biology\", \"Environmental Science\"],\r\n  }\r\n];\r\n\r\n\/\/ \u2500 \u2500  MAP SETUP \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \r\nconst map = new maplibregl.Map({\r\n  container: 'map',\r\n  style: 'https:\/\/basemaps.cartocdn.com\/gl\/positron-gl-style\/style.json',\r\n  center: [15, 18],\r\n  zoom: 1.8,\r\n  minZoom: 1,\r\n  maxZoom: 16,\r\n  attributionControl: false\r\n});\r\n\r\nmap.addControl(new maplibregl.NavigationControl({ showCompass: false }), 'top-right');\r\nmap.addControl(new maplibregl.AttributionControl({ compact: true }), 'bottom-right');\r\n\r\n\r\n\/\/ \u2500 \u2500  STATE \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \r\nlet activeRegion    = 'all';\r\nlet activeProjectId = null;\r\nlet lastFocusedItem = null;\r\n\r\n\/\/ \u2500 \u2500  DOM REFS \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \r\nconst listEl        = document.getElementById('project-list');\r\nconst detailPanel   = document.getElementById('detail-panel');\r\nconst detailContent = document.getElementById('detail-content');\r\nconst countEl       = document.getElementById('project-count');\r\nconst panelHeader   = document.getElementById('panel-header');\r\n\r\n\/\/ \u2500 \u2500  RENDER LIST \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \r\nfunction renderList() {\r\n  listEl.innerHTML = '';\r\n  let shown = 0;\r\n\r\n  PROJECTS.forEach(p => {\r\n    const visible = activeRegion === 'all' || p.region === activeRegion;\r\n    if (visible) shown++;\r\n\r\n    \/\/ <li> handles visibility; <button> handles interaction \u2014 no role overrides needed\r\n    const li = document.createElement('li');\r\n    li.className = 'project-item-li' + (visible ? '' : ' hidden');\r\n\r\n    const btn = document.createElement('button');\r\n    btn.type = 'button';\r\n    btn.className = 'project-item';\r\n    btn.dataset.id = p.id;\r\n    \/\/ aria-pressed exposes selected state beyond color alone\r\n    btn.setAttribute('aria-pressed', p.id === activeProjectId ? 'true' : 'false');\r\n    \/\/ Button text content is the accessible name; spans are presentational only\r\n    btn.innerHTML = `\r\n      <span class=\"item-kicker\">${p.region}&thinsp;\u00b7&thinsp;${p.country}<\/span>\r\n      <span class=\"item-title\">${p.title}<\/span>\r\n      <span class=\"item-meta\">${p.department}<\/span>\r\n    `;\r\n    btn.addEventListener('click', () => selectProject(p.id));\r\n\r\n    li.appendChild(btn);\r\n    listEl.appendChild(li);\r\n  });\r\n\r\n  const label = activeRegion === 'all' ? 'worldwide' : `in ${activeRegion}`;\r\n  countEl.textContent = `${shown} featured project${shown !== 1 ? 's' : ''} ${label}`;\r\n}\r\n\r\n\/\/ \u2500 \u2500  RENDER MARKERS \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \r\n\/\/ Uses GeoJSON source + circle layer so pins are rendered natively by MapLibre\r\n\/\/ and are always perfectly tied to their coordinates at every zoom level.\r\nfunction renderMarkers() {\r\n  map.addSource('projects', {\r\n    type: 'geojson',\r\n    promoteId: 'id',   \/\/ lets setFeatureState target features by project id\r\n    data: {\r\n      type: 'FeatureCollection',\r\n      features: PROJECTS.map(p => ({\r\n        type: 'Feature',\r\n        id: p.id,\r\n        geometry: { type: 'Point', coordinates: [p.lng, p.lat] },\r\n        properties: { id: p.id, region: p.region }\r\n      }))\r\n    }\r\n  });\r\n\r\n  map.addLayer({\r\n    id: 'pins',\r\n    type: 'circle',\r\n    source: 'projects',\r\n    paint: {\r\n      'circle-radius': [\r\n        'case', ['boolean', ['feature-state', 'active'], false], 10, 8\r\n      ],\r\n      'circle-color': [\r\n        'case', ['boolean', ['feature-state', 'active'], false], '#FFCC00', '#990000'\r\n      ],\r\n      'circle-stroke-color': [\r\n        'case', ['boolean', ['feature-state', 'active'], false], '#990000', '#ffffff'\r\n      ],\r\n      'circle-stroke-width': 2\r\n    }\r\n  });\r\n\r\n  map.on('mouseenter', 'pins', () => { map.getCanvas().style.cursor = 'pointer'; });\r\n  map.on('mouseleave', 'pins', () => { map.getCanvas().style.cursor = ''; });\r\n  map.on('click', 'pins', e => {\r\n    if (e.features.length) {\r\n      const id = e.features[0].properties.id;\r\n      isMobile() ? openSheet(id) : selectProject(id);\r\n    }\r\n  });\r\n}\r\n\r\nfunction applyRegionFilter() {\r\n  if (!map.getLayer('pins')) return;\r\n  const filter = activeRegion === 'all'\r\n    ? null\r\n    : ['==', ['get', 'region'], activeRegion];\r\n  map.setFilter('pins', filter);\r\n}\r\n\r\nfunction refreshMarkerIcons() {\r\n  if (!map.getSource('projects')) return;\r\n  PROJECTS.forEach(p => {\r\n    map.setFeatureState(\r\n      { source: 'projects', id: p.id },\r\n      { active: p.id === activeProjectId }\r\n    );\r\n  });\r\n}\r\n\r\n\/\/ \u2500 \u2500  SELECT PROJECT \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \r\nfunction selectProject(id) {\r\n  activeProjectId = id;\r\n  const p = PROJECTS.find(x => x.id === id);\r\n\r\n  \/\/ Sync aria-pressed on all list buttons\r\n  document.querySelectorAll('.project-item').forEach(el => {\r\n    el.setAttribute('aria-pressed', Number(el.dataset.id) === id ? 'true' : 'false');\r\n  });\r\n\r\n  const activeBtn = listEl.querySelector(`.project-item[data-id=\"${id}\"]`);\r\n  if (activeBtn) activeBtn.scrollIntoView({ block: 'nearest', behavior: 'smooth' });\r\n\r\n  refreshMarkerIcons();\r\n  map.flyTo({ center: [p.lng, p.lat], zoom: 6, duration: 1400 });\r\n\r\n  \/\/ Save for focus restoration on close\r\n  lastFocusedItem = activeBtn;\r\n\r\n  \/\/ Build content \u2014 id=\"detail-panel-title\" must exist before aria-hidden is removed\r\n  detailContent.innerHTML = `\r\n    ${p.image ? `<img decoding=\"async\" src=\"${p.image}\" alt=\"${p.title}\" class=\"d-image\">` : ''}\r\n    <div class=\"d-kicker\">${p.region}&thinsp;\u00b7&thinsp;${p.country}<\/div>\r\n    <h2 class=\"d-title\" id=\"detail-panel-title\">${p.title}<\/h2>\r\n    <div class=\"d-label\">Department<\/div>\r\n    <div class=\"d-value\">${p.department}<\/div>\r\n\r\n    <div class=\"d-label\">${p.scholar.length > 1 ? 'Scholars' : 'Scholar'}<\/div>\r\n    <div class=\"d-value\">${p.scholar.join('&ensp;&middot;&ensp;')}<\/div>\r\n\r\n    <div class=\"d-divider\"><\/div>\r\n\r\n    <div class=\"d-label\">Research Topics<\/div>\r\n    <div class=\"d-tags\">${p.tags.map(t => `<span class=\"tag\">${t}<\/span>`).join('')}<\/div>\r\n\r\n  `;\r\n  detailContent.scrollTop = 0;\r\n\r\n  \/\/ Make sibling panel content inert so Tab cannot reach list buttons behind the dialog\r\n  panelHeader.inert = true;\r\n  listEl.inert = true;\r\n\r\n  \/\/ Update the dialog's accessible name before exposing it to AT\r\n  detailPanel.setAttribute('aria-label', p.title);\r\n  detailPanel.classList.add('open');\r\n  detailPanel.removeAttribute('aria-hidden');\r\n  \/\/ Move focus into the dialog after the CSS transition begins\r\n  setTimeout(() => document.getElementById('detail-back').focus(), 50);\r\n}\r\n\r\n\/\/ \u2500 \u2500  CLOSE DETAIL \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \r\nfunction closeDetail() {\r\n  activeProjectId = null;\r\n\r\n  detailPanel.classList.remove('open');\r\n  detailPanel.setAttribute('aria-hidden', 'true');\r\n  detailPanel.setAttribute('aria-label', 'Project details'); \/\/ reset to static label\r\n\r\n  \/\/ Restore background content to interactive\r\n  panelHeader.inert = false;\r\n  listEl.inert = false;\r\n\r\n  document.querySelectorAll('.project-item').forEach(el => {\r\n    el.setAttribute('aria-pressed', 'false');\r\n  });\r\n  refreshMarkerIcons();\r\n\r\n  \/\/ Return focus to the item that opened the dialog\r\n  if (lastFocusedItem) {\r\n    const target = lastFocusedItem;\r\n    lastFocusedItem = null;\r\n    setTimeout(() => target.focus(), 50);\r\n  }\r\n\r\n  const v = regionViews[activeRegion] || regionViews['all'];\r\n  map.flyTo({ center: v.center, zoom: v.zoom, duration: 1200 });\r\n}\r\n\r\n\/\/ Escape closes the dialog from anywhere inside it\r\ndetailPanel.addEventListener('keydown', e => {\r\n  if (e.key === 'Escape') closeDetail();\r\n});\r\n\r\ndocument.getElementById('detail-back').addEventListener('click', closeDetail);\r\n\r\n\/\/ \u2500 \u2500  REGION CHIPS \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \r\n\/\/ Centers are [lng, lat] \u2014 MapLibre convention (reversed from Leaflet)\r\nconst regionViews = {\r\n  'all':           { center: [15, 18],    zoom: 1.8 },\r\n  'Africa':        { center: [25, 2],     zoom: 3 },\r\n  'Asia':          { center: [100, 30],   zoom: 3 },\r\n  'Europe':        { center: [15, 50],    zoom: 4 },\r\n  'North America': { center: [-95, 40],   zoom: 3 },\r\n  'South America': { center: [-60, -15],  zoom: 3 },\r\n  'Oceania':       { center: [145, -20],  zoom: 4 }\r\n};\r\n\r\ndocument.querySelectorAll('.chip').forEach(chip => {\r\n  chip.addEventListener('click', () => {\r\n    activeRegion = chip.dataset.region;\r\n\r\n    \/\/ aria-pressed drives both AT state and CSS styling \u2014 no .active class needed\r\n    document.querySelectorAll('.chip').forEach(c => c.setAttribute('aria-pressed', 'false'));\r\n    chip.setAttribute('aria-pressed', 'true');\r\n\r\n    if (activeProjectId) {\r\n      const p = PROJECTS.find(x => x.id === activeProjectId);\r\n      if (activeRegion !== 'all' && p.region !== activeRegion) closeDetail();\r\n    }\r\n\r\n    applyRegionFilter();\r\n    renderList();\r\n\r\n    const v = regionViews[activeRegion] || regionViews['all'];\r\n    map.flyTo({ center: v.center, zoom: v.zoom, duration: 1100 });\r\n  });\r\n});\r\n\r\n\/\/ \u2500 \u2500  PANEL COLLAPSE \/ EXPAND (desktop only) \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \r\nconst leftPanel   = document.getElementById('left-panel');\r\nconst collapseBtn = document.getElementById('collapse-btn');\r\nconst expandBtn   = document.getElementById('expand-btn');\r\n\r\nfunction isMobile() { return window.innerWidth <= 660; }\r\n\r\ncollapseBtn.addEventListener('click', () => {\r\n  if (detailPanel.classList.contains('open')) closeDetail();\r\n  collapseBtn.setAttribute('aria-expanded', 'false');\r\n  expandBtn.setAttribute('aria-expanded', 'false');\r\n  leftPanel.classList.add('collapsed');\r\n  setTimeout(() => { leftPanel.inert = true; expandBtn.style.display = 'flex'; map.resize(); }, 320);\r\n});\r\n\r\nexpandBtn.addEventListener('click', () => {\r\n  expandBtn.style.display = 'none';\r\n  leftPanel.inert = false;\r\n  leftPanel.classList.remove('collapsed');\r\n  collapseBtn.setAttribute('aria-expanded', 'true');\r\n  expandBtn.setAttribute('aria-expanded', 'true');\r\n  setTimeout(() => map.resize(), 320);\r\n});\r\n\r\nwindow.addEventListener('resize', () => map.resize());\r\n\r\n\/\/ \u2500 \u2500  BOTTOM SHEET (mobile) \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \r\nconst mobileSheet    = document.getElementById('mobile-sheet');\r\nconst mobileBackdrop = document.getElementById('mobile-backdrop');\r\nconst sheetContent   = document.getElementById('sheet-content');\r\n\r\nfunction openSheet(id) {\r\n  const p = PROJECTS.find(x => x.id === id);\r\n  activeProjectId = id;\r\n  refreshMarkerIcons();\r\n  map.flyTo({ center: [p.lng, p.lat], zoom: 6, duration: 1200 });\r\n\r\n  sheetContent.innerHTML = `\r\n    ${p.image ? `<img decoding=\"async\" src=\"${p.image}\" alt=\"${p.title}\" class=\"d-image\">` : ''}\r\n    <div class=\"d-kicker\">${p.region}&thinsp;\u00b7&thinsp;${p.country}<\/div>\r\n    <h2 class=\"d-title\">${p.title}<\/h2>\r\n    <div class=\"d-label\">Department<\/div>\r\n    <div class=\"d-value\">${p.department}<\/div>\r\n    <div class=\"d-label\">${p.scholar.length > 1 ? 'Scholars' : 'Scholar'}<\/div>\r\n    <div class=\"d-value\">${p.scholar.join('&ensp;&middot;&ensp;')}<\/div>\r\n    <div class=\"d-divider\"><\/div>\r\n    <div class=\"d-label\">Research Topics<\/div>\r\n    <div class=\"d-tags\">${p.tags.map(t => `<span class=\"tag\">${t}<\/span>`).join('')}<\/div>\r\n  `;\r\n  sheetContent.scrollTop = 0;\r\n  mobileSheet.setAttribute('aria-label', p.title);\r\n  mobileSheet.removeAttribute('aria-hidden');\r\n  mobileBackdrop.classList.add('open');\r\n  mobileSheet.classList.add('open');\r\n  setTimeout(() => document.getElementById('sheet-close').focus(), 50);\r\n}\r\n\r\nfunction closeSheet() {\r\n  activeProjectId = null;\r\n  mobileSheet.classList.remove('open');\r\n  mobileBackdrop.classList.remove('open');\r\n  mobileSheet.setAttribute('aria-hidden', 'true');\r\n  refreshMarkerIcons();\r\n}\r\n\r\ndocument.getElementById('sheet-close').addEventListener('click', closeSheet);\r\nmobileBackdrop.addEventListener('click', closeSheet);\r\nmobileSheet.addEventListener('keydown', e => { if (e.key === 'Escape') closeSheet(); });\r\n\r\n\/\/ \u2500 \u2500  MAP LOAD \u2014 darken labels for WCAG AA, then render markers \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \r\nmap.on('load', () => {\r\n  \/\/ Positron background is near-white (#fafaf8); darken all symbol labels to\r\n  \/\/ --text (#1a1a1a, ~18:1 contrast) with a white halo for legibility\r\n  map.getStyle().layers.forEach(layer => {\r\n    if (layer.type === 'symbol' && layer.layout && layer.layout['text-field']) {\r\n      map.setPaintProperty(layer.id, 'text-color', '#1a1a1a');\r\n      map.setPaintProperty(layer.id, 'text-halo-color', '#ffffff');\r\n      map.setPaintProperty(layer.id, 'text-halo-width', 1.5);\r\n    }\r\n  });\r\n\r\n  renderMarkers();\r\n});\r\n\r\n\/\/ \u2500 \u2500  INIT \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \u2500 \r\nrenderList();\r\n<\/script>\r\n<\/body>\r\n<\/html>\n    <\/div>\n  \n\n  <\/div><\/div>\n","protected":false},"excerpt":{"rendered":"","protected":false},"author":14,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"_acf_changed":false,"footnotes":""},"class_list":["post-28721","page","type-page","status-publish","hentry"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v28.2 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Global Summer Research<\/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:\/\/dornsife.usc.edu\/news\/global-summer-research\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Global Summer Research\" \/>\n<meta property=\"og:url\" content=\"https:\/\/dornsife.usc.edu\/news\/global-summer-research\/\" \/>\n<meta property=\"og:site_name\" content=\"USC Dornsife News\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/uscdornsife\" \/>\n<meta property=\"article:modified_time\" content=\"2026-09-02T23:24:06+00:00\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:site\" content=\"@uscdornsife\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/dornsife.usc.edu\\\/news\\\/global-summer-research\\\/\",\"url\":\"https:\\\/\\\/dornsife.usc.edu\\\/news\\\/global-summer-research\\\/\",\"name\":\"Global Summer Research\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/dornsife.usc.edu\\\/news\\\/#website\"},\"datePublished\":\"2026-08-21T15:28:04+00:00\",\"dateModified\":\"2026-09-02T23:24:06+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/dornsife.usc.edu\\\/news\\\/global-summer-research\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/dornsife.usc.edu\\\/news\\\/global-summer-research\\\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/dornsife.usc.edu\\\/news\\\/global-summer-research\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/dornsife.usc.edu\\\/news\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Global Summer Research\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/dornsife.usc.edu\\\/news\\\/#website\",\"url\":\"https:\\\/\\\/dornsife.usc.edu\\\/news\\\/\",\"name\":\"USC Dornsife News\",\"description\":\"USC Dornsife news and events\",\"publisher\":{\"@id\":\"https:\\\/\\\/dornsife.usc.edu\\\/news\\\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/dornsife.usc.edu\\\/news\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/dornsife.usc.edu\\\/news\\\/#organization\",\"name\":\"USC Dornsife News\",\"url\":\"https:\\\/\\\/dornsife.usc.edu\\\/news\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/dornsife.usc.edu\\\/news\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/dornsife.usc.edu\\\/news\\\/wp-content\\\/uploads\\\/sites\\\/7\\\/2024\\\/01\\\/USC-Dornsife-Cardinal-Black-on-White-RGB.jpg\",\"contentUrl\":\"https:\\\/\\\/dornsife.usc.edu\\\/news\\\/wp-content\\\/uploads\\\/sites\\\/7\\\/2024\\\/01\\\/USC-Dornsife-Cardinal-Black-on-White-RGB.jpg\",\"width\":1000,\"height\":330,\"caption\":\"USC Dornsife News\"},\"image\":{\"@id\":\"https:\\\/\\\/dornsife.usc.edu\\\/news\\\/#\\\/schema\\\/logo\\\/image\\\/\"},\"sameAs\":[\"https:\\\/\\\/www.facebook.com\\\/uscdornsife\",\"https:\\\/\\\/x.com\\\/uscdornsife\",\"https:\\\/\\\/www.instagram.com\\\/uscdornsife\\\/\",\"https:\\\/\\\/www.youtube.com\\\/user\\\/USCCollege\",\"https:\\\/\\\/www.linkedin.com\\\/school\\\/uscdornsife\"]}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Global Summer Research","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:\/\/dornsife.usc.edu\/news\/global-summer-research\/","og_locale":"en_US","og_type":"article","og_title":"Global Summer Research","og_url":"https:\/\/dornsife.usc.edu\/news\/global-summer-research\/","og_site_name":"USC Dornsife News","article_publisher":"https:\/\/www.facebook.com\/uscdornsife","article_modified_time":"2026-09-02T23:24:06+00:00","twitter_card":"summary_large_image","twitter_site":"@uscdornsife","schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/dornsife.usc.edu\/news\/global-summer-research\/","url":"https:\/\/dornsife.usc.edu\/news\/global-summer-research\/","name":"Global Summer Research","isPartOf":{"@id":"https:\/\/dornsife.usc.edu\/news\/#website"},"datePublished":"2026-08-21T15:28:04+00:00","dateModified":"2026-09-02T23:24:06+00:00","breadcrumb":{"@id":"https:\/\/dornsife.usc.edu\/news\/global-summer-research\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/dornsife.usc.edu\/news\/global-summer-research\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/dornsife.usc.edu\/news\/global-summer-research\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/dornsife.usc.edu\/news\/"},{"@type":"ListItem","position":2,"name":"Global Summer Research"}]},{"@type":"WebSite","@id":"https:\/\/dornsife.usc.edu\/news\/#website","url":"https:\/\/dornsife.usc.edu\/news\/","name":"USC Dornsife News","description":"USC Dornsife news and events","publisher":{"@id":"https:\/\/dornsife.usc.edu\/news\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/dornsife.usc.edu\/news\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/dornsife.usc.edu\/news\/#organization","name":"USC Dornsife News","url":"https:\/\/dornsife.usc.edu\/news\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/dornsife.usc.edu\/news\/#\/schema\/logo\/image\/","url":"https:\/\/dornsife.usc.edu\/news\/wp-content\/uploads\/sites\/7\/2024\/01\/USC-Dornsife-Cardinal-Black-on-White-RGB.jpg","contentUrl":"https:\/\/dornsife.usc.edu\/news\/wp-content\/uploads\/sites\/7\/2024\/01\/USC-Dornsife-Cardinal-Black-on-White-RGB.jpg","width":1000,"height":330,"caption":"USC Dornsife News"},"image":{"@id":"https:\/\/dornsife.usc.edu\/news\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/uscdornsife","https:\/\/x.com\/uscdornsife","https:\/\/www.instagram.com\/uscdornsife\/","https:\/\/www.youtube.com\/user\/USCCollege","https:\/\/www.linkedin.com\/school\/uscdornsife"]}]}},"_links":{"self":[{"href":"https:\/\/dornsife.usc.edu\/news\/wp-json\/wp\/v2\/pages\/28721","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/dornsife.usc.edu\/news\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/dornsife.usc.edu\/news\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/dornsife.usc.edu\/news\/wp-json\/wp\/v2\/users\/14"}],"replies":[{"embeddable":true,"href":"https:\/\/dornsife.usc.edu\/news\/wp-json\/wp\/v2\/comments?post=28721"}],"version-history":[{"count":10,"href":"https:\/\/dornsife.usc.edu\/news\/wp-json\/wp\/v2\/pages\/28721\/revisions"}],"predecessor-version":[{"id":28875,"href":"https:\/\/dornsife.usc.edu\/news\/wp-json\/wp\/v2\/pages\/28721\/revisions\/28875"}],"wp:attachment":[{"href":"https:\/\/dornsife.usc.edu\/news\/wp-json\/wp\/v2\/media?parent=28721"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}