  /* Scoped STRUCTURALLY to the single-meeting view: the list view has a <table>,
     the detail view does not — so :not(:has(table)) means "detail". No JS / no
     hashchange (TSML-UI navigates via History pushState, which doesn't fire
     hashchange, so a class-toggle approach silently dropped off). NOTE: css-7zdqb1
     (content card), css-1nmg4yc (Get Directions), css-1jccj9u / css-1sp9z2q
     (Share / Add to Calendar) are TSML-UI Emotion build-hash classes — re-verify
     after any 12-step-meeting-list plugin update. (Jason 2026-06-07) */
  /* All h2 default to regular bold + smaller (location, group, entity, map popup).
     The top meeting name is bumped back up via .oai-meeting-name. (Jason 2026-06-07) */
  #tsml-ui:not(:has(table)) h2 { font-family:Figtree,sans-serif !important; color:#174580 !important; font-weight:700 !important; font-size:22px !important; letter-spacing:-0.01em !important; }
  #tsml-ui:not(:has(table)) p, #tsml-ui:not(:has(table)) li, #tsml-ui:not(:has(table)) a, #tsml-ui:not(:has(table)) button, #tsml-ui:not(:has(table)) span { font-family:Figtree,sans-serif !important; }
  #tsml-ui:not(:has(table)) .css-7zdqb1 { background:#fff !important; border:0 !important; border-radius:0 !important; box-shadow:none !important; overflow:visible !important; width:100% !important; max-width:760px !important; margin-left:auto !important; margin-right:auto !important; flex-direction:column !important; padding-top:6px !important; padding-bottom:14px !important; text-align:center !important; }
  #tsml-ui:not(:has(table)) .css-7zdqb1 > div { border-color:#eef1f5 !important; padding-left:0 !important; padding-right:0 !important; }
  /* TSML wraps the meeting content in a square-bordered nested box (a class-less div
     one level inside the info column) on BOTH online and in-person. Online's was
     stripped by JS; strip it for everyone here so in-person is boxless too. The
     desktop info CARD border lives one level UP (> *:not(.css-0)) and the Meeting
     Notes box (.css-2klgun) is deeper, so neither is affected. (Jason 2026-06-19) */
  #tsml-ui:not(:has(table)) .css-7zdqb1 > div:not(.css-0) > div { border:0 !important; }
  /* DESKTOP (>=1000px): map BESIDE the info, not stacked below. The detail card
     .css-7zdqb1 has two children: the info block (first) and the map slot .css-0
     (second). Lay them out as two columns, widen the card to use the ~1200px
     wrapper, and give the map more height. :has guards it so online-only meetings
     (single child) stay full width. (Jason 2026-06-17 "map to the right again, larger") */
  @media (min-width:1000px) {
    /* Detail content widened to a 1440px card (TSML-UI caps #tsml-ui at 1280; the
       card needs 1440 + the two wrappers' 80px padding, so #tsml-ui goes to 1520).
       Scoped to the detail CARD (.css-7zdqb1), NOT :not(:has(table)) — the MAP view
       also has no table once its map renders, so the old selector widened Map view
       too. Map + List now share the base 1280. (Jason 2026-06-18 "map view same max
       width as list view, filters and map") */
    #tsml-ui:has(.css-7zdqb1) { max-width:1520px !important; }
    #tsml-ui:not(:has(table)) .css-14ey5ic { max-width:1440px !important; }
    /* Card with a map (.css-0) -> two columns: info LEFT, map RIGHT. Keyed off the
       map's .css-0 class (NOT div:nth-child) so it works regardless of how many
       children the card has. The :has guard keeps online-only meetings (no map,
       no .css-0) at full width. (Jason 2026-06-18 "map to the right again") */
    #tsml-ui:not(:has(table)) .css-7zdqb1:has(> .css-0) {
      flex-direction:row !important; flex-wrap:nowrap !important; max-width:1440px !important;
      align-items:stretch !important; gap:24px !important; text-align:center !important; padding-bottom:20px !important;
    }
    /* Info column: capped at 500px so the map gets most of the width. (Jason 2026-06-18)
       padding-left:24 = the LEFT gutter; padding-right:0 so the gap between the info
       and the map is exactly the 24px flex gap, matching the left gutter and the map's
       24px right margin. All three gutters (left / info-to-map / right) are now 24px.
       (Jason 2026-06-19 "space between the info and the map = the gutter on left/right") */
    #tsml-ui:not(:has(table)) .css-7zdqb1:has(> .css-0) > *:not(.css-0) {
      flex:0 1 500px !important; width:500px !important; max-width:500px !important; min-width:0 !important;
      background:#fff !important; border:1px solid #e4e9f0 !important; border-radius:20px !important; box-shadow:0 4px 14px rgba(20,30,50,0.07) !important; padding:24px !important; box-sizing:border-box !important;
    }
    /* Map column: takes the REST of the card (most of the width) and runs FULL LENGTH
       — grows to fill, stretches to the info column's height (align-items:stretch).
       Override TSML-UI's own .css-0 max-height:1000px (that was capping the stretch).
       .css-0 > .css-e5yykt (position:relative) > .leaflet-container (absolute,
       inline height:100%); wrapper height:100% lets the absolute map fill the slot.
       (Jason 2026-06-18 "info max 500px so the map takes most of the screen") */
    #tsml-ui:not(:has(table)) .css-7zdqb1:has(> .css-0) > .css-0 {
      flex:1 1 auto !important; width:auto !important; max-width:none !important; min-width:0 !important; align-self:stretch !important;
      padding-left:0 !important; padding-right:0 !important; margin-right:24px !important; border:1px solid #e4e9f0 !important; border-radius:20px !important; box-shadow:0 4px 14px rgba(20,30,50,0.07) !important; overflow:hidden !important;
      min-height:500px !important; max-height:none !important;
    }
    #tsml-ui:not(:has(table)) .css-7zdqb1:has(> .css-0) > .css-0 > div,
    #tsml-ui:not(:has(table)) .css-7zdqb1:has(> .css-0) > .css-0 .leaflet-container {
      height:100% !important; min-height:100% !important; max-height:none !important;
    }
  }
  /* Keep the (now tall) detail map's internal stacking (Leaflet panes/controls/popups
     z-index up to ~1000) contained so it can't paint over the sticky site header /
     admin bar as the page scrolls. isolation:isolate gives the slot its own stacking
     context at z-index 0. (Jason 2026-06-18 "map goes over the top white bar") */
  #tsml-ui:not(:has(table)) .css-7zdqb1 .css-0 { position:relative !important; z-index:0 !important; isolation:isolate !important; }
  /* Online meetings: TSML's online detail has no real map. The JS above strips the
     bordered card-in-card + hides the empty map slot and appends .oai-online-art.
     Here: info-left + branded illustration-right on desktop, single column on mobile.
     To use a real picture, replace the data: URL below with the image URL. (Jason 2026-06-19) */
  #tsml-ui:not(:has(table)) .css-7zdqb1.oai-online .oai-online-art { background-color:#F0F5FA !important; background-image:url("data:image/svg+xml,%3Csvg%20xmlns%3D%27http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%27%20viewBox%3D%270%200%20260%20222%27%3E%3Crect%20x%3D%2730%27%20y%3D%2726%27%20width%3D%27200%27%20height%3D%27128%27%20rx%3D%2714%27%20fill%3D%27%23ffffff%27%20stroke%3D%27%23174580%27%20stroke-width%3D%275%27%2F%3E%3Crect%20x%3D%2746%27%20y%3D%2742%27%20width%3D%2778%27%20height%3D%2796%27%20rx%3D%278%27%20fill%3D%27%23EAF1F9%27%2F%3E%3Crect%20x%3D%27136%27%20y%3D%2742%27%20width%3D%2778%27%20height%3D%2796%27%20rx%3D%278%27%20fill%3D%27%23EAF1F9%27%2F%3E%3Ccircle%20cx%3D%2785%27%20cy%3D%2778%27%20r%3D%2716%27%20fill%3D%27%23174580%27%2F%3E%3Cpath%20d%3D%27M61%20120a24%2024%200%200%201%2048%200z%27%20fill%3D%27%23174580%27%2F%3E%3Ccircle%20cx%3D%27175%27%20cy%3D%2778%27%20r%3D%2716%27%20fill%3D%27%239fb9d6%27%2F%3E%3Cpath%20d%3D%27M151%20120a24%2024%200%200%201%2048%200z%27%20fill%3D%27%239fb9d6%27%2F%3E%3Crect%20x%3D%27116%27%20y%3D%27154%27%20width%3D%2728%27%20height%3D%2714%27%20fill%3D%27%23174580%27%2F%3E%3Crect%20x%3D%2792%27%20y%3D%27168%27%20width%3D%2776%27%20height%3D%279%27%20rx%3D%274.5%27%20fill%3D%27%23174580%27%2F%3E%3Ctext%20x%3D%27130%27%20y%3D%27208%27%20text-anchor%3D%27middle%27%20font-family%3D%27Figtree%2Csans-serif%27%20font-weight%3D%27700%27%20font-size%3D%2718%27%20fill%3D%27%23174580%27%3EOnline%20meeting%3C%2Ftext%3E%3C%2Fsvg%3E") !important; background-repeat:no-repeat !important; background-position:center 48px !important; background-size:min(74%,300px) auto !important; border:1px solid #e4e9f0 !important; border-radius:20px !important; box-shadow:0 4px 14px rgba(20,30,50,0.07) !important; min-height:300px !important; max-height:none !important; box-sizing:border-box !important; }
  @media (min-width:1000px){
    #tsml-ui:not(:has(table)) .css-7zdqb1.oai-online { flex-direction:row !important; flex-wrap:nowrap !important; max-width:1440px !important; align-items:stretch !important; gap:24px !important; text-align:center !important; }
    #tsml-ui:not(:has(table)) .css-7zdqb1.oai-online > *:not(.oai-online-art) { flex:0 1 500px !important; width:500px !important; max-width:500px !important; min-width:0 !important; background:#fff !important; border:1px solid #e4e9f0 !important; border-radius:20px !important; box-shadow:0 4px 14px rgba(20,30,50,0.07) !important; padding:24px !important; box-sizing:border-box !important; }
    #tsml-ui:not(:has(table)) .css-7zdqb1.oai-online > .oai-online-art { flex:1 1 auto !important; align-self:stretch !important; min-height:500px !important; margin-right:24px !important; }
  }
  @media (max-width:999px){
    #tsml-ui:not(:has(table)) .css-7zdqb1.oai-online .oai-online-art { display:none !important; }
    #tsml-ui:not(:has(table)) .css-7zdqb1.oai-online > *:not(.oai-online-art) { width:100% !important; max-width:100% !important; }
  }
  /* Get Directions -> green, dark green on hover. Both the top-of-card button and
     the map popup's "Get Directions". (Jason 2026-06-07) */
  #tsml-ui:not(:has(table)) a.css-1nmg4yc, #tsml-ui .leaflet-popup-content a[href*="maps"] { background:#146c43 !important; color:#fff !important; border-radius:999px !important; padding:12px 22px !important; font-weight:600 !important; border:0 !important; box-shadow:0 2px 6px rgba(20,108,67,0.25) !important; }
  #tsml-ui:not(:has(table)) a.css-1nmg4yc:hover, #tsml-ui .leaflet-popup-content a[href*="maps"]:hover { background:#0f5132 !important; }
  /* On mobile the Get Directions button rendered edge-to-edge (left=0/right=0) while
     the meeting name, Share and Add to Calendar all sit at a 17px side gutter. Give
     the button the same gutter so it lines up with them. (Jason 2026-06-19) */
  @media (max-width:820px){
    #tsml-ui:not(:has(table)) a.css-1nmg4yc { width:calc(100% - 34px) !important; max-width:none !important; margin-left:auto !important; margin-right:auto !important; box-sizing:border-box !important; }
    /* Join Zoom + Phone (css-1yvq5fz) fill their content container (the JS hoists Join
       Zoom into the meeting-name's container so its width matches Share/Add-to-Calendar
       exactly). (Jason 2026-06-19) */
    #tsml-ui:not(:has(table)) a.css-1yvq5fz { width:100% !important; max-width:none !important; margin-left:0 !important; margin-right:0 !important; box-sizing:border-box !important; }
  }
  /* The meeting/group-name link in the map popup is a plain navy text link, NOT a
     green button (the broad rule above used to turn it into a button that overlapped
     the time). Only "Get Directions" (a maps link) stays green. */
  #tsml-ui .leaflet-popup-content a:not([href*="maps"]) { background:none !important; color:#174580 !important; font-weight:700 !important; border-radius:0 !important; padding:0 !important; box-shadow:none !important; }
  /* Share / Add to Calendar: filled navy buttons that darken on hover, like the
     site's standard buttons (Jason 2026-06-07) */
  /* Share + Add to Calendar: white outlined pills (navy border + text), fill navy on
     hover. Reverted from the filled navy/red fills per Jason 2026-06-07. */
  #tsml-ui:not(:has(table)) button.css-1jccj9u, #tsml-ui:not(:has(table)) button.css-1sp9z2q { border:2px solid #174580 !important; color:#174580 !important; background:#ffffff !important; border-radius:999px !important; padding:10px 20px !important; font-weight:600 !important; transition:background .15s ease, color .15s ease, border-color .15s ease !important; }
  #tsml-ui:not(:has(table)) button.css-1jccj9u *, #tsml-ui:not(:has(table)) button.css-1sp9z2q * { color:#174580 !important; }
  #tsml-ui:not(:has(table)) button.css-1jccj9u:hover, #tsml-ui:not(:has(table)) button.css-1sp9z2q:hover { background:#174580 !important; border-color:#174580 !important; color:#ffffff !important; }
  #tsml-ui:not(:has(table)) button.css-1jccj9u:hover *, #tsml-ui:not(:has(table)) button.css-1sp9z2q:hover * { color:#ffffff !important; }
  /* Zoom / online-join button (css-1yvq5fz) -> same pill style as the other action
     buttons (filled, 999px, centered icon+text), navy to match the OAI brand (Jason 2026-06-09). The
     :not(:has(table)) scope out-specifies the old full-width rule. (Jason 2026-06-07) */
  #tsml-ui:not(:has(table)) a.css-1yvq5fz { display:flex !important; align-items:center !important; justify-content:center !important; gap:8px !important; border:2px solid #174580 !important; color:#ffffff !important; background:#174580 !important; border-radius:999px !important; padding:10px 20px !important; box-sizing:border-box !important; font-weight:600 !important; text-decoration:none !important; transition:background .15s ease, border-color .15s ease !important; }
  #tsml-ui:not(:has(table)) a.css-1yvq5fz:hover { background:#0f3460 !important; border-color:#0f3460 !important; }
  #tsml-ui:not(:has(table)) a.css-1yvq5fz * { color:#ffffff !important; }
  /* phone / website / Update Meeting Info -> 5px-rounded soft buttons (Jason 2026-06-07) */
  #tsml-ui:not(:has(table)) a.css-1jccj9u { display:flex !important; align-items:center !important; justify-content:center !important; gap:8px !important; border:1.5px solid #d8e0ea !important; border-radius:5px !important; background:#f7f9fc !important; padding:13px 16px !important; color:#174580 !important; font-weight:600 !important; text-decoration:none !important; transition:background .15s ease, border-color .15s ease !important; }
  #tsml-ui:not(:has(table)) a.css-1jccj9u:hover { background:#eef4fb !important; border-color:#174580 !important; color:#174580 !important; }
  #tsml-ui:not(:has(table)) a.css-1jccj9u:hover * { color:#174580 !important; }
  #tsml-ui:not(:has(table)) .css-7zdqb1 p { color:#33414f !important; line-height:1.55 !important; }
  #tsml-ui:not(:has(table)) ul { padding-left:0 !important; }
  #tsml-ui:not(:has(table)) ul li { list-style:none !important; display:inline-block !important; background:#eef4fb !important; color:#174580 !important; border-radius:999px !important; padding:4px 12px !important; margin:0 6px 6px 0 !important; font-weight:600 !important; font-size:0.85em !important; }
  /* Closed/Open chips are a <button> with an "info" icon that triggers TSML's own
     default tooltip. Hide the icon and disable the button so TSML's message never
     fires; our hover tooltip covers every type now. The button is pointer-events:
     none so mouse events fall through to the <li> (which carries our tooltip).
     (Jason 2026-06-07) */
  #tsml-ui:not(:has(table)) ul li svg[data-testid="icon-info"] { display:none !important; }
  /* "Updated <date>" line -> bold + centered (tagged with .oai-updated by the
     tooltip poller). (Jason 2026-06-07) */
  #tsml-ui:not(:has(table)) .oai-updated { font-weight:700 !important; text-align:center !important; }
  /* Meeting day/time line -> bold + larger (tagged .oai-meeting-time by the poller). (Jason 2026-06-07) */
  #tsml-ui:not(:has(table)) .oai-meeting-time { font-weight:700 !important; font-size:1.1em !important; }
  /* Top meeting name -> big + heavy; the "City, Province, Canada" line -> bold +
     slightly larger. (Jason 2026-06-07) */
  #tsml-ui:not(:has(table)) .oai-meeting-name { font-weight:900 !important; font-size:32px !important; }
  #tsml-ui:not(:has(table)) .oai-city { font-weight:500 !important; font-size:18px !important; }
  /* Meeting notes -> their own bordered callout area. css-2klgun is TSML-UI's notes
     container (re-verify the class after a TSML-UI update). (Jason 2026-06-07) */
  #tsml-ui:not(:has(table)) .css-2klgun { background:#f7f9fc !important; border:1px solid #e4e9f0 !important; border-radius:10px !important; padding:14px 18px !important; margin:10px 0 16px !important; overflow-wrap:anywhere !important; word-break:break-word !important; }
  #tsml-ui:not(:has(table)) .css-2klgun a, #tsml-ui:not(:has(table)) .css-2klgun p { overflow-wrap:anywhere !important; word-break:break-word !important; }
  /* Area / District line -> same font/style as the location name h2 (navy #174580,
     weight 700, 22px) so it's consistent across all meetings. (Jason 2026-06-19) */
  #tsml-ui:not(:has(table)) .css-7zdqb1 p.oai-area-district { font-size:22px !important; font-weight:700 !important; color:#174580 !important; }
  /* "Notes" header at the top of the notes box. (Jason 2026-06-07) */
  #tsml-ui:not(:has(table)) .css-2klgun::before { content:"Meeting Notes" !important; display:block !important; font-weight:700 !important; color:#174580 !important; font-size:0.95em !important; margin-bottom:8px !important; }
  /* The venue's notes box (tagged by oaiLabelLocationNotes) is "Location Notes", not "Meeting Notes". (Jason 2026-06-19) */
  #tsml-ui:not(:has(table)) .css-2klgun.oai-location-notes::before { content:"Location Notes" !important; }
  #tsml-ui:not(:has(table)) .css-2klgun.oai-online-access-note::before { content:none !important; display:none !important; }
  #tsml-ui:not(:has(table)) .css-2klgun.oai-online-access-note { display:block !important; gap:0 !important; row-gap:0 !important; text-align:left !important; padding:0 12px !important; margin:10px 0 16px !important; background:#f7f9fc !important; border:1px solid #e4e9f0 !important; border-radius:10px !important; }
  #tsml-ui:not(:has(table)) .css-2klgun.oai-online-access-note p { display:flex !important; justify-content:flex-start !important; align-items:center !important; gap:10px !important; height:42px !important; min-height:42px !important; margin:0 !important; padding:0 !important; box-sizing:border-box !important; line-height:1.2 !important; font-size:16px !important; }
  #tsml-ui:not(:has(table)) .css-2klgun.oai-online-access-note p + p { border-top:1px solid #e4e9f0 !important; margin:0 !important; padding:0 !important; }
  #tsml-ui:not(:has(table)) .css-2klgun.oai-online-access-note p span { flex:0 0 auto !important; min-width:82px !important; color:#5f6875 !important; font-size:0.6rem !important;   /* 5.35:1 on the #f7f9fc card, was #6b7480 = 4.49:1 (WCAG AA needs 4.5:1) */ font-weight:700 !important; line-height:1.2 !important; letter-spacing:0.04em !important; text-transform:uppercase !important; }
  #tsml-ui:not(:has(table)) .css-2klgun.oai-online-access-note p strong { flex:1 1 auto !important; color:#212529 !important; font-size:0.95rem !important; font-weight:700 !important; line-height:1.2 !important; text-align:left !important; font-variant-numeric:tabular-nums !important; overflow-wrap:anywhere !important; }
  #tsml-ui:not(:has(table)) .css-2klgun.oai-online-credential-note:not(.oai-online-access-note) { display:none !important; }
  #tsml-ui:not(:has(table)) .oai-online-access { display:block !important; gap:0 !important; row-gap:0 !important; background:#f7f9fc !important; border:1px solid #e4e9f0 !important; border-radius:10px !important; padding:0 12px !important; margin:10px 0 16px !important; text-align:left !important; box-sizing:border-box !important; }
  #tsml-ui:not(:has(table)) .oai-online-access__title { display:none !important; }
  #tsml-ui:not(:has(table)) .oai-online-access__row { display:flex !important; justify-content:flex-start !important; align-items:center !important; gap:10px !important; height:42px !important; min-height:42px !important; padding:0 !important; box-sizing:border-box !important; line-height:1.2 !important; font-size:16px !important; }
  #tsml-ui:not(:has(table)) .oai-online-access__row + .oai-online-access__row { border-top:1px solid #e4e9f0 !important; padding-top:0 !important; margin-top:0 !important; }
  #tsml-ui:not(:has(table)) .oai-online-access__label { flex:0 0 auto !important; min-width:82px !important; color:#5f6875 !important; font-size:0.6rem !important;   /* 5.35:1 on the #f7f9fc card, was #6b7480 = 4.49:1 (WCAG AA needs 4.5:1) */ font-weight:700 !important; line-height:1.2 !important; letter-spacing:0.04em !important; text-transform:uppercase !important; }
  #tsml-ui:not(:has(table)) .oai-online-access__value { flex:1 1 auto !important; color:#212529 !important; font-size:0.95rem !important; font-weight:700 !important; line-height:1.2 !important; text-align:left !important; font-variant-numeric:tabular-nums !important; overflow-wrap:anywhere !important; }
  /* Centre the meeting-detail content (name, time, type pills, notes, venue,
     address, section labels, "provided by") so it matches the already-centred
     footer block — but keep the day-by-day schedule lists LEFT. (Jason 2026-06-19) */
  #tsml-ui:not(:has(table)) .css-7zdqb1 { text-align:center !important; }
  #tsml-ui:not(:has(table)) .css-7zdqb1 ul { justify-content:center !important; }
  #tsml-ui:not(:has(table)) .css-7zdqb1 div:has(> ol),
  #tsml-ui:not(:has(table)) .css-7zdqb1 div:has(> ol) h3,
  #tsml-ui:not(:has(table)) .css-7zdqb1 ol,
  #tsml-ui:not(:has(table)) .css-7zdqb1 ol li,
  #tsml-ui:not(:has(table)) .css-7zdqb1 ol li * { text-align:left !important; }
  /* (A) Top spacing tightened at source: see the
     `body.page-id-1311.oai-tsml-detail-page #tsml-ui` rule (margin-top 12 / padding-top 0). */
  /* (B) Back link -> plain "Back to Meetings" text + arrow, matching the bookstore
     "Back to bookstore" link: navy #174580, Figtree 600, 15px, 7px gap, underline
     text (not the arrow) on hover. (Jason 2026-06-19, reverted from the circle.) */
  #tsml-ui:has(.css-7zdqb1) .css-14ey5ic { position:static !important; display:inline-flex !important; align-items:center !important; gap:7px !important; align-self:flex-start !important; width:auto !important; height:auto !important; min-width:0 !important; background:none !important; border-radius:0 !important; overflow:visible !important; margin:0 0 6px 17px !important; }
  /* "Meeting Details" page title (injected) — like the bookstore "Bookstore Checkout":
     "Meeting" light 300, "Details" heavy 900, navy, centred. (Jason 2026-06-19) */
  #tsml-ui:has(.css-7zdqb1) .oai-meeting-pagetitle { display:block !important; font-family:Figtree, sans-serif !important; font-size:36px !important; font-weight:900 !important; color:#174580 !important; text-align:center !important; line-height:1.15 !important; letter-spacing:-0.015em !important; margin:0 0 16px !important; padding:0 !important; }
  #tsml-ui:has(.css-7zdqb1) .oai-meeting-pagetitle .oai-mpt-light { font-weight:300 !important; font-variation-settings:"wght" 300 !important; }
  /* top padding inside the card matches the side gutter so Get Directions isn't
     jammed against the top edge. (Jason 2026-06-19) */
  #tsml-ui:has(.css-7zdqb1) .css-7zdqb1 { padding-top:0 !important; }
  /* Mobile is boxless (no bordered card padding), so give the card itself a small top
     padding so the first button isn't jammed against the top. Desktop keeps 0 (the
     bordered info card's own 24px padding handles breathing there). (Jason 2026-06-19) */
  @media (max-width:999px){
    /* Even vertical rhythm on mobile: title->button, button->name, name->time all ~28px.
       title->button = title margin-bottom (16) + this card padding-top (8) + ~4.
       button->name = the content flex gap (set to 12) + the inner block's 16. (Jason 2026-06-19) */
    #tsml-ui:has(.css-7zdqb1) .css-7zdqb1 { padding-top:8px !important; }
    #tsml-ui:not(:has(table)) .css-7zdqb1 div:has(> a.css-1nmg4yc:first-child),
    #tsml-ui:not(:has(table)) .css-7zdqb1 div:has(> a.css-1yvq5fz:first-child) { row-gap:12px !important; }
  }
  /* 450-999px (tablet / large phone): single column, but keep the meeting info as a
     RAISED card (border + drop shadow) like desktop. Below 450px it goes boxless.
     Targets the info column (the card's first child that isn't the map / online art).
     (Jason 2026-06-19) */
  @media (min-width:450px) and (max-width:999px){
    #tsml-ui:not(:has(table)) .css-7zdqb1 > *:not(.css-0):not(.oai-online-art) {
      border:1px solid #e4e9f0 !important; border-radius:20px !important;
      box-shadow:0 4px 14px rgba(20,30,50,0.07) !important; padding:20px !important;
      background:#fff !important; box-sizing:border-box !important;
    }
    /* 20px gutter: inset the card's children (info + map) from the screen edges. */
    #tsml-ui:not(:has(table)) .css-7zdqb1 { padding-left:20px !important; padding-right:20px !important; }
    /* Map gets the same raised edges (border + drop shadow + radius) as the info card,
       separated below it. (Jason 2026-06-19) */
    #tsml-ui:not(:has(table)) .css-7zdqb1 > .css-0 {
      border:1px solid #e4e9f0 !important; border-radius:20px !important;
      box-shadow:0 4px 14px rgba(20,30,50,0.07) !important; overflow:hidden !important;
      margin-top:16px !important; box-sizing:border-box !important;
    }
  }
  /* Keep ~24px breathing above the first action button (Get Directions / Join Zoom).
     In-person: the button is a direct child of the bordered info card, so the card's
     own 24px padding handles it — don't touch it. ONLINE on desktop: the hoisted Join
     Zoom sits in a NESTED wrapper inside the card, so card 24 + wrapper 16 = 40 (too
     much); zero just that wrapper so it's a clean 24. On mobile (boxless) the wrapper's
     own ~16px is the breathing — leave it. (Jason 2026-06-19) */
  #tsml-ui:not(:has(table)) .css-7zdqb1.oai-online div:has(> a.css-1yvq5fz:first-child) { padding-top:0 !important; }
  #tsml-ui:has(.css-7zdqb1) .css-14ey5ic svg { width:17px !important; height:17px !important; flex:0 0 auto !important; transition:transform .15s ease; }
  #tsml-ui:has(.css-7zdqb1) .css-14ey5ic svg, #tsml-ui:has(.css-7zdqb1) .css-14ey5ic svg * { stroke:#174580 !important; fill:#174580 !important; color:#174580 !important; }
  #tsml-ui:has(.css-7zdqb1) .css-14ey5ic a { position:static !important; inset:auto !important; font-family:Figtree, sans-serif !important; font-weight:600 !important; font-size:15px !important; color:#174580 !important; text-decoration:none !important; }
  #tsml-ui:has(.css-7zdqb1) .css-14ey5ic:hover a { text-decoration:underline !important; }
  #tsml-ui:has(.css-7zdqb1) .css-14ey5ic:hover svg { transform:translateX(-3px); }
  #tsml-ui:not(:has(table)) .css-2klgun p { margin:0 0 6px !important; font-size:1rem !important; }
  #tsml-ui:not(:has(table)) .css-2klgun p:last-child { margin-bottom:0 !important; }
  /* "Other days" list on the detail: weekday headers (the only <h3>s here) a bit
     larger + bold, and the meeting-name links navy so they read as links (they're
     already <a> to #/slug, just styled black). (Jason 2026-06-07) */
  /* "Other days" list: hide the weekday HEADERS; the day is now inlined on each row
     via data-oai-day + ::before (set by the poller), e.g. "Mon 10:00 AM". Also hide
     the "Out of Town > ..." region breadcrumb. (Jason 2026-06-07) */
  #tsml-ui:not(:has(table)) h3 { display:none !important; }
  #tsml-ui:not(:has(table)) [data-oai-day] { flex-direction:row !important; align-items:baseline !important; gap:5px !important; flex:none !important; min-width:120px !important; white-space:nowrap !important; justify-content:flex-start !important; }
  #tsml-ui:not(:has(table)) [data-oai-day]::before { content: attr(data-oai-day) !important; text-transform:capitalize !important; font-weight:700 !important; }
  #tsml-ui:not(:has(table)) .oai-hide-region { display:none !important; }
  /* Group email moved up under the notes, with a "Group Email" label. (Jason 2026-06-07) */
  #tsml-ui:not(:has(table)) .oai-group-email-wrap { margin:4px 0 10px !important; }
  #tsml-ui:not(:has(table)) .oai-group-email-label { font-weight:700 !important; color:#174580 !important; margin-bottom:6px !important; }
  #tsml-ui:not(:has(table)) .css-7zdqb1 a[href^="#/"] { color:#174580 !important; }
  #tsml-ui:not(:has(table)) .css-7zdqb1 a[href^="#/"]:hover { text-decoration:underline !important; }
  #tsml-ui:not(:has(table)) ul li > button { pointer-events:none !important; background:transparent !important; border:0 !important; padding:0 !important; margin:0 !important; font:inherit !important; color:inherit !important; }
  /* Add to Calendar dropdown (css-1bdm8nc Emotion menu): bigger, clearer items in
     navy, with a hover tint, and no external-link arrow on Google Calendar.
     Re-verify the menu class after a TSML-UI update. (Jason 2026-06-07) */
  #tsml-ui:not(:has(table)) .css-1bdm8nc button, #tsml-ui:not(:has(table)) .css-1bdm8nc a { font-size:18px !important; font-weight:600 !important; padding:14px 20px !important; color:#174580 !important; display:block !important; width:100% !important; text-align:left !important; transition:background .12s ease !important; }
  #tsml-ui:not(:has(table)) .css-1bdm8nc button:hover, #tsml-ui:not(:has(table)) .css-1bdm8nc a:hover { background:#eef4fb !important; }
  #tsml-ui:not(:has(table)) .css-1bdm8nc .oai-ext-arrow::after, #tsml-ui:not(:has(table)) .css-1bdm8nc a.oai-ext-arrow svg { content:none !important; display:none !important; }
  /* Single 760px content column at ALL widths (so the meeting page matches the
     site's other content pages instead of TSML-UI's cramped 2-col). The css-7zdqb1
     wrapper is forced column + max 760 centered (above); here both children go full
     width and the map is framed below at a fixed height. The "Back to Meetings"
     row (css-14ey5ic) is constrained to the same 760 so it lines up. (Jason 2026-06-07) */
  @media (max-width:999px) {
    #tsml-ui:not(:has(table)) .css-7zdqb1 > *:not(.css-0) { width:100% !important; max-width:100% !important; flex:0 0 auto !important; }
    #tsml-ui:not(:has(table)) .css-7zdqb1 > .css-0,
    #tsml-ui:not(:has(table)) .css-7zdqb1 > .css-0 > div,
    #tsml-ui:not(:has(table)) .css-7zdqb1 > .css-0 .leaflet-container { width:100% !important; flex:0 0 auto !important; height:360px !important; min-height:360px !important; max-height:360px !important; margin-right:0 !important; }
    /* Mobile: drop the white card frame and let the content sit at the page's own
       ~10px side gutter — zero the nested #tsml-ui / wrapper / card paddings.
       (Jason 2026-06-18 "external border disappears, 10px gutter left+right") */
    #tsml-ui:has(.css-7zdqb1) { padding-left:0 !important; padding-right:0 !important; }
    #tsml-ui:has(.css-7zdqb1) > div { padding-left:0 !important; padding-right:0 !important; }
    #tsml-ui:not(:has(table)) .css-7zdqb1 { border:none !important; box-shadow:none !important; border-radius:0 !important; }
    #tsml-ui:not(:has(table)) .css-7zdqb1 > div { padding-left:0 !important; padding-right:0 !important; }
  }
  #tsml-ui:not(:has(table)) .css-14ey5ic { width:100% !important; max-width:760px !important; margin-left:auto !important; margin-right:auto !important; justify-content:flex-start !important; }
  /* Desktop: widen the "Back to Meetings" row to the card width (1440) so it stays
     centred as a block but its left edge (justify-content:flex-start) lines up with
     the card's left edge instead of being indented. Placed AFTER the 760 base so it
     wins on source order. (Jason 2026-06-18 "back to meetings aligned left of box") */
  @media (min-width:1000px) {
    #tsml-ui:not(:has(table)) .css-14ey5ic { max-width:1440px !important; }
  }
  /* Buttons never stretch full width: cap them and centre. Harmless in the narrow
     2-col column (column < cap); kicks in when the layout stacks full width.
     (Jason 2026-06-07) */
  #tsml-ui:not(:has(table)) a.css-1nmg4yc,
  #tsml-ui:not(:has(table)) button.css-1jccj9u,
  #tsml-ui:not(:has(table)) button.css-1sp9z2q,
  #tsml-ui:not(:has(table)) a.css-1yvq5fz,
  #tsml-ui:not(:has(table)) a.css-1jccj9u { max-width:420px !important; margin-left:auto !important; margin-right:auto !important; }

