/* Community Redesign — shared shell + left rail + hub cards + filters + highlight.
   Loaded ONLY on Community SSR pages (_layout.php, gated on $communityShell). Public SSR pages do not load
   app.css, so this is self-contained. Dark by default; [data-theme="light"] overrides. Prefix: .cmy-* */

/* Theme tokens. The Community scripts' overlays/dialogs (community-overlay.js, community-panels.js, views/
   community-views.js) and the calendar pop-up style themselves with var(--card|--text|--border|--muted|--accent|
   --input-bg, <dark fallback>) — tokens app.css defines but these pages don't load, so they were always dark.
   Defining them here for LIGHT (only) makes every one of those follow the theme; dark keeps its fallbacks.
   --muted had no fallback anywhere, so it gets a dark value too. */
:root{--muted:#9ca3af}
[data-theme="light"]{--card:#fff;--text:#111827;--border:#d1d5db;--muted:#6b7280;--input-bg:#fff;--accent:#2563eb}

.cmy-layout{display:grid;grid-template-columns:220px minmax(0,1fr);gap:28px;max-width:1180px;margin:0 auto;padding:8px 0 8px;align-items:start}
.cmy-main{min-width:0}

/* ---- Left rail ------------------------------------------------------------------------------- */
/* Sticks just below the sticky .topbar (59px on desktop) + an 11px gap — level with the "+" FAB (top:72px) — so
   the rail stays in view while scrolling; max-height keeps its last links reachable (scrolls inside if taller). */
.cmy-rail{position:sticky;top:70px;align-self:start;max-height:calc(100vh - 84px);overflow:auto;border:1px solid #1f2937;border-radius:14px;background:#0b1220;padding:6px 4px}
[data-theme="light"] .cmy-rail{border-color:#e5e7eb;background:#fff}
.cmy-rail>summary{list-style:none;cursor:pointer;font-weight:700;font-size:14px;padding:10px 12px;color:inherit;display:flex;align-items:center;gap:8px}
.cmy-rail>summary::-webkit-details-marker{display:none}
.cmy-rail>summary::after{content:"▾";margin-left:auto;font-size:12px;color:#9ca3af}
.cmy-rail-body{padding:4px 6px 8px}
.cmy-navgroup{margin:6px 0 10px}
.cmy-navhead{font-size:11px;font-weight:800;letter-spacing:.6px;text-transform:uppercase;color:#6b7280;padding:6px 10px 4px}
.cmy-navlink{display:flex;align-items:center;justify-content:space-between;gap:8px;padding:7px 10px;border-radius:8px;text-decoration:none;color:#cbd5e1;font-size:14px;font-weight:500}
[data-theme="light"] .cmy-navlink{color:#374151}
.cmy-navlink:hover{background:rgba(37,99,235,.10);color:#e5e7eb}
[data-theme="light"] .cmy-navlink:hover{background:rgba(37,99,235,.08);color:#111827}
.cmy-navlink[aria-current="page"]{background:rgba(37,99,235,.16);color:#60a5fa;font-weight:700}
.cmy-navsub{font-size:13px;color:#9ca3af;padding:5px 10px;border-radius:8px;text-decoration:none;display:block;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.cmy-navsub:hover{color:#60a5fa}
[data-theme="light"] .cmy-navlink[aria-current="page"]{color:#1d4ed8}
[data-theme="light"] .cmy-navsub{color:#6b7280}
[data-theme="light"] .cmy-navsub:hover{color:#2563eb}
/* The page's own Event / Card Shop entry under "Browse Events" / "Browse Card Shops" — same highlight as a nav link. */
.cmy-navsub[aria-current="page"]{background:rgba(37,99,235,.16);color:#60a5fa;font-weight:700}
[data-theme="light"] .cmy-navsub[aria-current="page"]{color:#1d4ed8}
.cmy-count{font-size:11px;font-weight:700;color:#6b7280}

/* ---- Game/topic hub vertical padding (full-width content — NO 780px cap, per owner) --------------- */
.cmy-page{padding:8px 0 56px}

/* Stabilize the sticky, backdrop-filtered .topbar on community pages: scoping it to its own GPU layer stops
   the Chrome compositing bug where a backdrop-filter sticky bar fades out mid-scroll and only repaints at the
   top. community.css loads ONLY on the community shell, so this override is scoped to those pages. */
.topbar{transform:translateZ(0)}

/* ---- Back control — mirrors the SPA #my-plan ghost button (`.btn.btn-ghost` + `<span class="back-label">`).
   Community SSR pages don't load app.css, so the look is replicated here; the layout's `[data-theme=light] a`
   would otherwise recolour it, hence the explicit light variant. "← Back" on every width (the label is NOT hidden
   on phones/tablets — owner: arrow-only read as unclear). ---- */
.cmy-back{display:inline-flex;align-items:center;gap:4px;margin:0 0 14px;padding:6px 10px;border:1px solid rgba(255,255,255,.06);border-radius:12px;background:transparent;color:#f2f2f5;font-size:13px;font-weight:500;line-height:1.2;text-decoration:none;white-space:nowrap;cursor:pointer;transition:background .2s,border-color .2s,box-shadow .2s}
.cmy-back:hover{background:rgba(255,255,255,.04);border-color:rgba(255,255,255,.12);box-shadow:0 0 20px rgba(160,140,255,.15);text-decoration:none}
[data-theme="light"] .cmy-back{color:#1a1a1d;border-color:rgba(0,0,0,.08)}
[data-theme="light"] .cmy-back:hover{background:rgba(0,0,0,.04);border-color:rgba(0,0,0,.14);box-shadow:0 0 20px rgba(100,80,200,.12)}

/* Back + breadcrumb on ONE row on desktop (thread / event / card-shop / topic pages); stacked on phones. */
.cmy-backrow{display:flex;align-items:center;gap:12px;flex-wrap:wrap;margin:0 0 12px}
.cmy-backrow .cmy-back,
.cmy-backrow .cmy-crumb,
.cmy-backrow .ci-crumb,
.cmy-backrow .cx-crumb{margin:0}
@media (max-width:768px){ .cmy-backrow{flex-direction:column;align-items:flex-start;gap:8px} }

/* ---- Compact page head (no giant hero, §63/§64) ---------------------------------------------- */
.cmy-head{padding:2px 2px 4px}
.cmy-crumb{font-size:13px;color:#9ca3af;margin:0 0 8px}
.cmy-crumb a{color:#60a5fa;text-decoration:none}
/* The layout's later `[data-theme="light"] a{color:#1a1a1f}` would flatten these links — keep them blue. */
[data-theme="light"] .cmy-crumb a,
[data-theme="light"] .cmy-shop-line a{color:#2563eb}
/* Secondary text: #9ca3af is ~2.5:1 on white — use the darker grey in light mode. */
[data-theme="light"] .cmy-crumb,
[data-theme="light"] .cmy-intro,
[data-theme="light"] .cmy-h2,
[data-theme="light"] .cmy-card-ctx,
[data-theme="light"] .cmy-linkrow-meta,
[data-theme="light"] .cmy-fr-counts,
[data-theme="light"] .cmy-cal-wd,
[data-theme="light"] .cmy-cal-day{color:#6b7280}
.cmy-title{font-size:22px;font-weight:800;margin:0 0 4px;line-height:1.2;color:#e5e7eb}
[data-theme="light"] .cmy-title{color:#111827}
.cmy-intro{font-size:14px;color:#9ca3af;margin:0 0 12px;max-width:640px}
.cmy-cta{display:flex;gap:10px;flex-wrap:wrap;margin:2px 0 8px}
.cmy-cta.cmy-event-cta{margin:5px 0}
.cmy-btn{display:inline-flex;align-items:center;gap:8px;padding:9px 15px;border-radius:10px;font-weight:600;font-size:14px;text-decoration:none;border:1px solid transparent;cursor:pointer}
.cmy-btn-primary{background:#2563eb;color:#fff}
.cmy-btn-ghost{background:transparent;border-color:#374151;color:inherit}
[data-theme="light"] .cmy-btn-ghost{border-color:#d1d5db}
.cmy-btn-ghost:hover{border-color:#2563eb}

/* ---- Conversation type filter (§10/§15/§106) ------------------------------------------------- */
.cmy-filters{display:flex;gap:8px;flex-wrap:wrap;margin:6px 0 14px}
.cmy-filter{padding:6px 14px;border-radius:999px;border:1px solid #374151;background:transparent;color:inherit;font-size:13px;font-weight:600;cursor:pointer}
[data-theme="light"] .cmy-filter{border-color:#d1d5db}
.cmy-filter[aria-pressed="true"]{background:#2563eb;border-color:#2563eb;color:#fff}

/* ---- Sections + cards ------------------------------------------------------------------------ */
.cmy-section{margin-top:22px}
.cmy-h2{font-size:14px;font-weight:700;text-transform:uppercase;letter-spacing:.4px;color:#9ca3af;margin:0 0 10px}
.cmy-soon{display:inline-block;font-size:10px;font-weight:800;letter-spacing:.4px;text-transform:uppercase;color:#fbbf24;background:rgba(234,179,8,.15);border:1px solid rgba(234,179,8,.35);border-radius:999px;padding:1px 8px;margin-left:8px;vertical-align:middle}
.cmy-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(260px,1fr));gap:12px}
.cmy-card{display:block;padding:12px 14px;border-radius:12px;border:1px solid #1f2937;background:#0b1220;text-decoration:none;color:inherit;transition:border-color .15s}
[data-theme="light"] .cmy-card{border-color:#e5e7eb;background:#fff}
.cmy-card:hover{border-color:#2563eb}
.cmy-card-top{display:flex;gap:6px;align-items:center;margin-bottom:7px;flex-wrap:wrap}
.cmy-badge{font-size:11px;font-weight:700;padding:2px 8px;border-radius:999px;text-transform:uppercase;letter-spacing:.3px}
.cmy-badge-question{background:rgba(37,99,235,.15);color:#60a5fa}
.cmy-badge-discussion{background:rgba(139,92,246,.15);color:#a78bfa}
.cmy-badge-answered{background:rgba(16,185,129,.15);color:#34d399}
.cmy-badge-muted{background:rgba(148,163,184,.15);color:#94a3b8}
.cmy-card-title{font-size:15px;font-weight:600;line-height:1.35;margin-bottom:5px}
.cmy-card-ctx{font-size:12px;color:#9ca3af;margin-bottom:5px}
.cmy-card-meta{font-size:12px;color:#6b7280;display:flex;gap:6px;flex-wrap:wrap}
/* The card is a <div data-href> (whole card clickable) with a real title <a> — styled to look like the old card. */
.cmy-card[data-href]{cursor:pointer}
.cmy-card-link{display:block;color:inherit;text-decoration:none}
.cmy-card-link:hover{color:#60a5fa}
.cmy-badge-meetup{background:rgba(234,179,8,.15);color:#fbbf24}
/* Follow / Following on a conversation card — right-aligned in .cmy-card-top. */
.cmy-card-top .cmy-follow{margin-left:auto;font-size:12px;font-weight:600;padding:3px 11px;border-radius:999px;border:1px solid #374151;background:transparent;color:inherit;cursor:pointer;font-family:inherit;line-height:1.4}
[data-theme="light"] .cmy-card-top .cmy-follow{border-color:#d1d5db}
.cmy-card-top .cmy-follow:hover{border-color:#2563eb}
.cmy-card-top .cmy-follow.is-following{border-color:#10b981;color:#34d399}
.cmy-card-top .cmy-follow[disabled]{opacity:.6;cursor:not-allowed}
.cmy-empty{font-size:14px;color:#9ca3af;padding:14px;border:1px dashed #374151;border-radius:12px}
[data-theme="light"] .cmy-empty{border-color:#d1d5db;color:#6b7280}
.cmy-err{font-size:13px;color:#fca5a5;padding:12px 14px;border:1px solid #7f1d1d;border-radius:12px;background:rgba(127,29,29,.12)}
[data-theme="light"] .cmy-err{color:#b91c1c;border-color:#fecaca;background:#fef2f2}

/* Franchise pills + simple link lists (events / card shops / meet-ups) */
.cmy-pills{display:flex;flex-wrap:wrap;gap:8px}
.cmy-pill{padding:7px 13px;border-radius:999px;border:1px solid #1f2937;background:#0b1220;text-decoration:none;color:inherit;font-size:14px;font-weight:600;display:inline-flex;gap:7px;align-items:center}
[data-theme="light"] .cmy-pill{border-color:#e5e7eb;background:#fff}
.cmy-pill:hover{border-color:#2563eb}
.cmy-linklist{display:grid;gap:8px}
.cmy-linkrow{display:block;padding:10px 13px;border:1px solid #1f2937;border-radius:10px;text-decoration:none;color:inherit;background:#0b1220}
[data-theme="light"] .cmy-linkrow{border-color:#e5e7eb;background:#fff}
.cmy-linkrow:hover{border-color:#2563eb}
.cmy-linkrow-title{font-weight:600;font-size:14px}
.cmy-linkrow-meta{font-size:12px;color:#9ca3af;margin-top:2px}

/* ---- Responsive: rail collapses to a disclosure on narrow screens (§61) ---------------------- */
@media (max-width:860px){
  .cmy-layout{grid-template-columns:1fr;gap:14px}
  .cmy-rail{position:static;max-height:none}
}
@media (min-width:861px){
  .cmy-rail>summary{display:none}
  .cmy-rail>.cmy-rail-body{display:block !important}
}
/* W7B (production layout): there is no footer Community menu, so phones keep the in-page rail as a compact disclosure. */

/* ---- Desktop "+" create FAB (root + game hubs). Reuses the shared .public-nav-more dropdown driven by
   public-nav.js (click toggle + outside-click + Escape, zero JS change). The shared :hover/:focus-within
   auto-open is suppressed here so the FAB menu is click-only. Desktop only — mobile keeps the inline CTAs. */
/* .public-nav-more.cmy-fab beats the shared inline `.public-nav-more{position:relative}` (same specificity,
   but that rule is later in source) so the FAB actually pins to the top-right corner. */
.public-nav-more.cmy-fab{position:fixed;top:72px;right:16px;z-index:9990}
.cmy-fab .public-nav-more-btn.cmy-fab-btn{width:52px;height:52px;border-radius:50%;background:#2563eb;color:#fff;font-weight:400;padding:0;display:flex;align-items:center;justify-content:center;box-shadow:0 4px 18px rgba(37,99,235,.45);transition:background .15s,transform .15s}
.cmy-fab .public-nav-more-btn.cmy-fab-btn:hover{background:#1d4ed8;color:#fff;transform:scale(1.05)}
/* The "+" glyph sits ~3px low on its baseline — nudge it up so it's optically centered. */
.cmy-fab .cmy-fab-plus{display:block;font-size:30px;line-height:1;margin-top:-5px}
.cmy-fab .public-nav-more-menu{display:none !important}
.cmy-fab.open .public-nav-more-menu{display:block !important}
@media (max-width:768px){ .cmy-fab{display:none} }
/* The "+" is rendered for signed-in members only, so only THEIR inline create row (.has-fab) hides on desktop;
   guests keep the inline buttons on every width (clicking one asks them to sign in). */
@media (min-width:769px){ .cmy-cta.has-fab{display:none} }
/* Card-shop page: the "+" menu also holds action BUTTONS (Follow Card Shop / Report Shop) — styled exactly like the
   menu's links (_layout.php .public-nav-more-menu a). Its inline .cx-cta row hides on desktop when the FAB is there
   (signed-in only; a guest's "Sign in" button stays visible on every width). */
.cmy-fab .public-nav-more-menu-inner button{display:block;width:100%;text-align:left;padding:8px 14px;border:0;border-radius:8px;background:none;font-family:inherit;font-size:13px;font-weight:500;color:#b2b2c7;cursor:pointer;transition:background .12s,color .12s}
.cmy-fab .public-nav-more-menu-inner button:hover{background:rgba(255,255,255,.08);color:#e9e9ef}
.cmy-fab .public-nav-more-menu-inner button.is-following{color:#34d399}
.cmy-fab .public-nav-more-menu-inner button[disabled]{opacity:.6;cursor:default}
[data-theme="light"] .cmy-fab .public-nav-more-menu-inner button{color:#6a6a7a}
[data-theme="light"] .cmy-fab .public-nav-more-menu-inner button:hover{background:rgba(0,0,0,.06);color:#1a1a1f}
[data-theme="light"] .cmy-fab .public-nav-more-menu-inner button.is-following{color:#059669}
@media (min-width:769px){ .cx-cta.has-fab{display:none} }

/* ---- Discover "Browse all franchises" rows: label + split Question/Discussion counts.
   Desktop = one row (label left, counts right); phone = label on row 1, "N Questions, M Discussions" on row 2. */
.cmy-fr{display:flex;justify-content:space-between;align-items:baseline;gap:10px;padding:10px 12px;margin-bottom:6px;border-radius:10px;border:1px solid #1f2937;background:#0b1220;text-decoration:none;color:inherit}
[data-theme="light"] .cmy-fr{border-color:#e5e7eb;background:#fff}
.cmy-fr:hover{border-color:#2563eb}
.cmy-fr-label{font-weight:600;font-size:14px}
.cmy-fr-counts{display:flex;gap:14px;font-size:12px;color:#9ca3af;white-space:nowrap}
@media (max-width:768px){
  .cmy-fr{flex-direction:column;align-items:flex-start;gap:2px}
  .cmy-fr-counts{gap:4px}
  .cmy-fr-q::after{content:","}
}

/* ---- Event RSVP control (Going / Can't Go) — mirrors the .ci-react reaction pills (community-item.php). */
.cmy-rsvp{display:flex;gap:10px;flex-wrap:wrap;align-items:center;margin:5px 0}
/* Guests: the members' counts, then a sign-in invite on its own line (no "RSVP" — the shows are public). */
.cmy-rsvp-guest{flex-direction:column;align-items:flex-start;gap:3px}
.cmy-rsvp-count{font-size:13px;color:#cbd5e1}
[data-theme="light"] .cmy-rsvp-count{color:#374151}
.cmy-rsvp-btn{display:inline-flex;align-items:center;gap:6px;cursor:pointer;background:transparent;border:1px solid #374151;border-radius:999px;padding:6px 14px;color:inherit;font-size:13px;font-weight:600;font-family:inherit}
[data-theme="light"] .cmy-rsvp-btn{border-color:#d1d5db}
.cmy-rsvp-btn:hover{border-color:#2563eb}
.cmy-rsvp-btn[disabled]{opacity:.6;cursor:not-allowed}
/* Selected state fills solid (Going = green, Can't Go = red) instead of just recolouring the outline. */
.cmy-rsvp-go.is-on{background:#10b981;border-color:#10b981;color:#fff}
.cmy-rsvp-no.is-on{background:#ef4444;border-color:#ef4444;color:#fff}
.cmy-rsvp-go.is-on:hover{background:#059669;border-color:#059669}
.cmy-rsvp-no.is-on:hover{background:#dc2626;border-color:#dc2626}
.cmy-rsvp-signin{font-size:13px;color:#60a5fa;font-weight:600;text-decoration:none}
[data-theme="light"] .cmy-rsvp-signin{color:#2563eb}
.cmy-rsvp-msg{font-size:12px;margin-left:6px}
/* Event detail meta lines */
.cmy-event-meta{font-size:14px;color:#cbd5e1;margin:4px 0}
[data-theme="light"] .cmy-event-meta{color:#374151}
/* DB-backed listing: recurring dates, cancelled runs, ended shows, per-date RSVP label */
.cmy-badge-cancelled{background:rgba(239,68,68,.15);color:#f87171;vertical-align:middle}
.cmy-more-dates{color:#94a3b8}
[data-theme="light"] .cmy-more-dates{color:#6b7280}
.cmy-date-list{margin:4px 0 0;padding-left:20px}
.cmy-date-list li{margin:2px 0}
.cmy-date-list li.is-cancelled,.cmy-cal-ev.is-cancelled{text-decoration:line-through;opacity:.75}
.cmy-event-ended{font-size:13px;font-weight:600;color:#f59e0b;margin:2px 0 6px}
.cmy-rsvp-for{font-size:12px;font-weight:600;color:#94a3b8;margin:6px 0 -2px}
/* /community/events tabs (Upcoming · Happening Now · Past) — plain links styled as the filter pills */
.cmy-event-tabs .cmy-filter{text-decoration:none;display:inline-flex;align-items:center;gap:4px}
.cmy-event-tabs .cmy-filter .cmy-count{font-weight:500;opacity:.85}
.cmy-event-tabs .cmy-filter[aria-current="page"] .cmy-count{color:#fff;opacity:.9}
.cmy-badge-live{background:rgba(16,185,129,.15);color:#34d399;vertical-align:middle}
.cmy-past-talk a{color:#60a5fa;text-decoration:none;font-weight:600}
[data-theme="light"] .cmy-past-talk a{color:#2563eb}
[data-theme="light"] .cmy-rsvp-for{color:#6b7280}

/* ---- Map link + events page header (Back ↔ Event Calendar) ---------------------------------- */
.cmy-map{text-decoration:none;font-size:13px;white-space:nowrap}
.cmy-map:hover{text-decoration:underline}

/* ---- Card-shop details block (/community/card-shops rows + the Community card-shop page) ------------- */
.cmy-shop{margin:6px 0 2px}
.cmy-shop-line{font-size:13px;color:#cbd5e1;margin:3px 0;line-height:1.45;overflow-wrap:anywhere}
[data-theme="light"] .cmy-shop-line{color:#374151}
.cmy-shop-line a{color:#60a5fa;text-decoration:none}
.cmy-shop-rating{color:#fbbf24;font-weight:600}
.cmy-shop-plain{user-select:text}
.cmy-shop-note{font-size:11px;color:#6b7280;margin-top:5px}
.cmy-events-head{display:flex;justify-content:space-between;align-items:center;gap:10px;margin:0 0 6px}
/* Events / calendar / card-shops: Back + breadcrumb share one row (left), the page button sits right. */
.cmy-events-head .cmy-backrow{margin:0;min-width:0}
.cmy-cal-btn{display:inline-flex;align-items:center;gap:6px;padding:7px 13px;border-radius:999px;border:1px solid #374151;background:transparent;color:inherit;font-size:13px;font-weight:600;text-decoration:none;cursor:pointer;font-family:inherit}
[data-theme="light"] .cmy-cal-btn{border-color:#d1d5db}
.cmy-cal-btn:hover{border-color:#2563eb}

/* ---- Month calendar (/community/events-calendar) -------------------------------------------- */
.cmy-cal-nav{display:flex;align-items:center;justify-content:center;gap:16px;margin:8px 0 12px}
.cmy-cal-title{font-size:18px;font-weight:800;min-width:160px;text-align:center}
.cmy-cal-navbtn{width:36px;height:36px;border-radius:9px;border:1px solid #374151;background:transparent;color:inherit;font-size:18px;line-height:1;cursor:pointer}
[data-theme="light"] .cmy-cal-navbtn{border-color:#d1d5db}
.cmy-cal-navbtn:hover{border-color:#2563eb}
.cmy-cal-grid{display:grid;grid-template-columns:repeat(7,minmax(0,1fr));gap:4px}
.cmy-cal-wd{min-width:0;font-size:11px;font-weight:700;text-transform:uppercase;letter-spacing:.3px;color:#9ca3af;text-align:center;padding:4px 0}
.cmy-cal-cell{min-width:0;overflow:hidden;min-height:92px;border:1px solid #1f2937;border-radius:8px;background:#0b1220;padding:4px}
[data-theme="light"] .cmy-cal-cell{border-color:#e5e7eb;background:#fff}
.cmy-cal-empty{border:none;background:transparent}
.cmy-cal-cell.is-today{border-color:#2563eb;box-shadow:inset 0 0 0 1px #2563eb}
.cmy-cal-day{font-size:12px;font-weight:700;color:#9ca3af;margin-bottom:3px}
.cmy-cal-ev{display:block;width:100%;text-align:left;margin-bottom:3px;padding:3px 6px;border:none;border-radius:6px;background:rgba(37,99,235,.18);color:#bfdbfe;font-size:11px;font-weight:600;line-height:1.2;cursor:pointer;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-family:inherit}
.cmy-cal-ev:hover{background:rgba(37,99,235,.32)}
[data-theme="light"] .cmy-cal-ev{background:rgba(37,99,235,.12);color:#1d4ed8}
[data-theme="light"] .cmy-cal-ev:hover{background:rgba(37,99,235,.2)}
.cmy-cal-ov{position:fixed;inset:0;background:rgba(0,0,0,0.65);z-index:100060;display:flex;align-items:center;justify-content:center;padding:20px}
.cmy-cal-ovcard{position:relative;background:var(--card,#0b1220);border:1px solid var(--border,#1f2937);border-radius:16px;max-width:420px;width:100%;padding:22px;box-shadow:0 20px 60px rgba(0,0,0,.45);color:var(--text,#e5e7eb)}
[data-theme="light"] .cmy-cal-ovcard{box-shadow:0 20px 60px rgba(0,0,0,.18)}
.cmy-cal-ovclose{position:absolute;top:10px;right:10px;width:32px;height:32px;border-radius:8px;border:1px solid var(--border,#374151);background:transparent;color:inherit;font-size:15px;cursor:pointer}
.cmy-cal-ovtitle{font-size:20px;font-weight:800;margin:0 24px 12px 0;line-height:1.25}
.cmy-cal-ovcta{margin-top:16px}
.cmy-cal-ovcta .cmy-cal-btn{background:#2563eb;border-color:#2563eb;color:#fff}
.cmy-cal-ovcta .cmy-cal-btn:hover{background:#1d4ed8;border-color:#1d4ed8}
@media (max-width:768px){
  .cmy-cal-cell{min-height:64px;padding:3px}
  .cmy-cal-ev{font-size:10px;padding:2px 4px}
  .cmy-cal-title{font-size:16px;min-width:120px}
}

/* v18 (2026-10-15) — calendar chips never widen a column (all 7 stay equal; long names end in "…"). */
.cmy-cal-ev{box-sizing:border-box;min-width:0;max-width:100%}

/* Visually hidden, still read by screen readers (SSR community pages have no global .sr-only). */
.cmy-sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}

/* /community/card-shops — search by name + region pills (links). */
.cmy-shop-search{display:flex;gap:8px;max-width:560px;margin:2px 0 10px}
.cmy-shop-search input[type="search"]{flex:1;min-width:0;padding:9px 12px;border-radius:10px;border:1px solid #374151;background:#0b1220;color:inherit;font-size:14px;font-family:inherit}
.cmy-shop-search input[type="search"]:focus{outline:none;border-color:#2563eb}
[data-theme="light"] .cmy-shop-search input[type="search"]{background:#fff;border-color:#d1d5db}
.cmy-shop-regions .cmy-filter{text-decoration:none;display:inline-flex;align-items:center}

/* Home "Load more" under Upcoming Events / Card Shops, and the guest "Load more" on a franchise hub. */
.cmy-more-row{margin-top:10px}
.cmy-more{font-size:13px;padding:7px 14px}

/* Guest-gated controls (sign-in overlay): the franchise-hub filter pills are links for guests. */
a.cmy-filter[data-cmy-signin]{text-decoration:none;display:inline-flex;align-items:center}

/* ---- v19 (2026-10-20) — Card Vendor Foundation + Community debt fixes (§132) ------------------------ */
/* §132d: the SSR item / event views use a plain .sr-only (no global one on these pages). */
.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}
/* §132a: _layout.php's inline `.public-nav-more{display:inline-flex}` comes after this file and won the ≤768px hide —
   two classes outrank it, so the desktop "+" FAB is really hidden on phones (the inline CTAs are used there). */
@media (max-width:768px){ .public-nav-more.cmy-fab{display:none} }
/* §132b: 769–860px — the rail is an open <details> above the content; compact it into two columns with a capped,
   scrollable height so the page content is not pushed a full screen down. CSS only. */
@media (max-width:860px){
  .cmy-rail>.cmy-rail-body{columns:2;column-gap:18px;max-height:46vh;overflow:auto}
  .cmy-rail .cmy-navgroup{break-inside:avoid;margin:4px 0 8px}
}

/* Card Vendors — directory rows, detail page, event + card-shop links. Neutral, evidence-only badges. */
.cv-row-top{display:flex;align-items:flex-start;gap:10px}
.cv-row-top .cmy-linkrow-title{flex:1;min-width:0;overflow-wrap:anywhere}
.cv-row-top .cmy-follow{flex:none;font-size:12px;font-weight:600;padding:3px 11px;border-radius:999px;border:1px solid #374151;background:transparent;color:inherit;cursor:pointer;font-family:inherit;line-height:1.4}
[data-theme="light"] .cv-row-top .cmy-follow{border-color:#d1d5db}
.cv-row-top .cmy-follow:hover{border-color:#2563eb}
.cv-row-top .cmy-follow.is-following{border-color:#10b981;color:#34d399}
.cv-row-top .cmy-follow[disabled]{opacity:.6;cursor:not-allowed}
.cv-badges{display:flex;flex-wrap:wrap;gap:6px;margin:4px 0 10px}
.cv-badges-row{margin:6px 0 2px}
.cv-badge{font-size:11px;font-weight:700;padding:2px 9px;border-radius:999px;letter-spacing:.2px;border:1px solid #374151;color:#cbd5e1;background:transparent}
[data-theme="light"] .cv-badge{border-color:#d1d5db;color:#374151}
.cv-badge-event_verified,.cv-badge-identity_verified,.cv-badge-shop_verified{border-color:#1d4ed8;color:#93c5fd;background:rgba(37,99,235,.12)}
[data-theme="light"] .cv-badge-event_verified,[data-theme="light"] .cv-badge-identity_verified,[data-theme="light"] .cv-badge-shop_verified{color:#1d4ed8;background:#eff6ff;border-color:#bfdbfe}
.cv-badge-unverified,.cv-badge-muted{color:#9ca3af}
.cv-title{margin-bottom:4px;overflow-wrap:anywhere}
.cv-banner{padding:10px 14px;border:1px solid #374151;border-radius:12px;background:rgba(148,163,184,.08);font-size:14px;margin:6px 0 12px}
[data-theme="light"] .cv-banner{background:#f8fafc;border-color:#e5e7eb}
.cv-actions{display:flex;flex-wrap:wrap;gap:8px;margin:6px 0 14px}
.cv-actions .cmy-btn{font-size:13px}
.cv-follow.is-following{border-color:#10b981;color:#34d399}
.cv-about{white-space:normal;overflow-wrap:anywhere;line-height:1.55;margin:0}
.cv-facts{display:flex;flex-wrap:wrap;gap:4px 16px;font-size:14px;margin:6px 0}
.cv-facts b{font-weight:600;color:#9ca3af}
.cv-links{display:flex;flex-wrap:wrap;gap:8px 14px;font-size:14px;margin:6px 0}
.cv-links a,.cv-shop-links a{color:#60a5fa;text-decoration:none;overflow-wrap:anywhere}
.cv-shop-links{display:flex;flex-wrap:wrap;gap:4px 14px}
.cv-history{margin:0;padding-left:18px;font-size:14px;line-height:1.6}
.cv-history time{color:#9ca3af;font-size:12px}
.cv-disclaimer{font-size:12px;color:#9ca3af;margin-top:22px}
.cv-pager{display:flex;align-items:center;gap:10px;flex-wrap:wrap}
.cv-franchises .cmy-filter{text-decoration:none;display:inline-flex;align-items:center}
.cmy-event-social{display:flex;flex-wrap:wrap;gap:8px;margin:4px 0 10px}
.cmy-event-social .cmy-btn{font-size:13px}
.cmy-event-follow.is-following{border-color:#10b981;color:#34d399}
/* Decentralised contributions (community-contribute-views.js): Community Tasks, contribution detail, organisers. */
.cc-chip{background:transparent;border:1px solid #374151;color:inherit;border-radius:999px;padding:5px 12px;font-size:13px;cursor:pointer}
[data-theme="light"] .cc-chip{border-color:#d1d5db}
.cc-chip.is-on{background:#2563eb;border-color:#2563eb;color:#fff}
.cc-field{display:block;margin:0 0 10px}
.cc-field>span{display:block;font-size:13px;font-weight:600;margin:0 0 4px}
.cc-field .input{width:100%;box-sizing:border-box;padding:9px 11px;border-radius:10px;border:1px solid var(--border,#374151);background:var(--input-bg,#0b1220);color:inherit;font:inherit;font-size:14px}
.cc-status{display:inline-block;font-size:12px;font-weight:700;padding:2px 8px;border-radius:999px;background:rgba(96,165,250,.14);color:#60a5fa}
.cc-reward{display:inline-block;font-size:12px;font-weight:700;padding:2px 8px;border-radius:999px;background:rgba(52,211,153,.14);color:#34d399}
.cc-reward-none{background:rgba(156,163,175,.14);color:var(--muted,#9ca3af)}
.cc-card a,.cc-target a{color:#60a5fa}
.cc-help .cmy-linkrow-title{font-weight:600}
/* NEXUS pilot: the event page's Community Vendor Directory (state badge per listed vendor; no reports / weights). */
.cc-dir-counts,.cc-dir-actions{display:flex;flex-wrap:wrap;gap:6px 10px;margin:6px 0}
.cc-dir-list{list-style:none;margin:8px 0 0;padding:0}
.cc-dir-row{display:grid;grid-template-columns:72px minmax(0,1fr) auto;gap:4px 10px;align-items:baseline;padding:8px 0;border-top:1px solid rgba(148,163,184,.18);font-size:14px}
.cc-dir-booths{font-weight:700;font-variant-numeric:tabular-nums;color:#9ca3af}
.cc-dir-name{overflow-wrap:anywhere}
.cc-dir-name a,.cc-dir-links a{color:#60a5fa;text-decoration:none}
.cc-dir-joint{display:block;font-size:12px;color:#9ca3af}
.cc-dir-links{grid-column:2 / -1;font-size:13px}
.cc-dir-state,.cc-dir-badge{display:inline-block;font-size:12px;font-weight:700;padding:2px 8px;border-radius:999px;background:rgba(156,163,175,.14);color:#9ca3af;white-space:nowrap}
.cc-dir-confirmed{background:rgba(52,211,153,.14);color:#34d399}
.cc-dir-needs_verification{background:rgba(96,165,250,.14);color:#60a5fa}
.cc-dir-possible_match{background:rgba(251,191,36,.14);color:#f59e0b}
.cc-dir-pending_vendor{background:rgba(167,139,250,.14);color:#a78bfa}
.cc-dir-report{font-size:12px;margin-top:10px}
@media (max-width:520px){.cc-dir-row{grid-template-columns:56px minmax(0,1fr)}.cc-dir-state{grid-column:2}}
