{"id":513,"date":"2026-01-10T13:28:35","date_gmt":"2026-01-10T13:28:35","guid":{"rendered":"https:\/\/yebbo.com\/ethiodiego\/?p=513"},"modified":"2026-01-10T19:50:24","modified_gmt":"2026-01-10T19:50:24","slug":"san-diego-essential-contacts-directory","status":"publish","type":"post","link":"http:\/\/yebbo.com\/ethiodiego\/san-diego-essential-contacts-directory\/","title":{"rendered":"San Diego Essential Contacts Directory"},"content":{"rendered":"\n<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n  <meta charset=\"UTF-8\" \/>\n  <title>San Diego Essential Contacts Directory (Search + Filters)<\/title>\n  <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\" \/>\n  <meta name=\"description\" content=\"Searchable directory of important San Diego public contacts: post office, passport, schools, hospitals, airport, transportation, shelters, mental health, suicide prevention, missing children, animal adoption, housing, and medical insurance.\" \/>\n\n  <style>\n    :root{\n      --bg:#f5f7fb; --card:#fff; --text:#1f2937; --muted:#6b7280;\n      --border:#dbe3f0; --accent:#0b5cab; --accent2:#0a7a4c;\n      --warn:#b42318; --warnbg:#fff1f2;\n      --shadow: 0 4px 14px rgba(15, 23, 42, .07);\n      --radius: 14px;\n    }\n    *{box-sizing:border-box}\n    html{scroll-behavior:smooth}\n    body{\n      margin:0; font-family: system-ui, -apple-system, Segoe UI, Roboto, Arial, sans-serif;\n      background:var(--bg); color:var(--text); line-height:1.5;\n    }\n    a{color:var(--accent); text-decoration:none}\n    a:hover{text-decoration:underline}\n    .wrap{max-width:1150px; margin:0 auto; padding:0 16px 36px}\n    header{\n      background: linear-gradient(135deg, #053b73, #0b5cab 55%, #0a7a4c);\n      color:#fff; padding:24px 0 16px; position:sticky; top:0; z-index:50;\n      box-shadow: 0 6px 22px rgba(0,0,0,.12);\n    }\n    header .wrap{padding-bottom:14px}\n    h1{margin:0 0 8px; font-size:1.7rem; letter-spacing:.2px}\n    .sub{margin:0; opacity:.95; font-size:.95rem}\n    .controls{\n      margin-top:14px;\n      display:grid;\n      grid-template-columns: 1.2fr 220px 180px 160px;\n      gap:10px;\n    }\n    @media (max-width: 980px){\n      .controls{grid-template-columns: 1fr 1fr; }\n    }\n    @media (max-width: 560px){\n      .controls{grid-template-columns: 1fr; }\n    }\n    .control{\n      background: rgba(255,255,255,.12);\n      border: 1px solid rgba(255,255,255,.18);\n      border-radius: 12px;\n      padding:10px 12px;\n      display:flex; gap:10px; align-items:center;\n      backdrop-filter: blur(8px);\n    }\n    .control label{font-size:.78rem; opacity:.9; display:block}\n    .control input, .control select{\n      width:100%; border:none; outline:none; background:transparent; color:#fff;\n      font-size:.95rem;\n    }\n    .control input::placeholder{color: rgba(255,255,255,.75)}\n    .btnrow{display:flex; gap:10px; align-items:stretch}\n    .btn{\n      width:100%;\n      border:none; border-radius:12px;\n      padding:10px 12px; font-weight:700; cursor:pointer;\n      background:#ffffff; color:#0b5cab;\n      box-shadow: 0 6px 18px rgba(0,0,0,.14);\n    }\n    .btn.secondary{background: rgba(255,255,255,.12); color:#fff; border:1px solid rgba(255,255,255,.2); box-shadow:none}\n    .notice{\n      margin:18px 0 10px;\n      background:#fff8e1; border-left:6px solid #f59e0b;\n      padding:12px 14px; border-radius: 12px;\n      box-shadow: var(--shadow);\n      font-size:.95rem;\n    }\n    .notice strong{display:inline-block; margin-right:6px}\n    .grid{\n      display:grid;\n      grid-template-columns: repeat(auto-fit, minmax(290px, 1fr));\n      gap:14px;\n      margin-top:14px;\n    }\n    .card{\n      background:var(--card); border:1px solid var(--border);\n      border-radius: var(--radius);\n      padding:14px 14px 12px;\n      box-shadow: var(--shadow);\n      position:relative;\n      overflow:hidden;\n    }\n    .card:before{\n      content:\"\"; position:absolute; inset:0 0 auto 0; height:4px; background:var(--accent);\n    }\n    .card.warn:before{background: var(--warn)}\n    .title{\n      margin:0 0 4px;\n      font-size:1.02rem;\n      font-weight:800;\n      color:var(--accent);\n    }\n    .title small{\n      display:block;\n      font-weight:700;\n      color: var(--accent2);\n      margin-top:2px;\n      font-size:.88rem;\n      opacity:.95;\n    }\n    .meta{\n      display:flex; flex-wrap:wrap; gap:8px;\n      margin:8px 0 10px;\n    }\n    .pill{\n      font-size:.74rem;\n      padding:3px 9px;\n      border-radius: 999px;\n      background:#e8f2ff;\n      color:#053b73;\n      border:1px solid #cfe2ff;\n      font-weight:700;\n      letter-spacing:.02em;\n      text-transform:uppercase;\n    }\n    .pill.green{background:#e8fff4; border-color:#c7f5de; color:#0a7a4c}\n    .pill.red{background:var(--warnbg); border-color:#fecdd3; color:var(--warn)}\n    .row{margin:6px 0; font-size:.93rem}\n    .row .k{font-weight:800; color:#111827}\n    .row .v{color:var(--text)}\n    .row .v.muted{color:var(--muted)}\n    .actions{display:flex; gap:10px; margin-top:12px; flex-wrap:wrap}\n    .mini{\n      border:1px solid var(--border);\n      background:#fff;\n      border-radius: 12px;\n      padding:8px 10px;\n      cursor:pointer;\n      font-weight:800;\n      color:#0b5cab;\n      font-size:.88rem;\n    }\n    .mini:hover{background:#f3f8ff}\n    .mini.red{color: var(--warn)}\n    .mini.red:hover{background: var(--warnbg)}\n    .empty{\n      margin:18px 0 0;\n      padding:18px;\n      background:#fff;\n      border:1px dashed var(--border);\n      border-radius: var(--radius);\n      color: var(--muted);\n      text-align:center;\n      box-shadow: var(--shadow);\n    }\n    .footer{\n      margin-top:22px;\n      color:var(--muted);\n      font-size:.88rem;\n      text-align:center;\n    }\n    .sr-only{\n      position:absolute; width:1px; height:1px; padding:0; margin:-1px; overflow:hidden; clip:rect(0,0,0,0); white-space:nowrap; border:0;\n    }\n    .toast{\n      position:fixed; left:50%; bottom:18px; transform:translateX(-50%);\n      background:#111827; color:#fff; padding:10px 12px; border-radius: 12px;\n      font-weight:800; font-size:.9rem;\n      opacity:0; pointer-events:none; transition:opacity .25s ease;\n      box-shadow: 0 10px 26px rgba(0,0,0,.25);\n      z-index:999;\n    }\n    .toast.show{opacity:1}\n  <\/style>\n<\/head>\n\n<body>\n  <header>\n    <div class=\"wrap\">\n      <h1>San Diego Essential Contacts Directory<\/h1>\n      <p class=\"sub\">Search + filter important government &#038; public services. Includes English + Amharic headings.<\/p>\n\n      <div class=\"controls\" role=\"region\" aria-label=\"Directory controls\">\n        <div class=\"control\">\n          <div style=\"width:100%\">\n            <label for=\"q\">Search (name, phone, address, category)<\/label>\n            <input id=\"q\" type=\"search\" placeholder='Try: \"passport\", \"988\", \"MTS\", \"housing\"' autocomplete=\"off\" \/>\n          <\/div>\n        <\/div>\n\n        <div class=\"control\">\n          <div style=\"width:100%\">\n            <label for=\"cat\">Category<\/label>\n            <select id=\"cat\"><\/select>\n          <\/div>\n        <\/div>\n\n        <div class=\"control\">\n          <div style=\"width:100%\">\n            <label for=\"lang\">Labels<\/label>\n            <select id=\"lang\">\n              <option value=\"en-am\">English + \u12a0\u121b\u122d\u129b<\/option>\n              <option value=\"en\">English only<\/option>\n              <option value=\"am\">\u12a0\u121b\u122d\u129b only<\/option>\n            <\/select>\n          <\/div>\n        <\/div>\n\n        <div class=\"btnrow\">\n          <button class=\"btn\" id=\"clearBtn\" type=\"button\">Clear<\/button>\n          <button class=\"btn secondary\" id=\"printBtn\" type=\"button\">Print<\/button>\n        <\/div>\n      <\/div>\n    <\/div>\n  <\/header>\n\n  <main class=\"wrap\">\n    <div class=\"notice\">\n      <strong>Emergency:<\/strong> Dial <strong>911<\/strong>.\n      For suicide &#038; crisis support: dial\/text <strong>988<\/strong>.\n      For San Diego behavioral health crisis line: <strong>888-724-7240<\/strong>.\n      Information can change\u2014verify before you go.\n    <\/div>\n\n    <div class=\"grid\" id=\"cards\" aria-live=\"polite\"><\/div>\n    <div class=\"empty\" id=\"empty\" hidden>No results. Try a different search or choose \u201cAll Categories\u201d.<\/div>\n\n    <div class=\"footer\">\n      Powered by your website \u2022 Last updated: <strong>January 10, 2026<\/strong>\n    <\/div>\n  <\/main>\n\n  <div class=\"toast\" id=\"toast\" role=\"status\" aria-live=\"polite\"><\/div>\n\n  <script>\n    \/\/ --- DATA ------------------------------------------------------------\n    \/\/ You can add\/remove entries here. Keep keys consistent.\n    const contacts = [\n      \/\/ POST OFFICE\n      {\n        id: \"usps-cs\",\n        category: \"Post Office\",\n        category_am: \"\u1356\u1235\u1273 (USPS)\",\n        name: \"USPS Customer Service (Nationwide)\",\n        name_am: \"USPS \u12e8\u12f0\u1295\u1260\u129e\u127d \u12a0\u1308\u120d\u130d\u120e\u1275\",\n        address: \"Online \/ Nationwide\",\n        phone: \"800-275-8777\",\n        email: \"\",\n        website: \"https:\/\/www.usps.com\",\n        notes: \"Find nearest post office, track packages, PO boxes, change of address.\",\n        tags: [\"Mail\", \"USPS\"]\n      },\n\n      \/\/ PASSPORT\n      {\n        id: \"passport-npic\",\n        category: \"Passport Office\",\n        category_am: \"\u1353\u1235\u1356\u122d\u1275 \u1262\u122e\",\n        name: \"National Passport Information Center (Appointments \/ Info)\",\n        name_am: \"\u12e8\u1353\u1235\u1356\u122d\u1275 \u1218\u1228\u1303 \u121b\u12d5\u12a8\u120d (\u1240\u1320\u122e\/\u1218\u1228\u1303)\",\n        address: \"San Diego Passport Agency uses NPIC scheduling (urgent travel).\",\n        phone: \"877-487-2778\",\n        email: \"NPIC@state.gov\",\n        website: \"https:\/\/travel.state.gov\",\n        notes: \"For urgent-travel appointments and status questions.\",\n        tags: [\"Passport\", \"Travel\"]\n      },\n      {\n        id: \"cityclerk-passport\",\n        category: \"Passport Office\",\n        category_am: \"\u1353\u1235\u1356\u122d\u1275 \u1262\u122e\",\n        name: \"City of San Diego \u2013 Passport Acceptance (City Clerk)\",\n        name_am: \"\u12e8\u1233\u1295 \u12f2\u12ec\u130e \u12a8\u1270\u121b \u2013 \u1353\u1235\u1356\u122d\u1275 \u1218\u1240\u1260\u12eb (City Clerk)\",\n        address: \"City Administration Building, 202 C St, San Diego, CA 92101\",\n        phone: \"619-533-4000\",\n        email: \"cityclerk@sandiego.gov\",\n        website: \"https:\/\/www.sandiego.gov\/city-clerk\",\n        notes: \"Acceptance facility (applications, photos may be available depending on site).\",\n        tags: [\"Passport\", \"City Clerk\"]\n      },\n\n      \/\/ SCHOOLS\n      {\n        id: \"sdusd\",\n        category: \"School \/ Education\",\n        category_am: \"\u1275\u121d\u1205\u122d\u1275\/\u1275\/\u1264\u1275\",\n        name: \"San Diego Unified School District (SDUSD)\",\n        name_am: \"\u12e8\u1233\u1295 \u12f2\u12ec\u130e \u12e9\u1292\u134b\u12ed\u12f5 \u1275\u121d\u1205\u122d\u1275 \u12c8\u1228\u12f3 (SDUSD)\",\n        address: \"4100 Normal St, San Diego, CA 92103\",\n        phone: \"619-725-8000\",\n        email: \"\",\n        website: \"https:\/\/www.sandiegounified.org\",\n        notes: \"Enrollment, school info, family resources.\",\n        tags: [\"Schools\", \"District\"]\n      },\n\n      \/\/ HOSPITALS\n      {\n        id: \"ucsd-hillcrest\",\n        category: \"Hospital\",\n        category_am: \"\u1206\u1235\u1352\u1273\u120d\",\n        name: \"UC San Diego Health \u2013 Hillcrest\",\n        name_am: \"UCSD \u1324\u1293 \u2013 \u1202\u120d\u12ad\u122c\u1235\u1275\",\n        address: \"200 W Arbor Dr, San Diego, CA 92103\",\n        phone: \"858-657-7000\",\n        email: \"\",\n        website: \"https:\/\/health.ucsd.edu\",\n        notes: \"Major medical center and emergency services.\",\n        tags: [\"Hospital\", \"Emergency\"]\n      },\n      {\n        id: \"sharp-memorial\",\n        category: \"Hospital\",\n        category_am: \"\u1206\u1235\u1352\u1273\u120d\",\n        name: \"Sharp Memorial Hospital\",\n        name_am: \"\u123b\u122d\u1355 \u121c\u121e\u122a\u12eb\u120d \u1206\u1235\u1352\u1273\u120d\",\n        address: \"7901 Frost St, San Diego, CA 92123\",\n        phone: \"858-939-3400\",\n        email: \"\",\n        website: \"https:\/\/www.sharp.com\/hospitals\/memorial\",\n        notes: \"Hospital & emergency care.\",\n        tags: [\"Hospital\"]\n      },\n\n      \/\/ AIRPORT\n      {\n        id: \"san-airport\",\n        category: \"Airport\",\n        category_am: \"\u12a0\u12e8\u122d \u121b\u1228\u134a\u12eb\",\n        name: \"San Diego International Airport (SAN)\",\n        name_am: \"\u1233\u1295 \u12f2\u12ec\u130e \u12a2\u1295\u1270\u122d\u1293\u123d\u1293\u120d \u12a0\u12e8\u122d \u121b\u1228\u134a\u12eb (SAN)\",\n        address: \"3225 N Harbor Dr, San Diego, CA 92101\",\n        phone: \"619-400-2404\",\n        email: \"\",\n        website: \"https:\/\/www.san.org\",\n        notes: \"Airport information, terminals, parking, flights.\",\n        tags: [\"Airport\", \"Travel\"]\n      },\n\n      \/\/ TRANSPORTATION\n      {\n        id: \"mts\",\n        category: \"Transportation\",\n        category_am: \"\u1275\u122b\u1295\u1235\u1356\u122d\u1275\",\n        name: \"MTS (Bus & Trolley) \u2013 Customer Service\",\n        name_am: \"MTS (\u1263\u1235\/\u1275\u122e\u120a) \u2013 \u12e8\u12f0\u1295\u1260\u129e\u127d \u12a0\u1308\u120d\u130d\u120e\u1275\",\n        address: \"1255 Imperial Ave, Suite 1000, San Diego, CA 92101\",\n        phone: \"619-233-3004\",\n        email: \"\",\n        website: \"https:\/\/www.sdmts.com\",\n        notes: \"Trip planning, routes, fares, PRONTO card.\",\n        tags: [\"Transit\", \"MTS\"]\n      },\n      {\n        id: \"nctd\",\n        category: \"Transportation\",\n        category_am: \"\u1275\u122b\u1295\u1235\u1356\u122d\u1275\",\n        name: \"NCTD (COASTER \/ SPRINTER) \u2013 Customer Service\",\n        name_am: \"NCTD (COASTER \/ SPRINTER) \u2013 \u12e8\u12f0\u1295\u1260\u129e\u127d \u12a0\u1308\u120d\u130d\u120e\u1275\",\n        address: \"North County (regional rail\/bus)\",\n        phone: \"760-966-6500\",\n        email: \"\",\n        website: \"https:\/\/gonctd.com\",\n        notes: \"North County transit and rail.\",\n        tags: [\"Transit\", \"Rail\"]\n      },\n\n      \/\/ HOMELESS\n      {\n        id: \"211\",\n        category: \"Homeless Shelter \/ Resources\",\n        category_am: \"\u12e8\u1264\u1275 \u12a5\u1325\u1228\u1275 \u12a5\u122d\u12f3\u1273\",\n        name: \"211 San Diego (Shelter, Food, Benefits, Referrals)\",\n        name_am: \"211 \u1233\u1295 \u12f2\u12ec\u130e (\u1218\u1320\u1208\u12eb\/\u121d\u130d\u1265\/\u12a5\u122d\u12f3\u1273)\",\n        address: \"Dial 2-1-1 (San Diego County)\",\n        phone: \"211\",\n        email: \"211connections@211sandiego.org\",\n        website: \"https:\/\/211sandiego.org\",\n        notes: \"24\/7 referrals for shelter, food, utilities, and services.\",\n        tags: [\"Shelter\", \"Resources\"]\n      },\n\n      \/\/ MENTAL HEALTH \/ SUICIDE\n      {\n        id: \"acl\",\n        category: \"Mental Health\",\n        category_am: \"\u12e8\u12a0\u12a5\u121d\u122e \u1324\u1293\",\n        name: \"San Diego Access & Crisis Line (24\/7)\",\n        name_am: \"\u12e8\u1233\u1295 \u12f2\u12ec\u130e \u12e8\u12a5\u122d\u12f3\u1273 \u12a5\u1293 \u12ad\u122b\u12ed\u1232\u1235 \u1218\u1235\u1218\u122d (24\/7)\",\n        address: \"San Diego County (phone-based support)\",\n        phone: \"888-724-7240\",\n        email: \"\",\n        website: \"https:\/\/www.sandiegocounty.gov\/hhsa\",\n        notes: \"Mental health & substance use crisis support; multilingual.\",\n        tags: [\"Crisis\", \"Behavioral Health\"],\n        priority: \"high\"\n      },\n      {\n        id: \"988\",\n        category: \"Suicide Prevention\",\n        category_am: \"\u122b\u1235\u1295 \u1218\u130d\u12f0\u120d \u1218\u12a8\u120b\u12a8\u120d\",\n        name: \"988 Suicide & Crisis Lifeline (Call\/Text\/Chat)\",\n        name_am: \"988 \u12e8\u122b\u1235\u1295 \u1218\u130d\u12f0\u120d \u12a5\u1293 \u12ad\u122b\u12ed\u1232\u1235 \u1218\u1235\u1218\u122d\",\n        address: \"Nationwide (24\/7)\",\n        phone: \"988\",\n        email: \"\",\n        website: \"https:\/\/988lifeline.org\",\n        notes: \"Call or text 988, or chat online.\",\n        tags: [\"Crisis\", \"988\"],\n        priority: \"high\"\n      },\n\n      \/\/ MISSING CHILDREN\n      {\n        id: \"ncmec\",\n        category: \"Missing Children\",\n        category_am: \"\u12e8\u1320\u1349 \u1205\u1343\u1293\u1275\",\n        name: \"National Center for Missing & Exploited Children (NCMEC)\",\n        name_am: \"\u12e8\u1320\u1349 \u12a5\u1293 \u1270\u130e\u12f3\u12ee\u127d \u1205\u1343\u1293\u1275 \u121b\u12d5\u12a8\u120d (NCMEC)\",\n        address: \"Nationwide hotline\",\n        phone: \"800-843-5678\",\n        email: \"\",\n        website: \"https:\/\/www.missingkids.org\",\n        notes: \"24\/7 hotline: 1-800-THE-LOST.\",\n        tags: [\"Missing\", \"Hotline\"]\n      },\n\n      \/\/ ANIMAL ADOPTION\n      {\n        id: \"sdhumane\",\n        category: \"Animal Adoption\",\n        category_am: \"\u12e8\u12a5\u1295\u1235\u1233\u1275 \u1309\u12de\/\u121b\u1228\u134a\u12eb\",\n        name: \"San Diego Humane Society\",\n        name_am: \"\u12e8\u1233\u1295 \u12f2\u12ec\u130e \u1201\u1218\u1295 \u1236\u1233\u12ed\u1272\",\n        address: \"5500 Gaines St, San Diego, CA 92110\",\n        phone: \"619-299-7012\",\n        email: \"\",\n        website: \"https:\/\/www.sdhumane.org\",\n        notes: \"Adoptions, lost & found pets, animal services.\",\n        tags: [\"Adoption\", \"Pets\"]\n      },\n\n      \/\/ HOUSING\n      {\n        id: \"sdhc\",\n        category: \"Housing\",\n        category_am: \"\u1218\u1296\u122a\u12eb\/\u1264\u1275\",\n        name: \"San Diego Housing Commission (SDHC)\",\n        name_am: \"\u12e8\u1233\u1295 \u12f2\u12ec\u130e \u12e8\u1218\u1296\u122a\u12eb \u12ae\u121a\u123d\u1295 (SDHC)\",\n        address: \"1122 Broadway, Suite 300, San Diego, CA 92101\",\n        phone: \"619-231-9400\",\n        email: \"sdhcinfo@sdhc.org\",\n        website: \"https:\/\/www.sdhc.org\",\n        notes: \"Affordable housing, rental assistance, programs.\",\n        tags: [\"Housing\", \"Assistance\"]\n      },\n\n      \/\/ MEDICAL INSURANCE\n      {\n        id: \"coveredca\",\n        category: \"Medical Insurance\",\n        category_am: \"\u12e8\u1205\u12ad\u121d\u1293 \u12a2\u1295\u1239\u122b\u1295\u1235\",\n        name: \"Covered California (Health Insurance Marketplace)\",\n        name_am: \"Covered California (\u12e8\u1324\u1293 \u12a2\u1295\u1239\u122b\u1295\u1235 \u1308\u1260\u12eb)\",\n        address: \"California statewide\",\n        phone: \"800-300-1506\",\n        email: \"\",\n        website: \"https:\/\/www.coveredca.com\",\n        notes: \"Shop plans, apply for subsidies, enrollment help.\",\n        tags: [\"Insurance\", \"Healthcare\"]\n      },\n      {\n        id: \"medi-cal-access\",\n        category: \"Medical Insurance\",\n        category_am: \"\u12e8\u1205\u12ad\u121d\u1293 \u12a2\u1295\u1239\u122b\u1295\u1235\",\n        name: \"San Diego County ACCESS (Medi-Cal \/ CalFresh \/ CalWORKs)\",\n        name_am: \"\u12e8\u1233\u1295 \u12f2\u12ec\u130e \u12ab\u12cd\u1295\u1272 ACCESS (Medi-Cal\/CalFresh\/CalWORKs)\",\n        address: \"San Diego County HHSA\",\n        phone: \"866-262-9881\",\n        email: \"\",\n        website: \"https:\/\/www.sandiegocounty.gov\/hhsa\",\n        notes: \"Benefits assistance and case support.\",\n        tags: [\"Medi-Cal\", \"Benefits\"]\n      }\n    ];\n\n    \/\/ --- HELPERS ---------------------------------------------------------\n    const $ = (sel) => document.querySelector(sel);\n    const cardsEl = $(\"#cards\");\n    const emptyEl = $(\"#empty\");\n    const qEl = $(\"#q\");\n    const catEl = $(\"#cat\");\n    const langEl = $(\"#lang\");\n    const toastEl = $(\"#toast\");\n\n    function norm(s){\n      return (s || \"\").toString().toLowerCase().trim();\n    }\n    function showToast(msg){\n      toastEl.textContent = msg;\n      toastEl.classList.add(\"show\");\n      clearTimeout(showToast._t);\n      showToast._t = setTimeout(()=> toastEl.classList.remove(\"show\"), 1400);\n    }\n    async function copyToClipboard(text){\n      try{\n        await navigator.clipboard.writeText(text);\n        showToast(\"Copied!\");\n      }catch(e){\n        \/\/ fallback\n        const ta = document.createElement(\"textarea\");\n        ta.value = text;\n        document.body.appendChild(ta);\n        ta.select();\n        document.execCommand(\"copy\");\n        document.body.removeChild(ta);\n        showToast(\"Copied!\");\n      }\n    }\n\n    function getDisplayName(c){\n      const mode = langEl.value;\n      if(mode === \"en\") return c.name;\n      if(mode === \"am\") return c.name_am || c.name;\n      \/\/ en-am\n      if(c.name_am) return `${c.name}<small>${c.name_am}<\/small>`;\n      return c.name;\n    }\n    function getDisplayCategory(c){\n      const mode = langEl.value;\n      if(mode === \"en\") return c.category;\n      if(mode === \"am\") return c.category_am || c.category;\n      return (c.category_am ? `${c.category} \u2022 ${c.category_am}` : c.category);\n    }\n\n    function buildCategoryOptions(){\n      const cats = new Map();\n      contacts.forEach(c => {\n        cats.set(c.category, c.category_am || \"\");\n      });\n\n      const opts = [];\n      opts.push({val:\"\", label:\"All Categories\"});\n      [...cats.keys()].sort().forEach(en => {\n        const am = cats.get(en);\n        let label = en;\n        const mode = langEl.value;\n        if(mode === \"am\") label = am || en;\n        else if(mode === \"en-am\" && am) label = `${en} \u2022 ${am}`;\n        opts.push({val: en, label});\n      });\n\n      catEl.innerHTML = opts.map(o => `<option value=\"${o.val}\">${o.label}<\/option>`).join(\"\");\n    }\n\n    function matches(c, q, cat){\n      if(cat && c.category !== cat) return false;\n      if(!q) return true;\n\n      const hay = [\n        c.category, c.category_am,\n        c.name, c.name_am,\n        c.address, c.phone, c.email, c.website,\n        (c.tags || []).join(\" \"),\n        c.notes\n      ].map(norm).join(\" | \");\n\n      return hay.includes(q);\n    }\n\n    function render(){\n      const q = norm(qEl.value);\n      const cat = catEl.value;\n\n      \/\/ prioritize high importance lines slightly (crisis lines)\n      const filtered = contacts\n        .filter(c => matches(c, q, cat))\n        .sort((a,b) => (b.priority === \"high\") - (a.priority === \"high\"));\n\n      cardsEl.innerHTML = \"\";\n      emptyEl.hidden = filtered.length !== 0;\n\n      filtered.forEach(c => {\n        const phone = c.phone ? c.phone : \"\";\n        const email = c.email ? c.email : \"\";\n        const website = c.website ? c.website : \"\";\n\n        const titleHtml = getDisplayName(c);\n        const catLabel = getDisplayCategory(c);\n\n        const card = document.createElement(\"article\");\n        card.className = \"card\" + ((c.priority === \"high\") ? \" warn\" : \"\");\n        card.setAttribute(\"data-id\", c.id);\n\n        card.innerHTML = `\n          <h3 class=\"title\">${titleHtml}<\/h3>\n          <div class=\"meta\">\n            <span class=\"pill ${c.priority === \"high\" ? \"red\" : \"\"}\">${catLabel}<\/span>\n            ${(c.tags || []).slice(0,2).map(t => `<span class=\"pill green\">${t}<\/span>`).join(\"\")}\n          <\/div>\n\n          <div class=\"row\"><span class=\"k\">Address:<\/span> <span class=\"v\">${c.address || \"<span class='v muted'>\u2014<\/span>\"}<\/span><\/div>\n          <div class=\"row\"><span class=\"k\">Phone:<\/span> <span class=\"v\">${phone || \"<span class='v muted'>\u2014<\/span>\"}<\/span><\/div>\n          <div class=\"row\"><span class=\"k\">Email:<\/span> <span class=\"v\">${email ? `<a href=\"mailto:${email}\">${email}<\/a>` : \"<span class='v muted'>\u2014<\/span>\"}<\/span><\/div>\n          <div class=\"row\"><span class=\"k\">Website:<\/span> <span class=\"v\">${website ? `<a href=\"${website}\" target=\"_blank\" rel=\"noopener\">${website.replace(\/^https?:\\\/\\\/\/,\"\")}<\/a>` : \"<span class='v muted'>\u2014<\/span>\"}<\/span><\/div>\n          ${c.notes ? `<div class=\"row\"><span class=\"k\">Notes:<\/span> <span class=\"v\">${c.notes}<\/span><\/div>` : \"\"}\n\n          <div class=\"actions\">\n            <button class=\"mini\" type=\"button\" data-copy=\"phone\">Copy Phone<\/button>\n            <button class=\"mini\" type=\"button\" data-copy=\"address\">Copy Address<\/button>\n            <button class=\"mini\" type=\"button\" data-copy=\"all\">Copy Full<\/button>\n            ${website ? `<a class=\"mini\" href=\"${website}\" target=\"_blank\" rel=\"noopener\">Open Website<\/a>` : \"\"}\n          <\/div>\n        `;\n\n        \/\/ attach copy actions\n        card.querySelectorAll(\"[data-copy]\").forEach(btn => {\n          btn.addEventListener(\"click\", () => {\n            const which = btn.getAttribute(\"data-copy\");\n            if(which === \"phone\") copyToClipboard(phone || \"\");\n            if(which === \"address\") copyToClipboard(c.address || \"\");\n            if(which === \"all\"){\n              const full = [\n                c.name,\n                c.name_am ? `(${c.name_am})` : \"\",\n                `Category: ${c.category}${c.category_am ? \" \/ \" + c.category_am : \"\"}`,\n                c.address ? `Address: ${c.address}` : \"\",\n                c.phone ? `Phone: ${c.phone}` : \"\",\n                c.email ? `Email: ${c.email}` : \"\",\n                c.website ? `Website: ${c.website}` : \"\"\n              ].filter(Boolean).join(\"\\n\");\n              copyToClipboard(full);\n            }\n          });\n        });\n\n        cardsEl.appendChild(card);\n      });\n    }\n\n    \/\/ --- INIT ------------------------------------------------------------\n    function init(){\n      buildCategoryOptions();\n      render();\n    }\n\n    \/\/ update category option labels when language changes\n    langEl.addEventListener(\"change\", () => {\n      const currentCat = catEl.value;\n      buildCategoryOptions();\n      catEl.value = currentCat; \/\/ keep selection if possible\n      render();\n    });\n\n    qEl.addEventListener(\"input\", render);\n    catEl.addEventListener(\"change\", render);\n\n    $(\"#clearBtn\").addEventListener(\"click\", () => {\n      qEl.value = \"\";\n      catEl.value = \"\";\n      render();\n      qEl.focus();\n    });\n\n    $(\"#printBtn\").addEventListener(\"click\", () => window.print());\n\n    init();\n  <\/script>\n<\/body>\n<\/html>\n\n\n\n<!doctype html>\n<html lang=\"en\">\n<head>\n<meta charset=\"UTF-8\">\n<title>Yebbo Communication Network \u2013 Single Column Banner<\/title>\n\n<link rel=\"stylesheet\" href=\"https:\/\/cdnjs.cloudflare.com\/ajax\/libs\/font-awesome\/6.4.0\/css\/all.min.css\"\/>\n\n<style>\n:root {\n  --ethiopian-green:#078930;\n  --ethiopian-yellow:#FCDD09;\n  --ethiopian-red:#DA121A;\n  --dark-green:#056523;\n  --shadow:0 10px 28px rgba(7,137,48,.2);\n}\n\nbody{\n  margin:0;\n  background:#f4f4f4;\n  font-family:Arial, Helvetica, sans-serif;\n}\n\n#yebbo-single{\n  max-width:780px;\n  margin:20px auto;\n  background:linear-gradient(145deg,#ffffff,#f8fff9);\n  border-radius:16px;\n  border:4px solid transparent;\n  border-image:linear-gradient(to right,\n    var(--ethiopian-green),\n    var(--ethiopian-yellow),\n    var(--ethiopian-red)) 1;\n  box-shadow:var(--shadow);\n  overflow:hidden;\n  animation:fadeIn .8s ease;\n}\n\n\/* FLAG STRIPES *\/\n.flag-stripes{\n  height:8px;\n  background:linear-gradient(to right,\n    var(--ethiopian-green) 33%,\n    var(--ethiopian-yellow) 33% 66%,\n    var(--ethiopian-red) 66%);\n}\n\n\/* HEADER *\/\n.header{\n  background:linear-gradient(135deg,var(--ethiopian-green),var(--dark-green));\n  color:white;\n  text-align:center;\n  padding:26px 20px;\n  position:relative;\n}\n\n.header h2{\n  margin:0;\n  font-size:28px;\n}\n\n.header p{\n  margin-top:8px;\n  font-size:15px;\n}\n\n.years-badge{\n  position:absolute;\n  top:-12px;\n  right:16px;\n  background:var(--ethiopian-yellow);\n  color:var(--ethiopian-red);\n  font-weight:bold;\n  font-size:12px;\n  padding:6px 14px;\n  border-radius:20px;\n  animation:pulse 2s infinite;\n}\n\n\/* SERVICES *\/\n.services{\n  display:grid;\n  grid-template-columns:1fr;\n  gap:12px;\n  padding:22px;\n}\n\n.service{\n  display:flex;\n  align-items:center;\n  background:#fff;\n  padding:14px;\n  border-radius:10px;\n  font-size:15px;\n  border-left:5px solid var(--ethiopian-green);\n  transition:.25s;\n}\n\n.service:nth-child(2n){border-left-color:var(--ethiopian-yellow);}\n.service:nth-child(3n){border-left-color:var(--ethiopian-red);}\n\n.service i{\n  margin-right:12px;\n  font-size:20px;\n  color:var(--ethiopian-green);\n}\n\n.service:hover{\n  transform:translateY(-2px);\n  box-shadow:0 6px 16px rgba(0,0,0,.15);\n}\n\n\/* CTA *\/\n.cta{\n  text-align:center;\n  padding:24px;\n  background:linear-gradient(to bottom,\n    rgba(252,221,9,.12),\n    rgba(7,137,48,.12));\n}\n\n.call-btn{\n  display:inline-flex;\n  align-items:center;\n  justify-content:center;\n  background:linear-gradient(to right,var(--ethiopian-red),#E83A3F);\n  color:white;\n  text-decoration:none;\n  font-weight:bold;\n  padding:16px 28px;\n  border-radius:30px;\n  margin-bottom:14px;\n  transition:.3s;\n}\n\n.call-btn i{margin-right:8px;}\n\n.call-btn:hover{transform:scale(1.06);}\n\n.web-btn{\n  display:inline-block;\n  background:var(--ethiopian-green);\n  color:white;\n  text-decoration:none;\n  font-weight:bold;\n  padding:12px 22px;\n  border-radius:24px;\n}\n\n.star-line{\n  margin-top:16px;\n  font-size:13px;\n  font-weight:bold;\n  color:var(--ethiopian-green);\n}\n\n\/* FOOTER *\/\n.footer{\n  background:linear-gradient(to right,var(--ethiopian-green),var(--dark-green));\n  color:white;\n  text-align:center;\n  font-size:12px;\n  padding:12px;\n}\n\n\/* ANIMATIONS *\/\n@keyframes pulse{\n  0%{transform:scale(1);}\n  50%{transform:scale(1.08);}\n  100%{transform:scale(1);}\n}\n\n@keyframes fadeIn{\n  from{opacity:0;transform:translateY(20px);}\n  to{opacity:1;transform:translateY(0);}\n}\n<\/style>\n<\/head>\n\n<body>\n\n<div id=\"yebbo-single\">\n\n  <div class=\"flag-stripes\"><\/div>\n\n  <div class=\"header\">\n    <div class=\"years-badge\">Since 1999<\/div>\n    <h2>Yebbo Communication Network<\/h2>\n    <p>25+ Years of Trusted Global Service<\/p>\n  <\/div>\n\n  <div class=\"services\">\n    <div class=\"service\"><i class=\"fas fa-passport\"><\/i>Ethiopian Passport Services<\/div>\n    <div class=\"service\"><i class=\"fas fa-id-card\"><\/i>Yellow Card Processing<\/div>\n    <div class=\"service\"><i class=\"fas fa-file-invoice-dollar\"><\/i>Tax Preparation &#038; Filing<\/div>\n    <div class=\"service\"><i class=\"fas fa-plane\"><\/i>Travel Agency Services<\/div>\n    <div class=\"service\"><i class=\"fas fa-language\"><\/i>Certified Translation (150+ Languages)<\/div>\n    <div class=\"service\"><i class=\"fas fa-stamp\"><\/i>Notary &#038; Apostille<\/div>\n    <div class=\"service\"><i class=\"fas fa-camera\"><\/i>Passport &#038; Visa Photos<\/div>\n    <div class=\"service\"><i class=\"fas fa-fingerprint\"><\/i>Live Scan &#038; Fingerprinting<\/div>\n  <\/div>\n\n  <div class=\"cta\">\n    <a href=\"tel:6192555530\" class=\"call-btn\">\n      <i class=\"fas fa-phone-alt\"><\/i> Call 619-255-5530\n    <\/a><br>\n    <a href=\"https:\/\/www.yebbo.com\" target=\"_blank\" class=\"web-btn\">\n      <i class=\"fas fa-globe\"><\/i> www.yebbo.com\n    <\/a>\n\n    <div class=\"star-line\">\n      <i class=\"fas fa-star\" style=\"color:var(--ethiopian-yellow)\"><\/i>\n      Serving the Global Community Worldwide\n      <i class=\"fas fa-star\" style=\"color:var(--ethiopian-red)\"><\/i>\n    <\/div>\n  <\/div>\n\n  <div class=\"footer\">\n    \u00a9 Yebbo Communication Network \u2014 Trusted Since 1999\n  <\/div>\n\n<\/div>\n\n<\/body>\n<\/html>\n\n","protected":false},"excerpt":{"rendered":"<p>San Diego Essential Contacts Directory (Search + Filters) San Diego Essential Contacts Directory Search + filter important government &#038; public [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"site-sidebar-layout":"default","site-content-layout":"","ast-site-content-layout":"default","site-content-style":"default","site-sidebar-style":"default","ast-global-header-display":"","ast-banner-title-visibility":"","ast-main-header-display":"","ast-hfb-above-header-display":"","ast-hfb-below-header-display":"","ast-hfb-mobile-header-display":"","site-post-title":"","ast-breadcrumbs-content":"","ast-featured-img":"","footer-sml-layout":"","ast-disable-related-posts":"","theme-transparent-header-meta":"","adv-header-id-meta":"","stick-header-meta":"","header-above-stick-meta":"","header-main-stick-meta":"","header-below-stick-meta":"","astra-migrate-meta-layouts":"default","ast-page-background-enabled":"default","ast-page-background-meta":{"desktop":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"ast-content-background-meta":{"desktop":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"_jetpack_memberships_contains_paid_content":false,"footnotes":"","jetpack_publicize_message":"","jetpack_publicize_feature_enabled":true,"jetpack_social_post_already_shared":true,"jetpack_social_options":{"image_generator_settings":{"template":"highway","default_image_id":0,"font":"","enabled":false},"version":2}},"categories":[1],"tags":[],"class_list":["post-513","post","type-post","status-publish","format-standard","hentry","category-ethiodiego"],"jetpack_publicize_connections":[],"jetpack_featured_media_url":"","jetpack_sharing_enabled":true,"jetpack_shortlink":"https:\/\/wp.me\/p8nzgb-8h","jetpack_likes_enabled":true,"_links":{"self":[{"href":"http:\/\/yebbo.com\/ethiodiego\/wp-json\/wp\/v2\/posts\/513","targetHints":{"allow":["GET"]}}],"collection":[{"href":"http:\/\/yebbo.com\/ethiodiego\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/yebbo.com\/ethiodiego\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/yebbo.com\/ethiodiego\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"http:\/\/yebbo.com\/ethiodiego\/wp-json\/wp\/v2\/comments?post=513"}],"version-history":[{"count":2,"href":"http:\/\/yebbo.com\/ethiodiego\/wp-json\/wp\/v2\/posts\/513\/revisions"}],"predecessor-version":[{"id":528,"href":"http:\/\/yebbo.com\/ethiodiego\/wp-json\/wp\/v2\/posts\/513\/revisions\/528"}],"wp:attachment":[{"href":"http:\/\/yebbo.com\/ethiodiego\/wp-json\/wp\/v2\/media?parent=513"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/yebbo.com\/ethiodiego\/wp-json\/wp\/v2\/categories?post=513"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/yebbo.com\/ethiodiego\/wp-json\/wp\/v2\/tags?post=513"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}