/* "Meeting Details" title spacing = "Meeting Finder" (Jason 2026-08-17): 34px under the nav,
   38px above the card, same as the list page (34 under the nav, 38 above the filter bar).
   The wrapper's content starts 28px under the nav (#tsml-ui margin-top 12 + 16 padding), so
   the title carries margin-top 6. The Back to Meetings link is lifted out of the flow onto
   the title's row (left edge, vertically centred on the title) so it no longer pushes the
   title down. Desktop only; mobile keeps the stacked link + title. */
@media (min-width: 821px) {
  #tsml-ui:has(.css-7zdqb1) .css-7rtmwy { position: relative !important; }
  #tsml-ui:has(.css-7zdqb1) .oai-meeting-pagetitle { margin: 6px 0 38px !important; }
  #tsml-ui:has(.css-7zdqb1) .css-14ey5ic { position: absolute !important; left: 0 !important; top: 14px !important; margin: 0 !important; z-index: 2 !important; }
}
@media (max-width: 820px) {
  #tsml-ui:has(.css-7zdqb1) .oai-meeting-pagetitle { font-size: 30px !important; margin: 12px 0 26px !important; }   /* = the list's mobile Meeting Finder (30px, ~30px to the content) */
  /* No "Back to Meetings" on phones (Jason 2026-08-22): the browser back gesture
     and the header's "Find a Meeting" both already do it, and on a 390px screen the
     link cost a whole row above the title. display:none, not visibility, so the row
     collapses and the link leaves the accessibility tree rather than staying a
     focusable target nobody can see. Desktop keeps it. */
  #tsml-ui:has(.css-7zdqb1) .css-14ey5ic { display: none !important; }
}
